计算机体系结构指计算机基本组成及工作原理,当前主要有冯诺依曼结构和哈弗结构两大阵营,冯诺依曼结构主要应用于计算机领域,哈弗体系结构主要应用于移动设备和嵌入式设备领域。理解计算机体系结构是掌握计算机工作原理的基础,本文主要对冯诺依曼结构和哈弗结构的特点及其区别作简要分析。
参考MOOC教学视频:https://www.icourse163.org/course/PKU-1205809805
冯·诺依曼结构也称作普林斯顿结构,是一种将程序和数据存放在同一存储器不同地址的设计概念,其核心特点如下:
冯诺依曼结构基本部件如下所示:
冯诺依曼结构中除了运算器、控制器、存储器、输入设备、输出设备五大部件以外,还有一类特殊的部件:外部记录介质R (Outside Recording Medium),这类部件可以静态存储计算机所需要的信息,这些部件共同构成了现代计算机的主体部分。这种设计概念一致沿用至今,现代计算机的组成框架也是遵循冯诺依曼体系结构组建的。
在计算机的发展过程中元件的晶体管数目按摩尔定律递增,集成程度和制作工艺不断提高,计算机主板大体结构也发生了一定变化,下图是早期计算机主板结构,其中CPU对应冯诺依曼结构中的运算器和控制器,内存 (主存) 对应存储器,键盘、显示器、显卡、鼠标等对应I/O设备,而硬盘、BIOS芯片则属于外部记录介质,为I/O设备提供信息以及提供信息记录的介质。
早期计算机主板上离CPU最近放置着北桥芯片,其内部集成了内存控制器、pcie控制器等,连接着内存、显卡、南桥芯片等核心组件,带宽要求高,用于处理高速信号,而远离CPU位置放置着南桥芯片,连接着键盘、鼠标、硬盘、音响等I/O设备,用于处理低速信号。
随着计算机的发展,CPU对访问内存、显卡的速度大幅提升,这样北桥中的PCIe控制器、内存控制器以及集成显卡全部集成在了CPU中,北桥不复存在,南桥芯片更名为PCH (Intel, Platform Controller Hub),如下图所示:
如果进一步的集成,将内存、显卡以及各类I/O模块接口全部集成在一个芯片中,这类设计概念称为SOC (System On a Chip),即在一个芯片中集成了计算机组成的几乎所有部件,SOC广泛应用在移动设备、手机、嵌入式芯片等领域。
CPU一个指令周期执行分为取指、译码、执行、回写等4个步骤,下面以冯诺依曼结构为基础,描述一个指令周期中CPU的工作,如下图所示:
ADD R0,[5]
;注意:上图中的MAR、MDR、IR、X、Y、Z等寄存器对程序员是透明的,程序员不能直接对其进行操作,这也是为什么我们在学习汇编语言时没有涉及到这类寄存器,但它们在CPU内核中实际存在,并担负着重要的作用。
由于数据和指令共用一块存储器,这样便于修改指令,程序升级方便;数据区和指令区的大小可以灵活变化,提高内存运行效率;只使用一套总线也节约了硬件成本,程序控制简单。基于此冯诺依曼结构十分适用于多任务多程序的计算机CPU。
冯诺依曼体系结构的瓶颈在于CPU和内存两者运算速度的差异,也就是说无论CPU速度有多快,也要等内存处理完指令后再执行下一条指令,因为它们共用一套外部系统总线,随着CPU和内存之间的性能差距越来越大,这种瓶颈约束也越为突出。目前主要的解决办法一种是并行执行,另一种是增加多级缓存。另外,由于数据和指令共用一块存储器,指令容易被数据覆盖篡改,这也带来一定安全隐患。
哈弗结构是一种将数据和指令存放在两个不同存储器的设计概念结构,其核心特点如下:
采用两套完全独立的总线设计结构,使得指令可以流水线并发执行,提高了运行效率;程序和数据存储器独立分开,指令没有被非法输入数据覆盖的风险,更加安全。
由于数据和指令存放在两个不同存储器,不易于修改程序,软件不好升级;数据区和指令区大小固定,空间利用率不高;两套总线设计增加了硬件成本,指令控制也更加复杂。
哈弗结构可以很好解决并行执行命令的问题,但是严重浪费总线资源,为平衡性能与成本、复杂度等因素,改进型的哈佛结构(Modified Harvard architecture) 应运而生,改进型哈弗结构在哈弗结构的基础上对总线进行了合并,即把两个存储器的地址总线合并了,数据总线也进行了合并,即原来的哈佛结构需要4条互不关联的总线,改进后只需要两条总线,地址总线和数据总线由程序存储器和数据存储器分时共用,特点如下:
现代CPU依托CACHE的存在,已经很好的将冯诺依曼和哈弗结构的优势统一起来了,虽然外部总线上看是诺依曼结构的,但是由于内部CACHE的存在,因此实际上内部来看已经类似改进型哈佛结构的了。
具体地,CPU在其每个内核中设立了多级缓存,其中控制单元和运算单元直接访问的缓存为一级缓存 (Level 1 Cache),L1缓存又进一步分为L1指令缓存和L1数据缓存两部分,以Intel Core i9-9900K为例:CPU一共有8个核心,每个核心有32KB的一级数据缓存,32KB的一级指令缓存;每个核心有256KB的二级缓存,二级缓存存储器指令和数据空间就是共用的了,不再区分;每个核心还有一层16MB的三级缓存。这样CPU从一级缓存的角度看属于改进型哈弗结构,而一级缓存之上以及在CPU外部仍然是冯诺依曼结构。