目录
1 基础知识
知识点 | |
---|---|
存取速度 | 寄存器(CPU内部) > Cache > 内存; |
计算机语言 | 机器语言:计算机唯一可以直接识别和执行的语言; 汇编语言:由汇编程序(系统软件)翻译为机器语言后,再执行; 高级语言:如C,C++,Java; 高级语言可分为两类:1. 层层翻译得到机器语言,再执行:高级语言->汇编语言->机器语言;另一种边翻译边执行:高级语言->机器语言; |
翻译程序 | 汇编程序(汇编器):汇编语言->机器语言; 解释程序(解释器):边翻译边执行; 编译程序(编译器):高级语言->汇编语言->机器语言; |
存储元 | 存储二进制的电子元件,每个存储元可以存1bit; |
存储单元 | 每个存储单元存放一串二进制代码; 由多个存储元组成,通常可存储1byte |
存储字 | 存储单元中二进制代码的组合; |
存储字长 | 存储单元中二进制代码的位数; |
机器字长 | 计算机能一次处理的二进制代码长度; 可通过寄存器的位数判断机器字长; |
指令字长 | 指令的二进制长度; |
数据字长 | 数据总线一次能并行传送消息的次数; |
转换 | 一字节(byte) = 8位(比特),即1B = 8bit |
2 冯诺依曼
冯诺依曼机的特点
- 计算机由五大部件组成 —— 输入设备、输出设备、存储器、运算器、控制器;
- 指令和数据以同等地位存储在存储器中,并按地址寻问;
- 指令和数据均以二进制代码表示,CPU区分指令和数据的依据是指令周期的不同阶段;
- 指令 = 操作码 + 地址码;操作码:表示操作的性质;地址码:表示操作数在存储器中的位置;
- 指令在存储器内按顺序存放,通常,指令是顺序执行的;
计算机性能指标
性能指标 | 相关定义 |
---|---|
字长 | 机器字长:计算机进行一次整数运算所能处理的二进制的位数,一般与字长长度有关; |
数据通路带宽 | 外部数据总线一次能并行传送信息的位数,非CPU内部数据总线宽度; |
主存容量 | 主存储器所能存储信息的最大容量,通常以字节来衡量,也可以用字数 * 字长表示; MAR为16位, 2 1 6 2^16 216 = 65536,及存储体内有65536个存储单元(可称作64K,1K = 1024) |
吞吐量 | 系统在单位时间内处理请求的数量; |
响应时间 | 用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结果的等待时间; |
主频 | 机器内部主时钟的频率,代表每秒执行多少个时钟周期数; 值越大代表一个操作所需时间越少,CPU运行速度越快; |
CPU时钟周期 | 通常为节拍脉冲或T周期,即主频的倒数; |
CPI | 执行一条指令所需的时钟周期数,与时钟频率无关;CPI = 时钟周期数量 指令数量 \frac{时钟周期数量}{指令数量} 指令数量时钟周期数量 |
CPU执行时间 | 运行一个程序所花费的时间;执行时间 = 时钟周期数量 * 时钟周期 = 时钟周期数量 主频 \frac{时钟周期数量}{主频} 主频时钟周期数量 = 指令条数 ∗ C P I 主频 \frac{指令条数 * CPI}{主频} 主频指令条数∗CPI |
MIPS | MIPS:每秒执行多少百万条指令;MIPS=指令条数/(执行时间×
1
0
6
10^6
106)=主频/(CPI×
1
0
6
10^6
106 ); MFLOPS:每秒执行多少百万次浮点运算;MFLOPS = 浮点操作数次数/(执行时间 * 1 0 6 10^6 106); GFLOPS:每秒执行多少十亿次浮点运算;GFLOPS = 浮点操作数次数/(执行时间 * 1 0 9 10^9 109); TFLOPS:每秒执行多少万亿次浮点运算;TFLOPS = 浮点操作数次数/(执行时间 * 1 0 12 10^{12} 1012); |
— | — |
3 数据表示和运算
3.1 数制转换
3.2 原码、反码、补码、移码
3.2.1 表示范围
n位无符号数的范围:0 ~ 2 n − 1 2^n - 1 2n−1
无符号数
— | 整数表示范围 | 小数表示范围 | 0的表示形式 | 正负数的表示 |
---|---|---|---|---|
原码 | - ( 2 n − 1 ) (2^n - 1) (2n−1) ~ 2 n − 1 2^n - 1 2n−1 | - ( 1 − 2 − n ) (1 - 2^{-n}) (1−2−n) ~ 1 − 2 − n 1 - 2^{-n} 1−2−n | 两种 | 最高位为符号位(0正1负),其余数值位取原值不变; |
反码 | - ( 2 n − 1 ) (2^n - 1) (2n−1) ~ 2 n − 1 2^n - 1 2n−1 | - ( 1 − 2 − n ) (1 - 2^{-n}) (1−2−n) ~ 1 − 2 − n 1 - 2^{-n} 1−2−n | 两种 |
[
X
正数
]
反
[X_{正数}]_反
[X正数]反 = 原码; [ X 负数 ] 反 [X_{负数}]_反 [X负数]反:符号位为1,尾数由原码尾数逐位变反; |
补码 | - 2 n 2^n 2n ~ 2 n − 1 2^n - 1 2n−1 | -1 ~ 1 − 2 − n 1 - 2^{-n} 1−2−n | 一种 | |
移码 | - 2 n 2^n 2n ~ 2 n − 1 2^n - 1 2n−1 | ----- | 一种 |
[
X
整数
]
移
=
2
n
+
X
,
−
2
n
≤
X
≤
2
n
[X_{整数}]_移 = 2^n + X,-2^n \leq X \leq 2^n
[X整数]移=2n+X,−2n≤X≤2n; X为阶码真值,n为移码数值部分的位数 |
3.2.2码之间的转换
— | 具体操作 | 负数示例 |
---|---|---|
原码 -> 反码 | 正数原码 = 正数反码; 负数符号位不变,数值位全部取反; | 原码:1000 1100; 反码:1111 0011; |
反码 -> 补码 | 正数反码 = 正数补码; 负数:反码末尾 +1; | 反码:1101 1010; 补码:1101 1011; |
补码 ->反码 | 正数补码 = 正数反码; 负数:补码末尾 -1; | 补码:1100 1110; 反码:1100 1101; |
原码 -> 补码 | 正数原码 = 正数补码; 负数:原码 -> 反码 -> 补码; | 原码:1010 0101; 反码:1101 1010; 补码:1101 1011; |
补码 -> 原码 | 正数补码 = 正数原码; 负数:补码取反,末尾 +1 | 补码:1110 1011; 取反:1001 0100; 原码:1001 0101; |
原码 -> 移码 | 补码符号位取反 | 原码:1010 0101; 移码:0101 1011; |
3.2.3 IEEE754
32位浮点数格式:S + E + M
S:符号位,0表示正数,1表示负数;
E:阶码,8位,移码表示正负指数;
M:尾数,23位,原码表示;
64位浮点数格式:S + E + M
S:符号位,0表示正数,1表示负数;
E:阶码,11位,移码表示正负指数;
M:尾数,52位,原码表示;
4 CPU
作用 | |
---|---|
通用寄存器组R | 提供操作数,存放运算结果,提供地址指针、基址、变址、计数器等; |
暂存器C\D | 用来暂存生产的中间过程数据,避免破坏通用寄存器的内容; C:暂存来自主存的源地址或原数据; D:暂存来自主存的目的地址或目的数; |
IR(指令寄存器) | 存放当前正在执行的指令; |
PC(程序计数器) | 存放下一条指令的地址,并跟踪下一条要执行指令的地址; |
PSW(程序状态寄存器) | 记录现行程序的运行状态和指示程序的工作方式; |
MAR(地址寄存器) | 存放内存地址,用于寻址,位数 = 存储单元的个数 / 地址码的长度; |
MDR(数据寄存器) | 暂存与MAR相关的数据,位数 = 存储字长; |
ALU(算术逻辑单元) | 运算器的核心; |
CU(控制单元) | 分析指令,给出控制信号; |
CPU控制信息传递的方式
- 程序输入输出方式;
- 中断方式;
- DMA方式;
- 通道方式;
5.1 指令系统
5.1.1 指令格式
操作码(一个) + 地址码(一个或多个)
指令 | 格式 | 功能 |
---|---|---|
四地址结构指令 | (D1) OP (D2) --> D3; (D4) 下条指令; | |
三地址结构指令 | (D1) OP (D2) --> D3; (PC) +1 --> PC; | |
二地址结构指令 | (D1) OP (D2) --> D2 / D1; (PC) +1 --> PC; | |
一地址结构指令 | 双操作数:(D1) OP (A) --> A ;(PC) +1 --> PC; 单操作数:OP(D1) --> D1;(PC) + 1 --> PC | |
零地址结构指令 | 用于堆栈或特殊指令操作; |
5.1.2 寻址方式
寻址方式 | 格式 | 具体操作 | 符号表示 |
---|---|---|---|
立即寻址 | 操作码OP + 立即数S | 指令直接给出操作数; | I |
主存直接寻址 | 操作码OP + 有效地址D | 根据 地址码中的地址在主存中找到操作数; | S = (D) |
寄存器直接寻址 | 操作码OP + 寄存器号R | 根据地址码中的寄存器编号直接找到操作数 ; | S = ® |
主存间接寻址 | 操作码OP + 间接地址D | 通过地址码中的间接地址在主存中找到操作 数的有效地址,再通过直接地址在主存中找到操作数; | S = ((D)) |
寄存器间接寻址 | 操作码OP + 寄存器号R | 通过地址码中的寄存器号找到有效地址, 再根据有效地址在主存中找到操作数; | S = (®) |
堆栈间接寻址 | 操作码OP + 堆栈指针SP | 根据地址码中的堆栈指针取出有效地址, 再根据有效地址在主存中找到操作数; 注:先取址,然后SP再自动+1,重新指回新的栈顶 | S = ((SP)) |
变址寻址 | 操作码OP + 变址寄存器号 R x R_x Rx + 形式地址D | 根据变址寄存器内的地址在内存中取出 一个偏移量,然后将偏移量和形式地址相加求得有 效地址,再根据有效地址在主存中找到操作数; | S = (( R x R_x Rx) + D) |
基址寻址 | 操作码OP + 基址寄存器号 R B R_B RB + 位移量D | 根据基准寄存器内的地址在内存中取出 基准地址,然后将基准地址和位移量相加求得 有效地址,再根据有效地址在主存中找到操作数; | S = (( R B R_B RB) +D) |
基址 + 变址寻址 | 操作码OP + 基址寄存器号 R B R_B RB + 变址寄存器号 R x R_x Rx + 位移量D | 先基址,再变址 | S = (( R B R_B RB) + ( R x R_x Rx) + D) |
相对寻址 | 操作码OP + PC+/- 位移量D | 根据PC在内存中找到取出一个地址, 然后将地址与位移量D求和或求差得到有效 地址,再根据有效地址在主存中找到操作数; | S = ((PC) +/- D) |
变址与基址的区别:
变址:指令提供不变的形式地址,变址寄存器提供可变的偏移量;适用于处理一维数组;
基址:指令提供可变的位移量,基址寄存器提供不变的基准地址;用于扩大有限字长指令的访存空间;
5.1.3 传指流程
- 取指周期(FT):从M取出指令并移码,修改PC;
- 源周期(ST):按寻址方式形成源地址,从M取出源操作数,暂存于C;
- 目的周期(DT):按寻址方式形成目的地址,从M取出目的操作数,暂存与D;
- 执行周期(ET):按操作码完成相应操作,后续指令地址送入MAR;
- 中断周期(IT):CPU响应中断请求后,到执行中断服务流程前。关中断、保存断点和PSW,转服务程序入口;
- DMA周期(DMAT):CPU响应DMA请求后,到完成一次数据传送的时间;
单操作数示例:
- MOV R1,R0:
FT0:M --> IR,PC + 1 --> PC
ET0:R0 --> R1
ET1:PC --> MAR - MOV (R1),(R2):
FT0:M --> IR,PC + 1 --> PC
ST0:R0 --> MAR
ST1:M --> MDR --> C
DT0:R1 --> MAR
ET0:C --> MDR
ET1:MDR --> M
ET2:PC --> MAR
6 存储子系统
主存:主要存放CPU当前使用的指令和数据;
辅存:存放大量的后备程序和数据;
高速缓冲存储器(Cache):存放CPU在当前一小段时间内多次使用的程序和数据,以缓解CPU和主存的速度差异;
种类 | 例子 | 特点 |
---|---|---|
随机存取存储器RAM | 主存 | 可读可写 |
只读存储器ROM | 微程序控制器中的控制存储器CM | 只读不写 |
顺序存取存储器SAM | 磁带机、录音机 | 读/写部件按顺序查找目标地址; |
直接存取存储器DAM | 磁盘 | 读/写部件先直接指向一个小区域,再在该区域顺序查找; |
6.1 存储器扩展方式
种类 | 扩展什么 | 怎么扩展 |
---|---|---|
位扩展 | 加大字长 | A:
m
k
×
a
mk \times a
mk×a;B:
m
k
×
b
mk \times b
mk×b;b>a,A组成B 需要 b a \dfrac{b}{a} ab片A |
字扩展 | 增加存储器中的字的数量 | A:
a
k
×
n
ak \times n
ak×n;B:
b
k
×
n
bk \times n
bk×n;b>a,A组成B 需要 b a \dfrac{b}{a} ab片A |
字位同时扩展 | 位扩展 + 字扩展 | A:
a
k
×
b
ak \times b
ak×b;B:
c
k
×
d
ck \times d
ck×d;c > a,d > b,A组成B 需要 c a × d b \dfrac{c}{a} \times \dfrac{d}{b} ac×bd 片A |
6.2 主存与Cache的地址映射
种类 | 定义 | 图示 |
---|---|---|
直接映射 | 主存中每一个页只能映射到某一固定的Cache页中 | |
全相联映射 | 主存中任意一块可以映射到Cache中的任意一块位置上; | |
组相联映射 | 直接映射 + 全相联映射; 主存和Cache都分组,主存中组内页数与Cache的分组数相同; |
6.3 替换算法
方法 | 定义 |
---|---|
随机替换 | 简单的根据一个随机数,选取Cache中的一块替换 |
先进先出(FIFO) | 按调入Cache的先后决定淘汰的顺序,先淘汰先进入的内容; |
最近最少使用(LRU) | 选择近期最少访问的块作为被替换的块; |
最优算法(OPT) | 以将来使用最少作为替换目标。理想算法,未实现; |