大话计算机 计算机系统底层架构原理极限剖析 卷1
作者:冬瓜哥著
出版时间: 2019年版
内容简介
本书共分为12章。第1章介绍数字计算机的设计思路,制作一个按键计算器,在这个过程中逐步理解数字计
算机底层原理。第2章在第1章的基础上,改造按键计算器,实现能够按照编好的程序自动计算,并介绍对应的处
理器内部架构概念。第3章介绍电子计算机的发展史,包括芯片制造等内容。第4章介绍流水线相关知识,包括流
水线、分支预测、乱序执行、超标量等内容。第5章介绍计算机程序架构,理解单个、多个程序如何在处理器上编
译、链接并*终运行的过程。第6章介绍缓存以及多处理器并行执行系统的体系结构,包括互联架构、缓存一致性
架构的原理和实现。第7章介绍计算机I/O基本原理,包括PCIE、USB、SAS三大I/O体系。第8章介绍计算机
是如何处理声音和图像的,包括3D渲染和图形加速原理架构和实现。第9章介绍大规模并行计算、超级计算机原
理和架构,以及可编程逻辑器件(如FPGA等)的原理和架构。第10章介绍现代计算机操作系统基本原理和架构,
包括内存管理、任务调度、中断管理、时间管理等架构原理。第11章介绍现代计算机形态和生态体系,包括计算、
网络、存储方面的实际计算机产品和生态。第12章介绍机器学习和人工智能底层原理和架构实现。
本书适合所有IT行业从业者阅读,包括计算机(PC/服务器/手机/嵌入式)软硬件及云计算/大数据/人工
智能等领域的研发、架构师、项目经理、产品经理、销售、售前。本书也同样适合广大高中生科普之用,另外计算
机相关专业本科生、硕士生、博士生同样可以从本书中获取与课程教材截然不同的丰富营养。
目 录
开篇?苦想计算机——以使用者的名义
第1章?电控开关——计算机世界的基石
1.1 十余年的迷惑 4
1.2 从1 1=2说起 4
1.2.1 用电路实现1 1=2 6
1.2.2 或门 6
1.2.3 与门 7
1.2.4 非门和与非门 7
1.2.5 异或门 7
1.2.6 1位加法器 8
1.2.7 全手动1位加法机 10
1.2.8 实现多位加法器 10
1.2.9 电路的时延 13
1.2.10 新世界的新规律 13
1.2.11 先行/并行进位 14
1.2.12 电路化简和变换 15
1.3 新太阳城需要真正可用的计算器 16
1.3.1 产生记忆 17
1.3.2 解决按键问题 18
1.3.3 数学的懵懂 22
1.3.4 次理解数学 25
1.3.5 次理解语义 27
1.3.6 七段显示数码管 30
1.3.7 野路子乘法器 31
1.3.8 科班乘法器 35
1.3.9 数据交换器Crossbar 36
1.3.10 多媒体声光按键转码器 39
1.3.11 次驾驭时间 41
1.4 信息与信号 44
1.4.1 录制和回放 44
1.4.2 振动和信号 49
1.4.3 低通滤波 52
1.4.4 高通滤波 56
1.4.5 带通滤波 59
1.4.6 带阻滤波 59
1.4.7 傅里叶变换 59
1.4.8 波动与电磁波 60
1.4.9 载波、调制与频分复用 62
1.5 完整的计算器 68
1.5.1 用时序控制增强用户体验 69
1.5.2 用MUX来实现Crossbar 71
1.5.3 奇妙的FIFO队列 73
1.5.4 同步/异步FIFO 76
1.5.5 全局共享FIFO 77
1.5.6 多路仲裁 78
1.5.7 交换矩阵 79
1.5.8 时序问题的产生与触发器 84
1.5.9 擒纵机构与触发器 86
1.5.10 擒纵机构与晶振 87
1.5.11 Serdes与MUX/DEMUX 90
1.5.12 计算离不开数据传递 90
1.5.13 几个专业概念的由来 91
1.5.13.1?输入设备 91
1.5.13.2?输出设备 91
1.5.13.3?计算单元/运算器 91
1.5.13.4?控制单元和传递通路 91
1.5.13.5?反馈 91
1.5.13.6?运算/计算 94
1.5.13.7?数据通路和控制通路 94
1.5.13.8?组合逻辑和时序逻辑 94
1.5.13.9?寄存器/ Latch/触发器/锁存器 94
1.5.13.10?存储器 94
1.5.13.11?地址/指针 95
1.5.13.12?写使能信号 95
1.6 多功能计算器 95
算术逻辑单元 96
第2章?解脱人手——程序控制计算机
2.1 从累积计算说起 98
2.2 自动执行 101
2.2.1 将操作方式的描述转化为指令 102
2.2.2 实现那只鱿鱼——控制通路及部件 104
2.2.3 动起来吧!——时序通路及部件 108
2.2.4 半自动执行!——你得推着它跑 112
2.2.5 全自动受控执行!——不用扬鞭自奋蹄! 113
2.2.6 NOOP指令 115
2.2.7 利用边沿型触发器搭建电路 116
2.2.8 分步图解指令的执行过程 121
2.2.9 判断和跳转 123
2.2.10 再见,章鱼先生! 126
2.3 更高效的执行程序 128
2.3.1 利用循环缩减程序尺寸 128
2.3.2 实现更多方便的指令 131
2.3.3 多时钟周期指令 133
2.3.4 微指令和微码 136
2.3.5 全局地址空间 138
2.3.6 多端口存储器 138
2.3.7 多级缓存与CPU 139
2.3.8 数据遍布各处 142
2.3.9 降低数据操作粒度 145
2.3.10 取指令/数据缓冲加速 147
第3章?开关的进化——从机械到芯片
3.1 从薄铁片到机械计算机 150
3.1.1 算盘和计算尺 150
3.1.2 不可编程手动机械十进制计算机 151
3.1.3 可编程自动机械十进制计算机 152
3.1.4 可编程自动电动机械二进制计算机 156
3.1.5 可编程自动全电动二进制计算机 162
3.2 电子管时代 166
3.2.1 二极电子管 166
3.2.2 三极电子管 170
3.2.3 AM广播革命 172
3.2.4 电子管计算机 174
3.2.5 石头会唱歌 177
3.3 固态革命——晶体管 179
3.3.1 P/N结与晶体管 181
3.3.2 场效应管(FET) 183
3.3.3 MOSFET 185
3.3.4 cMOS 186
3.3.5 晶体管计算机 187
3.4 制造工艺革命——集成电路 190
3.4.1 量产晶体管 190
3.4.2 跟冬瓜哥学做P/N结蛋糕 192
3.4.3 提升集成度 196
3.4.4 芯片内的深邃世界 197
3.4.5 cMOS集成电路工艺概述 200
3.4.6 cMOS工艺步骤概述 203
3.4.7 cMOS工艺详细步骤 206
3.4.7.1 热氧化 207
3.4.7.2 氮化硅积淀 207
3.4.7.3 浅槽隔离蚀刻 208
3.4.7.4 pMOS和nMOS生成 209
3.4.7.5 触点电极的生成 213
3.4.7.6 通孔和支撑柱(via)的生成 214
3.4.7.7 层导线连接 216
3.4.7.8 第二层导线连接 216
3.4.7.9 表面钝化 217
3.4.8 半导体工艺的瓶颈 220
3.4.8.1 寄生电容 220
3.4.8.2 静态/动态功耗 221
3.4.8.3 栅氧厚度和High-K材料 222
3.4.8.4 导线连接和Low-K材料 222
3.4.8.5 驱动能力及时延 222
3.4.8.6 时钟树 224
3.4.9 集成电路计算机 224
3.4.10 微处理器计算机 227
3.4.11 暴力拆解奔三CPU 230
3.5 存储器:不得不说的故事 232
3.5.1 机械存储器 233
3.5.1.1 声波/扭力波延迟线(Delay Line) 233
3.5.1.2 磁鼓存储器(Drum) 234
3.5.1.3 磁芯存储器(Core) 235
3.5.2 电子存储器 238
3.5.2.1 静态随机存储器(SRAM) 238
3.5.2.2 动态随机存储器(DRAM) 241
3.5.2.3 Flash闪存 246
3.5.2.4 只读存储器(ROM) 248
3.5.3 光存储器 248
3.5.3.1 光盘是如何存储数据的 248
3.5.3.2 压盘与刻盘的区别 250
3.5.3.3 光盘表面微观结构 250
3.5.3.4 多层记录 251
3.5.3.5 激光头的秘密 251
3.5.3.6 蓝光光盘简介 252
3.5.4 不同器件担任不同角色 253
3.5.4.1 寄存器和缓存 253
3.5.4.2 主运行内存/主存 253
3.5.4.3 Scratchpad RAM 254
3.5.4.4 内容寻址内存CAM/TCAM 254
3.5.4.5 外存 257
第4章?电路执行过程的进化——流水线、分支预测、乱序执行与多发射
4.1 大话流水线 260
4.1.1 不高兴的译码器 260
4.1.2 思索流水线 263
4.1.2.1 流水线的本质是并发 263
4.1.2.2?不同时延的步骤混杂 264
4.1.2.3 大话队列 266
4.1.2.4?流水线的应用及优化 268
4.2 优化流水线 270
4.2.1 拆分慢速步骤 270
4.2.2 放置多份慢速部分 272
4.2.3 加入缓冲队列 273
4.2.4 图解五级流水线指令执行过程 273
4.3 流水线冒险 273
4.3.1 访问冲突与流水线阻塞 278
4.3.2 数据依赖与数据前递 281
4.3.3 跳转冒险与分支预测 285
4.4 指令的动态调度 293
4.4.1 结构相关与寄存器重命名 293
4.4.2 保留站与乱序执行 295
4.4.3 分步图解乱序执行 297
4.4.4 重排序缓冲与指令顺序提交 319
4.5 物理并行执行 320
4.5.1 超标量和多发射 320
4.5.2 VLIW超长指令字 322
4.5.3 SIMD单指令多数据 322
4.6 小结 326
第5章?程序世界——从机器码到操作系统
5.1 基本的数据结构 330
5.1.1?数组 330
5.1.2 数据类型与ASCII码 331
5.1.3 结构体 333
5.1.4 数据怎么摆放很重要 333
5.2 高级语言 335
5.2.1 简单的声明和赋值 335
5.2.2 编译和编译器 336
5.2.3 向编译器描述数据的编排方式 337
5.2.4 高级语言编程小试牛刀 339
5.2.5 人脑编译忆苦思甜 341
5.3 浮点数及浮点运算 342
5.3.1 数值范围和精度 342
5.3.2 浮点数的用处和表示方法 343
5.3.3 浮点数的二进制表示 344
5.3.3.1?二进制浮点数转十进制小数 344
5.3.3.2?十进制小数转二进制浮点数 345
5.3.3.3?负指数和0的表示 346
5.3.3.4?无穷与非规格化数的表示 346
5.3.4 浮点数运算挺费劲 347
5.3.5 浮点数的C语言声明 349
5.3.6 十六进制表示法 349
5.4 程控多媒体计算机 350
5.4.1 键盘是前提 350
5.4.2 搜索并显示 351
5.4.3 实现简易计算器 354
5.4.4 录入和保存 355
5.4.5 简易文件系统 356
5.4.6 计时/定时 360
5.4.7 发声控制 367
5.4.8 图像显示 369
5.4.9 网络聊天 372
5.5 程序社会 376
5.5.1 函数和调用 377
5.5.2 设备驱动程序 381
5.5.3 函数之间的联络站 388
5.5.4 库和链接 397
5.5.4.1?静态库和静态链接 399
5.5.4.2?头文件 404
5.5.4.3?API和SDK 406
5.5.4.4?动态库和动态链接 409
5.5.4.5?库文件/可执行文件的格式 410
5.5.5 程序的执行和退出 412
5.5.5.1?初步解决地址问题 413
5.5.5.2?更好的人机交互方式 413
5.5.5.3?程序的退出 414
5.5.5.4?使用外部设备和内存 416
5.5.6 多程序并发执行 417
5.5.6.1?利用时钟中断来切换线程 418
5.5.6.2?更广泛地使用中断 421
5.5.6.3?虚拟地址空间与分页 421
5.5.6.4?虚拟与现实的边界——系统调用 426
5.5.7 呼唤操作系统 428