一、计算机组成与性能的相关知识与计算
-
计算机五大组成部件 冯诺依曼体系
控制器,运算器,存储器,输入设备,输出设备
-
9个影响性能的指标
吞吐量:
表征一台计算机在某一时间间隔内能够处理的信息量,单位是字节/秒(B/s)。
响应时间:
表征从输入有效到系统产生响应之间的时间度量,用时间单位来度量,例如微秒(10-6s)、纳秒(10-9s)。
利用率:
在给定的时间间隔内,系统被实际使用的时间所占的比率,一般用百分比表示。
处理机字长:
指处理机运算器中一次能够完成二进制数运算的位数,决定了寄存器和数据总线的位数。当前处理机的字长有8位、16位、32位、64位。字长越长,包含的信息量越多,精度越高,硬件成本也越高
总线宽度:
一般指CPU中运算器与存储器之间进行互连的内部总线二进制位数。
存储容量:
存储器中所有存储单元的总数目,通常用KB、MB、GB、TB来表示。其中K=210,M=220,G=230,T=240,B=8位(1个字节)。存储器容量越大,记忆的二进制数越多。有内存容量和辅存容量两种指标。存储容量越大,能存储的信息就越多。
1KB=1024B,1MB=1024KB,
1GB=1024MB,1TB=1024GB存储器带宽:
存储器的速度指标,单位时间内从存储器读出的二进制数信息量,一般用字节数/秒表示。
主频/时钟周期:
CPU的工作节拍受主时钟控制,主时钟不断产生固定频率的时钟,主时钟的频率(f)叫CPU的主频。度量单位是MHz、GHz。
例如Pentium系列机为60MHz~266MHz,而Pentium 4升至3.6GHz。
主频的倒数称为CPU时钟周期(T),即T=1/f,度量单位是微秒s 、纳秒ns。CPU执行时间:
表示CPU执行一段程序所占用的CPU时间,可用下式计算:
CPU执行时间 = CPU时钟周期数 × CPU时钟周期长(T) -
相关计算题
二、基本运算
- 校验码
- 奇偶校验
- 海明校验
- crc校验
- 数制码制
- 浮点数
- 基本表示
- IEEE745标准
三、运算器
-
机器码
原码:本身,最高位为符号位,其余位8421
反码:正数不变,负数除符号位外都按位取反
补码:正数补码位本身,负数补码计算:反码加1
移码:补码符号位取反即可
-
溢出判断
双符号位异或
高位与次高位进位异或 -
一位全加器 n位行波进位加减器
-
一位乘原理
四、CPU子系统
-
CPU基本结构
主存(外部) - 数据通路 - 缓存部件 - 寄存器 - 运算器
时序部件 - 控制器 - 控制通路 - 主存
(以上仅代表部分组件之间的关系)
-
主要部件
-
运算器 ALU
74181 (算术逻辑单元)+ 74182(先行进位发生器)
例子:
4 * 74181 + 1 * 74182 → 16位先行进位加法器
8 * 74181 + 2 * 74182 → 32位先行进位加法器
-
缓存部分
- 缓存从主存中读取的数据/指令
- 主存数据寄存器(MDR):接口,用来保存要被写入地址单元或者从地址单元读入的数据。
- 主存地址寄存器(MAR):接口,用来保存数据被传输到的位置的地址或者数据来源位置的地址。
- 缓存从主存中读取的数据/指令
-
寄存器
-
通用寄存器:全局唯一地址,可直接于机器指令中使用
-
暂存器:存储临时数据
-
指令寄存器(IR): 仅一个,存放指令代码
-
程序计数器(PC):仅一个,保存下一条指令的地址,指明指令再存储器中的存放位置(且取指令完成后,PC保存的地址自动修改该以只想下一条指令的存储单元,修改量取决于指令字长和存储器的编址单位)
-
程序状态子寄存器:仅一个,记录程序运行状态与工作模式
- PSW - 标志位(A S O等)
- PSW - 编程设定位:运行模式,优先级等
-
地址寄存器:存储目标存储单元的地址码
-
堆栈指针(SP):仅一个,存储器的堆栈栈顶的地址码
一个字节8位二进制 对于16位二进制存储 进栈SP-2 出栈SP+2
-
-
控制器
- 通过输入时序信号、状态信号与指令代码实现各种控制信号
-
时序部件
-
-
设计步骤
16原型机
拟定指令系统
确定总体结构
安排时序
拟定指令流程
为命令序列形成控制逻辑
-
基于MIPS的CPU系统
-
基础
-
基本概念
指令、指令集
指令字:表示指令的二进制代码
指令字长:机器指令中二进制代码的总位数
机器字长:即寄存器的宽度,机器能够直接处理的二进制数据的位数
-
指令类别
CISC - Complex(复杂指令系统计算机)
指令数目多,长度不固定,涉及存储器读写,在通用寄存器内使用
RISC - Reduced(精简指令系统计算机)
指令数目少,长度固定,一般设计CPU内部寄存器,少量情况读写存储器(存数/ 取数)
-
MIPS32指令中的寻址方式
-
常见寻址方式
-
立即寻址:
指令中直接包含操作数(所谓立即数)
-
直接寻址
-
内存寻址(绝对寻址)
-
寄存器寻址:
直接给出操作数在寄存器内部地址码
-
-
间接寻址(一般在CSIC中使用)
-
基址寻址 I型内存
与变址寻址类似,不过寄存器内地址为基准地址,形式地址为修改量
对应I型指令面向内存的操作
-
变址寻址
指令给出一个寄存器编号与一段形式地址
操作数地址由寄存器和形式地址字段联合产生
(其中形式地址为基准地址,寄存器中的地址为地址修改量)
其中:补充相应立即数符号位扩展
-
PC 相对寻址: I型转移
指令给出偏移量:PC当前值与偏移量相加得到有效地址(特殊基址寻址)有效相对于PC值浮动
详细见 I 型指令条件分支相关指令
-
伪直接寻址(内存) J型
也称页面寻址:PC高四位(31 ~ 28)与指令中adress字段(J型指令,26位地址,左移两位成为28位)组合产生内存有效地址(32位)
-
-
MIPS中通过操作码+代码进行隐性约定寻址方式
-
-
-
MIPS32指令格式
-
RISC (算术运算只能在寄存器中执行)
取数(lw)将数据从内存复制到寄存器 存数(sw)将数据从寄存器复制到内存
指令字长:32
寄存器个数:32
(32 x 32-bitMIPS: 32个32-bit(寄存器宽度)的寄存器)
MIPS:大端模式,即字的最高字节(书写习惯中右低左高)在最低地址(值对应高低)
-
指令
-
R(Register)型指令
-
字段解释
op:操作码(R型指令中所有操作码都为0)
rs:寄存器编号,对应第一个操作数
rt:寄存器编号,对应第二个操作数
rd:寄存器编号,对应第三个操作数
shamt:常数,用于移位指令
func:功能码,指定指令的具体功能
-
指令表
-
指令类型
add / sub / and /or /xor (运算)
$ rs op $ rt → $ rd
sll / srl / sra(移位)
$ rt shift shamrt → $rd
jr (跳转)
$ rs → PC
-
-
I (Immediate)型指令
-
字段解释
op:标示指令的操作功能
rs:第一个源操作数,为寄存器操作数
rt:目标寄存器编号,用于保存结果
imm:第二个源操作数,立即数
-
指令表
-
指令类型
addi / andi / ori / xori (运算)
$ rs op E(imm) → $ rt # 注意立即数的带符号拓展与无符号拓展,分别对应数值与逻辑运算
lw / sw (面向内存)
lw : mem[ $ rs + E(imm) ] → & rt
sw : $ rt → mem[ $ rs + E(imm) ]
lui(数位设置)
im << 16 → $ rt
(空位补零)
beq / bne (条件分支)
beq PC + E(imm)<<2 → PC # if ( $ rs == $ rt )
bne PC +E(imm)<<2 → PC # if ( $ rs ≠ $ rt )
tips:这里E为带符号扩展为32位,然后再对立即数左移2位
-
-
J(Jump)型指令
-
字段解释
op:确定指令功能
address:转移目标地址的偏移量(该指令用于)
-
指令表
-
指令类型
略
-
-
-
寻址方式
- R型指令由 op func 字段共同隐含说明当前寻址方式
- I J 型指令由 op 字段隐含说明当前寻址方式
- 见上边基本里
-
MIPS汇编代码
-
代码
一般用 t 0 , t0, t0,s0的形式表示寄存器,其中 t 0 表 示 作 为 临 时 值 存 放 , t0表示作为临时值存放, t0表示作为临时值存放,s0用于保存变量
寄存器操作数实例:
f = ( g + h ) - ( i + j )
add $t0 , $s1 , $s2
add $t1 , $s3 , $s4
sub $s0 , $t0 , $t1
包含立即数的运算
addi $s3 , $s3 , 4 # 无负常数
对内存操作
lw t 0 , 32 ( t0 , 32( t0,32(s1) # 32为偏移地址,$s1为基址寄存器 load word
sw t 0 , 48 ( t0 , 48( t0,48(s2) #同上 save word
→ 对于寄存器内移动数据操作
addi $s1 , $s2 , 0 # 某数加0移动到指定位置
add $t2 , $s1 , $zero # mips32将该zero寄存器置为0,为硬连接
-
-
-
自行设计指令系统格式
操作码+寻址码+寄存器地址码+内存码+偏移量
- 操作码 n位操作码支持不大于2^n种操作
- 寻址码 n位支持不大于2^n种操作
- 寄存器地址码:取决于系统CPU寄存器的数目
- 内存码:取决于内存大小
- 偏移量:n位偏移量支持 -2^(n-1) ~ 2^(n-1)-1
-
指令周期特性
-
单周期CPU 与 多周期CPU ———- MIPS32 - 单周期CPU
-
单周期CPU - 指令固定在一个时钟周期完成(中间不可能保存中间量) CPI=1
时间效率低,时钟宽度由单指令最长时间决定(导致CPU主频低,效率低)
指令周期内,功能部件不能共享,冗余度大(所有功能一个时钟周期完成,中间量不能保存,显然)
-
多周期CPU - 指令分散在多个时钟周期内完成
时间效率高,时钟宽度由单步操作最长时间决定
不同时钟周期,不见可共享,冗余度降低
-
时序信号:
指令周期 > 工作周期(机器周期) > 节拍周期(CPU时钟周期)
指令周期:
是取出并执行一条指令所需的全部时间
一般包括取指周期,间址周期,执行周期,中断周期
机器周期:
所有指令执行过程中的一个基准时间
通常用内存中读取一个指令字的最短时间规定
时钟周期
控制计算机操作的最小单位时间
由CPU主频决定
-
指令中周期的含义
FT取指周期
ST源周期
从主存中读取源操作数,将依据指令寄存器IR的源地址字段信息进行操作,形式源地址,读取源操作数,
DT目标周期
从主存中读取目的地址或目的操作数,将依据指令寄存器IR的目的地址字段信息进行操作,计算转移地址等
ET执行周期
据IR中的操作码执行相应操作,实现操作码要求的传送,计算操作
MT
内存读写时间
RT
寄存器读写时间
-
-
数据通路与控制器设计
-
CPU执行一条指令的步骤
(1)取指令
根据PC指针,从存储器中取出指令,并做PC+4
(2)分析指令
根据指令操作码送至控制器分析指令功能,产生相应控制信息
(3)取操作数
根据指令寻址方式,与相应操作数字段,选择读取寄存器或存储器或立即数,并送至ALU
(4)执行指令
ALU根据控制器产生的控制信号完成相应操作,并保存结果或修改PC
- 多周期处理器步骤
- 取指令
- 完成寄存器取数、转移地址计算
- 执行运算或分支判断
- 存储器(内存)读写
- 寄存器堆写回
- 多周期处理器步骤
-
MIPS数据通路架构设计
-
数据通路设计步骤
-
多周期
指令执行过程按存储单元级的信息传输,细分为多步,每步安排一个时钟周期
共享硬件简化数据通路
从R型指令开始整合数据通路
-
单周期类似
面向指令功能,逐步扩展整合
-
-
取指功能的数据通路(公共)
-
完成功能
Mem[ PC ] → IR # 根据程序计数器读取下一指令,并存放到相应指令寄存器
PC + 4 → PC # PC 指针指向下一条指令地址
-
数据线布局
-
-
R型运算指令数据通路
-
数据布线
-
分析:对象为 R型运算指令
分析指令:首先 由 op 与 func 字段经过译码单元,给运算器发送运算控制信号ALU_OP
取操作数:寄存器堆的两个输入地址与指令对应字段相连接,读出数据后,进入ALU
执行指令:ALU产生相应结果,而对于寄存器堆的写入,写入地址端与指令对应寄存器地址连接,数据段与ALU输出相连,写入使能端由译码单元控制,等待时钟信号,写入数据,完成操作
-
能完成R型算数与逻辑运算
-
信息传送过程
- Mem[PC] → IR , PC +4 → PC
- Reg[rs] → A , Reg[rt] → B
- A op B → F (ALU OUT)
- F → Reg[rd]
-
-
R型上拓展I型指令
-
lw指令
-
完成操作:
基址寻址方式产生内存地址(未实现)
对内存的访问(加入数据存储器线路)
对对应寄存器地址访问(已实现)
-
数据布局
-
信息传送过程
- Mem[PC] → IR , PC +4 → PC
- Reg[rs] → A #基址
- A + E[offset] → F
- Mem[F] → MDR
- MDR → Reg[rt]
-
-
sw指令
-
完成操作
基址寻址产生内存地址(完成)
读取对应寄存器内数据并输出到相应内存(未完成)
-
数据线布局
-
信息传送过程
- Mem[PC] → IR , PC +4 → PC
- Reg[rs] → A , Reg[rt] → B
- A + E[offset] → F
- B → Mem[F]
-
-
立即数运算
由于之路中存在imm的符号拓展,则可以实现
信号传送过程
- Mem[PC] → IR , PC +4 → PC
- Reg[rs] → A
- A op E[imm] → F
- F → Reg[rt]
-
-
I型分支指令
-
beq 指令(相等跳转)
beq rs rt imm
-
解释
if( rs == rt )
then PC + 4 + E( imm )<<2 → PC #PC 相对寻址
else PC +4 → PC
-
操作解释
rs rt寄存器数据进入ALU 进行减法运算,输出zero标志位表示是否相等,是否跳转,且zero信号 进入译码控制单元控制接下来的操作(未实现)
imm字段需要拓展并左移两位形成偏移地址量(未完成)
PC 指针的更新(未完成)
-
数据线布局
-
信息传送过程
- Mem[PC] → IR , PC +4 → PC
- Reg[rs] → A ,Reg[rd] → B , A - B → zero ; PC +4 + (E(imm) << 2) → F
- if zero == 0 , F → PC ; if zero == 1 , PC + 4 → PC
-
-
-
J型指令
-
完成操作 - 页面寻址
地址位左移两位
地址拼接器
-
数据线布局
-
信息传送过程
- Mem[PC] → IR , PC +4 → PC
- PC[31:28] U (add << 2) → PC
-
-
总体布局整合
引入 MUX 实现数据通路的合并
-
-
基本控制单元设计思路 ————— MIPS32组合逻辑
-
分析指令相应字段产生不同操作的控制信号(微命令,也就是数电领域的各种控制信号)
-
怎样产生控制信号,有两种结构
-
组合逻辑硬连线
步骤:由组合逻辑电路产生微命令序列
思路:
整理指令控制信号
整理控制信号级的真值表
把表达式转换成组合逻辑电路
特点:控制信号产生速度块,设计不规整,不容易修改该或扩展
- 单周期控制信号分析
-
控制信号分析(一共九个)
-
MUX控制信号
PCSrc → 控制 PC 浮动方式
直接+4
I型分支,PC相对寻址
J型跳转指令,页面寻址(移位拼接)
Regdst → 控制 写入操作的目标寄存器的地址
区分 R 与 I 型指令
AluSrc → 控制ALU的一端数据输入
输入端为 imm 的符号拓展结果 →访存
或者为寄存器数据 → R与 I 型运算指令
Mem2reg → 控制寄存器的写入数据
来自ALU → R与 I 型运算指令
来自mem → 访存操作
-
控制信号
内存的读写信号:R W
寄存器的写信号:Regwrite
符号拓展器信号:extend ,区分带符号拓展与无符号拓展
ALU运算类型控制信号:operation
-
架构
-
表格
-
-
控制信号结构实现
-
- 单周期控制信号分析
-
微程序,基于存储(只适用于多周期CPU)
-
基础部分
-
步骤:由微程序生成微指令,微指令生成微命令序列
微指令组成:微命令字段+辅助字段+顺序控制字段
- 微命令字段:数据选择器的一些控制信号
- 辅助字段:微地址字段
- 顺序控制字段:标识下一条微指令的地址形成方式
微指令操作控制编码方式:
直接编码方式:速度快,但控存容量极大
字段直接编码方式:缩短了微指令的长度,但是增加了译码电路,使执行速度减慢
字段间接编码方式:进一步缩短指令字长,但削弱了微指令的并行控制能力
混合编码方式:综合考虑微指令的字长、灵活性、执行速度等方面的要求
常数字段方式:来提供常数、计数器初值等
-
详细解释:
一条机器指令所完成的操作划分成若干条微指令来完成(若干条微指令序列即为微程序),由微指令进行解释和执行。
指令→微指令→微命令
-
特点:产生速度慢,可靠性高,灵活性强,维护性好,结构规整,有利于自动化
-
-
多周期mips控制信号分析
-
架构图
-
控制信号分析
类似于单周期控制信号
-
-
-
-
引入分级控制 简化控制器设计难度
主控单元→部分简单控制信号
主控单元→中间信号→下级控制器→复杂控制信号
-
具体实现
以MIPS32组合逻辑为例,类似数电设计组合逻辑电路,通过输入输出的真值表设计电路布局
-
-
-
CPU硬连线模式样例与指令执行分析
-
16位
- 指令操作流程
-
指令信息
M → DB → IR
-
地址信息(相对于指令)
PC → A → ALU → 移位器 → 内总线 → MAR
PC → A → ALU( + CO) → 移位器 → 内总线 → PC (PC + 1)
取指周期(FT)
M → IR
PC +1 → PC
-
转移地址
R0 → B → ALU → 移位器 → 内总线 → PC (寄存器寻址)
R0 → B → ALU → 移位器 → 内总线 → MAR → AB →DB → MDR →B → ALU → 移位器 → 内总线 → PC (寄存器间接寻址,寻内存)
-
操作数地址
R0 → B → ALU → 移、内 → MAR(寄存器间接寻址)
变址基址
PC → A → ALU → 移位器 → 内总线 →MAR → AB → M
M → DB → MDR → B → ALU → 移位器 → 内总线→ C
R1 + C → A + B →ALU → 移位器 → 内总线 →MAR
-
数据信号
R → R
R0 →B → ALU → 移位器 → 内总线 → R1
R → M
R0 → B → ALU → 移位器 → 内总线 →MDR → DB → M
M → R
M → DB → MDR → R1 → ALU → 移位器 → 内总线 →RX
M → M
M → DB → MDR → R1 → ALU → 移位器 → 内总线 → RX → ALU → 移位器 → 内总线 → MDR → DB → M
R → IO
R0 → ALU → 移位器 → 内总线 → MDR → DB → IO
IO → R
IO → DB → MDR → RI → ALU → 移位器 → 内总线 → RX
IO → M
IO → DB → M
-
- 指令操作流程
-
32位(MIPS32)
-
-
性能相关问题
-
提高性能的方法
针对存储器
采用Cache - 主存层次的设计与管理提高整机的速度
采用内存 - 虚存层次的设计与管理提高整机的速度
采用多体并行设计方法提高访问速度
针对控制器
采用指令流水提高整机的速度
采用超标量设计技术提高整机的速度
采用多核技术提高整机的速度
针对运算器
采用对于运算方法的改进,比如进位链与两位乘除法
针对IO系统
采用DMA技术,减少CPU对外设访问的干预
-
流水技术
- 基本概念
-
含义:
把指令分解为若干子过程,每个子过程都可与其他子过程重叠执行
-
特点:
-
流水线的子过程称为流水线的 级 或 段,子过程的数目为流水线的 流水深度m
-
每个字过程由专用的功能段实现,各功能段的时间应基本相等,通常为一个时钟周期 T
-
流水线需要一定的通过时间才能稳定(完成工作)
即无空闲功能段 且 t(稳定) = T x m
-
适合于大量相同指令的执行
-
-
- 基本类型
- 性能指标
-
吞吐率
单位时间内处理的任务数或数据量
-
加速比
同一任务,非流水处理与流水处理执行的时间比
-
利用率(流水线内各部件的平均利用率)
部件实际工作时间 与 部件总利用时间的比值
-
- 基本概念
-
SMT与超线程(HT)
-
SMT基本概念
即CPU能执行来自多个线程的指令(同步多线程)
-
HT超线程就是一种典型SMT
在一颗CPU上同时硬件级的并行执行多个程序的指令
-
例子
Intel2002的HT首先用于 Xeon(至强)处理器
-
-
多核技术
-
基本概念
一个处理器芯片上集成多个CPU内核
-
例子
国内首款
龙芯3A (2009,原生4核)
FT-1000/1500 (2013,16核)
-
-
-
五、存储结构
-
基本层次结构概念
-
层次结构
Cache(CPU内) < - >主存(内存) < - > 外存
-
Cache(高速缓冲存储器)
存储CPU在当前一段时间内多次使用的程序和数据,以缓解CPU与主存的速度差异
速度非常快,容量非常小
-
主存(内存)
主要存放CPU当前使用的指令与数据(指令从外存读入内存等待CPU缓存器调用)
能随机访问:任意访问且时间与地址码无关
工作速度快,有足够存储容量
-
外存(辅存)
存放大量后备程序与数据
速度较慢,容量较大
-
-
存储设备
-
半导体存储器
-
ROM(只读)
(1)掩膜ROM,利用掩膜工艺制造,一旦做好,不能更改,因此只适合于存储成熟的固定程序和数据。工厂大量生产时,成本很低。
(2)可编程ROM,简称PROM,由厂商生产出的空白存储器,根据用户需要,利用特殊方法写入程序和数据,但是只能写一次,写入后信息固定的,不能更改。
(3)光擦除PROM, 简称EPROM,这种存储器编写后,如果需要擦出可用紫外线灯制造的擦除器照射20分钟左右,使存储器复原用户可再编程。
(4) 电擦除PROM, 简称EEPROM, 顾名思义可以通过电来进行擦除,这种存储器的特点是能以字节为单位擦除和改写,而且不需要把芯片拔下插入编程器编程,在用户系统即可进行。
(5)Flash Memory, 简称闪存。它是非易失性存储器,在电源关闭后仍能保持片内信息,与EEPROM相比,闪存存储器具有成本低密度大的优点。 -
RAM(随机读写)
(1)双极型:其特点是存取速度快,采用晶体管触发器作为基本存储电路,管子较多,功耗大,成本高,主要用于高速缓存存储器Cache
(2)MOS型:其特点是功耗低,密度大,故大多采用这种存储器,它又分为两种:
静态RAM(SRAM)
存储原理是用双稳态触发器来做存储电路,状态稳定,但是掉电后信号会丢失,优点是不用刷新,缺点是集成度低。(cache)
动态RAM(DRAM)
存储原理是用电容器来做存储电路,优点是电路简单,集成度高,缺点是由于电容会漏电需要不停的刷新。(主存)
-
-
磁盘存储器
-
基本结构
盘片 (一般双面读写)→ 盘组 → 磁盘阵列(raid)
三个盘片,每个盘片对应两个面即共有六个盘面,通过磁头与盘面交互完成读写操作
-
技术指标与校验(计算)
-
记录密度
磁道密度:盘面上单位径向长度内的磁道数
位密度:磁道上单位长度可记录的比特数
-
存储容量
格式化容量:通过扇区计算
→ 盘片数量 * 2(单个盘片可操作面数) * 磁道数量 * 扇区数 * 扇区容量
非格式化容量:通过位密度计算
→ 盘片数量 * 2 * 磁道数量 * 内层磁道周长 * 内层位密度
-
速度指标
平均存取时间:寻道时间+旋转时间
带宽(数据传输率)
→ 转速 * 扇区数 * 扇区容量
-
例子
-
-
-
-
计算机三级存储体系详解(基于程序局部性原理)
-
层次逻辑
Cache ←→ 内存 ←→ 外存
程序与数据存放在外存,运行时先导入内存,运行结束后数据又要输入内存
Cache的集合缓冲区接受内存的预置的指令与数据后执行,完成后又要通过缓冲区写入内存
-
地址关联(由于数据指令传输产生的地址关联)
Cache 与 内存(主存)— Cache-主存系统
以数据块为单位整体操作
直接映射、全相联映射、组相联映射
内存 与 外存
虚拟存储技术 — 主存-虚存系统
页式、段式、段页式
-
Cache-主存体系
-
Cache
-
存在的原因与效果
①CPU访问内存数据或指令只局限于主存的一个小区域(热点区)
②CPU处理速度与访存速度不一致
→因此可以将该区域提前预存到一个高速小容量的Cache中,使 得访存平均速度接近于访问Cache速度
-
存在的特点
仅依赖硬件系统实现,对用户透明
集成与CPU内部
-
-
Cache - 主存 地址映射
-
作用:
这一层面主要解决CPU与主存速度不匹配的问题,主存用来存放将要参与运行的程序和数据。但是其速度与CPU相差很大,为了使得他们之间的速度更好匹配,于是在主存与CPU之间插入了一种比主存更快,容量更小的高速缓冲存储器(Cache),因此只要把近期要使用的信息调入缓存,CPU便可以直接从缓存中获取信息。注意,主存与缓存中的数据调动是由硬件自动完成,对程序员是透明的。
-
定义与映射类型详解
-
以固定大小的数据块进行整体调度(交换)
-
讨论条件
存储器按字节编址:1 Byte / 地址
数据块大小 2^9=512 Byte(B)
Cache容量:8KB( 1024 B = 1 KB ) → 分成16块
主存容量:1MB( 1024MB = 1 MB ) →分成2048块
-
直接映射
-
Cache:只分块,不分组 (分成16块)
主存:既分块,也分组(每组的块数=Cache的块数)
-
映射规则:
主存的每一个数据块,只能映射到与其组内序号相同的Cache数据块位置
很明显的直接映射,不同组,同样的块序号映射;
解释一下:
-
主存地址 → 分组组号+组内块序号+块内字节地址
主存地址没问题,通过虚拟软件转换为虚拟地址
分组组号:主存分组,共128组
组内块序号:每组16块
块内字节地址:每块512B(字节)
-
判断位置:
标记字段:内存分组组号
缓存判断来源:
直接看标记字段,也就是分组的组号就可定位每块对应内存的位置
内存判断是否在缓存
由于每组每块只能映射到相同的位置,给定主存地址后,找到Cache对应块的地址,比较分组的组号就能确定当前组的该块数据是否在Cache内
-
-
-
全相联映射
-
Cache:只分块,不分组
主存:只分块,不分组
-
映射规则:主存的任何一个数据块都可以映射到缓存的任何一个数据块位置上
带点随机映射,只能通过标记位判断来源,好鸡肋哦,效率低欸
解释一下:
-
主存地址 → 主存块号 + 块内地址
-
判断位置
标记位:主存的块号(太长,判断时间长,硬件复杂)
主存到缓存:随便映射(就离谱)
缓存到内存:只能通过标记位判断来自那块
-
-
-
组相联映射
-
Cache:既分块,也分组
主存:既分块,也分组(组内的块数 = Cache的组数)
-
映射规则
主存数据块,只能映射到与自己组内快序号相同的缓存分组,可占据缓存分组中任意数据块的位置(假设缓存16块分了8组,导致内存一组有8块,所以内存每组的块数对应缓存组数,且该块数可对应相应内存组中的任意块数)
图示为2路-组相联:2路表示缓存每组块数
解释一下:
-
主存地址 → 组号+组内块号+块内地址
-
主存 → 缓存
组内块号对应缓存组号,然后缓存组内映射随机
缓存 → 内存
缓存组号对应内存组内块号,利用标记位解析出内存组好
-
-
-
例题分析
难点不在于前面缓存,主存的分组,而是地址位
129=10000001 按三种映射规则转换主存地址
-
首先从地位开始为共有的块内地址
取决于一块的大小,本题为32=2^5,即5位即可表示完全
-
然后对于组相联映射,后五位之后的三位为组内块号(对应缓存组号)
-
129=10000001
00001 - 表示块内地址
100 - 表示组内块号
其他高位补齐由内存分组决定,表示内存组号
-
总结:
xxx号主存单元的地址转换
先转为二进制:
按照块的大小,定义块内字地址段的长度
内存的分组,定义组号地址段长度的长度
内存组内块数量,定义组内块号地址段长度
-
-
-
替换算法(基于全相连映射)
- 由于缓存容量小,当内存数据进入缓存时,若缓存已被内存数据占满则需要调用替换算法,把缓存部分数据块写回内存,替换成当前数据块
-
FIFO法
队列先进先出,简单的很,新进来的顶掉下面队首的,命中时不改变cache中数据次序
-
近期最久未使用(LRU - Least - Recently Used)
近期内最久未被访问过的内存块被置换出去
从上到下,最上面的展示最近被访问过的数据缓存块,最下面的是近期最久未被访问的,即会被替换掉的,遇到命中,则将命中块提到最上面,其余次序不变,遇到替换的,放在最上面并将最下面的顶掉
-
最不经常使用法(LFU - Least Frequnently Used )
一段时间内缓存访问次数最少的数据块被置换
-
随即替换
随即替换呗
-
例题
-
- 由于缓存容量小,当内存数据进入缓存时,若缓存已被内存数据占满则需要调用替换算法,把缓存部分数据块写回内存,替换成当前数据块
-
-
Cache的读写操作详解
-
通过Cache的存在,将CPU的访存操作简化为访问缓存的操作
-
写 操作
当CPU发出写请求(指写入内存),若Cache命中(目标内存单元已经映射到缓存之中),处理方案如下
- 通写:Cache与内存单元同时写,使之保持一致
- 回写:只修改Cache单元,并用标记位注明,直到该块被替换掉时,才写入内存
-
读 操作
-
旁路式读(Look-Aside)
CPU同时向缓存与主存发送读命令与地址
若缓存命中:直接返回数据并中断读内存的命令
若缓存不命中:直接访问主存读取数据
-
通过式读(Look-Through)
CPU首先向Cache发读命令和地址
若缓存命中,则从缓存中读出数据
若不命中,再将读命令和地址传给主存并读主存
-
-
-
-
主存-虚存体系
- 主存-虚存 虚拟映射
-
作用
这一层面主要解决存储系统的容量问题,辅存的速度较低,但是容量大,用于存放暂时未用到的信息,当CPU要用到这些信息的时候,将辅存的内容调到主存中,供CPU直接访问,主存与辅存之间的数据调动是由硬件和操作系统共同完成的。
-
定义 与 虚拟映射
-
虚拟存储器技术:
CPU访问外存,首先通过内存与虚存的交互,得到虚地址码,进而通过软件把虚地址码转化为磁盘(外存)地址码,进而完成外存的访问
-
内存 虚存地址 映射
-
基本方式:内存虚存地址之间建立关联表
-
页式虚拟存储管理
-
主存与内存统一分页管理(这里的页相对于缓存的块)
-
页表:
记录虚地址页号(虚存)与实地址页号(内存)的对应关系,页表中的每一行称为页表项
页表项由实页号与标志位构成,其中标志位表示当前对应虚页面数据是否已被读取入内存里
-
页表基址寄存器:
纪录页表在主存中的起始地址
-
TLB(快表):
把活跃页表项用高速存储器单独存储,访问速度更快
-
具体流程:
虚页号与页表基址寄存器拼接得到实页号,虚地址的页内地址再拼接得到主存(内存)地址(想要访问外存的操作转化为访问虚存操作转化为访问内存操作,妙啊)
-
-
-
段式虚拟存储管理
- 主存与虚存统一分段管理
-
段表:
虚实地址转换对应表
每段都有一登记项:段号、段起点、段长、装入位等
-
段表基址寄存器
-
流程图
-
- 主存与虚存统一分段管理
-
段页式虚拟存储管理
-
虚存先分段再分页管理,且虚存页面大小与内存页面大小一致
内存只分段
-
段表,页表
-
段表基址寄存器,页表基址寄存器
-
地址格式
虚地址:段号 + 页号 + 页内地址
实地址:页号 + 页内地址
-
流程
由此可以小小总结一下,虚地址都是通过 基准地址(基址寄存器等方法)+虚地址的页号或段号得到实地址,然后实地址与页内地址拼接得到主存地址
-
-
-
-
- 主存-虚存 虚拟映射
-
两个体系区别
-
目的不同
主存-辅存是为了增加容量,cache-主存是为了提高速度
-
与cpu访问方式不同
cpu只能访问主存不能访问辅存,cpu能访问cache和主存
-
映射方式不同
主存-辅存是全相联映射,cache-主存是全相联映射,组相联映射,直接映像都有
-
透明性不同
主存-辅存对系统程序员不透明,对应用程序员透明,cache-主存对二者都透明
-
挺高命中率方式不同
主存辅存随着页面的增大,命中率先增大,到一定程度之后就减小了,但cache-主存不会,虽然块增的太大,会降低速度,但是命中率不会减小
-
增加的支持不同
主存辅存增加了硬件和软件,cache-主存只增加了硬件,cache要求速度,所以都是硬件实现的
-
-
六、总线与IO设备
-
总线技术
- 定义:连接各功能组件并承担部件之间信息传送任务的公共信息通道
-
分类
-
按传输信号分类
数据总线(DB)
地址总线(AB)
控制总线(CB)
-
按层次分类
内部总线
系统总线
IO总线
-
按功能分类
内总线:芯片内
局部总线:板卡内
系统总线:计算机内
外总线:多机集群
-
-
结构分类
-
单总线结构
-
多总线系统
-
-
总线的性能问题
-
性能指标
-
例题
数据宽度为数据字节长 8位一字节
-
-
总线周期与操作过程
-
基本步骤
主设备申请总线,仲裁器裁决并批准 (主设备:申请并掌握总线权限的设备)
主设备掌握总线,启动总线周期、初始化(总线周期:通过总线完成一次完整数据传输的时间)
从设备响应,主从设备之间数据传输(从设备:与主设备对应的设备)
主设备释放总线,总线周期结束
-
数据传输模式
单周期模式:申请一次,只分配一个总线周期,只传送一次数据
突发模式:申请一次,可分配多个总线周期,可传输多个数据字
-
控制方式
同步总线:由统一的时序信号控制
异步总线:异步应答方式控制总线的传送操作
扩展的同步总线:在同步应答中加入异步应答的思想,即以时钟周期为时序基础,允许总线周期中时钟数可变
-
总线的仲裁方式
解决总线控制权的分配问题,一般采用优先级或公平决策进行仲裁
按仲裁电路分布分类
-
集中式仲裁
每个模块都有两条线连接到中央仲裁器(公共仲裁器)
BR - 总线请求信号线
BG - 总线授权信号线
-
链式查询集中式仲裁
-
计数器定时集中式仲裁
-
独立请求集中式仲裁
-
-
分散式仲裁
-
-
-
IO接口
-
基础
-
IO接口:主机与外设的衔接部分,位于总线与外部设备之间
原因:计算机采用层次结构处理,主机只能管理到接口,所以接口用来衔接主机与外设
基本功能:
设备寻址:通过接口完成CPU对外设的访问
数据缓冲:实现主机与外设的速度匹配
预处理功能:格式转换,宽度转换,电平转换等
控制逻辑功能:协助主机实现对IO传送操作的控制
-
接口寄存器的编址
-
单独编址(独立于主存地址)
为接口的每一个寄存器(IO端口)分配独立的端口地址
特点:
需要设置标志位区分访问对象 M/IO (1-访问存储器 0-访问IO端口)
需要专门的IO指令完成IO操作(显式IO指令)
-
统一编址(与主存一起编址)
把IO端口当成特殊内存单元并与主存一并编址,此时IO端口将占据主存的部分地址空间
特点:
编址基本原则:
低端地址 → 内存单元
高端地址 → IO端口
可用普通访存指令(隐式IO指令)完成IO操作,不需要额外设定IO访存指令
-
-
IO接口的分类
-
传递信息的联络方式
立即响应:适合于工作速度十分缓慢的IO设备
同步:IO设备与主机工作速度不匹配
异步:IO设备与CPU工作速队完全同步
-
按数据传输格式分类
并行接口:
接口两端均采用并行传输
适用于设备本身并行工作,距离主机较近的场合
串行接口
接口与外设一侧串行传送
设用于设备本身串行工作,距离主机较远或者需要减少传送线的情况
-
按 IO操作的控制方式
PIO(直接程序传送方式) - 程控方式
中断接口
DMA接口
IOP/PPU接口
-
-
输入输出控制模式
-
计算机的两级控制模式
-
第一级控制(相对于主机而言,只需要考虑第一级控制)
直接程序传送方式(PIO)
程序中断方式(Interrupt)
直接存储器访问方式(DMA)
IOP/PPU方式(专用处理器/处理机)
(前两种方式都是采用主机调用程序完成控制,后两种不需要主机执行IO程序,核心差异在于CPU承担的任务不同)
-
-
-
IO控制模式详解
-
直接程序传送方式与其接口
-
特征:
主机CPU直接执行IO程序实现主机与外设的IO交互(概况)
需要专门的IO程序,且需要对IO设备设定相应的状态量
主机CPU执行IO程序,需要不断查询外设状态量,才能进而控制具体的数据IO过程(执行过程)
在数据IO过程中,CPU无法执行其他任务面对其它外设请求响应慢,完全被束缚于简单的数据IO控制
-
优缺点
硬件开销小,实时处理能力差,并行程度低,CPU利用率低下
适用于IO效率不高,数据量少的场景,i比如外设的诊断或调试
-
-
中断方式与接口
-
程序运行过程中,发生某种随机事态,CPU暂停当前程序,转而执行该事态对应的服务程序,结束后再恢复源程序的执行
-
特征:程序切换+随机性
-
本质:保护端点,保护现场;恢复现场,返回断点;
(保护现场,中断服务,恢复现场,中断返回)
-
-
特征分析
数据传送:程序
响应时间:指令执行结束
处理异常情况:能
中断请求:传送数据
优先级:低
-
-
DMA(Direct Memory Access)模式
-
直接采用硬件来控制主存与外设之间的数据,之间CPU不参与干预,结束后以中断模式通知CPU
-
特点:随机响应,不占用CPU。只占用总线,无程序切换,实现大批量数据的简单传送
-
应用场景:主存与IO的简单数据传送,大批量数据采集,DRAM的自动刷新
-
特点分析
数据传送:硬件
响应时间:存取周期结束
处理异常:不能
中断请求:后处理
优先级:高
-
-
IOP/PPU模式
-
IOP - IO Processor 输入输出处理器
-
PPU Peripheral Processor Unit - 外围处理单元
-
特点
受主机CPU控制,可与CPU并行工作
可独立执行复杂IO操作
-
-
-
其他资料可以访问本人github主页自行浏览下载
https://github.com/Schiz0mania
(快让我康康!!)