冯诺依曼体系各硬件工作原理解析

Posted 捕获一只小肚皮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冯诺依曼体系各硬件工作原理解析相关的知识,希望对你有一定的参考价值。

文章目录

计算机结构体系来源

1946年,美国发明了世界上第一台计算机ENIAC,可用于比较快速的数据计算,但是其运算速度却受到了人工数据的输入速度的限制,为此我们现在所广为人熟悉的大佬 冯诺依曼提出了程序存储的概念:

  • 将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。

当采用程序存储概念以后的计算机,其运算速度得到了明显提升,比如第一台采用冯诺依曼体系结构的计算机EDVAC(electronic discrete variable automatic computer),翻译过来就是电子离散变量自动计算机;

冯诺依曼体系结构

冯诺依曼体系结构由五大设备组成,分别是: 输入设备, 运算器, 控制器, 存储器和输出设备,它们之间的关系如下:

  • 输入设备的作用是: 将信息转换为机器能识别的形式,即二进制数据;

  • 运算器设备的作用是: 作为其输入设备和输出设备的中转站; 把数据从存储器来回运输; 进行算术运算和逻辑运算; (这里说的是冯诺依曼结构里的运算器作用);

  • 存储器设备的作用是: 存储计算机数据和程序,注意数据和程序在本质上都是二进制,属于等价关系,所以存储器对它们一视同仁;

  • 控制器设备的作用是: 从存储器设备读取和解析相关指令,比如加减乘除运算指令,然后指挥程序运行;

  • 输出设备的作用是: 将二进制数据转换为人类能识别的形式,比如文本,图像;

冯诺依曼体系结构的特点:

  1. 整个机构由五大部件组成;
  2. 数据和程序指令在存储器中同等地位,且都是二进制形式,可以按照地址寻访
  3. 指令由操作码和地址码组成;操作码代表加减乘除等运算行为,地址码代表所存储的数据在哪个位置
  4. 可以存储程序;
  5. 整个结构以运算器为中心(输入输出设备的数据都需要运算器进行传送完成,这将会导致运算器执行本来不该他执行的工作,导致效率比较低(相对来说)),这就是冯诺依曼体系的缺点

因此,现代计算机避免了此缺点,将计算机设计成了让输入输出设备和存储器进行直接相连,即以存储器为中心

而我们所熟悉的CPU,其实就是控制器和运算器的集合体,所以现代计算机模型大致如下:

因此本文的所有硬件结构大致可以如下展示:

这里需要提醒一下:
主存这里指的主存储器,即我们常说的内存条,或者手机说的运行内存,属于通电闪存;
而辅存指的是硬盘等大容量容器,比如电脑的SSD,或者手机上的256G等大容量

主存储器的基本组成

主存储器结构主要又三个部分组成:

  • 存储体: 存储数据和代码指令
  • MAR(memory address register): 存储地址寄存器,用于查找地址
  • MDR(memory data register): 存储数据寄存起,用于向存储体存数据或者取数据

为了方便理解,主存储器的结构可以用快递驿站进行类比:其存储体相当于驿站的存物架(具有表示哪个架子,几层,几号的标记),MAR相当于柜员,MDR相当于柜台,而我们相当于CPU;

当我们想取地址为10-8-3上面的包裹时,我们可以将该地址告诉柜员(MAR),然后MAR根据地址去取第10个柜台,第8层,上面排列着的第3个包裹放到柜台上(MDR),然后我们(CPU)从MDR上取走快递(数据)

当然这仅仅只是为了方便理解进行的类比,并不一定准确

而存储体的结构如下:

存储体被划分为了一个个单元,称为存储单元,每个存储单元里面存放着一串二进制代码

而每个存储单元中存储的所有二进制内容的组合称为一个word,即,有时也称为存储字

而word的长度,我们称为存储字长,即二进制的位数;

运算器的基本组成

运算器的基本作用是实现算术运算(如加减乘除)和逻辑运算(如与或非),它的内部主要由ACC,MQ,ALU和X寄存器构成;

  • ACC(accumulator),累加器,用于存放操作数或累加结果
  • MQ(Multipul-quotient),乘商寄存器,用于存放操作数或乘商结果
  • X, 通用操作数寄存器,用于存放操作数
  • ALU(arithmetic and logic unit),算术逻辑单元,通过内部复杂电路实现内部算术或者逻辑运算,被称为CPU的核心元件

也就是说前三者都是用来存放数据,后者用来进行计算

其中ACC,MQ,和X存放的数据如下表

除法
ACC被加数,和被减数,差乘积高位乘积低位
MQ**********乘数,乘积低位
X加数减数被乘数除数

控制器的基本组成

控制器的作用是统筹全局,用以发布各种控制信号,其内部主要由三个部件组成:

  • CU(control unit): 控制单元,分析指令,给出信号
  • IR(instruction register): 指令寄存器,存放当前指令
  • PC(program counter): 程序计数器,存放下一条即将执行的指令的地址,具有自动加一功能

计算机的工作过程

了解冯诺依曼体系结构的三大核心模块以后,我们就可以开始进行尝试进行程序执行模拟

假设这里有一段C代码:

int main()
	int a = 2,b = 3,c = 1,y = 0;
    y = a * b + c;
    return 0;

计算机为了执行出y最终的值,编译软件会首先将该程序进行编译为机器语言存储到了主存储器,最后形成了如下数据(实际存储器只会存储有中间只能栏的数据,其他地方只是为了方便理解添加的),这里温馨提醒后面的操作要多看这张表格

根据该表,计算机CPU中的PC(程序计数器program counter)初始位置存放的是地址0

  1. (PC)—>MAR,PC寄存器将自己的地址告诉给MAR,此时(MAR) = 0,然后PC自增1

  2. M(MAR)—>MDR,控制器给MAR发送信号,主存储器中的MAR去存储体中的0地址位置读取数据,然后放到MDR中,
    此时的(MDR) = 0000010000000101

  3. M(MDR)—>IR,MDR将自己的数据交给控制器中的IR存放,此时的(IR) = 0000010000000101

  4. (IR)—>CU, IR将指令的**控制码(000001)**发给CU,CU进行分析,发现是“取数操作”指令

  5. (IR)—>MAR, IR将指令的**地址码(0000000101,十进制为5)**发给主存储器的MAR,此时的(MAR) = 5

  6. (MAR)—>MDR, 主存器中的MAR去存储体中的5地址读取数据,然后放到MDR中,此时的(MDR) = 0000000000000010,即十进制数字2

  7. (MDR)—>X, MDR将值传给X进行存储

(1-3)步骤可以看做在取指令,(4)步骤可以看做在分析指令,(5-7)可以看做在执行指令(即读数据)

(上面的操作过程路径)

到这里算完成了把a的数据放进CPU中的运算器;

然后此时的PC值为1(前面步骤已经自增过):

  1. (PC)—>MAR,PC寄存器将自己的地址告诉给MAR,此时(MAR) = 1,然后PC自增1
  2. M(MAR)—>MDR,控制器给MAR发送信号,主存储器中的MAR去存储体中的1地址位置读取数据,然后放到MDR中,
    此时的(MDR) = 0001000000000110
  3. M(MDR)—>IR,MDR将自己的数据交给控制器中的IR存放,此时的(IR) = 0001000000000110
  4. (IR)—>CU, IR将指令的**控制码(000100)**发给CU,CU进行分析,发现是“乘法操作”指令
  5. (IR)—>MAR, IR将指令的**地址码(0000000110,十进制为6)**发给主存储器的MAR,此时的(MAR) = 6
  6. (MAR)—>MDR, 主存器中的MAR去存储体中的6地址处读取数据,然后放到MDR中,此时的(MDR) = 0000000000000011,即十进制数字的3
  7. (MDR)—>MQ, MDR将值传给MQ进行存储
  8. 然后控制单元给ALU发乘法运算信号,ALU便开始执行乘法运算ab = 23=6,最后将结果放在ACC

(1-3)步骤可以看做在取指令,(4)步骤可以看做在分析指令,(5-7)可以看做在执行指令(即读数据),(8)是CPU在进行计算

(上面过程的操作路径)

现在PC的值为2:

  1. (PC)—>MAR,PC寄存器将自己的地址告诉给MAR,此时(MAR) = 1,然后PC自增1
  2. M(MAR)—>MDR,控制器给MAR发送信号,主存储器中的MAR去存储体中的1地址位置读取数据,然后放到MDR中,
    此时的(MDR) = 0000110000000111
  3. M(MDR)—>IR,MDR将自己的数据交给控制器中的IR存放,此时的(IR) = 0000110000000111
  4. (IR)—>CU, IR将指令的**控制码(000011)**发给CU,CU进行分析,发现是“加法操作”指令
  5. (IR)—>MAR, IR将指令的**地址码(0000000111,十进制为7)**发给主存储器的MAR,此时的(MAR) = 7
  6. (MAR)—>MDR, 主存器中的MAR去存储体中的6地址处读取数据,然后放到MDR中,此时的(MDR) = 0000000000000001,即十进制数字的1
  7. (MDR)—>X, MDR将值传给X进行存储,导致(X) = 1;
  8. (ACC)+(X)—>ACC,控制器给ALU发送加法信号,ALU进行a*b(前两部算过) + c(这个步骤做的事情),然后存储到ACC中,此时ACC=7(2*****3+1)

(上面操作过程路径)

此时的PC=3:

  1. (PC)—>MAR,PC寄存器将自己的地址告诉给MAR,此时(MAR) = 3,然后PC自增1

  2. M(MAR)—>MDR,控制器给MAR发送信号,主存储器中的MAR去存储体中的3地址位置读取数据,然后放到MDR中,
    此时的(MDR) = 0000100000001000

  3. M(MDR)—>IR,MDR将自己的数据交给控制器中的IR存放,此时的(IR) = 0000100000001000

  4. (IR)—>CU, IR将指令的**控制码(000010)**发给CU,CU进行分析,发现是“存储操作”指令

  5. (IR)—>MAR, IR将指令的**地址码(0000001000,十进制为8)**发给主存储器的MAR,此时的(MAR) = 8

  6. (ACC)—>MDR,控制器发送给运算器信号,ACC将数据发送给MDR;

  7. 然后MDR根据控制器发送的存储信号,去地址MAR=8处存数据(ACC) = 7;

最后同理,此时PC=4

继续按照上面的逻辑进行读数据,最后当IR给CU控制码时候,CU发现是停机指令,所以控制器就会发送中断信号,终止程序继续运行;

总结

以上是关于冯诺依曼体系各硬件工作原理解析的主要内容,如果未能解决你的问题,请参考以下文章

冯诺依曼体系结构

计算机的工作原理(冯诺依曼体系)

计算机原理学习-- 冯诺依曼体系和CPU工作原理

(转)计算机原理学习-- 冯诺依曼体系和CPU工作原理

冯诺依曼简介

冯诺依曼体系结构与操作系统的概念及理解