计算机组成原理总结

第1章 计算机系统概述 💻

1.计算机的基本结构

  • 早期的冯·诺伊曼结构
    • 以运算器为中心
    • 按地址访问且指令顺序执行
  • 现代计算机结构
    • 以存储器为中心

2.计算机的功能部件

  • MAR:用于存放访存地址,其位数取决于存储单元的数量
  • MDR:用于暂存从存储器读或写的数据,其位数取决于存储字长
  • PC:用于存放下一条指令的地址
  • IR:用于存放当前的指令

3.计算机的性能指标

  • 机器字长:计算机一次整数运算能处理的二进制位数
  • 存储字长:一个存储单元存放的二进制代码长度
  • CPU执行时间
    t = c y c l e s f = i n s t r u c t i o n s × C P I f \small \rm t= \frac{cycles}{f} = \frac{instructions × CPI}{f} t=fcycles=finstructions×CPI
  • MIPS(Million Instructions Per Second)
    M I P S = f C P I \small \rm MIPS = \frac{f}{CPI} MIPS=CPIf
  • MFLOPS, GFLOPS, TFLOPS

第2章 数据的表示和运算 🔍

0.基础知识

①数据的存储和排列

  • 大端方式:高位存放在低地址
  • 小端方式:高位存放在高地址
  • 边界对齐

②C语言整数类型转换

  • 有符号数和无符号数转换
unsigned short x = 65535; // 0xFFFF
short y = x;			  // y = -1
  • 不同字长整数的转换
/**
 * 短字转长字
 */
short x = -16;			// 0xFFF0
int y = x;				// 0xFFFFFFF0 = -16
unsigned short a = (unsigned short)x;
unsigned int b = a;		// 0x0000FFF0 = 65520

/**
 * 长字转短字
 */
int m = 65520;			// 0x0000FFF0
short n = (short)x;		// 0xFFF0 = -16

1.定点数的二进制表示

  • 真值0 的原码和反码都有2种表示法,即 +0 和 -0
  • 真值0 的补码和移码只有1种表示法
  • 移码只能表示整数,补码符号位取反就是移码
  • x 0 x_0 x0为符号位,定点整数 x 0 , x 1 x 2 . . . x n x_0,x_1x_2...x_n x0,x1x2...xn,定点小数 x 0 . x 1 x 2 . . . x n x_0.x_1x_2...x_n x0.x1x2...xn
定点整数定点小数
原码 − ( 2 n − 1 ) ∼ ( 2 n − 1 ) -(2^n - 1) \sim (2^n - 1) (2n1)(2n1) − ( 1 − 2 − n ) ∼ ( 1 − 2 − n ) -(1 - 2^{-n}) \sim (1 - 2^{-n}) (12n)(12n)
反码 − ( 2 n − 1 ) ∼ ( 2 n − 1 ) -(2^n - 1) \sim (2^n - 1) (2n1)(2n1) − ( 1 − 2 − n ) ∼ ( 1 − 2 − n ) -(1 - 2^{-n}) \sim (1 - 2^{-n}) (12n)(12n)
补码 − 2 n ∼ 2 n − 1 -2^n \sim 2^n - 1 2n2n1 − 1 ∼ 1 − 2 − n -1 \sim 1 - 2^{-n} 112n
移码 − 2 n ∼ 2 n − 1 -2^n \sim 2^n - 1 2n2n1
数值位取反+1
所有位取反+1
符号位取反
原码
补码
相反数的补码
移码
  • 8位定点整数(含1位符号)
    • 原码:1111 1111 ~ 0111 1111 范围是 -127 ~ 127
    • 反码:1000 0000 ~ 0111 1111 范围是 -127 ~ 127
    • 补码:1000 0000 ~ 0111 1111 范围是 -128 ~ 127
    • 移码:0000 0000 ~ 1111 1111 范围是 -128 ~ 127
  • 8位定点小数(含1位符号)
    • 原码:1.111 1111 ~ 0111 1111 范围是 − 127 128 \frac{-127}{128} 128127 ~ 127 128 \frac{127}{128} 128127
    • 反码:1.000 0000 ~ 0111 1111 范围是 − 127 128 \frac{-127}{128} 128127 ~ 127 128 \frac{127}{128} 128127
    • 补码:1.000 0000 ~ 0111 1111 范围是 -1 ~ 127 128 \frac{127}{128} 128127

2.定点数的移位运算

  • 算术移位:只适用于有符号数
    • 正数的原码、补码、反码:左移、右移都是补0
    • 负数的原码:左移、右移都补0
    • 负数的反码:左移、右移都补1
    • 负数的补码,左移补0,右移补1
  • 逻辑移位:只适用于无符号数
    • 左移和右移都是补0
  • 补码左移溢出:补码的符号位和最高有效位不同时,算术左移会发生溢出
    • 0000 0001 (+1) → 0000 0010 (+2)
    • 0100 0001 (+65) → 0000 0010 (+2)
    • 1100 0001 (-63) → 1000 0010 (-126)
    • 1000 0001 (-127) → 1000 0010 (-126)

3.定点数的加减运算

  • 补码加减法:有符号数加减、无符号数加减,有符号数与无符号数加减,在运算过程中两数都被视为补码,只是最后对结果的解释不一样
    [ A + B ] 补 = [ A ] 补 + [ B ] 补 ( m o d   2 n + 1 ) [ A − B ] 补 = [ A ] 补 + [ − B ] 补 ( m o d   2 n + 1 ) \begin{aligned} & [A + B]_{补} = [A]_{补} +[B]_{补}(mod \space 2^{n+1}) \\ & [A - B]_{补} = [A]_{补} +[-B]_{补}(mod \space 2^{n+1}) \\ \end{aligned} [A+B]=[A]+[B](mod 2n+1)[AB]=[A]+[B](mod 2n+1)
/* 
 *   a = 1000 0000 
 *   b = 1000 0001 
 * 	-b = 0111 1111
 * a-b = 1111 1111
*/
unsigned char a = 128;
unsigned char b = 129; 
unsigned char s1 = a - b;	// s1 = 255	
char s2 = a - b;			// s2 = -1

unsigned char a = 128;
char b = -127; 
char s1 = a + b;	// s1 = 1	
char s2 = a - b;	// s2 = 255
  • 溢出判断:2个符号相同的数相加、2个符号不同的数相减,可能出现溢出
    • 采用1位符号位:2个操作数符号相同,结果与原操作数符号不同,表示溢出
    • 采用1位符号位:符号位进位与最高有效位的进位不同,表示溢出
    • 采用2位符号位:运算结果的符号位为 01 表示上溢出,10 表示下溢出

4.定点数的乘法运算

Booth算法 [ x ] 补 = x s . x 1 x 2 . . . x n , [ y ] 补 = y s . y 1 y 2 . . . y n , [x]_{补} = x_s.x_1x_2...x_n,[y]_{补} = y_s.y_1y_2...y_n, [x]=xs.x1x2...xn[y]=ys.y1y2...yn

  • 末尾增设附加位 y n + 1 = 0 y_{n+1} = 0 yn+1=0
  • [ x ] 补 [x]_补 [x] 用双符号位, [ y ] 补 [y]_补 [y] 用单符号位
  • 00.0000 00.0000 00.0000 开始加起,共进行 n + 1 n+1 n+1 次加法和 n n n 次右移
    y n y n + 1 = { 00 或 11 :部分积右移 1 位 01 :部分积加 [ x ] 补 ,再右移 1 位 10 :部分积加 [ − x ] 补 ,再右移 1 位 y_ny_{n+1} = \begin{cases} 00 或 11:部分积右移1位 \\ 01:部分积加[x]_补,再右移1位 \\ 10:部分积加[-x]_补,再右移1位 \end{cases} ynyn+1= 0011:部分积右移101:部分积加[x],再右移110:部分积加[x],再右移1

5.浮点数的规格化

  • 规格化的目的是提高运算的精度
  • 左规:尾数左移1位,阶码减1
  • 右规:尾数右移1位,阶码加1
  • 基数为2时,原码规格化的尾数最高位为1,补码规格化的尾数最高位和符号位相反
  • 设浮点数字长为阶码 1+7 位,尾数 1+23 位,基数为 2,且尾数为规格化形式,浮点数用补码表示时,表示范围为:
    0.1111111 ; 0. 1111...1 ⏟ 23 b i t s ⇒ 2 + 127 × ( 1 − 2 − 23 ) 1.0000000 ; 0. 1000...0 ⏟ 23 b i t s ⇒ 2 − 128 × ( 2 − 1 ) 1.0000000 ; 1. 0111...1 ⏟ 23 b i t s ⇒ 2 − 128 × ( − 2 − 1 − 2 − 23 ) 0.1111111 ; 1. 0000...0 ⏟ 23 b i t s ⇒ 2 + 127 × ( − 1 ) \begin{aligned} 0.1111111; 0.\underbrace{1111...1}_{23bits} &\Rightarrow 2^{+127} × (1 - 2^{-23}) \\ 1.0000000; 0.\underbrace{1000...0}_{23bits} &\Rightarrow 2^{-128} × (2^{-1}) \\ 1.0000000; 1.\underbrace{0111...1}_{23bits} &\Rightarrow 2^{-128} × (-2^{-1} - 2^{-23}) \\ 0.1111111; 1.\underbrace{0000...0}_{23bits} &\Rightarrow 2^{+127} × (-1) \end{aligned} 0.1111111;0.23bits 1111...11.0000000;0.23bits 1000...01.0000000;1.23bits 0111...10.1111111;1.23bits 0000...02+127×(1223)2128×(21)2128×(21223)2+127×(1)

6.浮点数的加减运算

浮点数加减一律用补码运算,先把阶码和尾数都变为补码,然后:

  • 对阶:阶码小的尾数右规,直到2个数的阶码相等
  • 尾数求和:对阶后的尾数进行补码加减运算
  • 规格化
    • 若干次左规:00.0 xx…x ⇒ \Rightarrow 00.1 xx…x11.1 xx…x ⇒ \Rightarrow 11.0 xx…x
    • 1 次右规:10.xxx…x,01.xxx…x
  • 舍入
    • 0舍1入法
    • 恒置1法
  • 溢出判断
    • 阶码的符号位为 01,表示上溢出
    • 阶码的符号位为 10,表示下溢出

7.浮点数 IEEE-754 标准

  • 阶码用移码表示,尾数用隐藏位的原码表示
  • 短浮点数 float:E 为8位, M为23位,
    ( − 1 ) s × 2 E − 127 × 1. M   1 ≤ E ≤ 254 \rm (-1)^s × 2^{E-127} × 1.M \quad\space1 \leq E \leq 254 (1)s×2E127×1.M 1E254
  • 长浮点数 double:E 为11位, M为52位,
    ( − 1 ) s × 2 E − 1023 × 1. M 1 ≤ E ≤ 2046 \rm (-1)^s × 2^{E-1023} × 1.M \quad 1 \leq E \leq 2046 (1)s×2E1023×1.M1E2046
  • 浮点数绝对值表示范围:
minmax
短浮点数 float 2 − 126 × 1 2^{-126} × 1 2126×1 2 127 × ( 2 − 2 − 23 ) 2^{127} × (2 - 2^{-23}) 2127×(2223)
长浮点数 double 2 − 1022 × 1 2^{-1022}× 1 21022×1 2 1023 × ( 2 − 2 − 52 ) 2^{1023} ×(2 - 2^{-52}) 21023×(2252)
  • 将 -8.25 表示为单精度浮点数:
    − 8.25 = − 1000.01 = − 1.00001 × 2 3 = ( − 1 ) 1 × 2 130 − 127 × 1.00001 = 1   10000010 ⏟ 8 b i t s   0000100..0 ⏟ 23 b i t s = C 104   0000 H \begin{aligned} -8.25 &= -1000.01 = -1.00001 × 2^3 \\ &= (-1)^1 × 2^{130-127} × 1.00001 \\ &= 1 \space \underbrace{10000010}_{8bits} \space \underbrace{0000100..0}_{23 bits} \\ &= \rm C104 \,0000H \end{aligned} 8.25=1000.01=1.00001×23=(1)1×2130127×1.00001=1 8bits 10000010 23bits 0000100..0=C1040000H

8.校验码

①奇偶校验码

  • 在原编码的最高位前加一个校验位,码距为2
  • 只能检测奇数位的出错情况,不能确定出错的位置,即无法纠错
  • 奇校验码:整个校验码中 1 的个数为奇数
  • 偶校验码:整个校验码中 1 的个数为偶数

②海明码

  • n 为有效信息的位数,k 为校验码的位数,则满足 n + k ≤ 2 k − 1 n + k \leq 2^k - 1 n+k2k1
  • 如果是 n = 4, k = 3,设P为校验位,D为信息位,则:
    H 7   H 6   H 5   H 4   H 3   H 2   H 1 D 4   D 3   D 2   P 3   D 1   P 2    P 1 \begin{aligned} &\rm H_7 \, H_6 \,H_5 \, H_4 \, H_3 \, H_2 \,H_1 \\ &\rm D_4 \, D_3 \, D_2 \,P_3 \, D_1 \,P_2 \,\, P_1 \\ \end{aligned} H7H6H5H4H3H2H1D4D3D2P3D1P2P1
  • 校验位的计算方法:
    H 1 = H 3 ⊕ H 5 ⊕ H 7 H 2 = H 3 ⊕ H 6 ⊕ H 7 H 4 = H 5 ⊕ H 6 ⊕ H 7 \begin{aligned} & \rm H_1 = H_3 \oplus H_5 \oplus H_7 \\ & \rm H_2 = H_3 \oplus H_6 \oplus H_7 \\ & \rm H_4 = H_5 \oplus H_6 \oplus H_7 \end{aligned} H1=H3H5H7H2=H3H6H7H4=H5H6H7
  • 检错原理:如果 S 3 S 2 S 1 = 000 \rm S_3S_2S_1 = 000 S3S2S1=000,则说明无错
    S 1 = H 1 ⊕ H 3 ⊕ H 5 ⊕ H 7 S 2 = H 2 ⊕ H 3 ⊕ H 6 ⊕ H 7 S 3 = H 4 ⊕ H 5 ⊕ H 6 ⊕ H 7 \begin{aligned} & \rm S_1 = H_1 \oplus H_3 \oplus H_5 \oplus H_7 \\ &\rm S_2 = H_2 \oplus H_3 \oplus H_6 \oplus H_7 \\ & \rm S_3 = H_4 \oplus H_5 \oplus H_6 \oplus H_7 \end{aligned} S1=H1H3H5H7S2=H2H3H6H7S3=H4H5H6H7

③CRC码

  • 首先,生成多项式 G ( x ) G(x) G(x) 的最高次为几,就在原编码的低位补几个 0
  • 再用 G ( x ) G(x) G(x) 作为除数,对补0后的编码 做模2除法,直到余数位数小于除数
  • 最后在原信息码后拼接 R 位余数,得到CRC码
  • 模2除法
    • 0 ± 1 = 1 ± 0 = 1 0 \pm 1 = 1\pm 0 = 1 0±1=1±0=1
    • 0 ± 0 = 1 ± 1 = 0 0 \pm 0 = 1\pm 1 = 0 0±0=1±1=0
    • 部分余数首位为1,上商1;部分余数首位为0,上商0
  • 检错原理
    • 接收端收到的CRC码,用 G ( x ) G(x) G(x) 做模2除法,若余数为0,则无错

第3章 存储系统 💿

1.存储器的分类和性能指标

  • Cache-主存层次:解决CPU和主存速度不匹配问题
  • 主存-辅存层次:解决存储系统的容量问题
  • 常见辅存:磁盘、磁带、光盘
  • 按层次分类:缓存、主存、辅存
    按存取方式分类 { 随机存储器 R A M 只读存储器 R O M 串行访问存储器 { 顺序存取存储器 ( 磁带 ) 直接存取存储器 ( 磁盘 ) 按存取方式分类 \begin{cases} 随机存储器 RAM \\ 只读存储器 ROM \\ 串行访问存储器 \begin{cases}顺序存取存储器(磁带) \\ 直接存取存储器(磁盘)\end{cases} \end{cases} 按存取方式分类 随机存储器RAM只读存储器ROM串行访问存储器{顺序存取存储器(磁带)直接存取存储器(磁盘)
  • 存取周期:连续两次访存操作的最小间隔时间
  • 存取时间:启动一次访存操作到完成该操作的时间
  • 存取周期通常都是大于存取时间

2.RAM vs ROM

  • RAM 是易失性存储器,ROM是非易失性存储器,易失是指断电后内容会丢失
  • RAM 和 ROM 都支持随机存取
ROM
MROM
PROM
ERROM
Flash Memory
SSD

3.SRAM vs DRAM ★

  • DRAM 的刷新以行为单位,只需要提供行地址
  • DRAM 的刷新不需要选片,所有芯片同时被刷新
  • DRAM 常用的有集中刷新、分散刷新、异步刷新,其中分散刷新没有死区
  • DRAM 采用地址线复用技术,地址线是原来的 1/2,地址信号分行、列两次传送
属性SRAMDRAM
工作原理触发器电容
主要用途Cache主存
运行速度
成本
功耗
集成度
需要刷新×
破坏性读出×

4.多模块存储器

多模块存储器
单体多字
多体并行
高位交叉编址
低位交叉编址
  • 多模块存储器用于提高访存速度
  • 高位交叉编址
    • 多个模块不能并行访问,无法提高存储器吞吐率
  • 低位交叉编址
    • 采用流水线方式并行存取
    • 对于四体交叉存储器,给定的访存地址在相邻的4次访问出现在同一个存储模块内,会发生冲突
    • 设数据总线宽度等于模块的存储字长,模块存取一个字的存取周期为 T \small T T,总线传输周期为 Δ t \small \Delta t Δt,模块数为 k \small k k,满足 T = k t \small T =kt T=kt,采用低位交叉编址,访问 n 个连续的存储字所需的时间为:
      t = T + ( n − 1 ) Δ t = ( k + n − 1 ) Δ t \small t = T + (n-1) \Delta t = (k + n -1)\Delta t t=T+(n1)Δt=(k+n1)Δt
体号体内地址序号最低2位地址
M0 0 , 4 , 8 , 12 , . . . , 4 k + 0 0, 4, 8, 12, ..., 4k+0 0,4,8,12,...,4k+0 00 00 00
M1 1 , 5 , 9 , 13 , . . . , 4 k + 1 1, 5, 9, 13, ..., 4k+1 1,5,9,13,...,4k+1 01 01 01
M2 2 , 6 , 10 , 14 , . . . , 4 k + 2 2, 6, 10, 14, ..., 4k+2 2,6,10,14,...,4k+2 10 10 10
M3 3 , 7 , 11 , 15 , . . . , 4 k + 3 3, 7, 11, 15, ..., 4k+3 3,7,11,15,...,4k+3 11 11 11

5.Cache

①映射方式

  • 直接映射 i i i 是主存块号, C = 2 c C=2^c C=2c 是Cache的总块数, j = i   m o d   C j = i \ mod \, C j=i modC
  • 全相联映射
  • 组相联映射 i i i 是主存块号, Q Q Q 是Cache的组数, j = i   m o d   Q j = i \ mod \, Q j=i modQ
    在这里插入图片描述
    在这里插入图片描述

②替换算法

  • R A N D 、 F I F O 、 L R U 、 L F U \small \rm RAND、FIFO、LRU、LFU RANDFIFOLRULFU

③Cache写命中的策略

  • 写直达法(write-through):既写入 cache 又写入 memory
  • 写回法(write-back):只写入 cache,被替换时才写回 memory

④Cache性能指标

  • 命中率 h i t = N c N c + N m hit = \frac{N_c}{N_c + N_m} hit=Nc+NmNc
  • 平均访问时间 t a = t c ⋅ h i t + t m ( 1 − h i t ) t_a = t_c \cdot hit + t_m(1-hit) ta=tchit+tm(1hit)
  • 访问效率 e = t c t a e = \frac{t_c}{t_a} e=tatc
  • 与无Cache相比速度提高的倍数 n = t m t a − 1 n= \frac{t_m}{t_a} - 1 n=tatm1

6.磁盘存储器

  • 设磁盘每秒的转数为 r r r , 每条磁道的字节数为 N N N
  • 寻道时间 T s T_s Ts,旋转延迟时间 T d T_d Td,传输时间 T t T_t Tt
  • 数据传输率:
    D = r N D = rN D=rN
  • 平均存取时间:
    t = T s + T d + T t = T s + 1 2 r + b r N t = T_s + T_d+T_t = T_s+\frac1{2r}+\frac{b}{rN} t=Ts+Td+Tt=Ts+2r1+rNb

第4章 指令系统 💡

1.指令格式

  • 定长操作码:操作码长度固定
  • 扩展操作码:操作码的长度随着地址码的减少而增加

2.寻址方式

①指令寻址

  • 顺序寻址:下一条指令的地址由PC自动形成
  • 跳跃寻址:下一条指令的地址由指令本身给出

②数据寻址

  • 隐含寻址、立即寻址
  • 直接寻址、间接寻址
  • 寄存器寻址、寄存器间接寻址
  • 基址寻址、变址寻址
  • 相对寻址:EA = (PC) + A
  • 堆栈寻址:入栈为 S P − 1 → S P \rm SP-1 \to SP SP1SP,出栈为 S P + 1 → S P \rm SP+1 \to SP SP+1SP

在这里插入图片描述

3.基址寻址 vs 变址寻址

基址寻址变址寻址
有效地址EA = (BR) + AEA = (IX) + A
扩大寻址范围
寄存器内容由操作系统确定,不可变由用户确定,可变
应用多道程序技术处理数组问题

4.RISC vs CISC ★

RISCCISC
指令系统简单复杂
指令长度固定不固定
通用寄存器数量较少
可访存指令只有 load/store无限制
指令流水线必须实现可以实现
控制器采用组合逻辑采用微程序
目标代码生成采用编译优化难以用编译优化

第5章 中央处理器 🔑

1.CPU的基本结构

CPU
运算器
ALU  ACC
GPR PSW
控制器
PC ID
IR MAR MDR
  • PC, GPR, PSW 对程序员可见,即不透明的
  • IR, MAR, MDR 对程序员不可见,即透明的

2.控制器的种类

组合逻辑控制器微程序控制器
执行速度
扩展性易扩充修改难以修改
应用场合RISCCISC
  • 控制器的输入信号来源:时钟信号、IR、程序状态字、控制总线
  • 控制器的控制方式:同步控制、异步控制、联合控制、人工控制
  • 多级时序系统:机器周期、节拍

3.微程序控制器

  • 一条机器指令 ⇒ 一个微程序 ⇒ 若干微指令
  • 一条微指令 ⇒ 若干微命令
  • 控制存储器(CM):在CPU内部,由ROM实现,用于存放微程序,是微程序控制器的核心
  • 微命令:控制部件向执行部件发出的控制命令,与微操作相对应
  • 微指令的地址形成
    • 直接由下地址字段确定: A d ( C M D R ) → C M A R \rm Ad(CMDR) \to CMAR Ad(CMDR)CMAR
    • 根据机器指令的操作码形成: O P ( I R ) → 微地址形成部件 → C M A R \rm OP(IR) \to 微地址形成部件 \to CMAR OP(IR)微地址形成部件CMAR
  • 微指令的编码方式:也叫微指令的控制方式
    • 直接编码(直接控制)
    • 字段直接编码、字段间接编码
  • 微指令的格式
水平型微指令垂直型微指令
运行速度
指令特点指令长,程序短指令短,程序长
实现直接编码、字段直接编码、字段间接编码采用微操作码

4.指令执行过程 ★

  • 指令周期:从主存取出一条指令并执行的时间
  • 机器周期:把一条指令的执行过程划分为若干阶段,完成一个阶段所需的时间称为机器周期
  • 时钟周期:机器主频的倒数。一个机器周期包含若干时钟周期

①取指周期

  • 如果指令字长等于存储字长,取指周期等于机器周期
  • 如果指令字长等于存储字长的 2 倍,则需要 2 次访存,取指周期等于机器周期的 2 倍
    T 0 : ( P C ) → M A R , 1 → R T 1 : M ( M A R ) → M D R , ( P C ) + 1 → P C T 2 : M D R → I R , O P ( I R ) → I D \begin{aligned} & {\rm T_0:(PC) \to MAR,1 \to R} \\ & {\rm T_1:M(MAR) \to MDR,(PC)+1 \to PC} \\ & {\rm T_2:MDR \to IR,OP(IR) \to ID} \end{aligned} T0:(PC)MAR1RT1:M(MAR)MDR(PC)+1PCT2:MDRIROP(IR)ID

②间址周期

T 0 : A d ( I R ) → M A R , 1 → R T 1 : M ( M A R ) → M D R T 2 : M D R → A d ( I R ) \small \begin{aligned} & {\rm T_0:Ad(IR) \to MAR, 1 \to R} \\ & {\rm T_1:M(MAR) \to MDR} \\ & {\rm T_2:MDR \to Ad(IR)} \end{aligned} T0:Ad(IR)MAR1RT1:M(MAR)MDRT2:MDRAd(IR)

③执行周期

  • 特别需要指出的中断返回指令
    T 0 : S P → M A R , 1 → R T 1 : M ( M A R ) → M D R T 2 : M D R → P C , ( S P ) + 1 → S P \begin{aligned} & {\rm T_0: SP \to MAR,1 \to R} \\ & {\rm T_1: M(MAR) \to MDR} \\ & {\rm T_2: MDR \to PC,(SP)+1\to SP} \end{aligned} T0:SPMAR1RT1:M(MAR)MDRT2:MDRPC(SP)+1SP

④中断周期

T 0 : ( S P ) − 1 → S P → M A R , 1 → W T 1 : P C → M D R T 2 : M D R → M ( M A R ) ,中断向量地址 → P C \small \begin{aligned} & {\rm T_0:(SP)-1 \to SP \to MAR,1 \to W} \\ & {\rm T_1:PC \to MDR} \\ & {\rm T_2:MDR \to M(MAR),中断向量地址 \to PC} \end{aligned} T0:(SP)1SPMAR1WT1:PCMDRT2:MDRM(MAR),中断向量地址PC


5.流水线技术 ★

①基本概念

  • 单周期CPU:一条指令在一个时钟周期内完成,指令之间串行执行
  • 多周期CPU:一条指令的执行过程分成几个阶段,每个阶段用一个时钟周期去完成,指令之间串行执行
  • 流水线CPU:在多周期CPU的基础上,每个阶段并行执行

②影响流水线的因素

  • 结构相关:资源冲突,如存储器争夺
  • 控制相关:条件转移指令引起,可采用分支预测解决
  • 数据相关:按序流动的流水线只可能出现 RAW 相关,解决方法可采用旁路技术、流水线暂停、编译器优化
    • RAW 冲突:在上一条指令写之前就已经被读取
      A D D    R 1 , R 2 , R 3 S U B    R 4 , R 1 , R 5 {\rm ADD \space\space R_1, R_2, R_3} \\ {\rm SUB \space\space R_4, R_1, R_5} ADD  R1,R2,R3SUB  R4,R1,R5
    • WAR 冲突:在上一条指令读之前就已经写入
      S T A    M ( x ) , R 3 A D D    R 3 , R 4 , R 5 {\rm STA \space\space M(x), R_3} \\ {\rm ADD \space\space R_3, R_4, R_5} STA  M(x),R3ADD  R3,R4,R5
    • WAW 冲突:在上一条指令写之前就已经写入
      M U L    R 3 , R 1 , R 2 A D D    R 3 , R 4 , R 5 {\rm MUL \space\space R_3, R_1, R_2} \\ {\rm ADD \space\space R_3, R_4, R_5} MUL  R3,R1,R2ADD  R3,R4,R5

③流水线的性能指标

  • 吞吐率:单位时间内完成的指令数
    T P = n ( k + n − 1 ) Δ t TP = \frac{n}{(k+n-1)\Delta t} TP=(k+n1)Δtn
  • 加速比:没有流水线和有流水线所用的时间比
    S = k n k + n − 1 S = \frac{kn}{k+n-1} S=k+n1kn
  • 效率:面积比

④流水线的多发技术

  • 超标量流水线(Super Scalar)
    • 每个时钟周期并发多条指令,多条指令并行执行
    • 不能调整指令执行顺序,依靠编译优化技术
  • 超流水线(Super Pipeline)
    • 时钟周期再分段,一个时钟周期内一个功能部件使用多次
    • 不能调整指令执行顺序,依靠编译优化技术
  • 超长指令字(VLIW)
    • 多条能并行执行的指令组成一条具有多个操作码字段的超长指令

第6章 总线 ☁️

1.总线分类

总线分类 { 片内总线 系统总线 { 数据总线 地址总线 控制总线 通信总线 总线分类 \begin{cases} 片内总线 \\ 系统总线 \begin{cases} 数据总线 \\ 地址总线 \\ 控制总线 \end{cases} \\ 通信总线 \end{cases} 总线分类 片内总线系统总线 数据总线地址总线控制总线通信总线

2.总线的判优控制 ★

  • 总线判优控制分为集中式和分布式
链式查询计数器定时查询独立请求
控制线数3 l o g 2 n + 2 log_2n + 2 log2n+2 2 n + 1 2n+1 2n+1
优点优先级固定;结构简单,容易扩充优先级灵活优先级灵活,响应速度快
缺点电路故障敏感控制复杂控制复杂

3.总线的通信控制

①同步通信

  • 采用统一的时钟信号
  • 传输速度快,可靠性较差
  • 适用于总线长度短,各部件存取时间接近的系统

②异步通信

  • 没有统一的时钟信号,依靠握手信号来实现,分为不互锁、半互锁、全互锁
  • 异步串行通信的数据传输速度用 波特率和比特率来衡量
    • 波特率:单位时间内传送二进制数据的位数(bps)
    • 比特率:单位时间内传送二进制有效数据的位数(bps)

第7章 I/O系统 💾

1.I/O接口

  • I/O端口:I/O接口中可被CPU直接访问的寄存器
  • 统一编址:使用统一的访存指令访问I/O端口
  • 独立编址:使用专门的I/O指令访问I/O端口
  • I/O控制方式:程序查询方式、程序中断方式、DMA、通道

2.程序中断

中断类型 { 外部中断(硬件中断) { 非屏蔽中断 可屏蔽中断   内部中断(软件中断) { i n t   0 :除法错中断 i n t   1 :单步中断 i n t   3 :调试中断 i n t o :溢出中断 i n t   n :指令中断 中断类型 \begin{cases} 外部中断(硬件中断) \begin{cases} 非屏蔽中断 \\ 可屏蔽中断 \end{cases} \\\,\\ 内部中断(软件中断) \begin{cases} int \space 0:除法错中断 \\ int \space 1:单步中断 \\ int \space 3:调试中断 \\ into:溢出中断 \\ int \space n:指令中断 \\ \end{cases} \\ \end{cases} 中断类型 外部中断(硬件中断){非屏蔽中断可屏蔽中断内部中断(软件中断) int 0:除法错中断int 1:单步中断int 3:调试中断into:溢出中断int n:指令中断

①中断执行过程

  • 中断向量:中断服务程序的入口地址
  • 中断周期内,由中断隐指令完成如下操作:
    • 关中断
    • 保存程序断点
    • 寻找中断服务程序入口地址
  • 保护现场和恢复现场均由中断服务程序完成
  • 中断判优的实现:硬件排队、软件排队
  • 中断服务程序入口地址的寻找:硬件向量法、软件查询法

②中断屏蔽字

  • 0表示允许该中断源的请求,1表示屏蔽该请求。
  • 屏蔽字中 1 的个数越多,优先级越高

3.DMA

①DMA的传送方式

  • 停止CPU访存
  • DMA和CPU交替访存
  • 周期挪用:I/O 设备和CPU同时请求访存,出现冲突,CPU暂时放弃总线占有权,I/O 设备挪用一个或几个存取周期

②DMA的传送过程

  • 预处理:I/O 设备向 DMA 控制器发 DMA 请求,DMA 控制器向 CPU 发总线请求
  • 数据传送:完全由硬件控制
  • 后处理:DMA 控制器向CPU发送中断请求

4.DMA vs 程序中断 ★

  • 中断响应只能发生在指令的执行周期后,DMA 响应可以发生在每个机器周期后
  • 中断是软件传输,DMA 是硬件传输
  • 中断传输需要CPU干预,DMA 不需要
  • 中断要保护和恢复现场,DMA 不需要
  • 中断能处理异常事件,DMA 不能
  • DMA 响应优先级高于中断
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值