一、冯·诺依曼计算机
- 特点
- 计算机由五大部件组成
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序
- 以运算器为中心
- 硬件构造
- 以运算器为核心的计算机
- 运算器:完成算术逻辑运算
- 存储器:存放数据和程序
- 控制器:指挥程序的运行
- 输入设备: 把信息转换为机器识别的形式
- 输出设备:把信息转换为人能识别的形式
- 实线表示数据,虚线表示控制
- 逻辑是数据在运算器中进行运算然后再放入到存储器中
- 以运算器为中心会导致受到运算器的限制
- 以存储器为中心的计算机
- 缺点比较乱
- 硬件构造逻辑
运算器 | ALU | CPU | 主机 | 硬件 |
控制器 | CU | |||
存储器 | 主存 | |||
辅存 | ||||
输入设备 | I/O设备 | |||
输出设备 |
- 系统复杂性管理方法
- 层次化
- (Hierachy):将被设计的系统划分为多个模块或子模块
- 模块化
- (Modularity):有明确定义(well-defined)的功能和接口
- 规则性
- (regularity):模块更容易被重用
- 层次化
二、如何使用计算机解决问题
- 上机前的准备
- 建立数学模型
- 确定计算方法
- 编制解题程序
- 程序–运算的全部步骤
- 指令–每一个步骤
- 程序编写过程
- 例如
- 逻辑分析
- 假设a、b、c、x等操作数都已存储在内存中
- 参与的运算 加减乘除
- 假如是进行累加计算的计算机器
- 在计算运行加减乘除的运算中,操作数有两个,其中一个数保存在ACC累加器中,另一个来源于主存储器中
- 假如包含六条指令
- 加法指令、乘法指令、
- 取数指令 从内存中取数的指令
- 计算结果保存在结果中、保存指令
- 输出数据、打印指令
- 停止运行、停机指令
- 运算过程1(运算比较慢执行的次数较多,需要存储空间更大)
- 取x至运算器中(x保存在运算器中的累加器【寄存器】中)
- 乘以x在运算器中(把内存中的数据与累加器中的数据做乘法【乘法操作】,x的平方保存在累加器ACC中)
- 乘以a在运算器中(执行完毕之后为ACC中保存的数据为)
- 存在存储器中
- 取b至运算器中
- 乘以x在运算器中(ACC中的值为bx)
- 加在运算器中
- 加c
- 运算过程2
- 取x至运算器中
- 乘以a在运算器中
- 加b在运算器中
- 乘以x在中
- 加c
- 逻辑分析
- 例如
- 指令格式举例
- 取数a [α]->ACC
- 操作码:000001
- 内存单元的地址:0000001000
- 存数 β [ACC]->β
- 加 γ [ACC]+[γ]->ACC
- 乘 δ [ACC]×[δ]->ACC
- 打印 σ [σ]->打印机
- 停机 十进制的乘法无法保存
- 计算c程序清单
- 特征为:指令和操作码以同等的地位存放在存储器中
- 取数a [α]->ACC
存储器
- 计算机的存储过程
- 基本组成
- 举例 存储空间相当于一栋大楼里面的房间就是单元
- 对存储单元的访问需要通过地址访问
- 对房间的编址地址就在MAR上
- 存储的数据都是010101…
- MAR地址采用的二进制编码
- 对地址进行标识0000~1111 一共保存十六个地址
- 即一共十六个单位
- MDR位数8位
- 每一个存储单元访访问的时候访问出来的数据就是8位
- 每一个存储字的字长为8位
- 存储体用来存放二进制代码、指令或者数据(被分为多个存储单元)每个存储单元包含了若干个01代码、01的个数称为字长,每个存储单元保存的数据被称为存储字
运算器
-
运算器的结构
-
运算器的功能
- 结构和功能直接相关。
- ALU核心运算单元,组合电路,如果输入撤销,输出结果也会相应,因此需要寄存器进行数据保存 执行乘法结果为运算字符长度的两倍
-
运算器的结构
-
除数的运算时通过减法和移位实现的
-
-
运算过程
- 加法运算
- 把内存单元的数据放入到x中
- 执行加法操作后存入ACC中
- 减法运算
- 先把被数从内存中取出
- 执行减法操作之后把结果存入到ACC中
- 乘法操作
- ACC中已经保存被乘数
- 取出M中数放入到MQ中
- 把ACC中的内容送入到X中 []是为了区分送入的内容
- 进行累加之前ACC清零
- 进行乘法操作
- 高位存放在ACC中低位存放在MQ中
- 先后关系,只有先把ACC中的数据放入到X中才能开始乘法,才能对ACC进行清零,但是第一步和第二步是可以改变的
- 除法运算
- 把内存单元中推入到X中
- 进行除法运算并存入MQ中
- 余数放入到ACC
- 加法运算
运算控制
- 控制器
- 解释指令控制运算的过程
- 保证指令的正确执行
- CU用来控制顺序
- IR保存执行指令
- PC保存指令执行的地址
主机完成一条指令的过程
- 取数指令
- 指令地址存放在PC中指令存放在存储体中
- 存储体将指令放入MDR中
- MDR将指令放入IR中
- IR指令操作码放入CU中
- CU译码之后控制相应的操作进行操作,在控制器中控制下,将操作码放入运算器中进行运算
- IR的地址码部分放入MAR中在存入到存储体中
- 存储体再放入到MDR中MDR将运算符放入到ACC中
- PC-MAR-存储体-MDR-IR-CU-MAR-存储体-MDR-ACC
- 存数指令
- PC指令放入到MAR中
- MAR放入存储体在控制单元的k控制下指定的位置放入MDR中
- MDR中的指令放入到IR中
- 在CU中分析指令并发出信号
- 把IR中的地址码部分放入MAR中
- MAR将数据存入存储体
- 存储体将数据放入MDR中,最后MDR再将数据放入ACC中
- PC-MAR-存储体-MDR-IR-CU-存储体-MDR-ACC
- 程序d的运行过程
- 将程序通过设备送至计算机
- 程序首地址PC
- 启动程序
- 取指令PC->MAR->M->MDR->IR
- 分析指令 OP(IR)->CU
- 执行指令 Ad(IR)->MAR->M->MDR->ACC
- …
- …
- 打印结果
- 停机
要求 处理速度快、内存大
- 机器字长
- CPU一次能处理数据的位数,与CPU中的寄存器位数有关
- 机器字长越长,性能越好
- 运算速度(机器操作)
-
主频:计算机主频越高,性能越好
- 但是也不一定,取决于命令的效率
-
核数,每个核支持的线程数
-
吉普森法
-
-
计算运算速度的话是采用每条指令出现的频率进行加权平均
-
-
CPI
- 执行一条指令所需时钟的周期数
-
MIPS
- 每秒执行百万条指令
-
FLOPS
- 每秒浮点运算的次数
-
- 运算速度(实际)
- 直接运行测试
- 存储容量
- 存放二进制信息的总位数
- 主存容量
- 存储单元个数×存储字长
- MAR=10,MDR=8
- 所有的存储单元地址编码都是十位,一共有为1k,每个单元存储8个字长
- 一共有位
- 存储单元个数×存储字长