概述
目前常见的CPU,无论是x86、ARM或MIPS架构,均是建立在冯诺伊曼体系下的。
简单理解,冯诺伊曼体系计算机有以下几个部件组成:
- 运算器(ALU)
- 控制器(Controller)
- 存储器(Memory)
- 和输入输出(I/O)
其中运算器负责运算;控制器协调指令和数据;存储器存储指令和数据;输入输出为外设,比如硬盘、键盘、网卡,毕竟CPU是需要为外界服务的。
演进至今,冯诺伊曼计算机已经具有强大的计算能力,许多CPU引入了流水线、分支预测、乱序执行等策略,提高了CPU的部件利用率和计算力。
从一个简单程序开始
如上图,我们定义了一个简单C程序,负责计算1+2
的值,并保存到一个变量a
里。为了简单,这个小程序没有I/O操作。
直接的C指令CPU是无法执行的,因为它不认识C字符。因此需要经过编译器编译为汇编指令,汇编再经过汇编器转为机器指令,如果引用了外部库,可能还需要链接这一步骤,但是此处不需要。
有了机器指令,就可以让CPU执行了。但是我们的机器指令存储在外设硬盘上,还需要经过DMA设备将指令载入内存,内存里的东西CPU就能通过寻址拿到了。
内存里存有数据和指令,这些东西都会通过系统总线拿到CPU里。
指令到达CPU后,首先会被译码,操作码将被转换为相关计算行为,而操作数将载入寄存器,最终由ALU计算处理。
ALU计算完毕后,一部分中间数据会写回寄存器,访问寄存器比访问存储器快很多,最终结果将写回存储器。在这个🌰里,汇编指令mov %ecx,-0x4(%rbp)
对应的机器码就是告诉CPU将结果写回内存变量a
。
CPU内部有个时钟,用于周期性发射脉冲信号,控制CPU对指令顺序执行。在最简单的情况下,一个脉冲执行一条指令。
更复杂的构造
以上示例只是最简单的情况,当有I/O时,会复杂许多。
目前,许多CPU加入了流水线、分支预测、乱序执行等功能,大大提升了CPU性能。比如,在本文的示例CPU中,同一时刻只有一个部件在工作,加入流水线可让很好地避免这一问题。
同时,提高指令缓存和数据缓存,增加多级缓存,改进缓存读写策略,都能提高CPU计算效率,这里将不深入展开。
总结
真实的CPU比这个复杂很多,但在量子计算机真正产生前,现存CPU都是基于冯诺依曼体系的,其基本原理一样。
高级的程序语言必须通过编译汇编,转化为CPU指令。通过CPU译码,控制器处理,运算器计算,最后回写。如此,经过若干个时钟周期后,一个程序才算执行完毕了。
评论
发表评论