
计算机体系结构与组成原理
计算机体系结构与组成原理
指令集体系结构(ISA):计算机系统的编程模型,是硬件和软件之间的接口。ISA定义了一组机器语言指令,程序员可以使用这些指令来控制计算机的操作。
微体系结构:实现ISA的具体硬件设计和实现方式。它描述了处理器内部各个功能模块的设计、连接和操作方式。
系统体系机构:计算机系统整体的设计和组织。它包含了硬件、软件、接口和协议的综合设计,确保系统的各个部分能够协同工作。
总结
- ISA定义了程序员和编译器与硬件交互的接口。
- 微体系结构定义了如何在硬件中实现这些指令集的具体设计。
- 系统体系结构则从更高层次上描述整个计算机系统的组成和运行方式。
每种体系结构在不同层次上对计算机系统进行描述,形成了从软件到硬件的完整图景。

中央处理单元(CPU)指计算机系统中负责从存储器读指令并执行指令的部分。今天他很大程度上等同于微处理器。图中很多计算机系统的组件如主存、IO、Cache等后续都会逐步进行深入讲解。
上图右侧的部份,是我们在设计计算机时应当考虑的因素,例如性能和计算机运行速度有关。异常处理同样也很重要,它是允许计算机响应外部事件的机制,例如移动鼠标或按下一个按键。功耗同样也是关键因素,它必须尽可能小。为了避免处理器过热而损坏,计算机必须降低功耗,而为了延长电池寿命,便携计算机如笔记本也必须减少功耗。
什么是计算机系统体系结构?
计算机系统包括读取并执行程序的中央处理单元(CPU),保存程序和数据的存储器,以及其他子系统。而其中的CPU是算术逻辑单元(ALU)和控制单元(CU)的合集,可以看出计算机系统本质上是由冯·诺依曼模型的具体实现。
尽管我们知道CPU是计算机的核心,计算机的性能取决于CPU,但是同时也取决于其他子系统的性能。例如,在过去几十年间,处理器性能保持高速增长,而硬盘的性能在过去30年间几乎保持不变。曾有人开玩笑说,提高处理器性能只不过是让CPU更早地开始等待来自存储器或磁盘的数据。不过随着固态硬盘(SSD)等半导体硬盘开始取代传统的机械硬盘,这种窘况可能结束。

上图描述了一个简单的通用计算机结构。信息(程序和数据)保存在存储器中为了实现不同的目标,计算机会使用不同类型的存储器,图中就有Cache、主存、辅存等多个存储层次。目前绝大多数处理器都在CPU内部集成了Cache。
这里可以看到很奇怪的现象,存储分的种类很多,而且使用的地方也不同,具体有什么区别呢?

如图所示,存储器根据使用场景,分为上述这七个模块,每一个模块作为其上层模块的缓存使用,都是为了提升性能,因为寄存器是整个计算机系统中最快的存储单元属于CPU的一部分,而L1、L2、L3高速缓存的出现是为了解决寄存器和主存之间读写速度的缓冲,因为寄存器的读写速度要比主存快上百倍,即使是现代的DDR4或者DDR5,其访问延迟仍然显著高于寄存器的访问时间。所以为了解决读写速率差距,引入了三层高速缓存。
通过图片简易通用计算机结构我们知道,数据是通过总线从计算机的位置传递到另一个位置。现有的一些总线,比如PCIE总线,本身已经成为了一个复杂子系统。后续将介绍能够确保数据流通过总线传输而不与其他数据流冲突的总线协议。
而总线种类繁杂,也不是单单一种,例如,磁盘驱动器与主机之间的总线和CPU与主存间的总线就不相同。一些计算机系统会使用总线扩展接口或桥接技术,以便能够在不同类型的总线间交换数据。
什么是计算机?
数学家冯·诺依曼是最早界定计算机结构的人之一,而现代计算机发展日新月异,从个人计算机到手机等,计算机大致分为以下几类:模拟计算机、神经计算机、量子计算机、生化计算机,这些计算机处理数据的方式跟传统计算机——冯·诺依曼存储程序数字计算机已经完全不同。这里我们只学习冯·诺依曼模型的存储程序计算机,以后简称计算机。

计算机是个黑盒,它将信息从一个位置移动到另一个位置,并在过程中处理这些信息。图中有两条连接CPU和存储器的信息传输总线。CPU用下面的单向总线一条一条的读取存储器的程序的指令。以上只是简单的概念性描述,为了提高性能,现代高性能计算机可以一次从存储器中读出若干条指令。
上面那条双向总线是在程序的控制下,在CPU和存储器之间传送数据,这条总线上的信息流是双向的。在写周期内,程序产生的数据从CPU写回存储器,保存在存储器中以便后续使用。在读周期内,CPU请求的数据从存储器送往CPU。
很少有计算机会像上图这样在CPU和存储器之间设置两条独立的总线。**大多数计算机在CPU和存储器系统之间仅有一条总线,数据和指令轮流使用这条总线。**之所以在上面画两条总线,是为了强调存储器中既保存了组成程序的指令,也保存了线程所用的数据。而有的计算机会将数据和指令放在不同的存储器中(或使用不同的总线传输数据和指令),这种结构叫哈佛体系结构(Harvard architecture)。
为了更细致的查看程序的执行过程,这里我们假定从存储器中读出一条形如 Z=X+Y
的指令,将其发送给解释单元,解释单元产生控制信号,驱动这条指令执行。而要执行这个程序指令,CPU必须首先从存储器中取出(fetch)一条指令。在CPU分析或解码这条指令后,它会从存储器中读出这条指令所需的所有数据。

第一条指令 LOAD X,从存储器中读出变量X的值,并将其暂存在寄存器中。
第二条指令 LOAD Y,从存储器中读出变量Y的值,并将其暂存在寄存器中。
第三条指令 Z = X + Y,将两个寄存器中的值相加,并将结果保存在寄存器中。
第四条指令 STORE Z,将寄存器中的值写入存储单元Z。
第五条指令 STOP,执行结束,退出。
体系结构和组成?
为什么要定义计算机体系结构,是因为不同的用户会从不同角度审视计算机。例如,会计可能会将计算机视作一个计算器以及图表设计设备,物理学家可能会将它看作是晶体中电子的活动实验设备,而我们这里只关注程序员视角下的计算机,对他们来说,计算机的实际硬件和实现都被隐藏封装了起来。程序员可以完全不清楚加法操作如何进行的情况下指示计算机做加法运算。计算机体系结构的这个视角通常被称作指令集体系结构(ISA)。
计算机组成表示其体系结构的具体实现。软件工程师也许会说计算机组成是计算机体系结构的实例化(将抽象变为具体)。例如,时钟是报时工具,它的体系结构被定义为在有刻度的表盘上转动指针,而它的组成却可以是古代的日晷,现代的手表。
计算机上执行的代码实际为二进制的 1 和 0 组成的串,被称作机器码。每种计算机都只能执行一种特定的机器码。人类可读的机器码(ADD X, Y)叫作汇编语言。能够在类型完全不同的计算机上运行,与底层计算机体系结构几乎没有关系的代码叫做高级语言(比如 C 或 Java)。在执行前,高级语言程序必须首先被编译为计算机的本地机器码。
寄存器是用来存放一个单位的数据或字数据的存储单元。寄存器通常用它所保存数据的位数来描述,典型的有 8 位、16 位、32 位、64 位。现在我们常用的计算机寄存器一般都是 32 位、64 位。
寄存器与存储器中的字存储单元没有本质区别。二者实际的差别在于,寄存器位于CPU内部,它的访问速度远远快于访问 CPU 外的存储器。
- 感谢您的赞赏。