1.早期冯诺依曼计算机结构
世界上第一台计算机是ENIAC,需要手动接线来控制计算,所以它的计算速度受限,所以冯诺依曼提出了“存储程序”的概念,即将需要用到的指令以二进制的形式事先输入到计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直到程序执行结束。
早期冯诺依曼机的硬件结构图如图所示。
- 输入设备:将信息转换成机器能够识别的形式,经过运算器存储在存储器里面。
- 存储器:存放数据和程序。
- 运算器:实现算术/逻辑运算。
- 输出设备:将结果转换成人们所熟悉的形式。
- 控制器:指挥程序运行
在计算机系统中,软件和硬件在逻辑上是等效的,即对于同一个功能,我们既可以用软件来实现,也可以用硬件来实现。比如:对于乘法运算,可以设计一个专门的硬件电路实现乘法运算,也可以用软件的方式,执行多次加法运算来实现。
冯·诺依曼计算机的特点:
- 计算机由五大部件组成
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序
- 以运算器为中心
缺点:输入/输出设备与存储器的数据传送通过运算器完成,导致数据计算的效率降低
2.现代计算机结构
以存储器为中心,运算器和控制器统称为cpu,cpu+主存称为主机。
3.各个硬件的工作原理
(1)主存储器
主存储器里用于存放指令和数据的称为存储体,由一个一个的存储单元构成,除此之外,还有两个寄存器,分别是MAR(Memory Address Register,存储地址寄存器)和MDR(Memory Data Register,存储数据寄存器)。
CPU把数据存在存储器中某个位置,取数据时,CPU需要给MAR一个地址,根据这个地址可以找到对应的存储单元,取出相应的数据到MDR中。类比于菜鸟驿站里面的货架,对货架进行编号,取快递需要告诉店员你的取件号,根据取件号将快递放在柜台,就可以拿到快递了。
存储体由一个个的存储单元构成的,存储单元中存放了一串二进制代码,每一位二进制代码的存放需要一个存储元件,存储单元中二进制代码的组合又称为存储字,二进制的位数称为存储字长。
(2)运算器
运算器的主要功能是实现算术运算和逻辑运算。
主要部件:
- ACC(Accumulator ):累加器,用于存放操作数,或运算结果。
- MQ(Multiple-Quotient Register):乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。
- X:通用的操作数寄存器,用于存放操作数。
- ALU(Arithmetic and Logic Unit): 算术逻辑单元,通过内部复杂的电路实现算术运算、逻辑运算。
(3)控制器
控制器基本功能:产生指令执行过程所需要的所有控制信 号,控制相关功能部件执行相应操作。
基本组成:
- CU(Control Unit ):控制单元,分析指令,给出控制信号。
- PC(Program Counter):存放当前欲执行指令的地址,与MAR之间有一条直接通道,具有计数功能(PC)+ 1→PC。
- IR(Instruction Register ) 存放当前执行的指令内容,来自主存的MDR。
每完成一条指令需要分成3个阶段,第一个阶段为取指令,根据PC中的地址从内存中取出那条指令,取出的指令放在IR中,CU这个部件分析这条指令是要做什么的,分析完后控制其他部件完成这条指令
(4)输入输出系统
输入设备:输入设备的任务是把编好的程序和原始数据送到计算机中去,并把它们转换成计算机能识别、能接受的信息形式。(键盘、鼠标、网卡、扫描仪等)
输出设备:输出设备的任务是把计算机的处理结果以人或者其它设备能接受的形式送出计算机。(显示器、声卡、网卡、打印机等)
4.计算机的工作过程
用C语言写了这样一段程序,定义了a,b,c,y 4个变量,执行了一个功能y=a*b+c,经过编译后变成机器语言装入到主存中。a,b,c,y 4个变量分别存放在5、6、7、8四个地址中,前5个地址存放机器指令。
步骤:
取数操作:
(1)首先数据和指令存放在存储体中,在程序运行之前pc=0,指向第一条指令的存储地址,pc的值需要传给MAR,使得MAR的值为0;
(2)控制器向主存指明了接下来CPU要访问的是0号地址所对应的内容且是读操作,再根据MAR的内容找出0号地址所对应的二进制数据,并把这个数据给MDR。
(3)此时MAR的内容为00001 000000101
(4)将MDR的内容通过数据总线传给控制器的IR寄存器,(IR)=000001 0000000101
(5)将指令的操作码部分送到CU里进行分析,分析得知,这是“取数”指令
(6)将指令的地址码部分给MAR,导致(MAR)=5
(7)根据MAR的值找到对应的存储单元,取出a的值
(8)M(MAR)→MDR,导致(MDR)=0000000000000010=2
(9)(MDR)→ACC,导致(ACC)=0000000000000010=2
以此类推
从前面的步骤可知,任何一条指令的执行都需要经过取指令、分析指令和执行指令三个阶段。取指令和分析指令是必经步骤,执行指令不同的指令具体步骤不同。取指令阶段,MDR的数据肯定是要放到IR中,而在执行指令阶段,CU会根据这条指令来决定MDR数据放在ACC还是MQ中,所以根据指令周期的不同,CPU来区分取出来的是指令还是数据。
总结:
申明:本内容属于学习记录,如有侵权或者不对的地方,请联系作者进行更改。