新書推薦:
《
甲骨文丛书·消逝的光明:欧洲国际史,1919—1933年(套装全2册)
》
售價:HK$
277.8
《
剑桥日本戏剧史(剑桥世界戏剧史译丛)
》
售價:HK$
201.6
《
中国高等艺术院校精品教材大系:材料的时尚表达??服装创意设计
》
售價:HK$
76.2
《
美丽与哀愁:第一次世界大战个人史
》
售價:HK$
143.4
《
国家豁免法的域外借鉴与实践建议
》
售價:HK$
188.2
《
大单元教学设计20讲
》
售價:HK$
76.2
《
儿童自我关怀练习册:做自己最好的朋友
》
售價:HK$
69.4
《
高敏感女性的力量(意大利心理学家FSP博士重磅力作。高敏感是优势,更是力量)
》
售價:HK$
62.7
編輯推薦:
Raspberry Pi的诞生,深受20世纪80年代价格相对低廉的高度可编程计算机以及它们对英国高新技术产生的影响的启发,它激励新一代程序设计师并为他们提供准入平台。经济成本和技术门槛的可接受性,使得Raspberry Pi成为学习计算机工作原理的理想工具。《使用Raspberry Pi学习计算机体系结构》将会是你整个Raspberry Pi内幕发现之旅的私人指南,也将成为你学习由Raspberry Pi完美诠释的知识库的专业级教练。作者Eben Upton和Jeff Duntemann是理想的导师:作为Raspberry Pi的共同创始人,Upton展现出他的深刻洞察力;Dunteman则将复杂的技术知识凝练为易于理解的解释。以Raspberry Pi这块信用卡般大小的计算机正在革新编程世界的体系结构为基础,Upton和Duntemann共同提供了隐藏在所有计算机背后的技术的专业级指导。《使用Raspberry Pi学习计算机体系结构》按部就班地讲解每个组件,包括组件能做什么、为何需要它、该组件与其他组件的关系,以及组件创建过程中设计者面临的选择等。从内存、存储器和处理器,到以太网、
內容簡介:
《使用Raspberry Pi学习计算机体系结构》能帮助读者 ■ 了解Raspberry Pi每个部分的设计目的 ■ 理解不同组件之间的交互方式 ■ 深入了解系统设计的完整过程 ■ 学习程序设计原理 ■ 观察硬件和操作系统之间的相互作用 ■ 深入研究ARM芯片背后的机制 ■ 比较和对照不同的芯片,从ARM到Intel
關於作者:
Eben Upton是Raspberry Pi基金会的创始人,也是该基金会旗下的贸易部门Raspberry Pi贸易有限公司的CEO,他与Gareth Halfacree合著了Raspberry Pi User Guide一书。Eben早年创办了两家成功的移动游戏和中间件公司Ideaworks 3d 和Podfun,还曾担任剑桥大学圣约翰学院计算机科学的教学主管,并和他的父亲Clive Upton教授一起编写了牛津诗韵词典Oxford Rhyming Dictionary。Eben在剑桥大学获得了物理学和工程学学士学位以及计算机科学博士学位,还获得了工商管理硕士学位。
Jeff Duntemann从1974年就开始出版各种技术类和科幻类出版物。它是Xerox公司的程序师,同时还担任Ziff-Davis出版社和Borland国际软件公司的技术编辑。他编辑发行了两份程序师杂志,在其名下有20本技术性书籍,包括最畅销的Assembly Language Step By Step一书。在Dr. Dobbs Journal杂志上,Jeff连续四年撰写Structured Programming专栏,并在很多杂志上发表了大量技术性文章。1989年,Jeff和他的作家伙伴Keith Weiskamp发起成立了Coriolis Group,到1998年Coriolis Group已经成为美国亚利桑那州最大的图书出版商。Jeff对强人工智能表现出持久的兴趣,他的绝大部分科幻著作包括The Cunning Blood和Ten Gentle Opportunities两本小说都在探寻强人工智能的因果逻辑。Jeff的其他兴趣包括望远镜和风筝,他还是一位电子学和无线电业余爱好者呼号K7JPD。在过去的40年里,Jeff一直和妻子Carol居住在美国亚利桑那州的菲尼克斯市,陪伴他们的还有四条卷毛比雄犬。Eben Upton是Raspberry Pi基金会的创始人,也是该基金会旗下的贸易部门RaspberryPi贸易有限公司的CEO,他与Gareth Halfacree合著了Raspberry Pi User Guide一书。Eben早年创办了两家成功的移动游戏和中间件公司Ideaworks 3d 和Podfun,还曾担任剑桥大学圣约翰学院计算机科学的教学主管,并和他的父亲Clive Upton教授一起编写了牛津诗韵词典Oxford Rhyming Dictionary。Eben在剑桥大学获得了物理学和工程学学士学位以及计算机科学博士学位,还获得了工商管理硕士学位。
Jeff Duntemann从1974年就开始出版各种技术类和科幻类出版物。它是Xerox公司的程序师,同时还担任Ziff-Davis出版社和Borland国际软件公司的技术编辑。他编辑发行了两份程序师杂志,在其名下有20本技术性书籍,包括最畅销的Assembly Language Step ByStep一书。在Dr. Dobbs Journal杂志上,Jeff连续四年撰写Structured Programming专栏,并在很多杂志上发表了大量技术性文章。1989年,Jeff和他的作家伙伴Keith Weiskamp发起成立了Coriolis Group,到1998年Coriolis Group已经成为美国亚利桑那州最大的图书出版商。Jeff对强人工智能表现出持久的兴趣,他的绝大部分科幻著作包括The CunningBlood和Ten Gentle Opportunities两本小说都在探寻强人工智能的因果逻辑。Jeff的其他兴趣包括望远镜和风筝,他还是一位电子学和无线电业余爱好者呼号K7JPD。在过去的40年里,Jeff一直和妻子Carol居住在美国亚利桑那州的菲尼克斯市,陪伴他们的还有四条卷毛比雄犬。
Ralph Roberts是一名受过嘉奖的越战老兵,在阿波罗登月工程期间供职于NASA。自从1979年在Creative Computing杂志上发表第一篇文章开始,Roberts就一直从事计算机和软件方面的写作。Roberts为国家出版商撰写了超过100本书籍,以及上千篇文章和短篇小说。总而言之,他已经发售了超过2000万字的专业内容。Roberts的最佳畅销书包括美国第一本关于计算机病毒美国国家电台由此诞生了多部相关电影的书籍,还有过去21年里反复印刷的一本烹饪食谱 Classic Cooking with Coca-Cola,目前已经售出了50万本。
Tim Mamtora是博通有限公司IC设计部门的总工程师,目前是美国GPU硬件团队的技术带头人。他在移动计算机图形学方面从事了近七年的工作,此前为模拟电视和传统DSP
硬件开发内部IP。Tim 拥有剑桥大学工程学硕士学位,其中第三年在马萨诸塞州技术学院度过,在那里激发了Tim 对数字硬件设计的兴趣。他对推进工程充满激情,并专门花费时间在剑桥大学指导学生,他还在母校发表工程学机遇方面的演讲。工作之余,Tim 喜欢各类体育运动、摄影以及游览世界。
Ben Everard 是一位作家,也是一位播客。平时为Linux 编写修补代码,还喜欢摆弄机
器人。本书是Everard的第二部著作,他还撰写了Learning Python with Raspberry Pi一书
Wiley 出版社,2014。可以在推特@ben_everard上找到他。
目錄 :
目录
第1章 计算机漫谈 1
1.1 日益缤彩纷呈的Raspberry 1
1.2 片上系统 4
1.3 一台令人激动的信用卡般大小的计算机 5
1.4 Raspberry Pi的功能 6
1.5 Raspberry Pi板 7
1.5.1 GPIO引脚 7
1.5.2 状态LED 9
1.5.3 USB插口 10
1.5.4 以太网连接 10
1.5.5 音频输出 11
1.5.6 复合视频 12
1.5.7 CSI摄像头模块连接器 13
1.5.8 HDMI 13
1.5.9 micro USB电源 14
1.5.10 存储卡 14
1.5.11 DSI显示连接 15
1.5.12 装配孔 15
1.5.13 芯片 16
1.6 未来 16
第2章计算概述 19
2.1 计算机与烹饪 20
2.1.1 佐料与数据 20
2.1.2 基本操作 21
2.2 按计划执行的盒子 22
2.2.1 执行和知晓 22
2.2.2 程序就是数据 23
2.2.3 存储器 24
2.2.4 寄存器 25
2.2.5 系统总线 26
2.2.6 指令集 26
2.3 电平、数字及其表示 27
2.3.1 二进制:以1和0表示 27
2.3.2 手指的局限性 29
2.3.3 数量、编号和0 29
2.3.4 用于二进制速记的十六进制 30
2.3.5 执行二进制和十六进制运算 31
2.4 操作系统:幕后老板 33
2.4.1 操作系统的功能 33
2.4.2 向内核致敬 34
2.4.3 多核 34
第3章电子存储器35
3.1 存储器先于计算机而存在 35
3.2 旋转磁存储器Rotating Magnetic Memory 36
3.3 磁芯存储器 37
3.3.1 磁芯存储器的工作过程38
3.3.2 存储器访问时间39
3.4 静态随机访问存储器SRAM 40
3.5 地址线和数据线 41
3.6 由存储器芯片构建存储器系统42
3.7 动态随机访问存储器DRAM 45
3.7.1 DRAM的工作原理 45
3.7.2 同步DRAM和异步DRAM47
3.7.3 SDRAM列、行、Bank、Rank和DIMM 49
3.7.4 DDR、DDR2、DDR3和DDR4 SDRAM50
3.7.5 纠错码存储器53
3.8 Raspberry Pi的存储器系统54
3.8.1节能性54
3.8.2球栅阵列封装55
3.9 缓存 55
3.9.1访问的局部性56
3.9.2缓存层级56
3.9.3缓存行和缓存映射57
3.9.4直接映射59
3.9.5相联映射61
3.9.6组相联高速缓存62
3.9.7回写缓存到存储器63
3.10 虚拟存储器 64
3.10.1虚拟存储器概览64
3.10.2虚拟存储器到物理存储器的映射65
3.10.3 深入了解存储器管理单元66
3.10.4 多级页表和TLB69
3.10.5 Raspberry Pi的交换问题70
3.10.6 Raspberry Pi虚拟存储器70
第4章ARM处理器与片上系统73
4.1 急速缩小的CPU 73
4.1.1微处理器74
4.1.2晶体管预算75
4.2 数字逻辑基础 75
4.2.1逻辑门75
4.2.2触发器和时序逻辑76
4.3 CPU内部78
4.3.1分支与标志79
4.3.2系统栈80
4.3.3系统时钟和执行时间82
4.3.4流水线技术83
4.3.5流水线技术详解84
4.3.6深入流水线以及流水线阻塞86
4.3.7 ARM11 中的流水线88
4.3.8 超标量执行89
4.3.9 基于SIMD的更多并行机制90
4.3.10 字节序92
4.4 CPU再认识:CISC与RISC 93
4.4.1 RISC的历史95
4.4.2 扩展的寄存器文件95
4.4.3 加载存储架构 96
4.4.4 正交的机器指令96
4.4.5 独立的指令和数据高速缓存97
4.5 源于艾康的ARM 97
4.5.1微架构、内核及家族98
4.5.2 出售设计许可而非成品芯片98
4.6 ARM11 99
4.6.1 ARM指令集99
4.6.2 处理器模式102
4.6.3 模式和寄存器103
4.6.4 快速中断107
4.6.5 软件中断108
4.6.6 中断优先级108
4.6.7 条件指令执行109
4.7 协处理器 111
4.7.1 ARM协处理器接口112
4.7.2 系统控制协处理器113
4.7.3 向量浮点协处理器113
4.7.4 仿真协处理器114
4.8 ARM Cortex 114
4.8.1 多发和乱序执行115
4.8.2 Thumb 2 115
4.8.3 Thumb EE 115
4.8.4 big.LITTLE 116
4.8.5 NEON SIMD协处理器 116
4.8.6 ARMv8和64位计算117
4.9 片上系统 118
4.9.1 博通BCM2835 SoC 118
4.9.2 第二代和第三代博通SoC 设备119
4.9.3 VLSI芯片原理119
4.9.4 流程、制程工艺和掩膜120
4.9.5 IP:单元、宏单元、内核120
4.9.6 硬IP和软IP121
4.9.7 平面规划、布局和布线121
4.9.8 片上通信的标准:AMBA 122
第5章程序设计 125
5.1 程序设计概述 125
5.1.1 软件开发过程126
5.1.2 瀑布、螺旋与敏捷128
5.1.3 二进制程序设计130
5.1.4 汇编语言和助记符131
5.1.5 高级语言132
5.1.6 花样泛滥的后BASIC 时代134
5.1.7 程序设计术语135
5.2 本地代码编译器的工作原理 137
5.2.1 预处理138
5.2.2 词法分析138
5.2.3 语义分析139
5.2.4 生成中间代码139
5.2.5 优化139
5.2.6 生成目标代码139
5.2.7 C编译:一个具体示例140
5.2.8 链接目标代码文件到可执行文件145
5.3 纯文本解释程序 146
5.4 字节码解释语言 148
5.4.1 p-code 148
5.4.2 Java 149
5.4.3 即时编译JIT 150
5.4.4 Java之外的字节码和JIT 编译152
5.4.5 Android 、Java和Dalvik 152
5.5 数据构建块 152
5.5.1 标识符、关键字、符号和操作符153
5.5.2 数值、文本和命名常量153
5.5.3 变量、表达式和赋值154
5.5.4 类型和类型定义154
5.5.5 静态和动态类型156
5.5.6 补码和IEEE 754 157
5.6 代码构建块 159
5.6.1 控制语句和复合语句159
5.6.2 ifthenelse 159
5.6.3 switch和case 161
5.6.4 repeat循环162
5.6.5 while循环163
5.6.6 for循环164
5.6.7 break和continue语句166
5.6.8 函数166
5.6.9 局部性和作用域168
5.7 面向对象程序设计 170
5.7.1 封装172
5.7.2 继承174
5.7.3 多态176
5.7.4 OOP小结 178
5.8 GNU编译器工具集概览178
5.8.1 作为编译器和生成工具的gcc179
5.8.2 使用Linux make 181
第6章非易失性存储器185
6.1 打孔卡和磁带 186
6.1.1 打孔卡186
6.1.2 磁带数据存储器186
6.1.3 磁存储器的黎明188
6.2 磁记录和编码方案 189
6.2.1 磁通跃迁190
6.2.2 垂直记录191
6.3 磁盘存储器 192
6.3.1 柱面、磁轨和扇区193
6.3.2 低级格式化194
6.3.3 接口和控制器195
6.3.4 软盘驱动器197
6.4 分区和文件系统 198
6.4.1 主分区和扩展分区198
6.4.2 文件系统和高级格式化199
6.4.3 未来:GUID分区表 GPT 200
6.4.4 Raspberry Pi SD卡的分区201
6.5 光盘 202
6.5.1 源自CD的格式203
6.5.2 源自DVD的格式204
6.6 虚拟硬盘 205
6.7 Flash存储器206
6.7.1 ROM、PROM和 EPROM 206
6.7.2 Flash与EEPROM 207
6.7.3 单级与多级存储209
6.7.4 NOR Flash与NAND Flash 210
6.7.5 损耗平衡及Flash转换层213
6.7.6 碎片回收和TRIM 214
6.7.7 SD卡 215
6.7.8 eMMC216
6.7.9 非易失性存储器的未来217
第7章有线和无线以太网219
7.1 网络互连OSI参考模型220
7.1.1 应用层222
7.1.2 表示层222
7.1.3 会话层223
7.1.4 传输层223
7.1.5 网络层224
7.1.6 数据链路层226
7.1.7 物理层226
7.2 以太网 227
7.2.1 粗缆以太网和细缆以太网227
7.2.2 以太网的基本构想227
7.2.3 冲突检测和规避228
7.2.4 以太网编码系统229
7.2.5 PAM-5 编码232
7.2.6 10BASE-T和双绞线233
7.2.7 从总线拓扑结构到星型拓扑结构234
7.2.8 交换以太网235
7.3 路由器和互联网 237
7.3.1 名称与地址237
7.3.2 IP地址和TCP端口238
7.3.3 本地IP地址和DHCP 240
7.3.4 网络地址转换242
7.4 Wi-Fi 243
7.4.1 标准中的标准244
7.4.2 面对现实世界245
7.4.3 正在使用的Wi-Fi 设备 248
7.4.4 基础设施网络与Ad Hoc 网络249
7.4.5 Wi-Fi 分布式介质访问 250
7.4.6 载波监听和隐藏结点问题251
7.4.7 分片253
7.4.8 调幅、调相和QAM 253
7.4.9 扩频技术256
7.4.10 Wi-Fi 调制和编码细节256
7.4.11 Wi-Fi 连接的实现原理259
7.4.12 Wi-Fi 安全性 260
7.4.13 Raspberry Pi上的Wi-Fi 261
7.4.14 更多的网络263
第8章
操作系统 265
8.1 操作系统简介 266
8.1.1 操作系统的历史 267
8.1.2 操作系统基础 270
8.2 内核:操作系统的核心主导者 274
8.2.1 操作系统控制 276
8.2.2 模式 276
8.2.3 存储器管理 277
8.2.4 虚拟存储器 278
8.2.5 多任务处理 278
8.2.6 磁盘访问和文件系统 279
8.2.7 设备驱动程序 279
8.3 操作系统的使能器和助手 279
8.3.1 唤醒操作系统 280
8.3.2 固件 283
8.4 Raspberry Pi上的操作系统 283
8.4.1 NOOBS 284
8.4.2 第三方操作系统 285
8.4.3 其他可用的操作系统 285
第9章 视频编解码器和视频压缩 287
9.1 第一个视频编解码器 288
9.1.1 利用眼睛 288
9.1.2 利用数据 290
9.1.3 理解频率变换 293
9.1.4 使用无损编码技术 297
9.2 时移世易 298
9.2.1 MPEG的最新标准 299
9.2.2 H.265 302
9.3 运动搜索 302
9.3.1 视频质量 304
9.3.2 处理能力 305
第10章 3D图形307
10.1 3D图形简史307
10.1.1 图形用户界面Graphical User Interface,GUI 308
10.1.2 视频游戏中的3D图形310
10.1.3 个人计算和显卡311
10.1.4 两个竞争标准312
10.2 OpenGL图形管线 314
10.2.1 几何规范和属性315
10.2.2 几何变换317
10.2.3 光照和材质320
10.2.4 图元组装和光栅化322
10.2.5 像素处理片段着色324
10.2.6 纹理326
10.3 现代图形硬件 328
10.3.1 瓦片渲染329
10.3.2 几何拒绝330
10.3.3 着色332
10.3.4 缓存333
10.3.5 Raspberry Pi GPU 334
10.4 Open VG 336
10.5 通用GPU 338
10.5.1 异构体系结构338
10.5.2 OpenCL 339
第11章音频 341
11.1 现在能听到我的声音吗?341
11.1.1 MIDI342
11.1.2 声卡342
11.2 模拟与数字343
11.3 声音和信号处理344
11.3.1 编辑344
11.3.2 压缩345
11.3.3 使用特效录制345
11.3.4 编码和解码通信信息346
11.4 1位DAC 347
11.5 I2S 349
11.6 Raspberry Pi声音输入输出350
11.6.1 音频输出插孔350
11.6.2 HDMI350
11.7 Raspberry Pi的声音351
11.7.1 Raspberry Pi板载声音351
11.7.2 处理Raspberry Pi的声音351
第12章 输入输出359
12.1 输入输出简介 359
12.2 IO使能器 362
12.2.1 通用串行总线363
12.2.2 USB有源集线器365
12.2.3 以太网367
12.2.4 通用异步收发器368
12.2.5 小型计算机系统接口368
12.2.6 PATA 369
12.2.7 SATA 369
12.2.8 RS-232串口 370
12.2.9 HDMI 370
12.2.10 I2S 371
12.2.11 I2C 371
12.2.12 Raspberry Pi显示器、摄像头接口和JTAG 372
12.3 Raspberry Pi GPIO 373
12.3.1 GPIO概述以及博通SoC 373
12.3.2 接触GPIO 374
12.3.3 可编程GPIO 380
12.3.4 可选模式385
12.3.5 GPIO实验的简单方法 385
內容試閱 :
前言
通概念通用可编程计算机首次出现。
第二次世界大战爆发后,图灵继续在位于布莱切利园Bletchley Park 开展的盟军代码
破解工作中发挥了核心作用。在这个过程中,图灵作为团队一员别相信在电影中看
到的卷入到大量专用硬件的研发工作中,包括机电炸弹机,这台机器加速了破解德国恩
尼格码密码的自动化进程。这些设备都没有使用图灵初始实验想法中的有限状态机加无
限纸带这种具体架构,但与实际执行相比,却更适于数学分析。不过,即使是纯粹的电
子巨人Colossus如同炸弹机处理恩尼格码一样处理繁复冗杂的洛伦兹流密码也没
有触及通用程序设计的边界。尽管如此,对于这一代理论工程师而言,当他们返回到平民
生活以后,使用真空管研发用于代码破解、雷达和火炮以及实现数字逻辑电路的大规模电
子系统的经历,使得他们极具革新能力。
在莫里斯威尔克斯Maurice Wilkes 的带领下,位于剑桥大学数学实验室的一个工程
师小组着手搭建了电子延迟存储自动计算机Electronic Delay Storage Automatic Computer,
EDSAC 。1949 年投入运行时,时钟频率达到500KHz ,通过两个温度控制水箱中的32 条
水印延迟线,构成了一个容量为2KB的易失性存储器。程序和代码可以通过纸带读写。
美国和英国的很多机构都可以狭隘地宣称自己首次研发出通用数字计算机,仅仅是标榜
首次。对于EDSAC,公开的声明指出,它是第一台将应用扩展到研发团队之外的计
算机。其他学科的学者可以申请时间在这台机器上运行他们自己的程序,并由此引入了以
计算为服务的概念。EDSAC之后研发了EDSAC II,然后是泰坦Titan 。直到20世纪60年
代,剑桥大学才停止从底层出发搭建自己的计算机,并开始从商业贸易商那里购买。这项
实际举措直接影响到目前计算机部门的名称:剑桥大学没有计算机科学系,大学里有一个
计算机实验室威尔克斯早期数学实验室的延续。
对于计算机工程实践应用的专注,使得剑桥大学成为孕育新技术的沃土。很多新技术
在计算机实验室、工程系或者不同的数学和科学系即使是我们的数学家也懂得如何进行
程序设计中被提出来,由此吸引了大量跨国公司到此寻找工程技术人才。围绕剑桥大学
成长起来的公司网有时被冠以剑桥产业集群、剑桥现象或硅藻等不同的称谓代表了美国
硅谷之外的少量真正的技术集群之一。那台告诉我应当成为一名芯片设计师的BBC微型计
算机就是剑桥生产的,包括其长期的竞争对手辛克莱频谱。你的手机以及Raspberry
Pi就包含几个由立足于剑桥的ARM芯片公司设计的处理器。EDSAC问世70年之后,在英
国剑桥依然是高科技的家园。
言归正传
在我误打误撞所接受的计算机教育中,最大的缺失是对计算机工作过程的系统认识。
在从BASIC 开始深入到汇编语言时,我被汇编层面的抽象困住了。我可以控制Amiga
计算机的硬件寄存器在屏幕上移动小精灵,但对于如何搭建一台自己的计算机则一头雾
水。在我花费了另一个十年的时间、取得了几个学位、离开学术界并到博通公司一家在
剑桥启动并在此寻求工程技术人才的美国半导体公司工作之后,我才搞清楚这个问题。
在这里,我的名片上印着微电子芯片设计师实际上是更漂亮的称谓,专用集成电
路架构师的字样。在此期间,我拥有良好的条件与大量该领域的娴熟的从业者一起工
作并向他们学习,包括索菲 威尔逊Sophie Wilson
原始ARM处理器和BBC微型计算
机和Steve Furber一起的设计师,还有博通3D图形硬件工程团队的Tim Mamtora,他提供
了本书图形处理单元GPU章节的内容。
很大程度上讲,撰写本书的目的在于阐述它是如何工作的这个话题,正如我18岁
时期望的那样。我们尝试覆盖所有现代计算机系统的主要部分,从CPU到易失性随机访问
存储器、稳定存储器、网络及接口,以一种中学学生或一年级大学生乐于阅读的方式呈现
出来。依托对当前技术发展水平的讨论,我们尝试提供一点历史性知识。绝大多数讨论的
话题尽管不是全部,特别是在技术细节方面都与1949年维尔克斯的EDSAC工程团队有关
系。阅读完本书后,你至少会对计算机的基本工作原理有所了解。我坚信你将发现加强这
方面理解的价值,即使你的目标职业是软件工程师并且从未打算设计一台自己的计算机。
如果不了解cache的作用,当工作组的大小超出cache或者分配的缓冲区耗尽了cache的关联
性时,程序性能的急速下降会令你很惊讶。如果对网络的工作过程一无所知,就很难为数
据中心构建一个高效网络。
关于哪些方面本书不会涉及,有必要花点时间阐述一下。对于任何涉及的话题,本
书都不是一本综合性技术参考书。关于cache设计、CPU流水线、编译器和网络堆栈,
可以编写有人已经写过整卷图书。相反,对于每个话题,我们尝试提供一种入门式的
讲解,并提供一些深入学习的建议。本书主要专注于通用计算机本质上讲,PC机的架
构。对于只对特殊目的和应用领域感兴趣的数字信号处理DSP和现场可编程阵列Field
Programmable Gate Array,FPGA等话题,只进行了有限的覆盖。最后,涉及一点定量决
策过程的知识,这是良好的计算机架构的核心:如何在访问时间和cache大小之间折中,
或者决定是否允许某个子系统一致访问一个属于其他部件的cache?我们无法教你像架构
师一样思考。对于高级读者,Hennessy和Patterson的Computer Architecture: A Quantitative
Approach是这方面不可或缺的参考资料。
曲线上的拐点
首先提出免责声明,此处我愿意分享多年来总结出的几点有益的指导原则。
在计算机架构中,像很多事情一样,有一个收益递减规律。当然,不论是以原始的
CPU性能、标准化为能量消耗的CPU性能、存储密度、晶体管尺寸还是媒介上的网络带宽
的形式,在任何时候,硬件对所完成的东西有一个限制。但情况往往是,在达到这些理论
限制前,工程应用上就会遇到收益递减问题:每一项新增的改进都来之不易,都会引起成
本和时间开销的提升。如果将研发成本、系统复杂性 容易受到漏洞攻击 或是为提升系
统性能而花费的资金绘成图,在某个位置曲线就会急剧弯曲下来。拐点的左侧,性能
以一种可预测甚至是直线!的方式响应花费支出,在右侧,随着努力的增加性能只是缓
慢提升,并逐渐逼近由基础技术限制带来的墙壁。
有时候找不到性能的替代品。例如阿波罗登月计划,就是工程学上一个极具吸引力的
实例。阿波罗登月计划在拐点右侧走出了相当远的距离,从根本上误导了旁观者对于
宇航技术成熟度的认识。直到今天火箭技术、航空电子和材料科学持续发展了50年以
后拐点已经移动了足够远的距离,才允许以合理的成本访问太空,甚至从月球返回。
虽然如此,那些以谦卑的态度准确定位拐点位置的团队,为市场带来简单、稳健而又流行
的工程系统,然后迅速更新换代,这些团队将最终战胜登月工程。
在对待架构方面,保守和更迭一直铭记于心。迄今为止,我们生产的三代Raspberry
Pi芯片都严格地采用相同的系统基础架构、存储器控制器和多媒体,所做的改变只局限于
ARM内核的复杂性、少量致命缺陷的修复和时钟频率的提升。这里会出现一些博弈,因
为工程师包括我自己是富有激情的,他们总希望打破界限。优秀架构师的任务在于精确
把握颠覆性改变引发的风险代价,并与预期的利润进行权衡。
迈向基金会
2008 年,我们创建了Raspberry Pi 基金会,初始目标很简单:应对申请剑桥大学计算
机科学专业的学生数量逐步下降的问题。现在,我们看到了令人鼓舞的复苏信号,不论是
剑桥还是其他学校,申请数量都超过了20世纪90年代末网络热潮时期的峰值。
我们目睹的一个最显著的变化可能是,新一代年轻人比我们在20世纪80年代时对硬
件的兴趣还要高。编写一个汇编语言源程序,在屏幕上移动小精灵不再像以前那么有吸引
力,但是在地板上移动机器人却更令人兴奋。我们看到12岁的孩子构建我在20多岁时才引
以为豪的控制和传感器项目。我的愿望是,当这些年轻人坐在我孩童时期BBC Micro的新
生代面前规划职业生涯时,有一些人可以明白他们将成为优秀的微电子芯片设计师,本书
将帮助他们完成这趟旅行。
Eben Upton,剑桥,2016.05