这是一本从嵌入式角度探索计算硬件和软件原理的综合教科书。本书将逐步揭示如何在现实世界中运用这些计算原理构建计算机系统,从小型嵌入式设备到仓库大小的计算机集群,以及这些概念是如何通过互联网在全球范围内相互连接的。《计算机系统:嵌入式方法》首先会完整地讲述主要的硬件组件——包括处理器、内存、存储设备与性能加速器;接着又充分探讨操作系统、连接以及网络。通过此书,您将了解计算机硬件和软件是如何协同工作来支持无处不在的计算、物联网、移动计算技术以及*小到*大的应用和程序。
出版者的话
译者序
前言
致谢
关于作译者
第1章 引言1
1.1 计算机的进化1
1.2 进化过程1
1.3 计算机发展阶段划分4
1.3.1 第一代计算机4
1.3.2 第二代计算机5
1.3.3 第三代计算机5
1.3.4 第四代计算机6
1.3.5 第五代计算机7
1.4 云、普适、网格和超并行计算机7
1.5 未来8
1.6 小结10
第2章 基础知识11
2.1 计算机组成11
2.1.1 Flynn分类法11
2.1.2 连接方式12
2.1.3 计算机结构层次视图13
2.2 计算机基本原理13
2.3 数字格式16
2.3.1 无符号二进制16
2.3.2 原码17
2.3.3 反码17
2.3.4 补码17
2.3.5 移码18
2.3.6 BCD码19
2.3.7 定点数表示法19
2.3.8 符号扩展20
2.4 算术运算20
2.4.1 加法20
2.4.2 并行进位传递加法器20
2.4.3 超前进位22
2.4.4 减法22
2.5 乘法24
2.5.1 加法迭代法24
2.5.2 部分积方法25
2.5.3 移位加方法27
2.5.4 Booth和Robertson方法27
2.6 除法29
2.7 定点数格式的运算30
2.7.1 定点数的运算31
2.7.2 定点数的乘除32
2.8 浮点数32
2.8.1 广义浮点数33
2.8.2 IEEE754浮点标准33
2.8.3 IEEE754标准模式34
2.8.4 IEEE754数的范围36
2.9 浮点数处理38
2.9.1 IEEE754数的加减运算39
2.9.2 IEEE754数的乘除运算41
2.9.3 IEEE754中间格式41
2.9.4 舍入42
2.10 小结42
思考题43
第3章 CPU基础45
3.1 什么是计算机45
3.2 让计算机为你服务45
3.2.1 程序存储46
3.2.2 存储架构46
3.2.3 程序传输47
3.2.4 控制单元48
3.2.5 微指令52
3.2.6 RISC和CISC的对比53
3.2.7 处理器实例——ARM55
3.2.8 关于ARM的更多内容56
3.3 指令处理56
3.3.1 指令集57
3.3.2 取指和译码59
3.3.3 压缩指令集63
3.3.4 寻址模式65
3.3.5 堆栈机和逆波兰表示法67
3.4 数据处理68
3.4.1 数据的格式和表达68
3.4.2 数据流71
3.4.3 数据存储72
3.4.4 内部数据72
3.4.5 数据处理73
3.5 自顶向下方法75
3.5.1 计算机的能力75
3.5.2 性能衡量和统计76
3.5.3 性能评估78
3.6 小结79
思考题80
第4章 处理器内部组成82
4.1 内部总线结构82
4.1.1 程序员的角度82
4.1.2 分解互联排列83
4.1.3 ADSP21xx总线排列84
4.1.4 数据与程序同时访存84
4.1.5 双总线体系结构86
4.1.6 单总线体系结构87
4.2 算术逻辑单元88
4.2.1 ALU功能88
4.2.2 ALU设计89
4.3 内存管理单元91
4.3.1 对虚拟存储的需求91
4.3.2 MMU操作91
4.3.3 退回算法93
4.3.4 内部存储碎片和片段93
4.3.5 外部碎片94
4.3.6 改进的MMU95
4.3.7 内存保护96
4.4 cache97
4.4.1 直接相联cache98
4.4.2 组相联cache99
4.4.3 全相联cache100
4.4.4 局部性原则100
4.4.5 cache替换算法102
4.4.6 cache性能104
4.4.7 cache一致性105
4.5 协处理器107
4.6 浮点运算单元107
4.7 SIMD流指令扩展和多媒体扩展109
4.7.1 MMX109
4.7.2 MMX实现110
4.7.3 MMX的使用111
4.7.4 SIMD流指令扩展111
4.7.5 使用SSE和MMX111
4.8 嵌入式系统中的协处理112
4.9 小结112
思考题113
第5章 提高CPU性能116
5.1 加速116
5.2 流水线117
5.2.1 多功能流水线118
5.2.2 动态流水线119
5.2.3 改变流水线模式119
5.2.4 数据相关冒险121
5.2.5 条件冒险122
5.2.6 条件分支123
5.2.7 编译时流水线补偿125
5.2.8 相对地址分支126
5.2.9 流水线的指令集补偿127
5.2.10 运行时流水线补偿128
5.3 复杂指令集和精简指令集130
5.4 超标量体系结构130
5.4.1 简单超标量130
5.4.2 多发送超标量132
5.4.3 超标量的性能133
5.5 每周期的指令数133
5.5.1 不同体系结构的IPC133
5.5.2 IPC度量134
5.6 硬件加速器135
5.6.1 零开销循环135
5.6.2 地址处理硬件137
5.6.3 影子寄存器140
5.7 分支预测140
5.7.1 分支预测的必要性141
5.7.2 单T位预测器142
5.7.3 双位预测器143
5.7.4 计数器和移位器预测器145
5.7.5 局部分支预测器145
5.7.6 全局分支预测器148
5.7.7 G选择预测器149
5.7.8 G共享预测器150
5.7.9 混合预测器151
5.7.10 分支目标缓冲152
5.7.11 基本代码段153
5.7.12 分支预测总结154
5.8 并行机器155
5.8.1 SISD向MIMD的演变157
5.8.2 为提高性能而采用并行159
5.8.3 其他并行处理160
5.9 Tomasulo算法163
5.9.1 Tomasulo算法的原理163
5.9.2 Tomasulo系统的例子164
5.9.3 嵌入式系统中的Tomasulo算法167
5.10 超长指令架构集168
5.10.1 什么是VLIW168
5.10.2 VLIW的优势169
5.10.3 VLIW的瓶颈170
5.10.4 与超标量处理器的比较170
5.11 小结171
思考题171
第6章 外部总线174
6.1 总线接口174
6.1.1 总线控制信号175
6.1.2 直接存储器存取175
6.2 并行总线规范176
6.3 标准接口177
6.3.1 系统控制接口177
6.3.2 系统数据总线178
6.3.3 输入/输出总线182
6.3.4 外设器件总线182
6.3.5 与网络设备的接口183
6.4 实时性问题183
6.4.1 外部激励184
6.4.2 中断184
6.4.3 实时性定义184
6.4.4 时间范围参数185
6.4.5 硬件体系结构对实时操作系统的支持186
6.5 中断和中断处理187
6.5.1 中断的重要性187
6.5.2 中断过程187
6.5.3 高级中断处理191
6.5.4 共享中断191
6.5.5 可重入代码192
6.5.6 软件中断192
6.6 嵌入式无线连接192
6.6.1 无线技术192
6.6.2 无线接口194
6.6.3 无线相关问题194
6.7 小结194
思考题195
第7章 实用嵌入式CPU198
7.1 概述198
7.2 微处理器不只是核198
7.3 功能需求200
7.4 时钟203
7.5 时钟与功耗205
7.5.1 传输延迟206
7.5.2 电流相关问题206
7.5.3 时钟问题解决方法207
7.5.4 低电压设计207
7.6 存储208
7.6.1 早期的计算机存储208
7.6.2 只读存储器209
7.6.3 随机存取存储器213
7.7 分页与重叠220
7.8 嵌入式系统中的存储221
7.8.1 非易失存储器222
7.8.2 其他存储器224
7.9 测试和验证225
7.9.1 集成电路设计和制造问题225
7.9.2 BIST226
7.9.3 JTAG228
7.10 错误检测和纠正230
7.11 看门狗定时器和复位监测233
7.12 逆向工程235
7.12.1 逆向工程过程236
7.12.2 详细的物理布局239
7.13 防止逆向工程242
7.13.1 存储程序的被动模糊243
7.13.2 可编程逻辑家族244
7.13.3 主动RE防范244
7.13.4 主动RE防范分类245
7.14 软核处理器246
7.14.1 微处理器不仅仅是核心246
7.14.2 软核处理器的优点246
7.15 硬件软件协同设计248
7.16 商业处理器内核251
7.17 小结252
思考题252
第8章 编程254
8.1 运行一个程序254
8.1.1 执行的含义255
8.1.2 注意事项257
8.2 编写程序258
8.2.1 编译型语言258
8.2.2 解释型语言261
8.3 UNIX编程模型263
8.3.1 shell263
8.3.2 重定向和数据流264
8.3.3 实用软件266
8.4 小结266
思考题266
第9章 操作系统268
9.1 操作系统的含义268
9.2 为什么需要操作系统268
9.2.1 操作系统的特征269
9.2.2 操作系统的类型270
9.3 操作系统的作用271
9.3.1 资源管理271
9.3.2 虚拟机271
9.3.3 CPU时间272
9.3.4 内存管理273
9.3.5 存储和归档274
9.3.6 保护和错误处理274
9.4 操作系统的结构275
9.4.1 分层操作系统276
9.4.2 客户端-服务器操作系统277
9.5 启动277
9.5.1 从并行闪存启动278
9.5.2 从HDD/SSD启动279
9.5.3 启动之后280
9.6 进程281
9.7 调度283
9.8 存储与文件系统286
9.8.1 二级存储286
9.8.2 文件系统的作用289
9.8.3 什么是文件系统291
9.8.4 备份297
9.9 小结298
思考题298
第10章 连接性300
10.1 连接的原因与方法300
10.1.1 一对一通信300
10.1.2 一对多通信301
10.1.3 包交换302
10.1.4 简单通信拓扑303
10.2 系统要求304
10.2.1 分组化304
10.2.2 编码与解码305
10.2.3 传输305
10.2.4 接收305
10.2.5 错误控制306
10.2.6 连接管理309
10.3 可扩展性、效率与重复利用310
10.4 OSI分层311
10.5 拓扑与架构311
10.5.1 分层网络312
10.5.2 主从架构312
10.5.3 对等架构313
10.5.4 点对点连接313
10.5.5 移动性与切换313
10.6 小结314
思考题314
第11章 网络系统316
11.1 因特网316
11.1.1 因特网的历史317
11.1.2 因特网治理317
11.2 TCP/IP和IP层模型318
11.3 以太网概述321
11.3.1 以太网数据格式322
11.3.2 以太网封装323
11.3.3 以太网载波侦听324
11.4 网络层325
11.4.1 IP地址325
11.4.2 网络数据包格式326
11.4.3 路由327
11.4.4 单播与多播327
11.4.5 任播328
11.4.6 命名328
11.4.7 域名服务器329
11.5 传输层331
11.5.1 端口号331
11.5.2 UDP332
11.5.3 TCP332
11.5.4 UDP与TCP对比333
11.6 其他信息333
11.6.1 地址解析协议333
11.6.2 控制信息334
11.7 无线连通性334
11.7.1 WiFi334
11.7.2 WiMax335
11.7.3 蓝牙335
11.7.4 ZigBee336
11.7.5 近场通信336
11.8 网络量表336
11.9 小结337
思考题337
第12章 未来338
12.1 单比特结构338
12.1.1 比特-串行加法339
12.1.2 比特-串行减法340
12.1.3 比特-串行逻辑和处理340
12.2 多并行机器341
12.2.1 小型CPU集群341
12.2.2 并行和集群处理注意事项345
12.2.3 互连策略345
12.3 异步处理器347
12.3.1 数据流控制348
12.3.2 避免管道冒险349
12.4 替代数字格式系统349
12.4.1 多值逻辑350
12.4.2 有符号数字表示350
12.5 光学计算353
12.5.1 电-光全加器353
12.5.2 电-光底板354
12.6 是科幻小说还是未来的现实355
12.6.1 分布式计算356
12.6.2 湿件356
12.7 小结357
附录A 标准内存大小表示方法358
附录B 标准逻辑门360
索引361