# E.1 引言
<!-- source: p0945 -->

嵌入式计算机系统是内置于其他设备、其存在并不显而易见的计算机，是计算机市场中增长最快的部分。这些设备包括日常使用的机器（大多数微波炉、洗衣机、打印机、网络交换机和汽车都含有从简单到十分先进的嵌入式微处理器）、手持数字设备（例如 PDA、手机和音乐播放器），以及视频游戏机和数字机顶盒。虽然有些应用中的计算机可以编程，例如 PDA，但在许多嵌入式应用中，编程只发生在最初装入应用代码或之后升级该应用软件时。因此，应用程序会针对处理器和系统精心调优。这个过程有时会在关键循环中有限地使用汇编语言，不过，上市时间的压力和良好的软件工程实践会把这类汇编代码限制在整个应用的一小部分。

与桌面系统和服务器系统相比，嵌入式系统的处理能力和成本范围要宽得多：低端系统可能使用成本不足 1 美元的 8 位或 16 位处理器；另一些系统使用功能完整的 32 位微处理器，性能可达约 500 MIPS，价格约为 10 美元；高端嵌入式处理器的价格可达数百美元，每秒能够执行数十亿条指令。尽管嵌入式系统市场的计算能力跨度很大，价格仍是这一领域计算机设计的关键因素。当然，性能要求也始终存在，但首要目标往往是以最低价格满足性能需求，而不是以更高价格换取更高性能。

嵌入式系统处理信息的方式往往与通用处理器大不相同。这些应用通常受到截止期限约束，即所谓的*实时约束*。在这类应用中，某项计算必须在规定时间之前完成，否则系统就会失效；还有其他形式的实时约束，将在下一小节讨论。

嵌入式系统应用通常把信息当作信号来处理。日常所说的“信号”常常使人想到无线电传输，有些嵌入式系统确实如此，例如手机。但信号也可以是一幅图像、由一系列图像构成的视频、控制传感器的测量值，等等。信号处理需要特定的计算，许多嵌入式处理器都针对这些计算进行优化。下面将对此深入讨论。这类系统对基准测试的需求也相差很大，既要衡量运行小型、有限代码片段的能力，也要衡量运行数万至数十万行代码应用程序的性能。

许多嵌入式应用还有两个重要特点：需要尽量减少内存，以及需要尽量降低功耗。在许多应用中，内存可能占系统成本的相当大一部分，<!-- source: p0946 -->因此优化内存容量十分重要。有时，整个应用都必须放入处理器芯片上的内存；另一些情况下，则要求整个应用装入容量很小的片外内存。无论哪种情况，对内存容量的重视都会转化为对代码大小的重视，因为数据大小是由应用决定的。有些体系结构提供了专门缩减代码大小的指令集功能。更大的内存也意味着更高的功耗，而功耗优化对嵌入式应用往往至关重要。低功耗要求通常来自电池供电，但使用更便宜封装的需要（塑料封装相对于陶瓷封装），以及没有风扇散热，也会限制总功耗。本附录稍后将更详细地讨论功耗问题。

嵌入式系统的另一个重要趋势，是把处理器核与应用专用电路结合起来，形成所谓的“处理器核加 ASIC”（core plus ASIC）或“片上系统”（system on a chip，SOC）；它们也可以看作专用多处理器，见 E.4 节。通常可以把定制硬件方案与运行在标准化嵌入式处理器核上的软件结合起来，满足应用的功能和性能要求；这种处理器核在设计时就考虑了与专用硬件的连接。实际的嵌入式问题通常采用以下三种方式之一解决：

1. 设计者采用软硬件结合的方案，其中包含一些定制硬件，以及与定制硬件集成在一起的嵌入式处理器核；两者往往位于同一芯片上。
2. 设计者编写定制软件，在现成的嵌入式处理器上运行。
3. 设计者采用数字信号处理器，并为它编写定制软件。数字信号处理器是针对信号处理应用专门设计的处理器。下文将讨论它与通用嵌入式处理器的一些重要区别。

图 E.1 概括了三类计算环境及其重要特征。

> **译注：** 图 E.1 中的三类是桌面系统、服务器和嵌入式系统，并非上面列举的三种嵌入式实现方式。

<!-- source: p0947 -->

| 特征 | 桌面系统 | 服务器 | 嵌入式系统 |
|---|---|---|---|
| 系统价格 | $1000–$10000 | $10000–$10000000 | $10–$100000；高端包括网络路由器 |
| 微处理器模块价格 | $100–$1000 | 每处理器 $200–$2000 | 每处理器 $0.20–$200 |
| 每年销售的微处理器数量，2000 年估计值 | 150000000 | 4000000 | 300000000；仅计 32 位和 64 位处理器 |
| 系统设计的关键问题 | 性价比、图形性能 | 吞吐量、可用性、可扩展性 | 价格、功耗、特定应用的性能 |
{#fig-E.1 .wide .expand num="E.1"}

**图 E.1 三类计算环境及其系统特征概览。** 注意服务器和嵌入式系统的价格范围都很宽。服务器的这一跨度来自高端事务处理和 Web 服务器应用对超大规模多处理器系统的需求。对于嵌入式系统，网络路由器是一种重要的高端应用，它可能包含多个处理器、大量内存和其他电子器件。如果把 8 位和 16 位微处理器也计算在内，2000 年销售的嵌入式处理器总数估计超过 10 亿。事实上，原书所述历来销量最大的微处理器，是 Intel 销售的一款 8 位微控制器！低端服务器市场很难与桌面市场分开，因为低端服务器，尤其是售价低于 5000 美元的服务器，与桌面 PC 基本没有区别。因此，PC 销量中可能有多达数百万台实际上用作服务器。

## 实时处理

<!-- source: p0946 -->

嵌入式应用的性能要求往往就是实时要求。所谓实时性能要求，是指应用程序的某一部分具有不可超过的最大允许执行时间。例如，数字机顶盒处理每个视频帧的时间受到限制，因为处理器必须在下一帧到来之前接收并处理当前帧；这种系统通常称为*硬实时系统*。在有些应用中，要求更为复杂：既限制特定任务的平均执行时间，也限制执行时间超过某个上限的次数。这类方式通常称为*软实时*，适用于这样的情形：<!-- source: p0947 -->偶尔错过某个事件的时间约束是允许的，只要次数不太多。实时性能通常高度依赖具体应用，测量时一般使用取自应用本身或标准化基准测试的计算内核，见 E.3 节。

构建硬实时系统涉及三个关键因素。首先是某项任务必须以什么速率发生；与之相联系的，是达到这一实时速率所需的硬件和软件。很多在桌面系统中十分有利的结构，却给硬实时分析带来困难。例如，分支推测、缓存等都会给代码执行引入不确定性。同一段代码可能执行得非常高效，也可能非常低效，取决于硬件分支预测器和缓存是否“各尽其职”。工程师必须依据*最坏情况执行时间*（worst-case execution time，WCET）来分析代码。对于传统微处理器硬件，如果假设所有分支都预测错误，所有缓存访问都未命中，得到的 WCET 就会过于悲观。这样，为满足给定 WCET，系统设计者可能最终把系统设计得过于昂贵，而原本成本低得多的系统就已足够。

为了应对硬实时系统的挑战，同时仍然利用分支行为和访问局部性等熟知的体系结构特性，可以改变处理器的设计方式。以分支预测为例：众所周知，动态分支预测的准确率远高于加在分支指令中的静态“提示位”，但静态提示的行为更容易预测。同样，虽然缓存的性能优于由软件管理的片上内存，后者却能提供可预测的内存<!-- source: p0948 -->访问延迟。在一些嵌入式处理器中，可以通过*缓存行锁定*（line locking）把缓存转换成由软件管理的片上内存。采用这种方式时，可以把某个缓存行锁在缓存中，在解除锁定之前，该行都不能被替换。
