计算机组成原理
计算机系统概述
计算机系统层次结构
计算机硬件
1.冯·诺依曼机基本思想
- 采用“存储程序”的工作方式
- 硬件系统由运算器、存储器、控制器、输入设备、输出设备组成
- 指令和数据以同等地位存储在存储器中,形式上没有区别(能够区分指令和数据的是控制器)
- 指令由操作码和地址码组成
2.计算机的功能部件
输入设备
- 键盘、鼠标、扫描仪、摄像机等
输出设备
- 显示器、打印机等
存储器
- 主存储器的工作方式:按存储单元的地址进行存取,地址存取方式
- 组成
- 存储体
- 地址寄存器(MAR):存放访存地址
- MAR位数与PC长度相等
- 数据存储器(MDR):暂存存储器中读或写的数据
- MDR位数与存储字长相等
- 时序控制逻辑:产生存储器操作的时序信号
运算器
- 对数据进行加工处理
- 组成
- 算数逻辑单元(ALU)、累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)、变址寄存器(IX)、基址寄存器(BR)等
- 程序状态寄存器(PSW):保留运算指令和测试指令的结果状态,表征系统状态
控制器
- 组成
- 程序计数器(PC):用来存放当前欲执行指令的地址,可以自动加1以形成下一条指令地址,它与主存的MAR之间有一条直接通路
- 指令寄存器(IR):用来存放当前指令,其内容来自MDR
- 控制单元(CU):分析来自IR的数据,发出微操作命令
计算机软件
1.系统软件和应用软件
- 系统软件:操作系统(OS);数据库管理系统(DBMS);语言处理程序;分布式软件系统;网络软件系统;标准库系统;服务性程序
- 应用软件
数据库管理系统DBMS和数据库系统DBS不一样
DBS是计算机系统引入数据库后的系统,一般由数据库、数据库管理系统、数据库管理员和应用系统构成
2.三个级别的语言
- 机器语言
- 汇编语言
- 高级语言
3.翻译程序
- 汇编程序(汇编器):将汇编语言程序翻译成机器语言程序
- 解释程序(解释器):将源程序冲的语句按顺序逐条翻译成机器指令并执行
- 编译程序(编译器):将高级语言程序翻译成汇编语言或机器语言程序
计算机系统的层次结构
- M0:微程序机器层,是硬件层,它由机器硬件直接执行微指令
- 执行微指令
- M1:传统机器层
- 执行机器语言指令
- M2:操作系统层
- 向上提供广义指令
- M3:汇编语言层,为用户提供一种符号化的语言,借此可编写汇编语言源程序
- 执行汇编语言
- M4:高级语言层
- 执行高级语言
计算机系统的工作原理
1.“存储程序”工作方式
- 程序、数据装入主存
- 从程序起始地址开始运行
- 程序首地址取出指令—>指令译码;指令执行—>完成功能并计算下一条指令地址
- 新得到的指令地址读出下一条指令,直到程序结束
2.从源程序到可执行文件
- 预处理阶段:预处理器cpp将
.h
文件内容插入程序文件,输出hello.i
- 编译阶段:编译器ccl将
hello.i
进行汇编,生成汇编语言源程序hello.s
- 汇编阶段:汇编器as将
hello.s
翻译成机器语言指令,打包成一个可重定位目标文件的hello.o
- 链接阶段:链接器ld将多个可重定位目标文件和标准库函数合并为一个可执行目标文件
3.指令执行过程的描述
- 取指令:PC→MAR→M→MDR→IR
PC=0;(PC)→MAR;(MAR)=0
M(MAR)→MDR;(MDR)=1 5
(MDR)→IR;(IR)=1 5
- 分析指令:OP(IR)→CU
OP(IR)→CU;CU=1;代表取指令
- 执行指令:Ad(IR)→MAR→M→MDR→ACC
Ad(IR)→MAR;MAR=5
M(MAR)→MDR;(MDR)=2
(MDR)→ACC;(ACC)=2
计算机的性能指标
- 字长:CPU内部用于整数运算的数据通路的宽度,反映计算机处理信息的能力
- 字长等于CPU内部用于整数运算的运算器位数和通用寄存器的宽度
指令字长 | 存储字长 | 机器字长 | |
---|---|---|---|
定义 | 一条指令包含的二进制代码的位数 | 存放在一个存储单元中的二进制的位数 | 能够一次性直接处理二进制数据的位数 |
=MDR的位数 | =通用寄存器的位数 =ALU的位数 |
-
数据通路带宽:数据总线一次能并行传送信息位数
-
主存容量
运算速度
- 吞吐量和响应时间
- 吞吐量:系统在单位时间内处理请求的数量,主要取决于主存的存取周期
- 响应时间:从用户向计算机发送一个请求,到系统对该请求做出相应并获得所需结果的等待时间
- 响应时间=CPU时间+等待时间(磁盘访问、存储器访问、I/O操作、操作系统开销)
- 主频和CPU时钟周期
- 主频(CPU时钟频率):1/时钟周期,以Hz为单位
- 时钟周期:CPU中最小的时间单位
- CPI:执行一条指令所需的时钟周期数
- CPU执行时间:运行一个程序所花费的时间,一般用于判断CPU性能
- CPU执行时间=CPU时钟周期数/主频=(指令条数*CPI)/主频
- MIPS:每秒执行多少百万条指令
- MIPS=指令条数/(执行时间*106)=主频/(CPI*106)
- MFLOPS、GFLOPS、TFLOPS、PFLOPS、EFLOPS、ZFLOPS
数据的表示和运算
数制与编码
定点数的编码表示
原码 | 反码 | 补码 | 移码 | |
---|---|---|---|---|
字长为
n
+
1
n+1
n+1 整数范围 | − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 -(2^n-1)\leq x\leq 2^n-1 −(2n−1)≤x≤2n−1 | 同原码 | − 2 n ≤ x ≤ 2 n − 1 -2^n\leq x\leq 2^n-1 −2n≤x≤2n−1 | 同补码 |
字长为
n
+
1
n+1
n+1 的小数范围 | − ( 1 − 2 − n ) ≤ x ≤ 1 − 2 − n -(1-2^{-n})\leq x\leq1-2^{-n} −(1−2−n)≤x≤1−2−n | 同原码 | − 1 ≤ x ≤ 1 − 2 − n -1\leq x\leq 1-2^{-n} −1≤x≤1−2−n | 同补码 |
0的形式 |
[
+
0
]
=
0.000
[+0]=0.000
[+0]=0.000 [ − 0 ] = 1.000 [-0]=1.000 [−0]=1.000 |
[
+
0
]
=
0.000
[+0]=0.000
[+0]=0.000 [ − 0 ] = 1.111 [-0]=1.111 [−0]=1.111 | [ + 0 ] = [ − 0 ] = 0.000 [+0]=[-0]=0.000 [+0]=[−0]=0.000 | [ + 0 ] = [ − 0 ] = 1.000 [+0]=[-0]=1.000 [+0]=[−0]=1.000 |
- [ A ] 原 ↔ [ A ] 补 [A]_原\leftrightarrow[A]_补 [A]原↔[A]补:从右往左找到第一个1,左边所有数值位取反
- [ A ] 补 ↔ [ − A ] 补 [A]_补\leftrightarrow[-A]_补 [A]补↔[−A]补:从右往左找到第一个1,左边所有位取反
运算方法和运算电路
运算器组成:算术逻辑单元、累加器、状态寄存器、通用寄存器组
串行加法器和并行加法器
基本运算部件
- 一位全加器
- 和表达式: S i = A i ⨁ B i ⨁ C i − 1 S_i=A_i\bigoplus B_i\bigoplus C_{i-1} Si=Ai⨁Bi⨁Ci−1
- 进位表达式: C i = A i B i + ( A i ⨁ B i ) C i − 1 C_i=A_iB_i+(A_i\bigoplus B_i)C_{i-1} Ci=AiBi+(Ai⨁Bi)Ci−1
- 串行加法器
- 并行加法器
- 带标志加法器
- 算数逻辑单元ALU
定点数的移位运算
1.算数移位
- 符号位不参与运算
正数左移;右移 | 负数左移 | 负数右移 | |
---|---|---|---|
原码 | 补0 | 补0 | 补0 |
反码 | 补0 | 补1 | 补1 |
补码 | 补0 | 补0 | 补1 |
2.逻辑移位
- 将操作数看作无符号数,左移右移都补0
3.循环移位
- 适合将数据的低字节数据和高字节数据互换
- 不带进位位
- 带进位位
定点数的加减运算
1.运算电路
- 零标志
Z
F
ZF
ZF
- Z F = 1 ZF=1 ZF=1,结果为0
- 溢出标志
O
F
OF
OF
- O F = C n ⨁ C n − 1 OF=C_n\bigoplus C_{n-1} OF=Cn⨁Cn−1
- O F = 1 OF=1 OF=1,带符号整数运算时发生溢出
- 符号标志
S
F
SF
SF
- S F = F n − 1 SF=F_{n-1} SF=Fn−1,表示结果的符号
- 进/借位标志
C
F
CF
CF
- 在加法时,表示是否进位, C F = C o u t CF=C_{out} CF=Cout
- 在减法时,表示是否借位, C F = S u b ⨁ C o u t CF=Sub\bigoplus C_{out} CF=Sub⨁Cout
- 适用于无符号数
2.溢出的判别方法
-
采用一位符号位
- V = A S B S S s ‾ + A S ‾ B s ‾ S s V=A_SB_S\overline{S_s}+\overline{A_S}\overline{B_s}S_s V=ASBSSs+ASBsSs
- V = 0 V=0 V=0,无溢出; V = 1 V=1 V=1,有溢出
-
采用双符号位
- 00 ; 11 00;11 00;11无溢出; 01 01 01正溢出; 10 10 10负溢出
-
采用一位符号位根据数据位的进位判断溢出
- V = C s ⨁ C 1 V=C_s\bigoplus C_1 V=Cs⨁C1
- V = 0 V=0 V=0,无溢出; V = 1 V=1 V=1,有溢出
C语言中的整数类型及类型转换
char
:1B;short
:2B;int
:4B;long
:4B;long long
:8Bfloat
:4B;double
:8B- 对于无符号整数进行零拓展,对于符号整数进行符号拓展
数据的存储和排列
- 大端:01H;23H;45H;67H(MIPS)
- 小端:67H;45H;23H;01H
- 边界对齐
浮点数的表示与运算
浮点数的表示
1.表示格式
N = ( − 1 ) S ∗ M ∗ R N=(-1)^S*M*R N=(−1)S∗M∗R
2.规格化
- 左规:每左移一位,阶码减一,直到运算结果的尾数的最高数位为有效位为止
- 右规:每右移一位,阶码加一
规格化后的尾数:
-
用原码表示时
-
正数:最大值 0.11...1 0.11...1 0.11...1,最小值 0.10...0 0.10...0 0.10...0, 1 2 ≤ M ≤ ( 1 − 2 − n ) \frac{1}{2}\leq M\leq(1-2^{-n}) 21≤M≤(1−2−n)
-
负数:最大值 1.10...0 1.10...0 1.10...0,最小值 1.11...1 1.11...1 1.11...1, − ( 1 − 2 − n ) ≤ M ≤ − 1 2 -(1-2^{-n})\leq M\leq-\frac{1}{2} −(1−2−n)≤M≤−21
-
-
用补码表示时
- 正数:最大值 0.11...1 0.11...1 0.11...1,最小值 0.10...0 0.10...0 0.10...0, 1 2 ≤ M ≤ ( 1 − 2 − n ) \frac{1}{2}\leq M\leq(1-2^{-n}) 21≤M≤(1−2−n)
- 负数:最大值 1.01...1 1.01...1 1.01...1,最小值 1.00...0 1.00...0 1.00...0, − 1 ≤ M ≤ − 1 2 -1\leq M\leq -\frac{1}{2} −1≤M≤−21
- 基数不同,浮点数规格化的形式也不同
- 基数为2,尾数最高1位与符号位相反
- 基数为8,尾数最高3位不能全与符号位相同
3.IEEE 754标准
float
:1位符号;8位阶码;23位尾数double
:1位符号;11位阶码;52位尾数
N = ( − 1 ) S ∗ 1. M ∗ 2 E − 127 N=(-1)^S*1.M*2^{E-127} N=(−1)S∗1.M∗2E−127
- M:隐藏位的原码
- E:移码
- 对于
float
, 1 ≤ E ≤ 254 1\leq E \leq254 1≤E≤254 - 对于
double
, 1 ≤ E ≤ 2046 1\leq E\leq 2046 1≤E≤2046
- 对于
值 | 阶码 | 尾数 |
---|---|---|
0 0 0 | 全0 | 全0 |
± ∞ \pm\infin ±∞ | 全1 | 全0 |
± ( 0. x x x ) ∗ 2 − 126 \pm(0.xxx)*2^{-126} ±(0.xxx)∗2−126 | 全0 | 非0 |
非数值 | 全1 | 非0 |
浮点数的加减运算
- 对阶:小阶向大阶看齐
- 尾数求和
- 规格化
- 舍入(右规后)
- 0舍1入
- 恒置1法
- 截断法
- 溢出判断
- 上溢:右规(阶码);尾数舍入(尾数)
- 下溢:左规(阶码)
存储系统
存储器概述
存储器的分类
1.按在计算机中的作用对存储器分类
- 主存储器
- 可以被CPU直接访问,也可以与Cache和辅存进行交换数据
- 辅助存储器
- 高速缓冲存储器(cache)
- 可以被CPU直接访问
- 位于主存与CPU之间,缓解CPU与主存之间速度差距问题
2.按存储介质分类
- 磁表面存储器(磁带、磁盘)
- 磁芯存储器
- 半导体存储器(MOS型存储器、双极型存储器)
- 光存储器(光盘)
3.按存取方式分类
- 随机存储器(RAM)
- 存储器的任何一个存储单元都可以随机存取
- 用途:主存、高速缓冲存储器
- 类型:静态RAM(触发器原理)、动态RAM(电容充电原理)
- 只读存储器(ROM)
- 存储器的内容只能随即读出而不能写入
- 广义的ROM可以通过电擦除等方式写入,但写入速度比读入速度慢得多
- 用途:主存
- 串行访问存储器
- 顺序存储器(SAM):磁带
- 直接存取存储器(DAM):磁盘、光盘
- 相联存储器(CAM)
- 可以按照内容检索到存储位置进行读写
- 用途:TLB、相联Cache
4.按信息可保存性分类
- 易失性存储器:RAM
- 非易失性存储器:ROM、磁表面存储器、光存储器
5.按读出类型分类
- 破坏性读出:DRAM
- 非破坏性读出:SRAM芯片、磁盘、光盘
存储器的性能指标
-
存储容量:存储容量=存储字数*字长
-
单位成本:每位价格=总成本/总容量
-
存储速度:数据传输率=数据宽度/存储周期
启动存取t1————存取完t2————下次存取t3
t2-t1=存取时间=写入时间或读出时间
t3-t2=恢复时间
t3-t1=存储周期
多级层级的存储系统
Cache-主存层次:解决CPU和主存速度不匹配问题
主存-辅存层次:解决存储系统容量问题
主存储器
SRAM芯片和DRAM芯片
- SRAM用双稳态触发器(六管MOS)记忆信息
- 易失性存储器,非破坏性读出
- 能同时送行列地址
- 存取速度快,集成度低,功耗大,成本高,多用于Cache
- DRAM用栅极电容上的电荷记忆信息
- 易失性存储器,破坏性读出
- 分两次送行列地址
- 存取速度慢,集成度高,功耗低,容量大,成本低,多用于主存
- 刷新方法:(
- 集中刷新
- 刷新时间固定存在死区:DW DW…DW 刷新
- 读写不受刷新影响,存取速度快,但在死区不能访问存储器
- 死时间率=存取周期*行数/刷新间隔
- 分散刷新
- 将每行刷新分散到各个工作周期中:DW 刷新…DW 刷新
- 没有死区,存取周期变长,降低整机速度
- 异步刷新
- 集中刷新和分散刷新的结合:行DW 刷新…行DW 刷新
- 刷新周期=刷新间隔/行数
- 透明刷新
- 刷新安排在译码阶段,没有死区
- 集中刷新
以行为单位,减少选通线的数量
死区:在刷新的时候,停止对存储器的读写操作
刷新间隔:一般2ms
SRAM | DRAM | |
---|---|---|
存储信息 | 双稳态触发器 | 栅极电容 |
破坏性读出 | 否 | 是 |
需要刷新 | 否 | 是 |
送行列地址 | 同时送 | 分两次送 |
主要用途 | 高速缓存 | 主机内存 |
存储器芯片的内部结构
- 存储体
- 地址译码器
- I/O控制电路
- 片选控制信号:确定哪个芯片被选中
- 读/写控制信号:决定芯片是读/写
采用地址复用技术,地址线是原来的1/2,且地址信号分行、列传送
只读存储器
- 掩膜式只读存储器(MROM)
- 在芯片生产过程中直接写入信息,之后任何人不可重写,只能读出
- 一次性可编程只读存储器(PROM)
- 用户可用专门的写入器写入信息,写一次之后就不可更改
- 可擦除可编程只读存储器(EPROM)
- 可以对内容进行多次改写
- 闪速存储器(Flash):U盘
- 可长期保存信息,可重写
- 闪存的“写”速度要比“读”速度更慢
- 固态硬盘(SSD)
- 由控制单元+存储单元(Flash芯片)构成
- 可长期保存信息,快速擦除,重写
多模块存储器
目的:为了提高CPU访问存储器的速度,采用双端口存储器(空间并行)、多模块存储器(时间并行)
1.双端口RAM
- 支持两个CPU同时访问RAM
- 可同时读/写不同的存储单元;可同时读同一个存储单元;不能同时写(或一读一写)同一个单元
2.多模块存储器
单体多字存储器
- 存储器中只有1个存储体,每个存储单元存储m个字,总线宽度也为m个字,一次性并行读出m个字
- 在一个存取周期内,能从同一地址取出m条指令
- 但地址必须顺序排列并处于同一存储单元
多体并行存储器
- 由多体模块构成
- 高位交叉编址
- 体号+体内地址
- 本质上仍是顺序存储器,可能在一个存储周期内连续访问4个模块,不满足局部性原则
- 低位交叉编址
- 体内地址+体号
- 实现了交叉存放,能采用流水线的方式并行存储,满足了程序的局部性原则
模块存取一个字的存取周期为 T T T,总线传送周期为 r r r,字长为 B B B
为实现流水线方式存取,存储器交叉模块数 m ≥ T / r m\geq T/r m≥T/r
连续存取 m m m个字所需的时间 t = T + ( m − 1 ) r t=T+(m-1)r t=T+(m−1)r
连续读出 m m m个数的信息总量 q = m ∗ B q=m*B q=m∗B
带宽 w = q / t w=q/t w=q/t
主存储器与CPU连接
连接原理
(数据总线、地址总线、控制总线)
- 地址总线36根,连接CPU的MAR地址寄存器
- 寻址范围=236
- 数据总线32根,连接CPU的MDR数据寄存器
- 字长=32位
- 主存容量=字长*寻址范围
- 存储容量= 存储单元数*每个存储单元存储的二进制数
主存容量的扩展
- 位扩展:多个存储芯片并联;8片8Kx1位芯片—>8Kx8位存储器
- 字扩展:多个存储芯片串联;4片16Kx8位芯片->64Kx8位存储器
- 线选法:通过地址线直接对芯片进行选择
- n条线—>n个选片信号
- 地址空间不连续
- 译码片选法:通过使用地址译码器对芯片进行选择
- n条线—>2n个选片信号
- 线选法:通过地址线直接对芯片进行选择
存储器与CPU的连接
1.选择合理存储芯片
- RAM∶为用户编程设置的
- ROM:存放系统程序
2.地址线的连接
- CPU地址线低位,与存储芯片的地址线连接
- CPU地址线高位,用于扩充芯片使用
3.数据线的连接
- CPU数据线数与存储芯片线数相等时,可以直接连接
- CPU数据线数与存储芯片线数不等时,必须对存储芯片进行扩位,使其相等
4.读/写命令线的连接
- 高电平为读,低电平为写
辅助存储器
磁盘存储器
磁记录原理
- 磁记录方式∶通常采用调频制(FM)和改进型调频制(MFM)的记录方式
磁盘的性能指标
- 平均存取时间
- 寻道时间(磁头移动到目的磁道的时间)
- 旋转延迟时间(磁头定位到所在扇区的时间)
- 传输时间(传输数据所花费的时间)
- 数据传输率:磁盘存储器在单位时间内向主机传送数据的字节数
- D r = r N D_r=rN Dr=rN( r r r为磁盘转速, N N N为每磁道的容量)
磁盘地址
- 驱动器号+柱面(磁道)号+盘面号+扇区号
磁盘阵列
RAID是指将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储,并行访问,具有更好的存储性能、可靠性和安全性
RAID分级
- RAID0:无冗余和无校验的磁盘阵列
- RAID1:镜像磁盘阵列
- RAID2:采用纠错的海明码的磁盘阵列
- RAID3:位交叉奇偶校验的磁盘阵列
- RAID4:块交叉奇偶校验的磁盘真理
- RAID5:无独立校验的奇偶校验磁盘阵列
高速缓冲存储器
主存与Cache之间以“块”为单位进行数据交换,主存的“块”又叫“页/页框/页面”,Cache的“块”又叫“行”
局部性原理
- 时间局部性:现在访问的地址,不久之后也很可能被再次访问
- 空间局部性:现在访问的地址,其附近的地址也很可能即将被访问
Cache的基本工作原理
Cache位于存储器层次结构的顶层,通常由SRAM构成
CPU与Cache之间的数据交换以字为单位,Cache与主存之间的数据交换以Cache块为单位
两种方式:
- 先访问Cache,发现未命中再访问主存
- 同时访问Cache和主存,若Cache命中则停止访问主存
Cache与主存的映射方式
1.直接映射
- 主存块只能放到特定的某个Cache行,行号=主存块号%总行数
- 主存地址结构:标记+行号+块内地址
- 访存过程:先通过行号,找到对应的Cache行,再将Cache行高位的标记与地址中的标记对比,若相等且有效位为1,则访问命中
2.全相联映射
- 主存块可以放到Cache的任意位置
- 主存地址结构:标记(主存块号)+块内地址
- 访存过程:通过地址中的标记,对比Cache中所有块的标记,若相等且有效位为1,则访问命中
3.组相邻映射
- 主存块可以放到特定分组中的任意位置,所属组号=主存块号%总组数
- 主存地址结构:标记+组号+块内地址
- 访存过程:先通过组号,找到对应的分组,再通过对比该分组中所有块的标记,若相等且有效位为1,则访问命中
Cache总容量=行数*(标记项+每行存储数据)
标记项:有效位、标记位Tag、一致性维护位(脏位)、替换算法控制位(计数器)
主存地址空间大小2^n = 主存地址位数n位
行数2^n = 行号n位
Cache行长2^n = 块内地址n位
Cache中主存块的替换算法
- 随机算法RAND:随机选择Cache块换出
- 先进先出算法FIFO:选择最早调入的行换出
- 近期最少使用算法LRU:选择近期内最久没有访问的存储行换出
- 最不经常使用算法LFU:选择一段时间内访问次数最少的存储行换出
Cache写策略
全写法与非写分配法合用
- 全写法(写直通法)
- Cache写命中后,必须把数据同时写入Cache和主存
- 当某一块需要替换时,用新调入的块直接覆盖即可
- 特点:增加了访存次数
- 非写分配法
- Cache写不命中后,只写入主存,不进行调块
回写法与写分配法合用
- 回写法
- Cache写命中后,只修改Cache内容,不立即写入主存
- 当该块被替换后,再写入主存
- 特点:减少了访存次数,但存在数据不一致的隐患,同时需要设置一位脏位
- 写分配法
- Cache写不命中后,加载主存的块到Cache中,更新Cache
现代计算机通常采用多级Cache结构,各级Cache间常采用“全写法+非写分配法”,Cache和主存间常采用“回写法+写分配法”
指令系统
指令格式
指令的基本格式
结构:操作码+地址码
零地址指令
OP
- 指令用途:空操作指令,停机指令,关中断指令
- 零地址的运算类指令仅使用在堆栈计算机中
一地址指令
OP A1
- 指令含义:
OP(A1)->A1
- 指令用途:加1,减1,求反,求补;隐含约定目的地址的双操作数指令
二地址指令
OP A1 A2
- 指令含义:
(A1)OP(A2)->A1
- 指令用途:算术和逻辑运算
三地址指令
OP A1 A2 A3
- 指令含义:
(A1)OP(A2)->A3
- 指令用途:算术和逻辑运算
四地址指令
OP A1 A2 A3 A4
- 指令含义:
(A1)OP(A2)->A3
;A4
=下条指令的地址 - 指令用途:算术和逻辑运算
指令的操作类型
数据传送:MOV
LOAD
STORE
算术逻辑操作:ADD
SUB
CMP
MUL
DIV
INC
DIC
AND
OR
NOT
XOR
移位操作:算数移位 逻辑移位 循环移位
转移操作:JMP
BRANCH
CALL
RET
TRAP
输入输出操作
指令的寻址方式
指令寻址和数据寻址
- 指令寻址:寻找下一条将要执行的指令地址
- 顺序寻址
- 跳跃寻址
- 数据寻址:寻找本条指令的数据地址
常见的数据寻址方式
有效地址 | 访存主存次数 | |
---|---|---|
隐含寻址 | 程序指令 | 取指令 访存1次 执行指令 访存0次 |
立即数寻址 | A A A即是操作数 | 取指令 访存1次 执行指令 访存0次 |
直接寻址 | E A = A EA=A EA=A | 取指令 访存1次 执行指令 访存1次 |
间接寻址 | E A = ( A ) EA=(A) EA=(A) | 取指令 访存1次 执行指令 访存2次或更多 |
寄存器寻址 | E A = R i EA=R_i EA=Ri | 取指令 访存1次 执行指令 访存0次(只访问寄存器) |
寄存器间接寻址 | E A = ( R i ) EA=(R_i) EA=(Ri) | 取指令 访存1次 执行指令 访存1次 |
相对寻址 | E A = ( P C ) + A EA=(PC)+A EA=(PC)+A | 取指令 访存1次 执行指令 访存1次 |
基址寻址 | E A = ( B R ) + A EA=(BR)+A EA=(BR)+A | 取指令 访存1次 执行指令 访存1次 |
变址寻址 | E A = ( I X ) + A EA=(IX)+A EA=(IX)+A | 取指令 访存1次 执行指令 访存1次 |
堆栈寻址 |
MIPS寻址方式
- 寄存器寻址
op rs rt rd ... funct
- 基址(偏移)寻址
op rs rt Add
sw
lw
- 立即数寻址
op rs rt Imm
- 所有I型指令
- PC相对寻址
op rs rt Add
beq
bne
- 伪直接寻址
- 所有J型指令
CISC和RISC的基本概念
CISC复杂指令系统计算机 | RISC精简指令系统计算机 | |
---|---|---|
指令系统 | 复杂 | 精简 |
指令数目 | > 200 >200 >200 | < 100 <100 <100 |
指令字长 | 不定长 | 定长 |
访存指令 | 不加限制 | 只有load 和store |
指令执行时间 | 相差较大 | 大多数在一个周期内完成 |
通用寄存器的数量 | 较少 | 较多 |
目标代码 | 难以优化编译生成高效代码程序 | 采用优化编译 |
控制方式 | 大多数采用微程序控制 | 大多数采用组合逻辑控制 少数采用微程序控制 |
指令流水线 | 可以实现 | 必须实现 |
典型 | x86 | ARM MIPS |
优点
- CISC
- 增强指令功能
- RISC
- 按边界对齐存放
- 硬布线逻辑为主
- 只有存/取时访问存储器,其余指令的操作均在寄存器之间进行
- 指令格式和寻址种类减少
- 有利于编译程序代码优化
MIPS指令集及MIPS汇编介绍
见p173表
中央处理器
CPU的功能和基本结构
CPU的功能
组成
- 运算器:对数据进行加工
- 控制器:协调并控制计算机各部件执行程序的指令序列取指令,分析指令,执行指令
- CU:是提供机器完成全部指令功能的微操作命令序列,可采用微程序或组合逻辑的设计方式实现
具体功能
- 指令控制、操作控制、时间控制、数据加工、中断处理
CPU的基本结构
-
运算器
- 算术逻辑单元
- 暂存寄存器
- 累加寄存器
- 通用寄存器组
- 程序状态字寄存器:状态标志:OF\SF\ZF\CF;控制标志:中断标志、陷阱标志
- 移位器
- 计数器
-
控制器
- 程序计数器PC
- 指令寄存器IR
- 指令译码器
- 存储器地址寄存器MAR
- 存储器数据寄存器MDR
- 时序系统
- 微操作信号发生器
- 状态寄存器
可见和不可见的寄存器
用户可见的寄存器 | 用户不可见的寄存器 |
---|---|
通用寄存器组 | MAR |
程序状态字寄存器 | MDR |
程序计数器 | IR |
暂存寄存器 |
数据通路的功能和基本结构
单周期与多周期处理器
控制器的功能和工作原理
硬布线控制器
时序周期
- 时钟周期:是CPU最小单位度量
- 机器周期:取指、计算、写寄存器等指令的执行就对应着一个机器周期
- 当存储字长等于指令字长时,机器周期等于取指周期
- 指令周期:CPU从主存中每取一条指令并执行所需的全部时间
- 取指周期、间址周期、执行周期、中断周期
指令流水线
IF取指令 | ID读寄存器 | EX计算 | MEM访问数据 | WB写回寄存器 | |
---|---|---|---|---|---|
lw | √ | √ | √ | √ | √ |
sw | √ | √ | √ | √ | |
R型 | √ | √ | √ | √ | |
beq | √ | √ | √ |
流水线的冒险与处理
1.结构冒险
由硬件资源竞争造成的冲突
IF
与MEM
同时使用存储器MemID
与WB
同时使用寄存器Reg
解决方法
- 前一条指令访存时,后一条相关指令暂停一个时钟周期
- 单独设置数据存储器和指令存储器
2.数据冒险
- 写后读RAW
- 读后写WAR
- 写后写WAW
解决方法
- 后一条数据相关的指令暂停一个/多个时钟周期,硬件阻塞(stall)或软件插入NOP指令
- 数据旁路技术(转发)
add
执行完EX
后,数据即可转发给sub
的EX
用- 但
lw
执行完MEM
后,数据才可转发,故仍需阻塞一个时钟周期
- 编译优化,调整指令顺序
3.控制冒险
在遇到改变指令执行顺序的情况时(执行转移、调用、返回),会改变PC值,引起控制冒险
解决方法
- 对转移指令进行分支预测,尽早生成转移目标地址
- 预取成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
总线
总线概述
总线基本概念
定义
- 分时、共享
- 包括:数据线、地址线、控制线
总线特性
- 机械特性:尺寸形状
- 电气特性:传输方向和有效的电平范围
- 功能特性
- 时间特性
总线控制方式
- 猝发传输:一个总线周期内传输存储地址连续的多个数据字的总线传输方式
- 自送配置、仲裁方式、逻辑方式、计数方式
总线的分类
- 片内总线:芯片内部的总线
- CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线
- 系统总线:计算机系统内各功能部件(CPU、主存、I/O接口)之间相互连接的总线
- 数据总线DB
- 传输各功能部件之间的数据信息;是双向传输总线;位数与机器字长、存储字长有关
- 地址总线AB
- 是单向传输总线;位数与主存地址空间的大小有关
- 控制总线CB
- 包括时序信号、IO设备和存储器的响应信号
- 数据总线DB
- I/O总线:连接中低速的设备
- USB、PCI总线
- 通信总线
系统总线的结构
- 单总线结构:将CPU、主存、I/O设备都挂载到一组总线上
- 双总线结构:主存总线、I/O总线
- 三总线结构:主存总线、I/O总线、DMA总线
- DMA总线用于在内存和高速外设之间传送数据
总线的性能指标
总线的传输周期:申请阶段,寻址阶段,传输阶段,结束阶段
总线的时钟周期:即机器的时钟周期
总线的工作频率:1/总线的传输周期
总线的时钟频率:1/总线的时钟周期
总线宽度∶单位时间内总线可以传输的数据位数
总线带宽(衡量性能的重要指标):最大传输率=总线宽度/8*总线工作频率=总线宽度/8/总线传输周期
总线仲裁
集中仲裁方式
链式查询 | 计数器定时查询 | 独立请求 | |
---|---|---|---|
控制线数 |
3
3
3 总线请求 1 1 1;总线忙 1 1 1;总线允许 1 1 1 |
⌈
l
o
g
2
n
⌉
+
2
\lceil log_2n\rceil+2
⌈log2n⌉+2 总线请求 1 1 1;总先忙 1 1 1;总线允许 ⌈ l o g 2 n ⌉ \lceil log_2n\rceil ⌈log2n⌉ |
2
n
+
1
2n+1
2n+1 总线请求 n n n;总先忙 1 1 1;总线允许 n n n |
优点 | 优先级固定;结构简单;扩充容易 | 优先级灵活 | 响应速度块;优先级灵活 |
缺点 | 对电路故障敏感;优先级不灵活 | 控制线多,控制复杂 | 控制线多,控制复杂 |
分布仲裁方式
当有总线请求时,主模块把各自唯一的仲裁号发送到共享仲裁总线上,每个仲裁器将仲裁总线上的仲裁号与自己的比较,最后获胜的仲裁号保留在总线上
总线事务和定时
总线事务
请求——仲裁——寻址——传输——释放
同步定时方式
- 适用于总线长度较短以及总线所接部件的存取时间比较接近的系统,系统采用一个统一的时钟信号来协调发送和接收双方的传送定时关系
异步定时方式
- 没有统一的时钟,完全按照传送双方相互制约的握手信号实现定时控制
分类
- 不互锁方式:主设备发送请求信号,不必等待从设备信号回答,一段时间便撤销请求信号
- 半互锁方式:主设备发送请求信号,必须接到从设备应答信号才能撤销请求信号
- 全互锁方式∶主设备发送请求信号,从设备应答,主设备撤销请求信号,从设备知晓主设备获得应答信号后撤销应答信号
半同步定时方式
- 在统一时钟的基础上,增加一个“等待”响应信号WAIT
- 应用:PCI总线
输入/输出系统
I/O系统基本概念
I/O控制方式
- 主要用于数据传输率较低的外设
- 程序查询方式
- 程序中断方式:设备准备数据时,CPU继续工作;数据准备好后向CPU发出中断请求,CPU在指令周期的末尾检查中断并做出中断响应
- 主要用于数据传输率较高的设备
- DMA方式:主存与IO交换信息时由DMA控制器控制,传输完一整块数据才需要中断
- 通道方式:通过IO指令启动通道,通道执行通道指令序列,通道程序存放在主存中
I/O接口
I/O接口功能
- 进行地址译码和设备选择
- 实现主机和外设之间的通信联络控制
- 实现数据缓冲
- 信号格式转换
- 传送控制命令和状态信息
I/O接口的基本结构
见p283图7.1
- 内部接口:与系统总线相连(实质是与内存、CPU相连)
- 数据传输方式:并行传输
- 外部接口:通过接口电缆与外设相连
- 数据传输方式:串/并行传输
I/O端口及其编址
- 统一编址:又称存储器映射方式,将I/O端口当做存储器单元进行地址分配
- 独立编址:又称I/O映射方式,I/O端口地址与存储器地址无关
ARM MIPS:统一编址
x86:独立编址
I/O方式
程序查询方式
概述:信息交换完全交给主机执行程序实现,在接口中设置一个数据缓冲寄存器和一个设备状态寄存器
主机对设备的状态进行询问,然后根据结果决定下一步是传送数据还是等待
程序中断方式
- 中断源提出中断请求
- 中断判优
- 中断隐指令(硬件完成)
- 关中断
- 保存断点:将原程序PC和PSW内容保存在栈或寄存器中
- 中断服务程序寻址:取出中断服务程序的入口地址并传送给程序计数器(PC)
- 硬件查询法/向量中断
- 软件查询法/非向量中断
- 中断处理
- 保存现场和屏蔽字
- 开中断
- 执行中断服务程序的核心内容
- 关中断
- 恢复现场和屏蔽字
- 开中断,中断返回
DMA方式
概述:DMA方式是一种完全由硬件进行成组信息传送的控制方式,DMA方式在外设与内存之间开辟一条“直接数据通道"
DMA接口组成
- 主存地址计数器:存放要交换数据的主存地址
- 传送长度计数器
- 数据缓冲寄存器∶暂存每次传送的数据
- DMA请求触发器:I/O发出控制信号,使得DMA请求触发置位
- “控制/状态”逻辑:用于指定传送方向,修改传送参数,并对DMA请求信号和CPU响应信号进行协调和同步
- 中断机构:当一个数据块传送完毕后,触发中断机构,向CPU提出中断请求
传送方式(为了有效地使用主存)
- 停止CPU访存
- 交替访存:将CPU周期分为DMA访存和CPU访存两个部分
- 周期挪用(周期窃取):I/O设备需要访存时,挪用一个或几个存取周期
传送过程
- 预处理:由CPU完成一些必要的准备工作
- 寄存器置初值、设置传送方向、启动该设备
- 数据传送:可以以字节为基本单位,也可以以数据块为基本单位。数据传送阶段完全由DMA控制
- 后处理:DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理
主要功能
- 传送前:接受外设的DMA请求,向CPU发出总线请求;接管总线控制权
- 传送时:管理总线,控制数据传送;确定主存单元地址及长度,能自动修改对应参数
- 传送后:向CPU报告DMA操作的结束
中断方式和DMA方式的区别
中断 | DMA | |
---|---|---|
数据传送 | 程序控制 程序的切换,保存和恢复现场 | 硬件控制 CPU只需进行预处理和后处理 |
中断请求 | 传送数据 | 后处理 |
响应 | 指令执行周期结束后响应中断 | 每个机器周期结束均可响应中断 |
场景 | CPU控制,低速设备 | DMA控制器控制,高速设备 |
优先级 | 低 | 高 |
异常处理 | 能处理异常事件 | 仅传送数据 |
求
传送方式(为了有效地使用主存)
- 停止CPU访存
- 交替访存:将CPU周期分为DMA访存和CPU访存两个部分
- 周期挪用(周期窃取):I/O设备需要访存时,挪用一个或几个存取周期
传送过程
- 预处理:由CPU完成一些必要的准备工作
- 寄存器置初值、设置传送方向、启动该设备
- 数据传送:可以以字节为基本单位,也可以以数据块为基本单位。数据传送阶段完全由DMA控制
- 后处理:DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理
主要功能
- 传送前:接受外设的DMA请求,向CPU发出总线请求;接管总线控制权
- 传送时:管理总线,控制数据传送;确定主存单元地址及长度,能自动修改对应参数
- 传送后:向CPU报告DMA操作的结束
中断方式和DMA方式的区别
中断 | DMA | |
---|---|---|
数据传送 | 程序控制 程序的切换,保存和恢复现场 | 硬件控制 CPU只需进行预处理和后处理 |
中断请求 | 传送数据 | 后处理 |
响应 | 指令执行周期结束后响应中断 | 每个机器周期结束均可响应中断 |
场景 | CPU控制,低速设备 | DMA控制器控制,高速设备 |
优先级 | 低 | 高 |
异常处理 | 能处理异常事件 | 仅传送数据 |