乐趣区

关于程序员:给你一张知识地图计算机组成原理应该这么学

计算机组成原理的英文叫 Computer Organization。这里的 Organization 是“组织机构”的意思。计算机由很多个不同的部件放在一起,变成了一个“组织机构”。这个组织机构最终可能进行各种计算、管制、读取输出,进行输入,达成各种弱小的性能。

在这张图外面,咱们把整个计算机组成原理的知识点拆分成了四大局部,别离是计算机的根本组成、计算机的指令和计算、处理器设计,以及存储器和 I/O 设施。

首先,咱们来看计算机的根本组成。

这一部分,你须要学习计算机是由哪些硬件组成的。这些硬件,又是怎么对应到经典的冯·诺依曼体系结构中的,也就是运算器、控制器、存储器、输出设施和输出设备这五大根本组件。除此之外,你还须要理解计算机的两个外围指标,性能和功耗。性能和功耗也是咱们在利用和设计五大根本组件中须要重点思考的因素。

理解了组成部分,接下来你须要把握计算机的指令和计算。

在计算机指令局部,你须要搞明确,咱们每天撰写的一行行 C、Java、PHP 程序,是怎么在计算机外面跑起来的。这外面,你既须要理解咱们的程序是怎么通过编译器和汇编器,变成一条条机器指令这样的编译过程(如果把编译过程开展的话,能够变成一门残缺的编译原理课程),还须要晓得咱们的操作系统是怎么链接、装载、执行这些程序的(这部分常识如果再深刻学习,又能够变成一门操作系统课程)。而这一条条指令执行的管制过程,就是由计算机五大组件之一的控制器来管制的。

在计算机的计算局部,你要从二进制和编码开始,了解咱们的数据在计算机里的示意,以及咱们是怎么从数字电路层面,实现加法、乘法这些根本的运算性能的。实现这些运算性能的 ALU(Arithmetic Logic Unit/ALU),也就是算术逻辑单元,其实就是咱们计算机五大组件之一的运算器。

这外面有一个在明天看起来特地重要的知识点,就是浮点数(Floating Point)。浮点数是咱们在日常使用中非常容易用错的一种数据表示模式。把握浮点数能让你对数据的编码、存储和计算可能有一个从表到里的深刻了解。尤其在 AI 炽热的明天,浮点数是机器学习中重度应用的数据表示模式,把握它更是十分有必要。

明确计算机指令和计算是如何运行的,咱们就能够深刻到 CPU 的设计中去一探到底了。

CPU 时钟能够用来结构寄存器和内存的锁存器和触发器,因而,CPU 时钟应该是咱们学习 CPU 的前导常识。搞明确咱们为什么须要 CPU 时钟(CPU Clock),以及寄存器和内存是用什么样的硬件组成的之后,咱们能够再来看看,整个计算机的数据通路是如何结构进去的。

数据通路,其实就是连贯了整个运算器和控制器,并最终组成了 CPU。而出于对于性能和功耗的思考,你要进一步了解和把握面向流水线设计的 CPU、数据和管制冒险,以及分支预测的相干技术。

既然 CPU 作为控制器要和输入输出设施通信,那么咱们就要晓得异样和中断产生的机制。在 CPU 设计局部的最初,我会讲一讲指令的并行执行,看看如何间接在 CPU 层面,通过 SIMD 来反对并行计算。最初,咱们须要看一看,计算机五大组成部分之一,存储器的原理。

通过存储器的层次结构作为根底的框架疏导,你须要把握从上到下的 CPU 高速缓存、内存、SSD 硬盘和机械硬盘的工作原理,它们之间的性能差别,以及理论利用中利用这些设施会遇到的挑战。存储器其实很多时候又表演了输入输出设施的角色,所以你须要进一步理解,CPU 和这些存储器之间是如何进行通信的,以及咱们最器重的性能问题是怎么一回事;了解什么是 IO_WAIT,如何通过 DMA 来晋升程序性能。

对于存储器,咱们不仅须要它们可能失常工作,还要确保外面的数据不能失落。于是你要把握咱们是如何通过 RAID、Erasure Code、ECC 以及分布式 HDFS,这些不同的技术,来确保数据的完整性和拜访性能。

入门书籍

我举荐你浏览两本书,精确地说,这其实是两本小册子,因为它们十分轻薄、好读,而且图文并茂,非常适合初学者和想要入门组成原理的同学。一本是《计算机是怎么跑起来的》,另一本是《程序是怎么跑起来的》。我要特地说一下前面这本,它能够说是一个入门微缩版本的“计算机组成原理”。

除此之外,计算机组成中,硬件层面的根底实现,比方寄存器、ALU 这些电路是怎么回事,你能够去看一看 Coursera 上的北京大学收费公开课《Computer Organization》。这个视频课程的视频局部也就 10 多个小时。在学习专栏相应章节的前后去浏览一遍,置信对你理解程序在电路层面会变成什么样子有所帮忙。

深刻学习书籍

对于想要深刻把握计算机组成的同学,我举荐你去读一读《计算机组成与设计:硬件 / 软件接口》和经典的《深刻了解计算机系统》这两本书。前面这本被称为 CSAPP 的经典教材,网上也有配套的视频课程。我在这里给你举荐两个不同版本的链接(Bilibili 版和 Youtube 版)。不过这两本都在 500 页以上,保持啃下来须要不少实践经验。

计算机组成原理还有一本的经典教材,就是来自操作系统大神塔能鲍姆(Andrew S. Tanenbaum)的《计算机组成:结构化办法》。这本书的组织构造和其余教材都不太一样,适宜作为一个辅助的参考书来应用。

如果在学习这个专栏的过程中,引发了你对于计算机体系结构的趣味,你还能够深刻读一读《计算机体系结构:量化钻研办法》。

在下面这些教材之外,对于资深程序员来说,来自 Redhat 的 What Every Programmer Should Know About Memory 是写出高性能程序不可不读的经典资料。而 LMAX 开源的 Disruptor,则是通过理论应用程序,来了解计算机组成原理中各个知识点的最好范例了。《编码:隐匿在计算机软硬件背地的语言》和《程序员的自我涵养:链接、装载和库》是了解计算机硬件和操作系统层面代码执行的优良浏览资料。

退出移动版