描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302526476
计算机,已经无处不在,你走到任何位置,都会有成千上万各种类型的“计算机”围绕着你,小到各种移动设备,大到飞机火车,都是由各种计算机控制并运转。你可曾想过这些计算机是怎么运作的?一个字节是怎么产生又是怎么消亡的?网络是如何连接一切的?人工智能到底是什么?……
冬瓜哥其人,喜钻研,擅用与科班教材截然不同的方式把计算机原理细细分解,娓娓道来。这本书如此通俗,以至于假设当代文明毁灭之后,下一个文明从地壳中找到这本书,按照书中所讲即可迅速建立起计算机体系,极大推动下一个文明的进程……
本书共分为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
第6章?多处理器微体系结构——多核心与缓存
6.1 从超线程到多核心 430
6.1.1 超线程并行 430
6.1.2 多核心/多CPU并行 433
6.1.3 idle线程 434
6.1.4 乱序执行还是SMT? 435
6.1.5 逆超线程? 436
6.1.6 线程与进程 436
6.1.7 多核心访存基本拓扑 437
6.2 缓存十九式 442
6.2.1 缓存是分级的 442
6.2.2 缓存是透明的 442
6.2.3 缓存的容量、频率和延迟 443
6.2.4 私有缓存和共享缓存 443
6.2.5 Inclusive模式和Exclusive模式 444
6.2.6 Dirty标记位和Valid标记位 444
6.2.7 缓存行 445
6.2.8 全关联/直接关联/组关联 446
6.2.9 用虚拟地址查缓存 451
6.2.10 缓存的同名问题 453
6.2.11 缓存的别名问题 453
6.2.12 页面着色 455
6.2.13 小结及商用CPU的缓存模式 457
6.2.14 缓存对写入操作的处理 458
6.2.15 Load/Stor Queue与Stream Buffer 459
6.2.16 非阻塞缓存与MSHR 460
6.2.17 缓存行替换策略 462
6.2.18 i_Cache/d_Cache/TLB_ Cache 463
6.2.19 对齐和伪共享 465
6.3 关联起来,为了一致性 465
6.3.1 Crossbar交换矩阵 466
6.3.2 Ring 472
6.3.3?NoC 475
6.3.4 众核心CPU 478
6.3.5 多核心程序执行过程回顾 481
6.3.6 在众核心上执行程序 482
6.4 存储器在网络中的分布 484
6.4.1 CPU片内访存网络与存储器分布 487
6.4.2 CPU片外访存网络 489
6.4.2.1 全总线拓扑及南桥与北桥 490
6.4.2.2 AMD Athlon北桥 492
6.4.2.3 常用网络拓扑及UMA/NUMA 494
6.4.2.4 AMD Opteron北桥 497
6.4.3 参悟全局共享内存架构 499
6.4.4 访存网络的硬分区 501
6.5 QPI片间互联网络简介 502
6.5.1 QPI物理层与同步异步通信原理 503
6.5.2 QPI链路层网络层和消息层 505
6.5.3 QPI的初始化与系统启动 507
6.5.3.1 链路初始化和拓扑发现 507
6.5.3.2 系统启动 507
6.5.4 QPI的扩展性 509
6.6 基于QPI互联的高端服务器架构一览 510
6.6.1 某32路CPU高端主机 510
6.6.2 DELLEMC的双层主板QPI互联 511
6.6.3 IBM x3850/3950 X5/X6主机 511
6.6.4 HP Superdome2主机 515
6.6.5 Fujitsu PQ2K主机 518
6.7 理解多核心访存时空一致性问题 520
6.7.1 访存空间一致性问题 520
6.7.2 访存时间一致性问题 521
6.7.2.1 延迟到达导致的错乱 521
6.7.2.2 访问冲突导致的错乱 521
6.7.2.3 提前执行导致的错乱 522
6.7.2.4 乱序执行导致的错乱 522
6.8 解决多核心访存时间一致性问题 523
6.8.1 互斥访问 523
6.8.2 让子弹飞 526
6.8.3 硬件原生保证的基本时序 527
6.8.4 解决延迟到达错乱问题 529
6.8.5 解决访问冲突错乱问题 530
6.8.6 解决提前执行测错乱问题 530
6.8.7 解决乱序执行错乱问题 531
6.8.8 小结 531
6.9 解决多核心访存空间一致性问题 533
6.9.1 基于总线监听的缓存一致性实现 533
6.9.1.1 Snarfing/Write Sync方式 533
6.9.1.2 Write Invalidate方式 534
6.9.2 推导MESIF状态机 535
6.9.3 MOESI状态机 540
6.9.4 结合MESIF协议进一步理解锁和屏障 540
6.9.5 结合MESIF深刻理解时序一致性模型 545
6.9.5.1 终极一致性(UC) 545
6.9.5.2 严格一致性(SC) 545
6.9.5.3 顺序一致性(SEC) 545
6.9.5.4 处理器一致性(PC) 546
6.9.5.5 弱一致性(WC) 546
6.9.6 缓存行并发写优化 546
6.9.7 Cache Agent的位置 547
6.9.8 基于共享总线的嗅探过滤机制 548
6.9.8.1 bitmap粗略过滤 549
6.9.8.2 向量bitmap精确过滤 549
6.9.8.3 布隆过滤器与散列采样 550
6.9.8.4 JETTY filter 551
6.9.8.5 流寄存器式过滤器 553
6.9.8.6 带计数器的SR过滤器 554
6.9.8.7 蓝色基因/P中的嗅探过滤器 554
6.9.9 基于分布式访存网络的缓存一致性实现 555
6.9.9.1 分布式网络对CC机制的影响 557
6.9.9.2 多级缓存和多CPU对CC机制的影响 558
6.9.9.3?即便无锁也要保证一致 558
6.9.10 分布式网络下的嗅探过滤机制 559
6.9.10.1 在LLC中增设bitmap向量过滤片内广播 559
6.9.10.2 Ring网络的三种嗅探方式 561
6.9.10.3 增设远程目录过滤片外广播 562
6.9.10.4 利用HA代理片内CC事务 565
6.9.10.5 小结 569
6.9.10.6 在网络路径上实施嗅探过滤 570
6.9.11 缓存一致性实现实际案例 571
6.9.11.1 Intel Blackford北桥CC实现 572
6.9.11.2 AMD Opteron 800平台CC实现 573
6.9.11.3 北桥与NC(Node Controller) 575
6.9.11.4 Horus NC实现 576
6.9.11.5 SGI Origin 2000 NC实现 580
6.9.11.6 IBM PERCS超级计算机中的NC 583
6.9.11.7 Intel CPU在QPI网络下的CC实现 585
6.9.11.8 小结 588
第7章?计算机I/O子系统
7.1 计算机I/O的基本套路 593
7.1.1 Programmed IO Polling模式 593
7.1.2 DMA 中断模式 598
7.1.3 DMA与缓存一致性 600
7.1.4 Scatter/Gather List(SGL) 601
7.1.5 使用队列提升I/O性能 601
7.1.6 固件/Firmware 604
7.1.6.1?固件与OS的区别与联系 605
7.1.6.2?固件的层次 605
7.1.6.3?固件的格式 605
7.1.6.4?固件存在哪 605
7.1.6.5?固件如何加载运行 606
7.1.7 网络I/O基本套路 606
7.1.8 接入更多外部设备 610
7.1.9 一台完整计算机的全貌 614
7.2 中断处理 616
7.3 网络通信系统 619
7.3.1 OSI七层标准模型 620
7.3.1.1?应用层 620
7.3.1.2?表示层 620
7.3.1.3?会话层 621
7.3.1.4?传输层 621
7.3.1.5?网络层 624
7.3.1.6?链路层 626
7.3.1.7?物理层 627
7.3.1.8?传送层 627
7.3.1.9?小结 629
7.3.2 底层信号处理系统 630
7.3.2.1?AC耦合电容及N/Mbit编码 630
7.3.2.2?加扰的作用 634
7.3.2.3?各种线路编码 636
7.3.2.4?各种模拟调制技术 637
7.3.2.5?频谱宽度与比特率 641
7.3.2.6?数字信号处理与数字滤波 646
7.3.3 以太网——高速通用非访存式后端外部网络 647
7.3.3.1?以太网的网络层 647
7.3.3.2?以太网的链路层和物理层 652
7.3.3.3?以太网I/O控制器 652
7.4 典型I/O网络简介 652
7.4.1?PCIE——高速通用访存式前端I/O网络 654
7.4.1.1?PCI网络拓扑及数据收发过程 654
7.4.1.2?PCI设备的配置空间 656
7.4.1.3?PCI设备的枚举和配置 658
7.4.1.4?PCI设备寄存器的物理地址分配和路由 663
7.4.1.5?中期小结 664
7.4.1.6?PCIE网络拓扑及数据收发过程 665
7.4.1.7?PCIE网络的层次模型 669
7.4.1.8?NTB非透明桥 685
7.4.1.9?PCIE Switch内部 692
7.4.1.10?在PCIE网络中传递消息 697
7.4.1.11?在PCI网络中传递中断信号 698
7.4.1.12?在PCIE网络中传递中断信号 700
7.4.1.13?MSI/MIS-X中断方式 701
7.4.1.14?PCIE体系中的驱动程序层次 706
7.4.1.15?小结 708
7.4.2 USB——中速通用非访存式后端I/O网络 709
7.4.2.1?USB网络的基本拓扑 712
7.4.2.2?USB设备的枚举和配置 714
7.4.2.3?USB网络协议栈 719
7.4.2.4?USB网络上的数据包传送 722
7.4.2.5?USB网络的层次模型 728
7.4.2.6?小结 729
7.4.3 SAS——高速专用非访存式后端I/O网络 730
7.4.3.1?SAS网络拓扑及设备编号规则 733
7.4.3.2?SAS网络中的Order Set一览 734
7.4.3.3?SAS的链路初始化和速率协商 734
7.4.3.4?SAS网络的初始化与设备枚举 743
7.4.3.5?SAS和SCSI的Host端协议栈 753
7.4.3.6?形形色色的登记表 761
7.4.3.7?SAS网络的数据传输方式 778
7.4.3.8?SAS网络的层次模型 783
7.4.3.9?SAS控制器内部架构 789
7.4.3.10?SAS SXP内部架构 797
7.5 本章小结 797
第8章?绘声绘色——计算机如何处理声音和图像
8.1 声音处理系统 802
8.1.1 让蜂鸣器说话 802
8.1.2 音乐是可以被勾兑出来的 803
8.1.2.1?可编程音符生成器PSG 804
8.1.2.2?音乐合成器 805
8.1.2.3?FM合成及波表合成 809
8.1.3 声卡发展史及架构简析 812
8.1.4 与发声控制相关的Host端角色 817
8.1.5 让计算机成为演奏家 832
8.1.6 独立声卡的没落 832
8.2 图形处理系统 842
8.2.1 用声音来画图 846
8.2.2 文字模式 849
8.2.2.1?向量文本模式显示 849
8.2.2.2?用ROM存放字形库 852
8.2.2.3?点阵文字显示模式 852
8.2.2.4?单色显示适配器 855
8.2.2.5?点阵作图与ASCII Art 856
8.2.3 图形模式 857
8.2.3.1?Color Graphics Adapter(CGA) 857
8.2.3.2?Enhanced Graphics Adapter(EGA) 860
8.2.3.3?Video BIOS ROM的引入 861
8.2.3.4?Video Graphics Array(VGA) 863
8.2.3.5?VGA的后续 864
8.2.3.6?当代显卡的图形和文字模式 864
8.2.4 2D图形及其渲染流程 864
8.2.4.1?2D图形加速卡PGC 866
8.2.4.2?2D图形模型的准备 872
8.2.4.3?对模型进行渲染 874
8.2.4.4?矢量图和bitmap 875
8.2.4.5?顶点、索引和图元 876
8.2.4.6?2D图形动画 876
8.2.4.7?坐标変换及矩阵运算 878
8.2.4.8?2D图形渲染流程小结 880
8.2.4.9?2D绘图库以及渲染加速 880
8.2.5 3D图形模型和表示方法 885
8.2.5.1?3D模型的表示 886
8.2.5.2?顶点的4个基本属性 889
8.2.6 3D图形渲染流程 893
8.2.6.1?顶点坐标变换阶段/Vertex Transform 893
8.2.6.2?顶点光照计算阶段/Vertex Lighting 897
8.2.6.3?栅格化阶段/Rasterization 899
8.2.6.4?像素着色阶段/Pixel Shading 900
8.2.6.5?遮挡判断阶段/Testing 909
8.2.6.6?混合及后处理阶段/Blending 914
8.2.6.7?3D渲染流程小结 914
8.2.7 典型的3D渲染特效简介 915
8.2.7.1?法线贴图(Normal Map) 916
8.2.7.2?曲面细分与置换贴图(Tessellation) 920
8.2.7.3?视差/位移贴图(Parallax Map) 922
8.2.7.4?物体投影(Shadow) 925
8.2.7.5?抗锯齿(Anti-Aliasing) 926
8.2.7.6?光照控制纹理(Light Mapping) 931
8.2.7.7?纹理动画(Texture Animation) 934
8.2.8 当代3D游戏制作过程 936
8.2.9 3D图形加速渲染 937
8.2.9.1?3D图形渲染管线回顾 939
8.2.9.2?固定渲染管线3D图形加速 940
8.2.9.3?可编程渲染管线3D图形加速 943
8.2.9.4?Unified可编程3D图形加速 955
8.2.9.5?深入AMD R600 GPU内部执行流程 955
8.2.10 3D绘图API 及软件栈 963
8.2.10.1?GPU内核态驱动及命令的下发 965
8.2.10.2?GPU用户态驱动及命令的翻译 966
8.2.10.3?久违了OpenGL与Direct3D 969
8.2.10.4?Windows图形软件栈 973
8.2.11 3D图形加速卡的辉煌时代 974
8.2.11.1?街机/家用机/手机上的GPU 974
8.2.11.2?SGI Onyx超级图形加速工作站 978
8.2.11.3?S3 ViRGE时代 979
8.11.2.4?3dfx Voodoo时代 980
8.2.11.5?Nvidia和ATI时代 985
8.3 结语和期盼 991
前 言
各位读者朋友,欢迎阅读本书,开启计算机内部奇妙世界的旅程。本书完全从零开始介绍计算机是如何运
行的,从基本的电路一直介绍到操作系统内核再到机器学习与人工智能。但是本书并不会像大众科普读物那样
点到为止,而是要层层剥开计算机体系中的每一层,一直到看透为止,达到从入门到精通的效果。
本书特点如下。
1. 绝对从初学者角度出发,看了不迷茫、不撕书、不会骂作者(我也不想被人骂)。
2. 介绍事物绝对庖丁解牛,轻易不留“坑”,不得已留了则必填。
3. 带着思考来写作,促发读者思考;问题导向,带着解决问题过程来写。
4. 事物之间带有前因后果关联,而不是孤立地介绍,整本书从第一页到最后一页有一条清晰的因果脉络。
5. 全局框架和局部细节兼顾,大而全,深而细,就像一部精美的游戏,宏观场景震撼,局部细节惊艳!
6. 覆盖面极广,涵盖多个领域关键知识:数字电路、模拟电路、计算机体系结构、计算机组成原理、操作
系统原理、计算机图形学、高性能计算机集群/超级计算机、信号与系统、存储系统、网络/通信系统、机器学
习与人工智能等。
7. 随便点选任何一页的任何一段,都是精彩和拥有丰富细节的内容。
8. 注重大框架的建立,让读者阅后成竹在胸。
9. 便于自学,看文字就像是在聆听作者当面讲授。
10. 图片细节丰富,带有事物运行的流程,其过程是动态的而不是静态的。
具有高中以上学历者就可以阅读本书。本书可作为家长赠予正值高中阶段孩子的礼物,或许能够让他们不
再在网游中虚度光阴。本书也可以作为高中、技校、大学、科研院所的教材或教学参考书。当然,本书也非常
适合于正在或者即将从事IT领域工作的广大工程师、架构师、开发人员、项目管理人员、运维/系统/网络管理
员、销售/售前/售后人员等阅读。
在此,冬瓜哥郑重建议读者们从头阅读本书,而最好不要跳跃式阅读,因为本书与传统写作方式不同。本
书的内容一脉相承,前面内容是后面内容的铺垫,这种符合事物发展规律的脉络式写作方式,就像小说中的剧
情一样,要从头看才能体会出其中更深刻的含义和精髓。
比如,在第1章中,冬瓜哥会回答“计算机如何计算1 1=2”这个问题,并带领大家制作一个能够进行基本
数学运算的示意计算器。在制作过程中,会遇到各种困难和问题,并最终一一解决。在解决的过程中,读者将
会感受到数字电路的精妙之处,对数字电路的运行产生深刻认知,并最终迫切地要求:为何不制作一个能够按
照指令自动进行累积计算的计算器呢?于是便开启了CPU之旅,进入第2章。至于后面的剧情如何跌宕起伏、宏
伟壮观,就等待读者自己去体会吧!
在本书的写作过程中得到了各路江湖豪杰的帮助,在此鄙人由衷表示感谢。
首先要感谢PMC-Sierra(后被Microsemi收购,Microsemi又被Microchip收购)公司,进入该公司让我得以
从更深的层面了解了计算机底层的各种技术。感谢我的导师前PMC-Sierra公司Fellow廖恒博士对鄙人的指导和
引领。
其次要感谢前同事汪利文以及深圳市科力锐科技有限公司创始人之一张勇(@VxD),这两位大侠在本书
写作过程中向鄙人提供了关键的、长时间的、颇具耐心的帮助,在一些深奥问题上,他们忍受了鄙人长期的刨
根问底,有些问题他们无法现场回答,便亲自考证研究、研读源代码,并最终得出结论。我想,只有具有同样
钻研精神的人才会这样做。其中年长鄙人7岁的汪兄是老骥伏枥的典范,他逾越了年龄的壁垒在各种前沿技术领
域长期潜心研究,是不可多得的人才。在表示感谢的同时,也对这两位大侠表示钦佩和崇敬!或许正是因为这
些前辈们深知学习过程的不易,才会如此耐心的帮助鄙人。
还要感谢网友@三郎在模拟电子技术方面予以的指导。感谢网友@Perr、@钓客、@Reborn、@抠出式
linux、@Linux入门等群友的帮助,他们的帮助大大加速了本书第10章的写作进程。
还要感谢网友@去流浪、@豆包、张一中对鄙人相关知识的点拨。感谢中科院计算所的包云岗老师,以及
时任阿里云高性能计算负责人、中国计算机学会理事的何万青老师的帮助。感谢@破布、@子濠两位同学在处
理器体系结构方面的点拨。感谢中存超为的沈杰在数字电路底层方面对鄙人的点拨。感谢刘羽、黄家明两位大
侠分别在MPI编程、BIOS/ACPI方面对鄙人的点拨。感谢刘震在模拟电子和PCB设计制造方面相关知识的点拨。
感谢光子算数(北京)有限责任公司的白冰博士在模拟光学计算方面的知识传授。
还要再次感谢导师廖恒博士在本书即将完成时为我开启了一道新的大门并作为指路人,这直接导致本书第
12 章在一个半月的时间内的速成,这也了却了我长期的一桩心愿,同时也顺带解决了之前长期困扰我的关于信
号均衡器底层原理的问题,我那时候根本不知道信号均衡器中的权重其实也是通过训练来得出的,之前一直卡
在“每个Tap 的权重到底是怎么确定的”这个问题上出不来,也浪费了很多时间去追踪。在本章写作期间,感谢
蔡卫光、王海彬、雷霆、蒋传遐四位大侠在机器学习的上层框架、加速器架构方面提供的帮助。
最后,感谢本书编辑也是我的老朋友栾大成以及清华大学出版社参与本书出版的全体工作人员的努力,以
精湛、迅速、高效的出版技术和流程控制为本书打造了优秀的展现,并最终促其诞生。
由于冬瓜哥是一个半路出家的门外汉,书中定有不少自以为是、飘飘然、不知所云、混淆、错误、含糊不
清之处,迫切希望各位读者能够指出这些错误,再版时一并修正。
本书的部分图片来自于互联网,原始出处不详,如有侵权,请通过下列方式联系作者。本书极个别图片包
含英文注释,未作完整翻译的图片都是示意图,不看注释即可了解图片意图,保留英文注释是为了给有能力的
朋友们刨根问底,请读者体谅,如有疑问,请到冬瓜哥公众号交流。
作者联系方式如下:
QQ/E-mail:[email protected]
微信公众号:大话计算机、大话存储
新浪微博:@冬瓜哥大话计算机和存储
知乎ID:冬瓜哥。知乎专栏:大话计算机、大话存储
此外,冬瓜哥也为广大读者创建了《大话计算机》书友会QQ群:361934810 。大家可以加入本群畅所欲
言,共同提高。
评论
还没有评论。