声明:部分图片来源于网络,侵删。如果转发引用本文章,请注明出处
计算机组成原理
计算机系统概论
冯.诺伊曼计算机特点
-
五大部件
- 存储器,运算器,控制器,输入输出设备
-
指令,数据以同等地位以二进制存储在存储器中,可按照地址访问
-
指令=地址码+操作码
-
以运算器为中心(会降低效率)
PS:现代计算机以存储器为中心
计算机系统层次结构
-
五个层次
- 微程序设计级,一般机器级,操作系统级,汇编语言级,高级语言级
-
层次图
概念辨析
-
I/O设备可以直接连CPU吗?
- 不可以,因为二者速度不匹配,需要通过接口连接
-
软件与硬件的逻辑等价性
- 任何操作都可以由软件实现,也可以有硬件来实现
-
用什么来区分存储器中的是指令还是数据
- 通过控制器区分,凡是在取指令阶段从存储器中取出的为指令,凡是在执行阶段从存储器中取出的为数据
-
控制器功能
-
交换,检测,提供信号
- 控制机器,控制各个部件协调一致地工作。
- 控制器具备数据交换功能,这是指实现CPU与控制器之间、控制器与设备之间的数据交换。
- 将电话比喻中人体,那么控制器就好比是人的大脑,输出各种指令,是零件灵活运行。
- 运算器只能完成运算,而控制器用于控制着整个CPU的工作
- 通过数据总线,由CPU并行地把数据写入控制器,或从控制器中并行地读出数据
-
计算机系统组成
硬件
主机
-
CPU
- 运算器
- 控制器
-
主存(内存)
I/O设备
- 辅存
- 输入/输出设备
总线
-
早期总线结构缺点
- CPU为总线上唯一主控,即便后来增加具有仲裁逻辑的DMA控制器以支持DMA传送,仍不能满足多CPU环境要求
- 总线信号是CPU引脚信号的延伸,通用性较差
-
当代总线的内部结构
-
数据传送总线
-
组成
-
数据线
- 传送数据信息
-
地址线
- 传送地址信息
-
控制线
- 传送各种控制信号
-
-
为减少布线,64位数据线的低32位数据线常与地址线采用多路复用技术
-
-
仲裁总线
-
组成
- 总线请求线
- 总线授权线
-
-
中断与同步总线
-
用于处理带优先级的中断操作
-
组成
- 中断请求线
- 中断认可线
-
-
公用线
-
组成
- 时钟信号线
- 电源线等
-
-
-
特点·
- 某一时刻只能由一路信息再总线上传输
-
概念解释
-
总线宽度
- 数据总线的位(根)数,单位bit
-
总线带宽
- 总线单位时间内可以传输的数据量,单位bit/s
-
总线复用
- 不同性质且不能同时出现的信号分时使用同一根总线
-
传输周期
- 总线完成一次完整且可靠的传输所用时间
-
软件
-
系统软件
- 操作系统,数据库管理系统
-
应用软件
- QQ等
计算机系统的硬件结构
存储器
按照数据保存分类
随机存储器(RAM)
-
特点:易失性
- 与CPU直接相连
- 用做主存,存放指令,数据
-
分类
-
静态随机存储器(SRAM)
-
动态随机存储器(DRAM)
-
动态随机存储器详细介绍
-
刷新
-
概念
- 对DRAM定期进行全部重新写入的过程
-
原因
- 因电容泄露引起DRAM存储的信息衰减,需要及时补充
-
常见刷新方法
-
集中式
- 再最大刷新间隔时间(2ms)内,集中安排一段时间刷新
-
分散式
- 每个读/写周期后插入一个刷新周期,无CPU访存死时间
-
异步式
-
是集中式和分散式的结合,在2ms内,完成对所有行的刷新,每行的刷新间隔为2ms
- 性能最好
-
-
刷新时间间隔计算
-
-
作用对象
- 行
-
-
再生
-
原因
- DRAM破坏性读出后,重新写入信息
-
作用时间
- 在读操作之后
-
作用对象
- 存储单元
-
SRAM和DRAM区别
只读存储器(ROM)
特点:
- 非易失
- 闪速存储器(Flash Memory)
高速缓冲存储器
- 位于CPU与RAM之间,解决CPU与主存RAM速度不匹配问题
- 存取速度:CPU>Cache>RAM>ROM
PS:系统程序用ROM,用户程序用RAM
主存
构成
-
MAR
- 与地址总线相连,存放存储单元地址
- MAR可表示的范围=存储单元的数目
-
MDR
- 与数据总线相连,存放想要写入存储器的信息或者从存储器中读出的信息
- MDR位数=存储字长
-
存储体
-
结构图
性能指标
存储容量
- 存储容量(存储位数)=存储字长*存储单元数目
- 存储容量(存储字节数)=存储位数/8
存储容量扩展
-
半导体存储芯片的译码驱动方式
-
线选法
地址译码信号选中同一个字的所有位
-
重合法
地址分行列译码,行列交汇点位所选单元
-
位扩展(增加存储字长)
-
-
字扩展(增加存储单元数目)
-
自由主题
-
译码器的连接
-
位,字同时扩展
-
例子1
-
例子2
存取周期
- 存取周期=存取时间+恢复时间
数据校验
奇偶校验
-
在原始数据的最高位增加一个奇偶校验位
-
奇校验
- 1的个数是奇数-》校验位置1
-
偶校验
- 1的个数是偶数->校验位置1
-
-
缺点
- 当有偶数个位出错,无法发现
循环冗余校验CRC
- 参考计算机网络内
海明校验
- 参考计算机网络
存储器层次结构
主存–辅存
-
作用
- 扩容
Cache-主存映射
作用
- 解决主存,CPU速度不匹配问题
引用Cache原理
-
时间局部性
- 刚被访问过的存储单元未来可能被访问
-
空间局部性
- 刚被访问的存储单元的临近单元未来可能被访问
Cache组成
- 小容量SRAM
- 高速缓存控制器
ps:Cache与主存间以块为单位交换数据,与CPU间以字为单位交换数据
性能分析
- 命中率h
- h =访问Cache的次数(即命中次数)/访问Cache和主存的次数之和
- Cache相对主存的存取速度倍数r
- r=主存存取周期/Cache存取周期
- r越大,Cache效率越低
r = t m / t c r=t_m/t_c r=tm/tc
- 平均访问时间t_a
- 即命中Cache的概率访问Cahe的时间 +没有命中的概率(访问Cache+主存 的访问总共时间(因为去主存中找时,要先经过Cache))
t a = h ∗ t c + ( 1 − h ) ∗ t m t_a=h*t_c+(1-h)*t_m ta=h∗tc+(1−h)∗tm
- 访问效率e
- 访问一次Cache的时间/命中Cache的时间+未命中所用时间分别乘以对应概率
e = t c / [ h ∗ t c + ( 1 − h ) ∗ t m ] e=t_c/[h*t_c+(1-h)*t_m] e=tc/[h∗tc+(1−h)∗tm]
Cache地址映射与变换
-
方法
-
对Cache与主存分块(原理:根据局部性)
-
每个块内包含多个地址
-
需要先找到块,再通过块内地址找到对应地址
全相连映射
-
-
分块
-
-
存储容量216B,分为28个块->每块216/28=2**8B(每个块的存储容量)
-
Cache容量212B,分为8行->每行的容量为28B
-
直接映射
-
分组
-
-
在主存分块以后,再分区
-
-
查找时,先通过区内块号 找到对应的行
-
再比较区号,看区是否在,如果在,直接根据块内地址,到对应的行中找到对应的地址
-
如果没有,去主存中找
-
地址转换
-
组相连映射
-
分块
-
-
在分区的基础上,继续分组
-
主存中每区的第i块可以映射到Cache中的第i组的任意一块
-
-
首先,通过区内块号,确定分组,在比较区号,看是否在Cache中,如果在,通过块内地址,在对应的块中寻找
-
地址转换
-
Cache相关问题
将Cache做在CPU芯片内的好处?
- 提高外部总线利用率
- 因为Cache在CPU芯片内,CPU访问Cache时不必占用外部总线,从而可以支持更多I/O设备与主存的信息传输
- 提高存取速度
- Cache与CPU之间的数据通路大大缩短,存取速度提高
将Cache分为指令Cache和数据Cache好处
- 可以支持超前控制和流水控制
- 指令Cache可由ROM实现,提高指令存取可靠性
- 数据Cache对不同数据类型的支持更为灵活,可支持整数与浮点数
将Cache结构改进的第三个措施
- 分级实现
数据的存储与排列
小端模式
-
地址:低位-》高位
-
更适合计算机
大端模式
- 地址:高位->低位
边界对齐
- 方便寻址,防止取一个数据时,多次访问主存
编址
-
现代计算机通常按字节编址,即每个字节=1个地址
-
寻址时,支持 按照 字,半字,字节寻址
-
例题
-
中央处理器(CPU)
运算方法
无符号数与有符号数
-
无符号数
- 所有二进制均表数值,相当于数的绝对值
-
有符号数
-
有符号位,0+,1-
- 例如0,1010
-
原码
-
0+,1-,如果机器字长n位,则可表示的定点整数范围围为
-
-
补充位数,用0,无论正负
-
-
反码
- 负数
- 反码求法:除符号位外,0/1互换
-
补码
- 负数
- 负数补码求法:从右侧第一个1开始,除符号位不变,1及1右侧不变,左侧0/1互换,
- 将减法换为加法
- 正数补充:0,负数1
-
移码
- 正/负数
- 在补码基础上,符号位取反
- 方便比较大小
- 正/负数
-
正数的 补码。反码均与源码同
数的定点表示和浮点表示
定点表示
-
定点整数
-
符号位+数值位
- 0,1010
-
-
定点小数
-
符号位.数值位
- 0.0101
-
浮点表示
-
阶符(S 0正1负)。阶码(E 反应数值大小),数符(MS 0+ 1-),位数(ME,表精度)
- 格式:SEM
-
真值为
- 阶码E常用补码或移码表示,位数M常用原码或补码表示
2 E ∗ M 2^E*M 2E∗M
尾数格式化
-
左规
-
尾数最高位为有效位
-
原码:非0
-
补码:非1
-
-
右规
- 浮点数的尾数运算结果出现溢出,(双符号位为01,10)将尾数算数右移一位(原码补0,补码补1)
IEEE 745标准
-
阶码用移码表示,尾数用原码表示
-
规格化的浮点数表示
- 32位的短浮点数
- E是阶码,8位
( − 1 ) S ∗ 1. M ∗ 2 E − 127 (-1)^S*1.M*2^{E-127} (−1)S∗1.M∗2E−127
- 64位长浮点数
- E10位
( − 1 ) S ∗ 1. M ∗ 2 E − 1023 (-1)^S*1.M*2^{E-1023} (−1)S∗1.M∗2E−1023
定点运算
定点数的移位运算
-
算数移位
-
原码
-
符号位不变,仅对数值位移位
-
左移
- 高位舍弃,低位补0
-
右移
- 高位补0,低位舍弃
-
-
-
反码
-
正数(补0)
- 仅仅对数值位移位,补0
-
负数(补1)
-
左移
- 高位舍弃,低位补1
-
右移
- 高位补1,低位舍弃
-
-
-
补码
-
正数(补0)
- 仅仅对数值位移位,补0
-
负数(左移补0,右移补1)
-
左移
- 高位舍弃,低位补0
-
右移
- 高位补1,低位舍弃
-
-
作用
- 把负数化为正数
- 也可以求出一个数的补数(正数的补数是自己,负数的补数是可表示的最大值+负数),然后对其编码作为数值位(符号位不变)
-
例题
-
-
-
逻辑移位(同原码,无论正负)
-
左移
- 低位补0,高位舍弃
-
右移
- 低位舍弃,高位补0
-
加法与减法运算
-
原码
-
加法
- 正加正,负加负(可能溢出)
-
减法
- 子主题 1
-
-
补码
-
两数补码相加减,结果仍为补码
-
[A+B]补=[A}补+[B]补
-
正+正=负(上溢出),负+负=正(下溢出)
- 溢出判断
- 采用双符号位
- 00-》正数(正确)
- 01-》上溢出
- 10-?下溢出
- 11——》正确(负数)
-
符号位参与运算(如果符号位有向前进位,进位舍弃)
-
补码减法例子
-
-
乘法运算
-
原码
- 符号位单独算,数值位相乘
-
补码
-
booth算法
-
-
原理
-
目的
- 由于乘法中乘数中1的个数决定了加法的次数,所以应尽可能地将1地个数减少
-
解决
-
-
-
-
浮点四则运算
-
浮点数的加减运算
指令系统
指令格式
-
定长操作码
-
扩展操作码
-
动态地把地址码作为操作码,而为了让机器识别这种状态,需要用上一层的操作码字段留出一个状态,表示下一层的操作码状态
-
例题
-
寻址方式
指令寻址
-
顺序寻址
- PC自动加1
- PC存放现行指令地址
-
跳跃寻址
-
需要转移类指令
- JMP等
-
数据寻址
-
在指令中必须指明是哪种寻址方式
-
形式地址A=指令中写的地址。真实地址EA=内存中的地址
-
分类
-
立即寻址
- 操作数(需要计算的数本身)=A
-
直接寻址
- EA=A
-
隐含寻址
- EA=A所指的寄存器中
-
间接寻址
- EA=(A)
-
寄存器寻址
- EA=R,A指向寄存器的编号
-
寄存器间接寻址
- EA=®,A指向寄存器的编号
-
基址寻址
- EA=A+(BR),BR为基址寄存器
-
变址寻址
- EA=A+(IX),IX为变址寄存器
-
相对寻址
-
EA=A+(PC)
-
A又称为偏移量
-
-
堆栈寻址
寻址方式练习
CPU的结构和功能
CPU的组成
-
累加器(ACC)
- 存放数据,运算结果
-
乘商寄存器(MQ)
- 在* / 时,存放操作数或运算结果(乘法存低位,ACC存高位)
-
通用寄存器(X)
- 存放操作数
-
算数逻辑单元(ALU)
- 实现算数,逻辑运算
-
控制单元(CU)
- 分析指令,给出控制数据
-
指令寄存器(IR)
- 存放当前正在执行的指令
-
程序计数器(PC)
- 存放下一条指令地址
-
CPU主要功能
控制单元
功能
- 发出各种微操作命令(即控制信号)的功能
指令周期
机器周期
-
概念
- 指令执行的每个阶段,称为一个机器周期
-
确定周期的因素
- 每条指令的执行步骤
- 每个步骤所需时间
-
统一机器周期的确定
- 以完成最复杂,最慢的指令功能的时间为准
- 以访问依次存储器的时间为基准
-
如果 指令字长=存储字长,-》访存周期=机器周期
基本概念
-
基本概念图
-
-
指令周期=取指令时间+指令执行时间
-
中断周期
- PC当前的内容保存起来,以保证执行完中断服务程序后可以准确返回到中断处
具体过程
-
取指周期
-
将现在的指令送到存储器地址寄存器
- PC-》MAR
-
向主存发送读命令,启动主存读操作
- 1-》R
-
将MAR(通过地址总线)将所指的主存中的指令经过数据总线送到MDR
- M(MAR)->MDR
-
将MDR的送到IR
- MDR-》IR(存放现行指令)
-
指令的操作码送到CU译码
- OP(IR)-》CU
-
形成下一条指令地址
- (PC)+1->PC
-
作用
- 访问一次内存,把指令从存储单元取出
-
-
间址周期
-
将指令的形式地址E送到存储地址寄存器
- Ad(IR)->MAR
-
向主存发命令,主存读操作
- I->R
-
MAR通过地址总线将所指的主存内容经过数据总线送到MDR
- M(MAR)-》MDR
-
将有效地址送到IR
- MDR-》IR
-
作用
- 访问一次内存,把操作数的地址从内存中取出
-
-
执行周期
-
作用
- 访问一次内存,把操作数从内存中取出
-
-
中断周期
-
将特定地址0送到MAR
- 0-》MAR
-
向主存发送写命令
- I-》W
-
将PC的内容(程序断点)-》送到MDR
- IR-》MDR
-
将MDR内容通过数据总线送到MAR所指向的主存单元(0地址单元中)
- MDR-》M(MAR)
-
将向量地址送到PC,为下一条取地做准备
-
关闭中断,中断触发器清零
-
作用
- 存取程序断点
-
-
四种周期标识
指令流水
作用
- 提高访存速度
原理
- 让各个部件并行进行
二级流水
-
-
影响指令流水效率加倍因素
-
执行时间>取指时间
-
解决
- 在取指部件与执行部件间加上缓冲区调整时间
-
-
条件转移指令
- 必须等上条指令执行结束才能确定下条指令地址
-
不同指令征用同一功能部件产生冲突
-
解决
- 停顿
- 指令存储器和数据存储器分开
-
-
不同指令因为重叠操作,可能改变操作数的读/写顺序
-
性能
-
吞吐率
- 单位时间内输出的数据或指令条数
-
加速比
- m段的流水线的时间与等功能的非流水线所用时间之比
-
效率
-
-
也就是这个图中:方格所占面积/大矩形的面积
-
指令流水实例
-
-
IF:取指周期 ID:间指周期 EX:执行周期 WB:写回周期
中断系统
解决问题
在中断过程中又出现新中断怎么办
-
多重中断
- 高优先级的中断请求可以中断低优先级的中断请求
-
多重中断断电保护
- 断点进栈
- 断点存入0地址
中断响应
-
外部设备相CPU如何提出请求
- 给每个中断源(输入输出设备等)设置一个中断请求标记INTR(中断请求触发器)
-
多个中断源提出请求怎么办?
-
中断判优逻辑
-
硬件实现
- 排队器,设置中断源时,为其设备优先级
-
软件
- 软件实现排队器
-
-
-
CPU通过什么条件,什么时间
-
CPU内有一个中断允许触发器
- EINT为1 时,允许中断
-
时间
- 指令周期结束时,CPU发查询信号
-
-
如何寻找入口地址
- 方法一硬件向量法
- 方法二软件查询法
保护现场
-
保护寄存器中内容
-
中断服务程序
- PUSH(存入栈中)
- 运行其他程序
- POP恢复现场
- 中断返回IRET
-
-
CPU如何响应中断(保护断点)
-
中断隐指令(并不是指令,由硬件直接实现)
-
如何保护现场
- 缎带你存在于特定地址(0地址)内,断点进栈
-
寻找服务程序入口地址
- 向量地址 ->PC (硬件向量法)
- 中断识别程序 入口地址M->PC (软件查询法)
-
硬件 关闭中断
-
-
-
正处在中断中
-
中断标记寄存器
- 当INT=1,进入中断周期,执行中断隐指令
-
中断屏蔽技术
-
通过设置中断屏蔽字,来改变中断请求的优先级
-
中断屏蔽触发器MASK
- MASK有效,中断请求会被屏蔽,从而改变优先级
-
图文解释
-
- 改变顺序方式为:屏蔽字为1时,到对应的中断响应周期时,其他的中断请求会被屏蔽
- 比如,本例新屏蔽字中。到中断周期A,其全部都设置屏蔽字,所以到A时,其他中断周期的中断请求都会被屏蔽;到中断周期D时,其除了A以外,中断屏蔽字都有效,所以,A的优先级比D高
-
-
-
其余零碎知识
编码
8421码
- 十进制的每一位均用4个二进制位表示
- 用两个8421码相加时,如果结果大于9,需要加上0110
余三码
- 8421码结尾加上011
更多知识,请关注微信公众号 MiaoA知识 !