CPU 执行程序的秘密,藏在了这 15 张图里( 二 )

  • 最后 , 运算单元将结果返回给控制单元 , 控制单元将结果传输给读写头 , 读写头向右移动 , 把结果 3 写入到纸带的格子中;

CPU 执行程序的秘密,藏在了这 15 张图里文章插图
通过上面的图灵机计算 1 + 2 的过程 , 可以发现图灵机主要功能就是读取纸带格子中的内容 , 然后交给控制单元识别字符是数字还是运算符指令 , 如果是数字则存入到图灵机状态中 , 如果是运算符 , 则通知运算符单元读取状态中的数值进行计算 , 计算结果最终返回给读写头 , 读写头把结果写入到纸带的格子中 。
事实上 , 图灵机这个看起来很简单的工作方式 , 和我们今天的计算机是基本一样的 。 接下来 , 我们一同再看看当今计算机的组成以及工作方式 。
CPU 执行程序的秘密,藏在了这 15 张图里文章插图
冯诺依曼模型在 1945 年冯诺依曼和其他计算机科学家们提出了计算机具体实现的报告 , 其遵循了图灵机的设计 , 而且还提出用电子元件构造计算机 , 并约定了用二进制进行计算和存储 , 还定义计算机基本结构为 5 个部分 , 分别是中央处理器(CPU)、内存、输入设备、输出设备、总线 。
CPU 执行程序的秘密,藏在了这 15 张图里文章插图
这 5 个部分也被称为冯诺依曼模型 , 接下来看看这 5 个部分的具体作用 。
内存我们的程序和数据都是存储在内存 , 存储的区域是线性的 。
数据存储的单位是一个二进制位(bit) , 即 0 或 1 。 最小的存储单位是字节(byte) , 1 字节等于 8 位 。
内存的地址是从 0 开始编号的 , 然后自增排列 , 最后一个地址为内存总字节数 - 1 , 这种结构好似我们程序里的数组 , 所以内存的读写任何一个数据的速度都是一样的 。
中央处理器中央处理器也就是我们常说的 CPU , 32 位和 64 位 CPU 最主要区别在于一次能计算多少字节数据:
  • 32 位 CPU 一次可以计算 4 个字节;
  • 64 位 CPU 一次可以计算 8 个字节;
这里的 32 位和 64 位 , 通常称为 CPU 的位宽 。
之所以 CPU 要这样设计 , 是为了能计算更大的数值 , 如果是 8 位的 CPU , 那么一次只能计算 1 个字节 0~255 范围内的数值 , 这样就无法一次完成计算 10000 * 500, 于是为了能一次计算大数的运算 , CPU 需要支持多个 byte 一起计算 , 所以 CPU 位宽越大 , 可以计算的数值就越大 , 比如说 32 位 CPU 能计算的最大整数是 4294967295 。
CPU 内部还有一些组件 , 常见的有寄存器、控制单元和逻辑运算单元等 。 其中 , 控制单元负责控制 CPU 工作 , 逻辑运算单元负责计算 , 而寄存器可以分为多种类 , 每种寄存器的功能又不尽相同 。
CPU 中的寄存器主要作用是存储计算时的数据 , 你可能好奇为什么有了内存还需要寄存器?原因很简单 , 因为内存离 CPU 太远了 , 而寄存器就在 CPU 里 , 还紧挨着控制单元和逻辑运算单元 , 自然计算时速度会很快 。
常见的寄存器种类:
  • 通用寄存器 , 用来存放需要进行运算的数据 , 比如需要进行加和运算的两个数据 。
  • 程序计数器 , 用来存储 CPU 要执行下一条指令「所在的内存地址」 , 注意不是存储了下一条要执行的指令 , 此时指令还在内存中 , 程序计数器只是存储了下一条指令的地址 。
  • 指令寄存器 , 用来存放程序计数器指向的指令 , 也就是指令本身 , 指令被执行完成之前 , 指令都存储在这里 。
总线总线是用于 CPU 和内存以及其他设备之间的通信 , 总线可分为 3 种: