导图社区 计算机组成原理
计算机组成原理:在数据丢失之前集中刷新所有行,即一个最大刷新周期的时间的最后部分全部用于刷新,其余时间用于读写。
编辑于2022-11-10 16:38:57时间管理-读书笔记,通过学习和应用这些方法,读者可以更加高效地利用时间,重新掌控时间和工作量,实现更高效的工作和生活。
本书是法兰教授的最新作品之一,主要阐明了设计史的来源、设计史现在的状况以及设计史的未来发展可能等三个基本问题。通过对设计史学科理论与方法的讨论,本书旨在促进读者对什么是设计史以及如何写作一部好的设计史等问题的深入认识与反思。
《计算机组成原理》涵盖了计算机系统的基本组成、数据的表示与运算、存储系统、指令系统、中央处理器(CPU)、输入输出(I/O)系统以及外部设备等关键内容。通过这门课程的学习,学生可以深入了解计算机硬件系统的各个组成部分及其相互之间的连接方式,掌握计算机的基本工作原理。
社区模板帮助中心,点此进入>>
时间管理-读书笔记,通过学习和应用这些方法,读者可以更加高效地利用时间,重新掌控时间和工作量,实现更高效的工作和生活。
本书是法兰教授的最新作品之一,主要阐明了设计史的来源、设计史现在的状况以及设计史的未来发展可能等三个基本问题。通过对设计史学科理论与方法的讨论,本书旨在促进读者对什么是设计史以及如何写作一部好的设计史等问题的深入认识与反思。
《计算机组成原理》涵盖了计算机系统的基本组成、数据的表示与运算、存储系统、指令系统、中央处理器(CPU)、输入输出(I/O)系统以及外部设备等关键内容。通过这门课程的学习,学生可以深入了解计算机硬件系统的各个组成部分及其相互之间的连接方式,掌握计算机的基本工作原理。
计算机组成原理
Ch09: 输入输出系统
输入输出设备
特性
异步性
实时性
独立性
I/O系统
I/O接口
功能
设备寻址
数据交互
设备控制
状态检测
数据缓冲
格式转换
结构
分部
总线接口
内部接口
部件
数据缓冲寄存器 DBR
设备状态寄存器 DSR
设备命令寄存器 DCR(非必须)
设备存储器(RAM,非必须)
地址译码器
数据格式转换组合逻辑电路
I/O接口编址
统一编址(内存映射编址,Memory-mapped)
接口中数据是动态变化的,不能用cache进行缓存(声明为volatile型)
占用了主存地址空间,无需专用IO指令
独立编址(端口映射编址,Port-mapped)
IO地址又称IO端口,不同设备中不同寄存器、存储器都有唯一的端口地址
必须使用特殊的IO指令访问外部设备
IO端口地址通常是固定的,热插拔设备端口地址是启动过程中动态分配的
显卡的广泛应用(PCI总线的普及)后,无论哪种编址方式外设存储器都必须映射到主存空间
软件
与操作系统无关的IO库
与设备无关的操作系统调用库
独立的设备驱动程序
分类
按数据传送方式
并行接口
串行接口
按接口的灵活性
可编程接口
不可编程接口
按通用性
通用接口
专用接口
按访问外设方式
直接传送方式
程序控制方式
程序中断方式
DMA接口
通道处理及接口
数据传输控制方式
程序控制方式
程序中断控制方式
直接存储器(DMA)访问方式
通道方式
外围处理机方式
程序控制方式
细分方法
程序查询(轮询方式,Polling)
直接传送
简单设备查询流程
复杂设备程序查询流程
复杂设备的驱动分为设备准备和实际传输两个阶段,设备准备过程中CPU会反复查询设备状态
程序查询的特点
轮询一般有两种策略:忙等待和定时轮询
忙等待(Busy-waiting,独占式查询)
定时轮询(Polling)
程序中断方式
中断方式特点
主动告知机制避免乐反复查询,提高了CPU利用率
中断控制方式有中断处理程序两次上下文切换和本身的开销,有额外的CPU占用
适用于随机出现的服务,不适用于超高速设备
中断赋予了计算机随机应变的能力,将有序事件和无序事件统一起来
中断处理子程序是无规律随机调用,子程序有规律显式调用
中断的细分
内部与外部
内部异常
故障(Fault)
自陷(Trap)
终止(Abort)
外部中断(Interrupt)
可屏蔽中断
不可屏蔽中断
硬件与软件
硬件中断
外部中断 Interrupt
终止 Abort
软件中断
故障 Fault
自陷 Trap
自愿与强迫
自愿中断
强迫中断
可否屏蔽
可屏蔽中断
不可屏蔽中断
向量与非向量
向量中断
非向量中断
单级与多级
单级中断
多重中断(嵌套中断)
中断优先级与屏蔽
中断优先级
响应优先级
同时有多个中断产生时CPU响应的先后顺序
一般规律
内部异常中硬件终止(Abort)优先级最高
DMA中断>I/O设备直接中断
高速设备>低速设备
输入>输出
处理优先级
多重中断嵌套时(已经发生了中断)可否打断中断处理程序的优先级
中断屏蔽技术可动态地改变中断实际处理优先级; 如果不用中断屏蔽技术,处理优先级就和响应优先级相同
中断屏蔽寄存器(Interrupt Mask Register, IMR)每一位屏蔽码对应一个设备中断源,高电平表示屏蔽,被屏蔽的中断源无法送入响应排队队列
通过屏蔽高优先级中断源可以防止低优先级中断被打断,从而动态调整处理优先级
IMR只有在执行中断处理程序时才会更新,因此只能影响中断嵌套中实际处理优先级,不能影响响应优先级
中断请求
中断仲裁
独立请求方式
CPU通过INTR收到中断信号后利用INTA进行应答
中断源收到应答后会清除中断请求
适用于向量中断
链式请求方法
硬件查询法
INTA从近到远依次传递,离CPU最近的中断请求设备收到信号后会将中断源编号通过数据总线发给CPU并阻断INTA继续传递
在硬件层面上离CPU越近的中断源优先级越高
软件查询法
通过公共终端服务器程序轮询每个中断源的寄存器,判断是否发出了中断请求,若发送了就跳转至对应的中断服务程序,若没有就继续查询下一个中断源
优先级与轮询次序有关
中断控制器方式(最常用的方式)
分组链式
硬件支撑
中断请求寄存器(IRR)
IRR的内容被称为中断字
每一位对应一个设备的中断请求
中断屏蔽寄存器(IMR)
中断服务寄存器(ISR)
中断优先级排队电路(PR, Priority Resolver)
中断允许触发器/中断使能位/中断标志位(IE/IF)
中断控制器工作流程
CPU会在两个总线周期内分别发出两个INTA脉冲信号
第一个信号告知中断控制器CPU已经接受中断请求,控制器就会消除对应设备的中断请求
第二个信号请求中断控制器输出中断编号,读取中断服务程序地址
中断识别
非向量中断(共享中断请求)
一般用于共享中断请求信号(共享INTR)的软件查询法
处理非向量中断时CPU直接跳转到中断查询程序的地址,可以说所有非向量中断共用一个中断服务程序(即中断查询程序),不同设备的中断服务子程序只是公共中断服务程序的一个分支,也就是说非向量中断并不需要(硬件层面的)中断识别
向量中断(独立中断请求)
中断号
中断号由计算机系统统一分配,一般是固定不变的
获取中断号后以之为索引在中断向量表中获取中断向量,得到中断处理程序地址
中断向量
中断向量表
向量地址/中断指针
DMA方式
基本概念
DMA为了减少IO数据转移过程中CPU用于数据传输的开销引入了DMA控制电路(DMAC),DMAC临时接管数据总线控制数据交换过程
工作过程
DMAC传送前CPU访问DMAC接口,设置DMAC传输参数,包括目标主存地址、数据块长度、传输方向等
CPU向设备的IO接口发送命令和参数启动设备
传输过程中CPU可以执行其他程序,需要DMA操作时DMAC向CPU申请总线控制权
内存争用问题
停用CPU内存访问
DMAC和CPU交替访问
将一个存储周期分为两段,分别供DMAC和CPU使用
没有总线使用权的申请、建立、交还过程
周期挪用(Cycle Stealing)
只有DMAC需要访存时,CPU才空出一个存储周期供DMAC访问,该周期完成后控制权被立刻交还
若挪用期发生访存冲突,DMA优先访问
周期挪用法是DMA的主要方法
DMA控制器
地址寄存器
字计数器
数据缓冲寄存器
命令寄存器
状态寄存器
DMA控制逻辑
DMA传输流程
DMA准备阶段(CPU参与)
初始化DMA
启动设备
运行其他进程
数据传送阶段(周期挪用)
设备准备数据:当设备接收到CPU的DMA命令后就可以开始准备数据
设备发送DMA请求:数据准备好后就通过DREQ控制线向DMAC发出DMA请求
DMAC申请总线:DMAC收到DMA请求后立即将HOLD信号置“1”,向 CPU申请总线控制权
总线授权:CPU在机器周期结束后响应总线使用申请,让出总线控制权,并发出总线授权信号HLDA通知DMAC
DMA数据传输:收到HLDA信号将内存地址放置在地址总线上;设置控制总线读写命令控制信号,并向设备DMA应答信号DACK。设备收到DACK信号后会和内存完成一个机器字的数据交换
传输控制:设备传输完一次数据后会继续重复第1步到第5步的工作,DMAC在每次传输时还需要负责维护内存地址和传输计数器,并撤除HOLD信号释放总线
数据传输结束时,DMAC会通过INTR信号线发送一个EOP(EndOfProcess)的 DMA中断请求信号,告知CPU传输完成
DMA结束阶段
正常结束和非正常结束都会进入该阶段
向CPU发出中断请求,执行中断服务程序
DMA与程序中断的区别
中断通过程序传送数据,DMA靠硬件来实现
中断时机为两指令之间,DMA响应时机为两存储周期之间
中断不仅具有数据传送能力,还能处理异常事件。DMA只能进行数据传送
DMA仅挪用了一个存储周期,不改变CPU现场
DMA请求的优先权比中断请求高。CPU优先响应DMA请求,是为了避免DMA所连接的高速外设丢失数据
DMA利用了中断技术
Ch06: 中央处理器
CPU功能
程序控制
操作控制
时序控制
数据加工
中断处理
CPU组成
寄存器
程序计数器(Program Counter, PC)
存储器地址寄存器(Memory Address Register, AR)
存储器数据寄存器(Memory Data Register, DR)
指令寄存器(Instruction Register, IR)
通用寄存器组(寄存器堆,General Registers, GR)
程序状态字寄存器(Program Status Word/Register, PSW/PSR)
操作控制器
时序产生器
硬布线控制器
微程序控制器
指令周期
指令从取出到完成所需要的时间称为指令周期,不同指令的周期长度可能不同
指令周期可以进一步细分为几个不同周期(时间段)
取指周期
译码/取操作数周期
执行周期
写回周期
中断周期
总线周期
IO周期
指令周期可以划分为多个机器周期(CPU周期),每个机器周期又包含若干个时钟周期
将主存取出一个存储字所需的最短时间定义为机器周期
时钟周期是CPU最基本的时间单位,是节拍脉冲/振荡周期
指令周期的机器周期数与每个机器周期的时钟周期数并不是固定的
指令周期同步
定长指令周期:传统三级时序系统
变长指令周期:现代时序系统
数据通路
基础概念
数据通路可分为总线(共享通路)和专用通路
总线的条数越多,数据通路效率越高
专用通路可以看作特殊的多总线通路
不同指令或同一指令在不同周期都可能有不同的数据通路(数据不同或路径不同)
通路模型
根据功能性质,部件可分为两种
数据处理单元
状态存储单元(状态单元)
通用数据通路模型
D触发器定时模型
建立时间(Setup Time)
保持时间(Hold Time)
触发器延迟(Clk_to_Q)
关键路径延迟
最小时钟周期必须大于触发器延迟(Clk_to_Q)+关键路径延迟+建立时间(Setup)
组合逻辑延迟是关键因素
缩小关键路径延迟才能提高系统频率
保持时间违例
Clk_to_Q+最短路径延迟>Hold_Time会导致保持时间违例(注意是最短路径延迟)
在第二轮脉冲时,上升沿两触发器同时发生跳变,A端输出经Clk_to_Q+最短路径延迟到达B端输入,若此时B端Hold Time未结束就无法正常锁存
单总线结构数据通路CPU
内外总线
内总线
外总线/系统总线
指令方框图
公操作
取指令属于公操作
公操作中会立刻响应中断请求
时序与控制
传统三级时序系统
根据初始的Clock时钟信号生成三级时序体制
状态周期
节拍点位
节拍脉冲
状态周期数、节拍电位数、节拍脉冲数可变
现代时序系统不再设置节拍,Clock就是基本时钟信号,一个时钟周期就是一个节拍
控制方式
同步控制
机器周期数、节拍数固定(定长)
机器周期数固定,节拍数不固定(变长)
大多数指令机器周期固定
异步控制
无时钟,应答机制
联合控制
同步、异步相结合
时序发生器
定长方式只与时钟脉冲有关;变长方式还包括指令和状态反馈
时序发生器本质是一个Moore型同步时序电路(有限状态机),用对应的数电方法构造
先画出对应的状态图
画出状态表并给状态编号
定长指令时序发生器
变长指令时序发生器
硬布线控制器
三级时序系统硬布线控制器(定长指令)
时序发生器循环产生周期电位、节拍电位,供控制器对信号进行时间调制
设计流程
分析数据通路,画出指令方框图,明确各节拍控制信号
设计时序发生器(有限状态机)
根据微操作控制信号产生条件,写出各微操作控制信号的逻辑表达式
利用组合逻辑实现
现代时序系统硬布线控制器(变长指令)
输出的控制信号仅与状态寄存器现态有关
设计流程
分析数据通路,画出指令方框图,明确各节拍控制信号
绘制状态图,构建状态转换表,实现状态机组合逻辑
实现控制器组合逻辑电路
微程序控制器
微程序的概念
机器周期与微指令的关系
将控制信号序列分解为若干节拍,一个节拍的并发信号(时钟周期)形成一条微指令,多个节拍的微指令形成一段微程序
一条机器指令对应一段微程序,一段微程序包含若干微指令
所谓软时序就是靠微指令的依次执行达到时序控制的效果(而不是组合逻辑控制控制位输出)
微命令
微操作
相容性微操作
互斥性微操作
现代时序系统中微操作互斥/相容的时间单位是一个时钟周期
微指令
操作控制字段
顺序控制字段
判别测试字段
译码测试位P0十分特殊,高电平时令后续地址根据译码功能选择微程序入口地址,用于区指微程序,在图中往往用红色表示
其他测试位都需要检测外部条件根据多路选择器送入指定地址
下址字段
微程序
取指微程序是所有微程序共有的,位于控制存储器(控存)的0号位置,系统上电时会自动运行
微程序控制器原理
系统组成
控制存储器(控存)
微程序地址寄存器 μAR
初始化时为0,上电时自动执行取指操作
输入来源为地址转移逻辑的输出,随CLock更新
地址转移逻辑
下址字段法/断定法
注意每个微程序最后一条微指令的下址字段通常指向取指微程序的入口地址(0)
计数器法
微指令中不再包含下址字段部分,但要求微程序中微指令必须连续存储,总得来说可以减少控存大小
添加一个加法器元件,后续微指令由μAR+1得到
额外增加结束微指令判别测试位Pend,高电平时回到取指微程序
微指令设计
设计原则
有利于缩短微指令字长度
有利于减少控制存储器容量
有利于提高微程序执行速度
有利于对微指令进行修改
有利于提高微程序设计的灵活性
编码方法
直接表示法
编码表示法/字段译码法
利用互斥性,将互斥性微命令分成若干组,每组对应一个字段,用编号表示
添加译码器,通过译码器产生微命令信号
注意事项
通过译码器需要时间同步
需要预留出一个全空的状态(译码器不能用满)
混合表示法
格式
水平式微指令
垂直式微指令
将微指令按照数据通路分类,得到基本指令
将基本指令按扩展操作码进行编码
大幅压缩微指令长度,牺牲并行性,性能很差,已被淘汰
中断与异常处理
异常与中断的分类
异常(Exception)/内部中断/软件中断
故障(Fault)
可恢复故障
不可恢复故障
自陷(Trap)
终止(Abort)
外部中断(Interrupt)
中断响应周期
关中断
保存断点
已经执行完的命令,断点是下一条指令
没有执行的指令,断点是PC值
中断识别
中断处理CPU设计
数据通路升级
增加两个中断处理相关的寄存器
异常指令地址EPC
EPC和PC需要交换,因此挂载在总线上
中断使能位IE
值为1时开中断,0时闭中断
中断控制器输出和IE信号与运算,表现为低电平时操作控制器不接受中断请求
增加中断控制逻辑
增加中断返回指令 eret
操作控制器升级(状态机修改)
三级时序硬布线控制器升级(变长指令)
在指令执行周期(Mex)结束后增加一个中断响应周期(Mint)
中断响应周期包括两个时钟周期
第一个关中断并保存断点
第二个完成中断识别并取中断处理程序送入PC
中断入口地址送入PC后,CPU就开始新一轮取指令并执行的循环
现代时序硬布线控制器升级
Ch05: 指令系统
指令系统概述
计算机不同层次用户使用不同层次的指令,从表层到底层分为软件层次和硬件层次(本章主要研究机器指令层次)
软件层次
高级语言指令
汇编语言指令
硬件层次
机器语言指令
微指令
一个完备的指令系统应该满足以下五条要求
完备性
规整性
对称性
均齐性
有效性
兼容性
可扩展性
指令格式
指令字
指令格式
总体上分为操作码字段OP和地址码字段A
操作码用于解决进行何种操作的问题
地址码用于解决操作什么数的问题
地址码可以包括多个操作数
地址码获取操作方式通常由寻址方式字段决定,寻址方式字段可以在地址码区,也可以在操作码区
指令字长度
根据指令字长是否固定
定长指令系统
指令长度固定,结构简单,利于CPU取指令、译码和寻址,方便硬件实现
平均指令长度较长,冗余状态多,不容易扩展
通常在精简指令集系统中采用定长指令
变长指令系统
指令长度可变,结构灵活,冗余状态少,可扩展性好
指令存取过程可能涉及多次访存操作
下一条指令必须在译码完成后才能确定
硬件设计难度大
x86就是变长指令集
根据指令字长与机器字长的关系
半字长指令
单字长指令
多字长指令
考虑到一次访存能取出指令的个数带来的效率差异,通常将越常用的指令字长越短
指令地址码
三地址指令
具有两个操作对象的运算符叫做双目运算符
三地址如果使用主存地址的话寻址范围太大,指令会过长,因此一般很少使用存储单元地址,一般都使用寄存器
二地址指令
同样为双目运算设计,但为了压缩长度将A1同时作为目标操作数和源操作数
二地址指令可以使用主存地址
RR型:两个操作数都是寄存器,最快
RS型:源操作数在寄存器,目的操作数在主存,其次
SS型:两个操作数都在主存,最慢
单地址指令
单目运算符
隐含操作数
零地址指令
不需要操作数
隐含操作数
指令操作码
定长操作码
不仅操作码的长度固定,其在指令中的位置也固定
译码简单,有利于简化硬件设计
变长操作码
长度可变,位置不固定
有效压缩指令操作码的平均长度,给寻址更大的空间
一般使用扩展操作码来实现变长操作码
寻址方式
指令寻址
顺序寻址
机器指令在主存中往往按顺序存放
程序计数器(PC,Program Counter)对指令序号进行计数,存储的是下一条地址
每执行一条地址,PC+1就可以得到下一条地址
跳跃寻址
一般用于分支或转移,不再由PC+1得到,而由指令本身给出
跳跃时会修改PC/EIP的内容s
操作数寻址
立即寻址
形式地址就是操作数本身,
操作最快,但位宽有限,导致操作数范围受限
一般用于赋初值
寄存器寻址
形式地址是寄存器编号,操作数存储在寄存器中
最常用的寻址方式,不需要访问主存速度快,且地址码短
直接寻址
形式地址是主存地址
寻址范围受限于形式地址位宽
间接寻址/寄存器间接寻址
间接寻址相对于直接寻址而言,加入了二重指针机制
形式地址中存储着存放真实数据的地址的变量地址,相当于开辟了一片小区域(由位宽/寄存器决定)专门用于存储地址
间接寻址因为需要两次访存,已被寄存器间接寻址取代
寄存器间接寻址中,第一次地址存放在寄存器中,访问速度更快,只需要一次访存
相对寻址
相对寻址把程序计数器PC加上形式地址D得到有效地址EA
只需要确定程序内部的相对距离,而不用确定内存中的绝对地址,一般用于相对跳转
基址/变址寻址
基址/变址寻址统一格式是EA=基址/变址寄存器+偏移量
偏移量是形式地址D的内容,固定在指令中
基址寄存器一般不修改
基址寻址面向系统,变址寻址面向用户
堆栈寻址
硬件堆栈(寄存器串联堆栈)
软件堆栈(内存堆栈)
指令格式设计
指令编码格式设计
操作码设计
地址码设计
寻址方式设计
CISC和RISC
CISC(复杂指令系统计算机,Complex Instruction System Computer)
指令数量多,指令功能复杂
对高级语言支持更好,简化编译过程
向后兼容性好
RISC(精简指令系统计算机,Reduced Instruction System Computer)
指令条数少,只保留使用频率最高的简单指令,且指令定长,便于硬件实现,复杂功能由软件实现
采用Load/Store结构,只有存取指令才能访问主存,提高了运行速度,避免了复杂的寻址方式,便于硬件实现
面向寄存器的设计,CPU内设计了大量寄存器
采用硬布线控制逻辑,减少微程序控制,提高控制速度
一个机器周期完成一条机器指令(CISC多周期完成一条指令)
MIPS指令系统
MIPS寄存器
字长为32位(1 Word)
32个通用(整形)寄存器,32个浮点寄存器
2个特殊寄存器:Hi,Lo(用于存放乘除法结果)
MIPS指令
加法指令:add $s0, $s1, $s2等价于a=b+c其中a,b,c分别对应s0~s2
加立即数:addi $s0, $s0, 0x1
减法指令:sub $s3, $s4, $s5等价于a=b-c其中a,b,c分别对应s0~s2
读内存指令:lw $t0, 32($s3)
t0是目的操作数
32(s3)是变址寻址法(偏移量固定,基址由寄存器提供)
Ch01&02: 概论与数据表示
计算机系统组成
硬件系统
冯·诺依曼思想
提出使用二进制作为计算机数制基础|
二进制运算规则简单
0/1状态更容易用物理状态实现
适合采用布尔代数方法实现运算电路
存储程序
程序控制
五大部件
运算器
控制器
存储器
输入设备
输出设备
系统互联
软件系统
应用软件
系统软件
操作系统
固件(Firmware)
层次结构
高层是底层功能的扩展,低层是高层的基础
计算机性能指标与评价
非时间指标
字长
主存容量
与时间有关的性能指标
时钟周期
CPI(Clock Cycles Per Instruction)
计算机数据表示
进制转换
十进制转二进制真值
整数部分除2取余,倒着取,直到商为0为止
小数部分乘2取整,正着取,直到满足位数或小数部分为0为止
数值编码
真值
机器码
原码
表示区间
定点小数
定点整数
反码
表示区间与原码一致
补码
模的概念
时钟原理:表示负数时可以使用模的性质转换成正数,即把减法变成加法
负数的补码可以用模数加上该负数获得
有字长限制的二进制运算为有模运算,模数为最高位进位的权值
计算机中补码的定义
设定点小数x0.x1x2...xn 其中x0为符号位,该数模数为最高位进位2
根据补码定义可知
扩展至n位定点整数而言
求补码的简便方法
反码法(适合机器运算)
扫描法(适合手工计算)
移码
只能用于定点正数的表示,通常用于表示浮点数的阶码
移码与补码只有符号位相反,其余全相同
浮点数表示
二进制浮点数采用了类似十进制科学计数法的表示方法
阶码E(Exponent)是定点整数,用移码表示
尾数M(Mantisa)是定点小数,用补码表示
浮点数表示范围
IEEE754标准
汉字区位码
GB2312编码
双字节编码,16位,其中两个字节的最高位都是1,实际有14位编码空间
实际没有填满,使用94x94的矩阵表示所有汉字字符,矩阵的每一行称为“区”,每一列称为“位”
转换公式:区位码 + A0A0H = GB2312编码
汉字机内码
汉字输入码(外码)
流水码
音码(拼音)
形码(五笔)
音形码
汉字字形码(输出码)
数据校验
码距与校验
校验码
码距/海明距离
校验码的目的在于提高编码集中最小码距
码距越大,抗干扰能力越大,纠错能力越强,数据冗余越大,编码效率越低
奇偶校验
冗余位:1位校验位P
检验串中1的个数
检错位G=1一定出错
只能提供奇数位错误的检错
二维奇偶校验/交叉奇偶校验
将一个串分成很多等长的子串,按行分布在二维矩阵里,同时进行行和列的奇偶校验
一个数据位参加多个检验组,发生错误可在多个检测码中反馈
海明校验
CRC循环冗余校验
模2运算
生成步骤
1. 将原数值M左移r位得到R
2. 找一个r+1位的二进制串G
3. 用模2除法求R除以G得到的余数填在右边的空白r位上就是冗余码部分
解码
Ch03: 运算器
定点加减法运算
运算定义
补码加法
补码减法
溢出检测
监测符号位:正正得负 & 负负得正 -> 溢出
监测进位:符号位进位与数值位进位不同为溢出
双符号位:将符号位扩展成两位进行运算
若相加后两个符号位不同为溢出
符号位最高位永远是正确符号位
逻辑实现
全加器(FA)
逻辑表达式
逻辑电路
半加器(HA)
多位串行加法器
先行进位加法器
定点乘法运算
原码一位乘法
符号位:异或
真值部分:普通竖式运算
部分积使用累加寄存器存储
补码一位乘法
符号位参与运算,可以采用单符号位,双符号位用于溢出检验
运算步骤
先写出[X]补,[-X]补,[Y]补备用,画出运算表格,注意[Y]补要在最右边扩充一个0
判断乘数[Y]补最后两位,决定部分积加哪个数
01:[X]补
00/11:0
10:[-X]补
将部分积和乘数都右移一位,注意左边移出的位接在右边
部分积是算术右移,即符号位扩展右移,且右边没有限制
乘数右边是位宽墙,不需要扩展
重复上述步骤直到乘数不足一位,将最终结果与移出位拼起来形成答案
浮点运算
浮点加减法运算
阶码和尾数均采用补码表示
对阶:使两浮点数阶数相等,尾数就可以直接相加
规则:小阶向大阶看齐
步骤
求阶差:减法运算
尾数移位
保留附加位
通常保留三个保留附加位,从右到左排序(高位到低位)
保护位
舍入位
粘位
尾数运算
结果规格化
规格化方法
左移规格化(左规放大)
绝对值小于0.5需要放大
移动(逻辑左移,补0)多少位阶码减多少
注意符号位一起移
右移规格化(右规减小)
绝对值超过1,发生上溢
只需要算术右移(保留符号位)一位,阶码+1
舍入
末位恒置1法
0舍1入法
舍入可能破坏规格化结果,因此需要再次规格化
溢出判断
只有阶码移除才算溢出
当阶码符号位为01或10时结果溢出
IEE754浮点数
阶码用移码表示,尾数用原码表示,且尾数的最高位隐藏
对阶和规格化采用移码的计算规则
尾数隐藏位参与运算,采用原码运算规则
浮点乘法运算
第一步:阶码相加
第二步:尾数相乘
第三步:规格化舍入
Ch04: 存储系统
存储系统概述
存储器的分类
按存储介质
磁存储器
半导体存储器
双极型存储器
MOS存储器
静态MOS存储器(SRAM)
动态MOS存储器(DRAM)
光存储器(光盘)
按存储方式
随机存储器(RAM,Random Access Memory)
顺序存储器(SAM,Sequential Access Memory
直接存储器(DAM,Direct Access Memory)
按可写性
读写存储器
只读存储器(ROM,Read-Only Memory)
按可保存性
易失性存储器
非易失性存储器
按功能和速度
寄存器存储器
高速缓冲存储器(高速缓存Cache)
主存储器(主存)
外存储器(外存/辅助存储器)
存储器性能指标
存储容量
位表示法
字节表示法
存取速度
存取时间(访问时间)
存取周期
存储器带宽
存储系统层次结构
DRAM刷新
刷新的概念
刷新周期
刷新周期是存储器实际完成两次完整刷新的时间间隔
最大刷新周期:信息存储到数据丢失之前的时间间隔
按行刷新
减少存储矩阵的行数,增加列数,可以减少刷新周期
刷新地址由刷新地址计数器产生,而不是CPU发出,位数与存储芯片的行数有关
每个刷新周期内,刷新地址计数器从0到最大值循环遍历一次
刷新时DRAM不能响应CPU访问,称为死时间
刷新方式
集中刷新
最大刷新周期:2ms
在数据丢失之前集中刷新所有行,即一个最大刷新周期的时间的最后部分全部用于刷新,其余时间用于读写
存在死区(集中刷新的区段CPU长时间无法访问),用于实时要求不高的场合
分散刷新
最大刷新周期:2ms
一次读写操作后紧跟着一个刷新操作,一个读写+刷新操作被称作一个存储周期
刷新次数过多,浪费了时间,用于低速系统
异步刷新(最常用)
最大刷新周期:2ms
各刷新周期分散地安排在一个最大刷新周期中
假设存储矩阵有有128行,每隔2ms/128=15.5微秒刷新一行,将128次刷新分散
主存系统
主存特征
基本结构
空间逻辑上可以看作一个一维数组,每个数组元素存储一个m位的数据单元,主存地址就是数组的下标索引
硬件结构由存储体(DRAM)和外围电路(包括译码器、数据寄存器和读写控制电路构成)
存储体有2^n个m位的存储单元
地址译码器接受来自CPU的n位地址信号,转换成2^n根地址译码信号,其中每根译码信号都连接一个存储单元,2^n个译码信号中有且只有一个信号有效
数据暂存器暂存CPU送来写入的数据或主存读出的数据
读写控制电路接受CPU的读写控制信号,决定存储器的读写模式
数据存放
存储字长
数据字长(字长)
地址访问模式
字节地址(8位)
半字地址(16位)
字地址(32位)
小端(Little-Endian)存储
边界对齐
跨n个字节地址的变量访问需要消耗n个存取周期
对齐后访问速度高,不对齐节约主存空间
主存的组织与CPU连接
存储器扩展
位扩展(DBUS,字长扩展/数据总线扩展)
各芯片同时并行工作
字扩展(ABUS,字数扩展/容量扩展/地址总线扩展)
CPU给出地址后,经译码器片选后,同一时刻只有一个芯片在工作
综合扩展
考察重点
根据要求对存储器的组合
不同存储器之间的关系(串联OR并联/多合一OR一分多)
并行主存系统
SDRAM(同步DRAM,Sync Dynamic Random Access Memory)
普通DRAM的访问过程是CPU给出地址和控制信号 -> 经过存取时间后完成操作,存取时间内CPU只能等待
同步DRAM与CPU的数据交换时钟信号同步,不需要等待
DDR(Double Data Rate)SDRAM
在时钟周期的上/下沿各进行两次数据传输
DDRn代表2^n路总线,提升总带宽
双端口存储器
两个端口地址不同时,不会发生冲突,可以并行读写
两个端口地址相同时,发生冲突
每个端口有一个阻塞标志BUSY,置0时表示阻塞,置1表示复位
冲突发生时由逻辑判断哪个端口优先操作,并将另一个端口置0,优先端口操作完成后再复位另一个端口,继续操作
多通道内存技术
单体多字存储器(联动模式)
所有存储模块同步并发,共用同一个地址寄存器
单存储周期访问多个存储字,数据线为合并结果
性能线性增长,总线位宽变换
要求内存的容量、频率、时许完全一致
多体多字存储器(非联动模式)
多体单字存储器(多体交叉存储器/编址方式)
高位多体交叉(顺序编址)
多模块串行,相邻地址在同一存储体内
可以扩充容量,但由于程序具有局部性和连续性的特点,往往会导致一个存储体访问频繁而其他存储器空闲
方便故障隔离,无性能提升
低位多体交叉(交叉编址)
多模块流水并行,相邻地址在不同存储体中
可以扩充容量并提升性能(减少恢复时间的影响)
适合突发的顺序访问,是带cache的主存(SDRAM和多通道内存)编址模式
考察重点:不同编址方式下的带宽计算(时间)
存储周期公式:T=nt
T=存储模块的存储周期
n=交叉模块数(通常为2的幂次方)
t=总线的反应时间/存储体切换时间
顺序编址读写时间:t总=nT
T=存储周期
n=读写的存储字个数
交叉编址读写:t总=T+(n-1)t
T=存储周期
n=读写的存储字个数
t=最短反应时间
带宽:W=B*n/t总
B=总线位宽度
n=读写的存储字个数
t总=读写总时间
高速缓冲存储器(cache)
cache 工作原理
根据SRAM中cache块的大小,将主存进行分块(块大小与cache块大小相同),并对主存块进行编号
使用cache的理论依据:程序局部性
时间局部性(反复调用)
空间局部性(连续存放)
cache 读操作流程
CPU接受要读取的地址,解码并在cache中查找地址
如果命中,则根据地址读出cache中数据并返回CPU
如果缺失,则为缺失的数据分配cache块(可能发生块替换),载入内容并更新cache,然后再读取数据返回CPU
cache 写操作流程
CPU接受地址,解码并在cache中寻找对应地址
若查找命中,则直接进行数据写入;若查找缺失,则根据是否采用写分配法进行下一步操作
写分配法(Write-Allocate)需要先将数据块载入cache,重新进行写命中流程
非写分配法则直接将数据写入主存
在写命中后,将数据写入到cache中
若采用写回(Write-Back, WB)策略,则将该cache行的修改位(脏位,Dirty Bit)置为1,并在该cache块被替换时才会将修改写入主存
若采用写穿(Write-Through, WT)策略(又称直写法),当写命中时,同时修改cache和主存中的同一数据块
cache 相关术语
数据命中(Hit)
命中访问时间 tc
数据缺失(Miss)
缺失补偿(Miss Penalty)
数据块(Block)
进行分块后,主存和cache地址都可以用块地址(序号):块内偏移地址(偏移字节数)的二维地址空间进行描述
命中率(Hit Ratio)h=Nc/(Nc+Nm)
缺失率(Miss Ratio)
平均访问时间 ta = htc + (1-h)tm
访问效率 e = tc/ta
各种因素间的关系
cache 命中率与容量的关系
块容量与命中率的关系
地址映射方式与命中率的关系
cache 行/槽(Line/Slot)
cache 关键技术
数据查找(Data Identification)
全相联映射中使用相联存储器(Content Addressable Memory, CAM)实现快速查找
CAM是一种直接按内容进行访问(输入的不是地址而是要查询的key)的存储器,用于存放查找表,其基本存储数据单元是键值对
硬件成本高(比较器多),通常用于存放查找表/全相联cache
存储容量=查找表容量=表项数*表项大小
CPU片内缓存
查找表与缓存副本一体
存放cache行(有效位+主存块序号+数据块副本)
片外缓存/片内查找表
查找表与缓存副本分离
只存放查找信息(有效位+主存块序号+cache块地址)
读逻辑实现
Valid位用于判定当前键值对是否有效(若无效直接不输出)
所有存储单元中的Key要与输入的关键字进行并发比较,有n个存储单元就有n个比较器
所有比较器的输出结果取或,输出为Hit结果
将每个比较器的输出结果输入三态门控制端,若Hit成功则输出对应Value
地址映射(Address Mapping)
全相联(Full Associative Mapping)映射
新的主存数据块可以载入cache中的任意一个空行,只有cache满时才会进行替换,因此利用率最高,但需要CAM提供的快速查找功能,查找成本较高
优点:映射灵活,cache利用率高,冲突率低,命中率高
缺点:淘汰算法复杂,查找成本高
主存地址分为主存块地址/序号(tag,长度为s)和块内偏移量(offset,长度为w)两部分
cache块(数据块副本)应与主存中数据块大小相同,即容纳偏移量最大值数量的字节数,因此cache块大小为2^w字节
主存容量对应为2^(s+w)字节
所有cache行的实际容量为 n*(1+s+8*2^w)位
n:cache行数
1:每行有效位
s:每行tag部分(主存块序号)
8*2^w:数据块容量从字节转换成位
逻辑硬件实现
块大小为4W,且读取单位是字(W),则偏移地址为0~4,则w=2
tag部分由于地址总长度为9位,则s=9-2=7
其后过程与CAM类似,只是需要使用偏移地址选择最后的输出
查找表和数据块副本分开存放,用相联存储器连接
直接相联(Direct Mapping)
映射规则:cache块号 i = 主存块号 j mod (cache行数 n)
主存地址可以细分为区地址(tag)、区内行索引(index)和偏移地址(offset)三部分
tag字段表示主存中分区的序号(查找标记)
index字段表示当前分区下cache行的序号
offset与全关联相同
cache的实际容量为n*(1+s-r+8*2^w)位
s是块地址总长度,r是行索引长度,s-r是区地址长度(直接相连cache只用存储区地址用于查询)
硬件逻辑实现
由于主存块只能放置在index对应的cache行中,因此不需要全相联查找,也不需要将查找表放在CAM中,直接通过index就可以访问对应数据
结构中没有相联存储器,所有cache行共用一个比较器
查找表和数据副本一起存放,无需相联存储器
优点是映射速度快,查找成本低,替换算法简单;缺点是命中率低,易冲突导致cache利用率低
组相联(Set Associative Mapping)
k-路组相联
主存数据块首先采用直接相联映射的方式定位到cache中固定的组,映射规则为cache组号 = 主存块号 mod (cache组数)
然后采用全相联映射到组内任何一个cache行
主存地址可以分为标记字段(tag),组索引(index)和块内偏移(offset)三部分
tag字段与直接相联中分区序号类似
index字段是cache组的索引,即映射规则中得到的余数
cache的实际容量为 kn*(1+s-d+8*2^w)位
k为k路中的每组行数
n为cache组数
s-d是标记位长度
逻辑硬件实现
直接相联映射让数据查找的范围快速缩小到一个cache组,大大减少了查找范围,降低了硬件开销;组内采取全相联映射规则,避免了高冲突率,提高了cache的命中率
k路组相联只需要k个并发比较器
大容量cache可采用直接映射方式(cache够大可以提升命中率),小容量cache一般采用全相联映射或组相联映射
替换策略(Placement Policy)
先进先出法(FIFO)
最近不经常使用方法(LFU,Least Frequent Used)
近期最少使用方法(LRU,Least Recently Used)
LFU无法有效判断出最近频繁访问的行而LRU可以,因此LRU的命中率通常更高
LRU的硬件难点在于快速比较多行计数器,但二路组相联实现二选一完全不需要计数器和归并比较
随机替换算法
硬件上最容易实现,速度较快,但可能影响工作效率
对于大容量cache来说,随机替换与上述二者效率相仿
写入策略(Write Policy)
写回法
写穿法
写分配
写不分配
cache 实际应用
分离/独立cache
多级cache
软件cache
重要考点:不同地址映射方式下cache相关参数计算
掌握不同映射方式下cache的组织方式,主存地址的划分方式
掌握cache容量、命中率、时间、效率等参数的计算
虚拟存储器
工作原理
在主存和辅存之间增加部分软件(操作系统)和部分硬件(地址映射与转换机构、缺页中断处理机构等)使主存中的冷内容可以与辅存进行交换存储
CPU使用虚拟地址(VA)访问内存,交由存储管理控制部件(MMU,Memory Management Unit)翻译为物理地址(PA)
虚拟存储器充分利用了程序的局部性,采用按需加载的方法加载程序代码和程序,在产生缺页异常(Page Fault,页表指示的虚拟地址不在内存中)时才会从辅存载入数据
地址映射与变换
虚拟存储器中的地址空间
虚拟地址空间:虚地址
物理地址空间/实地址空间:主存物理地址/实地址
辅存地址空间:磁盘存储器地址/磁盘地址/辅存地址
虚拟地址映射
虚拟地址转换
虚拟存储器的分类
页式存储器
段式存储器
段页式存储器
页式虚拟存储器
虚拟地址划分
虚拟页号/虚页号(VPN, Virtual Page Number)
虚拟页偏移(VPO, Virtual Page Offset)
物理页号/页框号/实页号(PPN, Physical Page Number)
物理页偏移(PPO, Physical Page Offset)
页表(Page Table)
页表常驻内存,且每个进程都有自己独立的页表;页表首址存放在PTBR(Page Table Base Register)寄存器中,不同进程切换时需要切换PTBR的值
磁盘分为交换分区和数据分区,其中交换分区专门用于存放主存中换出且因发生修改需要存储的页面数据
有效位为1时代表当前页数据在主存中;有效位为0,标记位null表示暂未分配页,没有标记为null表示数据存储在磁盘中,访问该页表项会发生缺页异常(通常会由操作系统载入对应页并更新页表项,然后重新访问该页)
访问流程
页命中
PTE:Page Table Entry,页表项
PTEA:Page Table Entry Address,页表项地址
页缺失/缺页
调出页
根据替换算法确定换出的页号
如果换出页修改位为1,则换出到磁盘,否则直接丢弃
含有cache层的流程
利用TLB加速虚拟存储器的地址转换
转换旁路缓冲区(TLB,Translation Look-aside Buffer)
快表(TLB中的页表)和慢表(主存中的页表)中地址转换是同时进行的,当快表命中就会停止慢表的查询