【计算机组成原理】02-计算机组成原理概览

  在前面两篇博客中,我们了解了现代计算机的基本硬件组成和冯·诺依曼体系结构。在学习零散知识点之前,有必要先建立一个整体的了解。

1. 计算机组成原理知识地图

  计算机组成原理的英文名为 Computer Organization。顾名思义,Organization 就是“组织机构”的意思。计算机就是由不同部件组合而成的组织机构。这个组织机构可以读取输入,进行控制和运算并将结果输出。

计算机组成原理知识地图

  上图将计算机组成原理拆分为四大部分,即计算机基本组成、计算机的指令和运算、处理器设计、存储器和 I/O 系统。

1.1 计算机的基本组成

  这部分主要讲述计算机是由哪些硬件组成的,这些硬件又是如何对应到冯·诺依曼体系结构(运算器、控制器、存储器、输入设备、输出设备)中的。

  此外,还要了解计算机的两个核心指标——性能和功耗。这两个指标也是应用和设计五大组件时重点考虑的因素。

1.2 计算机的指令和运算

  指令部分主要讲述,我们写的代码是如何在计算机里面跑起来的。要解答这个问题,首先需要了解编译过程——程序是如何通过编译器和汇编器变成机器指令的(这部分拓展开就是编译原理)。其次还要了解操作系统是怎么链接、装载、执行这些程序的(这部分拓展开就是操作系统)。这些指令执行的控制过程,就是由五大组件中的控制器来控制的。

  运算部分要从二进制和编码开始,理解数据在计算机里的表示,以及我们是怎么从数字电路层面,实现加法、乘法这些基本的运算功能的。实现这些运算功能的逻辑运算单元(Arithmetic Logic Unit,ALU),其实就是五大组件中的运算器。

1.3 处理器设计

  CPU 时钟可以用来构造寄存器以及内存的锁存器和触发器,因此,CPU 时钟应该是我们学习 CPU 的前导知识。

  搞明白我们为什么需要 CPU 时钟(CPU Clock),以及寄存器和内存是用什么样的硬件组成的之后,就可以学习整个计算机的数据通路是如何构造出来的。数据通路连接了运算器和控制器,并最终组成了 CPU。处于对性能和功耗的考虑,我们要进一步理解和掌握面向流水线设计的 CPU、数据和控制冒险,以及分支预测的相关技术。

  CPU 作为控制器,需要和输入输出设备通信,因此我们就要知道异常和中断发生的机制。

  在 CPU 设计部分的最后,我们要讨论指令的并行执行,看看如何直接在 CPU 层面,通过 SIMD 来支持并行计算。

1.4 存储器和 I/O 系统

  通过存储器的层次结构作为基础的框架引导,我们要掌握从上到下的 CPU 高速缓存、内存、SSD 硬盘和机械硬盘的工作原理,它们之间的性能差异,以及实际应用中利用这些设备会遇到的挑战。

  存储器很多时候又扮演了输入输出设备的角色,所以要进一步了解,CPU 和这些存储器之间是如何进行通信的,以及我们最重视的性能问题是怎么一回事。要理解什么是 IO_WAIT,如何通过 DMA 来提升程序性能。

  存储器不仅要能正常工作,还要确保数据不丢失。于是我们要了解,如何通过 RAID、Erasure Code、ECC 以及分布式 HDFS 等技术来确保数据的完整性和访问性能。

2. 学习计算机组成原理的方法

  在上一节中,我们大概列举了计算机组成原理的知识点。不难看出,这门课程知识点广泛,是计算机科学中串联全局的纲要。其中的任何一个知识点扩展开来都是计算机科学中的一门核心课程。针对这种特点,我们在学习中要注意三点。

2.1 自问自答,串联知识点

  程序的编译、链接、装载和执行,计算时用到的逻辑电路、ALU,乃至 CPU 自发为你做的流水线、指令级并行和分支预测,还有对应访问到的硬盘、内存,以及加载到高速缓存中的数据,这些都对应着一个个知识点。我们可以在脑子里过一遍这些问题,最好将答案口头或书面表述出来。譬如以下问题:

  • 我写的程序,是怎样从输入的代码,变成运行的程序,并得到最终结果的?
  • 整个过程中,计算器层面到底经历了哪些步骤,有哪些地方是可以优化的?

2.2 写 demo 程序验证知识点

  计算机科学是一门实践的学科,把对应的知识点,变成一个个性能对比的示例代码程序记录下来,是把这些知识点融汇贯通的好方法。

2.3 和计算机硬件发展的历史做对照

  现代计算机技术,在实际应用中遇到挑战,一个个洗练出来的。其中不仅有学术观点的碰撞,更有商业层面的交锋。了解计算机发展史,会更容易理解计算机组成中各种原理的由来。

3. 资料推荐

3.1 入门资料

  书籍方面,推荐《计算机是怎样跑起来的》《程序是怎样跑起来的》。这两本小册子适合入门,尤其是后者,可以说是精简版的计算机组成原理。

  视频方面,推荐 Coursera 上北京大学的公开课《Computer Organization》。这个视频教程时长十几小时,主要讲解计算机组成中,硬件层面的基础实现,譬如寄存器、ALU 这些电路是怎么回事。

3.2 进阶资料

  如果想深入学习计算机组成原理,需要啃下《计算机组成与设计:硬件 / 软件接口》《深入理解计算机系统》这两本书。后者被称为 CSAPP 的经典教材,配套视频教程请戳

  此外,《计算机组成:结构化方法》这本书可以作为辅助的参考书。

  如果想进一步了解计算机体系结构,可以阅读《计算机体系结构:量化研究方法》

3.3 延伸阅读

  《What Every Programmer Should Know About Memory》。

  《编码:隐匿在计算机软硬件背后的语言》

  《程序员的自我修养:链接、装载和库》

  LMAX 开源的 Disruptor,是理解计算机组成原理知识点最好的实际应用程序范例。参考资料有 LMAX BLOG白皮书

原文地址:https://www.cnblogs.com/murongmochen/p/14083565.html