02 | 给你一张知识地图,计算机组成原理应该这么学
一、计算机的基本组成。
(1)硬件:又是怎么对应到经典的(2)冯·诺依曼体系结构中的:运算器、控制器、存储器、输入设备和输出设备这五大基本组件。
计算机的两个核心指标:(3)性能和(4)功耗
二、计算机的指令和计算。
指令部分: (1)程序是怎么在计算机里面跑起来?。程序是怎么通过编译器和汇编器,变成一条条机器指令的编译过程(编译原理)
(2)操作系统是怎么链接、装载、执行这些程序,一条条指令执行的控制过程(控制器控制)
运算部分:二进制编码,从数字电路层面,实现加法、乘法这些运算功能。运算器(也是算术逻辑单元)实现运算功能 ALU(Arithmetic
Logic Unit/ALU)。浮点数(Floating Point)非常容易用错。
三、处理器
(1)CPU 时钟构造寄存器、内存的锁存器和触发器。知道为什么需要 CPU 时钟(CPU Clock),寄存器和内存的硬件组成的之后,整个计算机的数据通路如何构造。
(2)数据通路,连接了整个运算器和控制器,最终组成了 CPU。
(3)考虑性能和功耗,要理解和掌握面向流水线设计的 CPU、数据和控制冒险、分支预测的相关技术。
(4)既然 CPU 作为控制器要和输入输出设备通信,那么我们就要知道异常和中断发生的机制。
(5)指令的并行执行,如何直接在 CPU 层面,通过 SIMD 来支持并行计算。
四、存储器的原理
(1)存储器的层次结构,从上到下的 CPU 高速缓存、内存、SSD 硬盘和机械硬盘的工作原理,之间的性能差异,应用中利用这些设备会遇到的挑战。
(2)存储器可输入、出,CPU 和存储器如何通信,性能问题: IO_WAIT,如何通过 DMA 来提升程序性能。
存储器如何通过 RAID、Erasure Code、ECC 以及分布式 HDFS,来确保数据的完整性和访问性能。
学习计算机组成原理,究竟有没有好办法?
程序怎样从高级代码变成指令在计算机里面运行,对应着“编译原理”和“操作系统”这两门课程;计算实现背后则是“数字电路”;如果要深入 CPU 和存储器系统的优化,必然要深入了解“计算机体系结构”。
(1)提问来串联知识点。
代码怎样变成运行的程序,得到最终结果的?
整个过程中,计算器层面到底经历了哪些步骤,哪些可优化?
程序的编译、链接、装载和执行,以及计算时需要用到的逻辑电路、ALU,乃至 CPU 自发为你做的流水线、指令级并行和分支预测,还有对应访问到的硬盘、内存,以及加载到高速缓存中的数据。
(2)写示例程序来验证知识点。大量原理和设计,对应着“性能”这个词。
(3)和计算机硬件发展的历史对照。第一台电子计算机发明到现在,有 70 多年了。现代技术,都是跟随实际应用中遇到的挑战,一个个发明、打磨,最后保留下来的。有学术碰撞,有商业交锋。
奔腾 4 和 SPARC 的失败,以及 ARM 的成功,让我们记住 CPU 指令集的繁与简、权衡性能和功耗的重要性
入门书籍:《计算机是怎样跑起来的》,《程序是怎样跑起来的》(微缩版“计算机组成原理”)
Coursera 上北京大学免费公开课《Computer Organization》硬件基础:寄存器、ALU 这些电路是怎么回事。
深入学习书籍:《计算机组成与设计:硬件 / 软件接口》,《深入理解计算机系统》,《计算机组成:结构化方法》,《计算机体系结构:量化研究方法》。
课外阅读:《编码:隐匿在计算机软硬件背后的语言》和《程序员的自我修养:链接、装载和库》是理解计算机硬件和操作系统层面代码执行
最有效的办法:不是短时间冲刺,而是有节奏地坚持,希望你能够和专栏的发布节奏同步推进,做好思考题,并且多在留言区和其他朋友一起交流