现在的计算机都是以二进制存储的程序,这样的计算机都叫冯诺依曼计算机。
冯诺依曼计算机特点
1冯诺依曼计算机有5大组成部分,运算器,控制器,存储器,输入设备,输出设备
2指令和数据以同等地位存于存储器,可以按地址寻访
3指令和数据以二进制表示
4指令由操作码和地址码组成
5能存储程序
6以运算器为中心
现阶段指令和数据是可以放在不同的cash中,如运算器和控制器整合到CPU中
如上,我们的计算机硬件框图可以如上,实线表示数据,虚线表示控制指令。
运算器,进行算术运算和逻辑运算
控制器,提供控制指令控制程序运行
输入设备,将信息转换成机器识别形式
输出设备,将机器信息转换成人熟悉的形式
存储器,存放数据和程序
冯诺依曼计算机的瓶颈
1以运算器为中心,导致运算器成为瓶颈
2不具有层次划分
我们创建了以存储器为中心的计算机框图如上,但是这样的系统仍然存在层次不够分明的情况
如上,我们进行层次划分,运算器ALU,控制器CU,一起构成CPU,存储器分为主存和辅存,又和CPU一起构成主机,输入输出设备作为IO设备,和主机一起构成了硬件
系统复杂性管理的方法3Y
层次化Hierachy,将被设计的系统划分为多个模块或子模块
模块化Modularity,有明确定义的功能和接口
规则性regularity,模块更容易被重用
用程序来理解计算机系统模型
比如说我想一个问题来让计算机解决,我们需要先考虑计算机能否实现,即可计算性的问题,是否存在y=f(x)这样的映射,如果问题就是计算机能解决的,我们就可以加工计算机程序
1上机前准备:
建立数学模型,比如我们确定了要计算y=sinx
确定计算方法,计算机指令集并不包括sin求法,我们可以转为泰勒公式展开计算
编制解题程序,程序,运算的全部步骤,指令,每个步骤
举个例子计算y=ax2+bx+c,我们假设a,b,c已经保存到存储器,将x取到运算器,乘x放置运算器中,乘a放到运算器,把ax2放到存储器,b放到运算器中,乘x放到运算器,最后加ax2+c计算结果,输出到输入设备。
当然我们可以使用因数提取方法,x提取至运算器,乘以a放在运算器+b放在运算器,乘以x放到运算器,最后加c放到运算器,可以看到执行的步骤会减少
指令格式举例
操作码 地址码 实现操作
000001 0000001000 a-[ACC]
假设a的地址8,取数操作是000001,则指令实现将a放到累加器中
当然还有很多指令
如上,我们对计算多项式结果的指令程序清单放到上面,上面就是冯诺依曼计算机的指定演示。
存储器的基本组成
存储体由若干存储单元组成,存储单元又有多个存储元件组成,存储单元存放一串二进制代码,存储单元存放二进制代码的组合称为存储字,存储字长-存储单元二进制码
我们可以看到存储体包含MAR,MDR,其中MAR是存储器地址寄存器,反映存储单元的个数,MDR存储器的数据寄存器,反映存储字长
我们假设MAR是4位,MDR8位,则存储字长8,设存储单元16,则可按下图的长方体理解
上面我们就知道了存储器的基本结构和工作过程
运算器的基本功能
运算器的功能:完成算数逻辑运算,ALU
我们需要累加器ACC,还有数据存储器存储数据,如果我们做乘法或还需要考虑MQ来实现处理多出来的位数
如上x就是放在数据寄存器
如上,我们计算加法,那X就是放在数据寄存器,被加数是放在ACC中,计算结果也是在ACC中,如果是减法,类似。乘法呢,由于可能会出现越界,把结果放到ACC和MQ分高低位存储,使用累加和移位实现乘法计算。除法则商放到MQ,余数放到ACC
加法操作过程
如上加法过程:我们首先有指令 加M(M为X的地址),然后ACC就存储被加数,数据存储器(内存单元)就存放X,我们把X提取,和ACC中的数值相加存储到ACC中(注意,我们所有的操作都默认是被操作数已经被读取到相应的单元)
减法操作过程
如上,和加法类似,也是指令为减M,然后ACC存储被减数,M为存放X的地址,取值后放到ACC中减法操作
乘法操作过程
乘法过程如上,稍微复杂点。获得指令后,把乘数放到MQ中,把ACC的内容即被乘数放到x中,这是ACC要进行清零,然后将X,MQ的乘积结果高、低位分别放到ACC和MQ中,我们的4条过程是有一定顺序的,但是前两条先后顺序不限,是可以同时进行的,这部分的顺序控制就是控制器CU进行
除法操作过程
上面也没什么说的,就是ACC读取被除数,M地址获得X除数,将余数放到ACC中,将商放到MQ中,所以我们看到MQ乘除法都有放结果,也叫乘商寄存器