104-计算机结构的简化模型
# 104-计算机结构的简化模型
为了掌握计算机的内部结构, 我们要先来构建一个计算机的简化模型。 这个模型能够体现计算机内部的关键之处,又足够的简单,便于理解。
这个冯诺依曼结构的餐馆,我们已经非常熟悉了。 我们可以根据这个餐馆的结构,几乎一一对应的来构造出我们的计算机结构的模型。这个计算机结构的简化模型我们又称之为模型机。 目前包含了 CPU 和存储器两大部件,中间通过系统总线相连。 系统总线又被细化为控制总线、地址总线和数据总线三个部分。 CPU 和存储器内部各有相应的结构。 我们现在就来逐个部件的说明这个模型机是如何构建的。
首先来看存储器。 在设计计算机时要确定存储器的编制方式。 如果存储器按字节编制,那 每一个存储单元就能存放八位的二进制数。 而且每个存储单元的地址是唯一的。 CPU 要想访问某个存储单元,必须要通过地址总线给出相应的地址, 因此如果地址总线的宽度为 N,则 CPU 能管理的存储单元数最多为 2 的 N 次方个, 假设地址总线的宽度为 32 位, 那么 CPU 能管理的存储单元数就是 2 的 32 次方,就是 4G。
CPU 发来的地址 将会存放在存储器地址寄存器, 简称为 MAR。 那 CPU 要读写的数据则会通过数据总线 传送,数据总线的宽度一般为存储单元位宽的整数倍, 对应的数据则会放在 一个被称为存储器数据寄存器,简称为 MDR 的结构中,最后 控制总线与存储器当中的控制逻辑相连,用于接受来自于 CPU 的读写信号 或者向 CPU 反馈传输已经完成的信号。
我们再来看模型机的 CPU. 首先来看其中的控制器。 控制器是用于控制计算机各个部件完成取指令分析指令执行指令等功能。 在我们的模型机中主要包含如下的部分,我们逐个来进行分析。
首先是指令寄存器, 简称为 IR。用于存放正在执行或者即将执行的指令。 这个指令是从存储器中取来的。 那么暂时存放在这个寄存器里头。
程序计数器 PC ,用于存放下一条指令的存储单元地址, 我们还记得在餐馆那个例子中厨师要去取下一张任务单 的时候就会检查他下一张任务单的位置, 那么其实对应的就是这个计算机的功能。 那么在取完下一条指令之后呢这个程序计数器需要自动递增以指向接下来那一条指令的地址, 那么 CPU 当中也有访存相关的寄存器, 访问存储器的地址,存放在 MAR 寄存器中, 用于写到存储器或者从存储器读回的数据在 MDR 寄存器当中。
指令译码部件,则是用于对 IR 也就是指令寄存器当中的指令进行译码, 以确定其中存放的是哪一条指令。当确定了是哪条指令之后, 控制电路就可以产生对应的控制信号, 这些控制信号在持续脉冲的同步下去控制 CPU 当中各个控制部件的动作。
然后我们来看模型机的运算器。 运算器顾名思义是用来完成运算的。 运算主要可分为算术运算和逻辑运算, 常见最基本的算术运算就是加法和减法。稍微复杂一些还有乘法和除法等等。 那常见的逻辑运算包括非、与、或等等。
运算器主要有如下的部件构成。 其核心部分是 ALU,也就是 算数逻辑单元的简称。它用于完成算数运算和逻辑运算, 我们从图中可以看出这个 ALU 有两个输入,一个输出,比如我们要完成一个 加法,那么加法的两个操作数也就是被加数和加数分别从 A 端口和 B 端口 输入,经过 ALU 计算后,将加法的运算结果送到输出端口
为了便于描述,我们将 ALU 的输入和输出 分别设置了暂时保存数据用的计时器。 分别记为 X, Y 和 Z。 也就说 ALU 将会对 X 和 Y 所保存的数据 进行控制器所指定的运算,并将结果 输送到 Z, 此外,ALU 在运算时 还会产生相应的状态,比如这个运算的结果是否产生进位, 是否会有溢出等等。那这样的运算结果的状态会保存在 F 这个寄存器, F 是标志 Flag 的简称。
那运算器所要运算的数据 实际是从存储器来的。但是不能每一次运算都去存储器取数。 这样的话效率就太低了。 所以有一些常用的数需要提前从存储器中取出来。那我们就需要在运算器中有临时存放这些数的部件。 这就是通用寄存器。在我们的模型机中设置了 N 个通用寄存器, 其编号从 R0 一直到 RN-1, 通用寄存器当中的数据可以来自于存储器, 也可以来自于其他通用寄存器。或者来自于 ALU 的输出,也就说我们可以在两个不同的通用寄存器之间传递数据, 也可以在 ALU 和通用寄存器之间传递数据。
在通用寄存器和 ALU 以及刚才提到的控制器当中的若干寄存器之间要传递数据的话, 就必须要经过 CPU 的内部总线。 内部总线是用于在 CPU 内部跟各个部件之间传递数据的装置。 我们举一个例子。例如我们需要将数据从 R0 传送到 X, 也就是可能为下一次运算进行准备,那么 数据会通过内部总线从 R0 传到了 X,那么所谓这个传送的过程指的是什么呢? 在之后我们具体讲电路实现的时候会为大家详细解释
在这里为了便于理解,我先为大家打一个比方, 如果我们把内部总线看作是输水的水管的话,那我们可以把这些通用寄存器等部件看作是蓄水的水池, 比如在这个例子中我们要从 R0 传送数据到 X, R0 和 X 都可以看做两个蓄水池, 它们分别有自己的进水口和出水口,那么 R0 我们看它有个双向 的箭头,证明它既可以输入又可以输出,所以它既有进水口又有出水口。
而 X 就一个单向的箭头,说明它只有进水口没有出水口, 因为我们知道 X 和 Y 作为 ALU 的数据输入的临时寄存器的, 所以它不需要输出。
从 R0 传送数据到 X, 我们可以理解成在控制电路的控制下, 将 R0 的出水管打开, 再将 X 的入水管打开,与此同时将其他所有部件的出水管和入水管都关闭, 这样 R0 里面保存的数据就像水流一样,经过了内部总线会留到了 X 当中, 那么经过一段时间之后,X 中所保存的数就跟 R0 当中的数一样了。 这个我们就可以用来形象的理解,从 R0 传送输入到 X, 这就是内部总线的作用。
那这样, 我们这个计算机结构的简化模型就构造完成了。现在我们已经构建完成了这个模型机的核心部分, 想要了解这个静态的结构,一个有效的方法是观察其动态的运行过程。 下一节我们就来一起分析模型机是如何运行的。