使用Raspberry Pi学习计算机体系结构

使用Raspberry Pi学习计算机体系结构 pdf epub mobi txt 电子书 下载 2025

[美] Eben Upton,Jeff Duntemann 等 著
图书标签:
  • Raspberry Pi
  • 计算机体系结构
  • 嵌入式系统
  • 硬件
  • 教育
  • DIY
  • 学习
  • 电子工程
  • 计算机科学
  • 实践
想要找书就要到 静思书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 清华大学出版社
ISBN:9787302487173
版次:1
商品编码:12252399
包装:平装
开本:16开
出版时间:2017-11-01
用纸:胶版纸
页数:404
字数:567000

具体描述

产品特色

编辑推荐

  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学习计算机体系结构》按部就班地讲解每个组件,包括组件能做什么、为何需要它、该组件与其他组件的关系,以及组件创建过程中设计者面临的选择等。从内存、存储器和处理器,到以太网、相机和音频。Upton和Duntemann相互合作,确保读者扎实理解Raspberry Pi的内部结构及其整体上与计算背后的技术之间的关系。

内容简介

  《使用Raspberry Pi学习计算机体系结构》能帮助读者
  ■ 了解Raspberry Pi每个部分的设计目的
  ■ 理解不同组件之间的交互方式
  ■ 深入了解系统设计的完整过程
  ■ 学习程序设计原理
  ■ 观察硬件和操作系统之间的相互作用
  ■ 深入研究ARM芯片背后的机制
  ■ 比较和对照不同的芯片,从ARM到Intel

作者简介

  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. Dobb’s 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 if/then/else 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 I/O使能器 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


使用树莓派学习计算机体系结构 简介 《使用树莓派学习计算机体系结构》是一本旨在为读者提供深入理解计算机底层运作原理的实用指南。本书巧妙地将理论知识与动手实践相结合,利用普及率极高且功能强大的单板计算机——树莓派(Raspberry Pi)——作为核心教学工具。读者将不再仅仅停留在对软件编程的表面认知,而是能够穿越抽象的代码层面,直观地触碰并理解计算机硬件是如何协同工作的,以及这些硬件设计如何直接影响软件的性能和行为。 在当今这个几乎所有行业都被软件和数字化技术驱动的时代,深刻理解计算机体系结构的重要性日益凸显。无论是希望成为一名更优秀的软件工程师,还是致力于嵌入式系统开发,又或是对高性能计算、操作系统原理、甚至硬件设计充满好奇的爱好者,掌握计算机体系结构都是不可或缺的基石。本书正是为了满足这一需求而生,它将复杂的概念拆解为易于理解的模块,并通过一系列精心设计的实验,让读者在实践中掌握理论。 本书的核心理念在于“学以致用”。我们相信,仅仅阅读理论书籍难以建立直观的认识。计算机体系结构是一个涉及硬件、固件和软件交互的复杂领域,只有通过实际操作,才能真正体会到指令的执行、内存的访问、缓存的工作机制以及各种总线的通信方式。树莓派以其低廉的价格、广泛的社区支持和强大的扩展性,成为了理想的学习平台。它提供了对底层硬件的直接访问,使得我们可以观察和控制CPU、内存、I/O接口等关键组件,从而以前所未有的方式探索计算机的内部世界。 本书内容概览 本书的结构设计循序渐进,从最基础的概念出发,逐步深入到更复杂的体系结构主题。我们将首先介绍计算机体系结构的基本组成部分,包括中央处理器(CPU)、内存(RAM)、存储设备(如SD卡)、输入/输出(I/O)接口等。然后,我们将深入探讨CPU的内部工作原理,包括指令集架构(ISA)、流水线技术、缓存层次结构等。 第一部分:入门与基础 了解你的工具:树莓派深度解析 我们将详细介绍不同型号树莓派的硬件特性,包括其SoC(System on a Chip)架构、CPU核心、GPU、内存类型和容量、以及各种I/O接口(GPIO、USB、HDMI、以太网等)。 学习如何安装和配置树莓派的操作系统(如Raspberry Pi OS),并进行基本的系统设置和开发环境搭建。 介绍树莓派上可用的开发工具链,包括交叉编译器、调试器和仿真器。 从二进制到指令:计算的语言 理解数字系统的基础:二进制、八进制、十进制和十六进制。 学习计算机如何表示数据:整数、浮点数、字符编码(ASCII、UTF-8)。 介绍指令集架构(ISA)的概念,以ARM架构为例,这是树莓派CPU所使用的架构。 理解基本指令的含义和功能:加载、存储、算术运算、逻辑运算、跳转指令等。 第二部分:CPU核心机制 CPU的脉搏:时钟、指令周期与执行 深入了解CPU的时钟信号,以及指令如何在一个个时钟周期内被 fetch, decode, execute, write-back。 介绍RISC(精简指令集计算)和CISC(复杂指令集计算)的对比,以及ARM架构为何属于RISC。 通过简单的汇编语言程序,观察CPU如何执行指令,并使用树莓派上的调试工具来跟踪程序的执行流程。 加速的秘密:流水线技术 理解CPU流水线的工作原理,以及如何通过将指令执行过程分解为多个阶段来提高吞吐量。 分析流水线中的潜在问题,如数据冒险、控制冒险,以及相应的解决方法(如转发、分支预测)。 通过模拟或实际运行包含特定指令序列的程序,来观察流水线带来的性能提升。 内存的层次:寄存器、缓存与主内存 详细讲解CPU内部的寄存器(通用寄存器、程序计数器、栈指针等)的作用。 深入探讨缓存(Cache)的工作机制:L1, L2, L3缓存的层级结构、缓存行、地址映射、写策略(写回、写穿)。 理解缓存如何通过局部性原理(时间局部性、空间局部性)减少内存访问延迟。 通过编写访问内存的程序,并利用性能分析工具来观察缓存命中率和 miss 率,感受缓存对性能的影响。 第三部分:内存与存储 数据的家园:主内存(RAM) 介绍RAM(Random Access Memory)的类型(SRAM, DRAM)及其特性。 理解内存地址空间,以及CPU如何通过地址总线访问内存。 学习内存管理的基本概念,如分段、分页(为后续操作系统章节铺垫)。 通过实验,测量不同内存访问模式下的性能差异。 持久的记忆:存储系统 讲解不同类型的存储设备:固态硬盘(SSD)、机械硬盘(HDD)。 介绍SD卡作为树莓派的主要存储介质,其工作原理和接口(SPI, SDIO)。 学习文件系统(如FAT32, ext4)的概念,以及它们如何组织和管理存储设备上的数据。 通过模拟存储访问操作,理解I/O延迟对整体性能的影响。 第四部分:互联与通信 信息高速公路:总线系统 介绍计算机内部的各种总线:地址总线、数据总线、控制总线。 讲解I2C、SPI、UART等串行通信协议,以及它们在树莓派上的应用。 通过连接外部传感器或设备到树莓派的GPIO接口,并利用这些协议进行通信,直观感受硬件通信过程。 连接世界:输入/输出(I/O)接口 深入研究树莓派的GPIO(General Purpose Input/Output)接口,以及如何通过编程控制其输入输出。 学习如何使用GPIO接口连接LED、按钮、蜂鸣器等外设,实现简单的硬件控制。 介绍USB接口的工作原理和其在数据传输中的作用。 讲解网络接口(以太网、Wi-Fi)的硬件实现和基本通信过程。 第五部分:高级主题与实践 并行与并发:多核处理与多线程 理解多核CPU的工作原理,以及如何利用多个核心并行处理任务。 介绍并发与并行的区别,以及多线程编程的基本概念。 在树莓派上编写简单的多线程程序,观察其性能提升。 指令的生命周期:指令流水线与分支预测的深入探讨 通过更复杂的实验,量化流水线和分支预测对程序执行时间的影响。 学习如何使用性能分析工具(如perf)来识别代码中的性能瓶颈,并根据体系结构知识进行优化。 从汇编到机器码:理解编译器的工作 了解编译器如何将高级语言(如C/C++)源代码转换为机器码。 通过反汇编工具,观察生成的汇编代码,并将其与源代码进行对比。 理解编译器优化选项对生成机器码的影响。 构建你的第一个体系结构项目 本书将引导读者完成一个或多个具有挑战性的项目,例如: 使用GPIO控制一个简单的机器人。 构建一个基于树莓派的网络服务器。 实现一个简单的嵌入式数据采集系统。 设计一个简单的CPU模拟器(可选,但能极大加深理解)。 这些项目将整合本书中介绍的各项知识,让读者在解决实际问题的过程中巩固和应用所学。 本书的特色 实践导向:本书的核心在于动手实践。每一个理论概念都配有相应的树莓派实验,让读者能够亲手操作,验证理论。 循序渐进:内容设计由浅入深,确保即使是初学者也能逐步掌握复杂的概念。 实用工具:充分利用树莓派这个廉价而强大的平台,以及Linux系统提供的丰富开发工具。 社区支持:借鉴和利用树莓派庞大的社区资源,解决学习过程中遇到的问题。 理论与实践的桥梁:本书旨在弥合理论知识与实际应用之间的鸿沟,让读者真正理解“为什么”和“怎么样”。 适用读者 对计算机工作原理感到好奇的学生和爱好者。 希望提升软件工程技能,理解代码性能瓶颈的程序员。 从事嵌入式系统开发,需要深入了解硬件特性的工程师。 计算机科学、电子工程等相关专业的学生。 任何对底层技术感兴趣,希望从根本上理解计算机的人。 通过《使用树莓派学习计算机体系结构》,您将获得超越一般编程的知识深度,能够以全新的视角审视您所使用的计算设备,并具备解决更复杂、更底层技术挑战的能力。这不仅是一本书,更是一次探索计算核心奥秘的旅程。

用户评价

评分

坦白说,我之前对“计算机体系结构”这个概念是有些敬而远之的,总觉得它离我的日常工作太远,而且充满了枯燥的术语。但是,这本书彻底改变了我的看法!作者就像一位经验丰富的向导,带着我一步步探索计算机的心脏。从最基础的逻辑门,到复杂的CPU指令集,再到内存控制器和总线协议,每一个环节都被分解得清晰明了。特别是书里反复强调Raspberry Pi在学习过程中的重要性,这一点真的非常赞。我跟着书中的例子,实际操作了一番,感觉那些原本遥不可及的理论知识,一下子就变得触手可及。我终于理解了为什么不同的CPU架构会有不同的性能表现,为什么内存带宽如此重要,以及各种I/O设备是如何通过特定的接口与CPU进行通信的。书中对并行计算和多核处理的介绍,也让我对现代计算的强大有了更深的认识。这不仅仅是一本关于“是什么”的书,更是一本关于“为什么”的书,它回答了我心中长久以来的许多疑问。我感觉自己的技术视野一下子开阔了很多,对计算机系统有了更全面的理解。

评分

对于任何一个想要深入理解计算机工作原理的读者来说,这本书都绝对是一个宝藏。作者以Raspberry Pi为载体,将复杂的计算机体系结构知识变得生动有趣且易于实践。我一直对CPU的内部结构感到好奇,这本书就循序渐进地带领我了解了指令译码、执行、写回等各个阶段,并且通过实际的例子,让我理解了流水线和分支预测等概念的实际作用。更重要的是,书中还深入讲解了内存管理单元(MMU)和缓存一致性(cache coherence)等核心概念,这些对于理解现代多核处理器的行为至关重要。我尤其欣赏书中对于不同指令集架构(如ARM和RISC-V)的比较分析,这让我能够更好地理解不同架构的设计理念和优缺点。通过书中提供的各种实验和代码示例,我能够亲手验证学到的知识,比如如何通过访问不同大小和对齐方式的数据来观察缓存的影响,或者如何通过编写简单的汇编代码来理解CPU指令的执行流程。这不仅仅是理论的学习,更是一种“玩转”计算机硬件的体验。这本书让我从一个“代码使用者”进化成了一个“代码理解者”,我对自己未来在系统优化和性能调优方面的能力充满了信心。

评分

我最近刚翻完这本书,感觉像是打开了一扇新世界的大门!作为一名软件开发者,我总是在想,我写的代码最终是如何在硬件上运行的?它经历了哪些步骤?这本书就给出了一个非常棒的答案,而且是用一种我完全能理解的方式。作者没有堆砌一堆晦涩难懂的术语,而是循序渐进地引导我一步步认识计算机的“骨骼”和“神经系统”。从最初的简单逻辑门,到复杂的CPU设计,再到内存管理和总线通信,每一个环节都被拆解得极其细致。尤其是关于RISC-V的部分,我之前对它只是有所耳闻,但这本书深入浅出地介绍了它的设计哲学和优势,并结合Raspberry Pi的实际应用,让我对这个新兴的指令集架构有了更直观的认识。我特别喜欢书中那些“动手实验”的环节,我跟着书中的指导,在Raspberry Pi上搭建了一些小项目,亲眼见证了硬件和软件是如何交互的。这种实践性的学习方式,比我过去任何一次阅读技术书籍都来得更深刻。我不再害怕那些底层的细节,反而对它们充满了好奇。我相信,掌握了这些体系结构知识,我未来在进行性能优化、选择合适的硬件平台,甚至参与芯片设计时,都会有更扎实的理论基础和更清晰的思路。

评分

这本书真的让我对计算机底层运作的理解发生了翻天覆地的变化!我一直觉得“计算机体系结构”这个词听起来高高在上,离我的日常编程工作很遥远。但这本书却巧妙地把我带入了一个生动有趣的世界。从一开始,作者就用非常接地气的方式解释了CPU是怎么处理指令的,内存是如何工作的,以及各种I/O设备是如何与主板协同作战的。最让我印象深刻的是,他并没有直接抛出枯燥的理论,而是通过一个又一个实际的例子,特别是利用Raspberry Pi这个小巧而强大的平台,让这些抽象的概念变得触手可及。我记得有个章节是关于流水线(pipeline)的,我以前对此只是模模糊糊的印象,但通过书中绘制的清晰图示和Raspberry Pi上的代码演示,我终于明白了指令是如何被分解、执行、再合并的,以及为什么这能显著提升性能。甚至连缓存(cache)的工作原理,也因为有了具体的Raspberry Pi硬件作为参照,我不再只是死记硬背,而是真正理解了它为什么存在,以及它如何影响程序的运行速度。这本书最大的价值在于,它提供了一种“动”起来学习体系结构的方法,而不是仅仅停留在书本上的“看”。我迫不及待地想把我学到的知识应用到更复杂的嵌入式项目里,去优化我的代码,去更深入地理解为什么某些优化技巧能带来如此显著的效果。

评分

这本书简直就是为我这种“纸上谈兵”多年的开发者量身定做的!我一直觉得计算机体系结构是计算机科学的“内功”,但很少有书能把它讲得如此通俗易懂,并且还能让你立刻上手去验证。作者巧妙地利用了Raspberry Pi这样一个成本低廉、功能强大的平台,让抽象的概念瞬间具象化。比如,在解释中断(interrupt)的时候,书里不仅仅是告诉你中断是什么,而是告诉你如何在Raspberry Pi上编写代码来处理一个中断,让你亲身体验CPU是如何从当前的任务切换到中断服务程序的。这种“学以致用”的感觉非常棒。我印象特别深刻的是关于ARM架构的讲解,结合Raspberry Pi的实际芯片,我才真正理解了ARM指令的特点,以及为什么它在移动设备和嵌入式领域如此流行。书中关于存储层次结构(memory hierarchy)的阐述也让我受益匪浅,我终于明白了为什么我们写的代码,在实际运行时,数据会在CPU寄存器、缓存、主内存之间不断地来回“搬运”,以及这种搬运的效率有多么关键。总而言之,这本书不仅仅是知识的传授,更是一种思维方式的引导,它教会了我如何从硬件的角度去审视软件,如何去思考性能的瓶颈到底出在哪里。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有