前言
本文主要讲述计算机的基本组成(硬件部分)以及内部元件的相关细节
一、计算机体系结构
冯诺依曼体系结构:
以运算器为中心:
这里我们可以将整个部分看做一家工厂:
输入设备 -- > 进货部门
运算器 -- > 加工部门
存储器 -- > 仓库
控制器 -- > 指挥总裁
输出设备 -- > 出售
运算器原本应该是只做运算相关的操作,但是从图中可以看出,基本所有的操作都经过了运算器,就好比工厂进货部门原可以直接将原材料存放到仓库,但是这里必须要先转交给加工部门,再由加工部门存放到仓库,出售过程也是如此。使得运算器在进行运算的负荷下还要进行其他的相关操作。可想而知,在效率性能方面都会有所下降!
而现代计算机借此演变:
以存储器为核心:
现代计算机往往将运算器将控制器集成在一个芯片中,也就是现代CPU :运算器 + 控制器;
二、内部元件细节
1.存储器(这里只谈论主存,不考虑辅存)
主存:
MAR(Memory Address Register) : 存储地址寄存器
MDR(Memory Data Register) : 存储数据寄存器
存储单元:存放一串二进制代码
MAR地址寄存器找到的就是存储体中的地址,而MDR数据寄存器对应的就是存储单元中存储的二进制数
比如一个取数操作:CPU通过MAR地址寄存器中的地址信息去存储体中定位到相应的位置,将地址中存放的数据取出来,存放到MDR中,再交给CPU;
同样,对于一个存数操作:CPU将地址告诉MAR,再将地址告诉MDR,将一个数据存放到存储体中的相应位置。
整个过程与我们平时快递取件相同:
首先我们要告诉店员取件以及取件号,店员通过取件号在快递货架上找到快递,在返回放到柜台上,我们再从柜台取走快递。这个过程中,我们就相当于计算机CPU,店员相当于MAR,快递货架相当于存储体,放置快递的柜台相当于MDR。
2.运算器内部细节
MQ : 乘商寄存器,主要用于乘除操作,操作数的存放
ACC : 累加器,主要用于加减操作,操作数的存放
ALU :主要用于做运算(核心部件,成本也最高)
X : 通用寄存器,存放操作数
3.控制器的内部细节
CU : 控制单元,指令分析,给其它组件发出控制信号
IR : 指令寄存器,存放当前执行的指令
PC :程序计数器,存放下一条指令的地址,有自动加一功能
4.例子:执行一条指令的流程
执行 Y = A * B 操作
- PC = 0,指向第一条指令的存储地址,这里可以对应存储体的类图。
- PC --> MAR ,使得MAR = 0,PC自动加1
- 通过MAR定位到存储体(0)的位置
- MAR --> MDR ,将对应位置的二进制码取出,存放到MDR
- MDR --> IR ,IR 就等于一串二进制码,包含两个部分,一部分二进制数会传递给CU分析这是什么指令,另一部分二进制数是地址,用于通过MAR找到存储体中的数据。对应6、7两步
- IR --> CU ,指令的操作码送到CU,CU分析得知这是一个取数指令
- IR --> MAR ,指令的地址码送到MAR
- MAR --> MDR,由MAR再次定位到存储体,找到要进行操作的数据,取出到MDR
- MDR --> ACC ,将要操作的数据存放到ACC累加器
- 后续取B的值也是一样了,不过在CU分析的时候,会得到这是一个乘法指令,并将操作数存到MQ中
- ACC --> X ,将ACC中的值存放到X通用寄存器中
- (MQ)* (X) --> ACC ,ALU运算器进行乘法操作,再将运算后的值存放到ACC
- 在进行存数指令,同理即可!
总结
本文简单的介绍了计算机的基本组成——由存储器 、到控制器、到运算器的内部工作细节。水平尚浅,不恰当之处还请指正!!!