Hanwan Space

计组后半部分预习

计组后半段内容多,难度大,太艰难了。


计组前半部分可看计组期中复习笔记

存储系统

常用半导体存储器

  • RAM
    • SRAM (速度最快)
    • DRAM → SDRAM → DDR SDRAM(DDR2、DDR3、DDR4、DDR5)
  • ROM(虽然叫 Read-Only Memory,但是有的可以写)
    • EPROM
    • E²PROM → Flash(NOR、NAND)

相联存储器

其中任一存储项内容作为地址来存取的存储器。

用途:快速查找、地址变换

如:Cache 的地址映射表,页表中的快表(TB)、变换旁路缓冲器(TLB)

主存储器

存储芯片的连接方式 ⭐️

  • 字扩展(字数的扩展,即地址的扩展)
    • 扩展的芯片不能同时选中
  • 位扩展(位数的扩展)
    • 扩展的芯片可以同时选中
  • 位数和字数同时扩展

用存储器芯片构成主存模块

  • SRAM(主存与 CPU 速度协调)
  • EPROM
  • E²PROM
  • SDRAM — 内存条

多体交叉存储器

  1. 多体并行访问
  2. 多体交叉访问(和流水线类似)

高速缓冲存储器

主存与 Cache 的地址映射 ⭐️

以块为单位。

  1. 全相联:主存的任意一块可以映像到 Cache 的任意一块。

    • Cache 地址:| Cache 块号 | 块内地址 |
    • 主存地址:| 主存块号 Tag | 块内地址 |
    • 变换:Cache 块号 目录表\xrightarrow{\text{目录表}} 主存块号
  2. 直接映射:主存的每一块只能映像到 Cache 的一个特定块。

    • Cache 地址:| 块号 | 块内地址 |
    • 主存地址:| 区号 Tag | 区内块号 Index | 块内地址 |
    • 无需变换:所访问的主存区号目录表中记录的主存区号相比较
  3. 组相联:组间直接映射,组内全相联。

    • Cache 组数 = 区内块数

    • Cache 地址:| 组号 | 组内块号 | 块内地址 |

    • 主存地址(两种划分方法,看题目要求选择,一般用第二种)

      • | 区号 | 区内组号 | 组内块号 | 块内地址 |

      • | 区号 Tag | 区内块号 Index | 块内地址 |

      • 相联存储器容量 = 8 × (Tag 位数 + 1 位有效位)

替换算法

直接映射无需替换算法(因为一次就替换全部)

  • 随机替换算法(RAND)
  • 先进先出替换算法(FIFO)
  • 最不经常使用(最少使用)替换算法(LFU):计数器位数多,实现困难
  • 近期最少使用(最久未用)替换算法(LRU)
  • 最佳替换算法(OPT)

更新策略

  • 写回法
  • 写直达法(全写法)

Cache 性能测量

  • 命中率 h=NCN×100%h=\frac{N_C}{N}\times 100\%
    • NN:CPU 访问主存次数
    • NCN_C:CPU 访问命中 Cache 的次数
    • 缺失率 m=1hm=1-h
  • 平均访问时间 TA=TC+(1h)×TMT_A=T_C+(1-h)\times T_M
    • TCT_C:Cache 访问时间
    • TBT_B:数据块装入 Cache 的时间
    • TMT_M:主存访问时间,等于 TB+TCT_B+T_C,而由于 TMTcT_M\gg T_cTBTMT_B\approx T_M
    • 推导:TA=h×TC+(1h)×TM=TC+(1h)×TB=TC+(1h)×TM\begin{aligned}T_A&=h\times T_C+(1-h)\times T_M \\ &=T_C+(1-h)\times T_B \\ &=T_C+(1-h)\times T_M\end{aligned}
  • 加速比 SP=TMTA=TMTC+(1h)×TM=11h+1rS_P=\frac{T_M}{T_A}=\frac{T_M}{T_C+(1-h)\times T_M}=\frac{1}{1-h+\frac{1}{r}}
    • r=TMTCr=\frac{T_M}{T_C}
    • 可见随着命中率 hh 的增大,加速比 SS 提高。
  • 成本 C=(C1×S1+C2×S2)/(S1+S2)C=(C_1\times S_1+C_2\times S_2)/(S_1+S_2)
    • CiC_i:价格,1 为主存,2 为 Cache
    • SiS_i:容量,1 为主存,2 为 Cache
    • S1S2S_1\gg S_2

Cache 性能提升

  1. 多级 Cache 结构
  2. 降低 Cache 的缺失率
    1. 缺失类型
      • 强制缺失:第一次访问
      • 容量缺失:容量有限,不包含所需的所有主存块(增大 Cache 容量可减少)
      • 冲突缺失:主要发生在直接映射
    2. 合理设计 Cache 块尺寸
    3. 合理增加 Cache 容量
    4. 合理设置相联度
    5. 硬件预取(可解决强制缺失)
    6. 编译优化
  3. 减少 Cache 开销

虚拟存储器

其实和 Cache 那块内容很相似。

  • 地址映射:全相连
  • 地址变换:MMU
  • 页式虚拟存储器 ⭐️
    • 多级页表
      • 虚地址:| 虚页号 (V 位) | 页面偏移 (P 位) |
      • (2Pm)i=2V\left(\frac{2^P}{m}\right)^i=2^V
      • 页表级数 i=VPlog2mi=\left\lceil\frac{V}{P-\log_2m}\right\rceil
        • PP:页面偏移的位数
        • VV:虚页号的位数
        • mm:页表项编址单元位数
    • 快慢表
      • 快表:CPU 内部的 TLB
      • 慢表:主存中的页表
    • 实存空间、虚存空间、页面大小(决定页面偏移位数)

外部存储器(辅助存储器)

磁表面存储原理及记录方式

编码效率η=位密度最大磁化翻转次数\text{编码效率}η=\frac{\text{位密度}}{\text{最大磁化翻转次数}}

磁记录方式及性能评价
磁记录方式及性能评价

磁盘存储器

  • 磁盘结构
    • 磁道(记录面的同心圆)
    • 扇区(磁道的段)
    • 柱面(相同序号的磁道构成的圆柱面)
  • 数据应尽可能放在同一柱面或者相邻柱面,缩短寻道时间
  • 技术指标 ⭐️
    • 道密度:道 / mm
    • 位密度:bit / mm(最靠近中心的磁道)
    • 非格式化容量 = 位密度 × 内圈磁道周长 × 每个记录面磁道数 × 记录面数
    • 格式化容量 = 每个扇区的字节数 × 每道道扇区数 × 每个记录面磁道数 × 记录面数
    • 平均访问时间 = 平均寻道时间 + 平均等待时间 + 数据传输时间
      • 平均等待时间:磁盘旋转一周所用时间的一半
    • 转速:RPM(转 / 分钟)
    • 数据传输速率 = 每个扇区的字节数 × 每道扇区数 × 磁盘转速
  • 与计算机主机的连接

磁盘阵列 RAID

由独立的磁盘组成的具有冗余特性的阵列。

指令系统

存储模式

  • 数据存储顺序
    • 大端存储:最低有效字节存储在最高地址位置
    • 小端存储:最低有效字节存储在最低地址位置
  • 边界对齐
    • 16 位字长的数据:起始地址为 2 的整数倍。
    • 32 位字长的数据:起始地址为 4 的整数倍。
    • 64 位字长的数据:起始地址为 8 的整数倍。
  • 堆栈
    • PUSH 操作:(SP)iSP,(R1)MSP\text{(SP)}-i\to\text{SP},\text{(R1)}\to\text{M}_\text{SP}
    • POP 操作:MSP(R1),(SP)+iSP\text{M}_\text{SP}\to\text{(R1)},\text{(SP)}+i\to\text{SP}
  • 冯诺伊曼结构和哈佛结构
    • 前者数据和指令存一起,后者数据指令分开存

指令类型

  • 数据传送类(MOV)
  • 运算类
    • 算术运算类
    • 逻辑运算类
  • 输入/输出类
    • 统一编址的情况
    • 独立编址的情况
  • 程序控制类
    • 转移指令
    • 循环控制指令
    • 过程调用和返回指令
    • 程序自中断指令
  • 系统控制类(通常是特权指令,虚存管理、任务切换、改变处理器工作模式)

指令设计

指令格式

二地址指令:| 操作码 | 地址码 1 | 地址码 2 |

还有一地址指令、零地址指令……

  • 定长操作码
  • 变长操作码(扩展操作码)

操作码设计

  • 定长操作码
    • NN 条指令,所有指令均用 nn 位编码:N2nN\le 2^n
  • 变长操作码 ⭐️
    • 原则:短码不能是长码的前缀
    • 扩展操作码设计
    • 平均码长i=1npi×li\sum_{i=1}^n p_i\times l_i
    • 设计
      • 霍夫曼编码
      • 特定规则
      • 地址码数量

寻址方式

  1. 隐含寻址:操作数的位置默认,无需给出。

  2. 立即寻址:操作数在指令中。

  3. 寄存器寻址:操作数在指令指定的寄存器中。

  4. 直接寻址:操作数在主存中,主存地址在指令中。

  5. 寄存器间接寻址:操作数在主存中,主存地址在指令指定的寄存器中。

  6. 相对寻址:跳转目标地址 EA=(PC)+A\text{EA}=\text{(PC)}+\text{A}

  7. 基址寻址:操作数在主存中,EA=(基址寄存器)+A\text{EA}=\text{(基址寄存器)}+\text{A}

指令系统结构的发展

复杂指令集计算机 CISC

  • 用一条指令代替一串指令
  • 增加新的指令
  • 增强指令功能
  • 设置功能复杂的指令
  • 增加寻址方式增加数据表示方式

精简指令集计算机 RISC

  • 指令系统简单

    • 指令条数少、格式少、长度固定、功能简单
    • 寻址方式少
    • 采用硬布线控制逻辑(不用或少用微程序控制)
  • Load/Store结构

    • 只有LOAD和STORE指令可以访问存储器
    • 寄存器多
    • 寄存器窗口技术
  • 十分重视提高流水线的执行效率

    • 大部分指令可以单周期执行完成
    • 延迟转移技术
    • 指令流调整技术
  • 十分强调优化编译技术的作用

中央处理器(CPU)

CPU 的内部结构

单总线数据通路CPU内部结构图
单总线数据通路CPU内部结构图

微操作与微命令

微操作:CPU 的原子操作,以含有一个寄存器的传递操作为标志。如:ARPC\text{AR}\gets\text{PC}

微命令:控制微操作完成的控制信号,由控制器产生。如:PCout,ARin\text{PC}_\text{out},\text{AR}_\text{in}

微操作流程

  1. 时序信号产生
    • 指令周期:完成一条指令
    • CPU 周期:完成一个子周期
    • 节拍周期:完成一个微操作
  2. 取址周期
    • 一个简单的取址周期可由 3 个步骤、4 个微操作组成
      • T1: ARPC\text{AR}\gets\text{PC}
      • T2: DRMemory[AR]\text{DR}\gets\text{Memory[AR]}
      • T3: PCPC+I,IRDR\text{PC}\gets\text{PC}+\text{I},\text{IR}\gets\text{DR}I\text{I} 为指令长度 byte)

微程序控制器设计

微指令

微指令:一个节拍内出现的一组微操作进行描述的语句。

微程序 / 固件:一个微指令序列。

微指令设计

  • 微指令地址的生成
    • 两地址方式(断定方式)
    • 单地址方式(计数方式,增量方式)
    • 可变格式
  • 编码
    • 水平型:多个微操作同时发生
    • 垂直型:类似于机器指令
  • 相容性:可在同一时间有效的控制信号。
  • 互斥性:不能在同一时间有效的控制信号。

微程序设计 ⭐️

看例题。

CPU 性能测量与提高

CPU 性能测量 ⭐️

  • CPU 时间 TCPU=N×TCLK=NfCLKT_\text{CPU}=N\times T_\text{CLK}=\frac{N}{f_\text{CLK}}

    • NN:CPU 时钟周期数
    • TCLKT_\text{CLK}:时钟周期时间
    • fCLKf_\text{CLK}:时钟频率
  • CPI:每条指令执行所用时钟数。

    • II:指令数
    • CPI=1Ii=1n(CPIi×Ii)=i=1n(IiI×CPIi)CPI=\frac{1}{I}\sum_{i=1}^n (CPI_i\times I_i)=\sum_{i=1}^n (\frac{I_i}{I}\times CPI_i)
    • TCPU=I×CPI×TCLK=I×CPIfCLKT_\text{CPU}=I\times CPI\times T_\text{CLK}=\frac{I\times CPI}{f_\text{CLK}}
  • IPC:每时钟周期执行的指令数

  • MIPS:每秒钟执行的百万指令数

    • TT:执行时间

    • MIPS=IT×106=fCLKCPI×106MIPS=\frac{I}{T\times 10^6}=\frac{f_\text{CLK}}{CPI\times 10^6}

  • FLOPS:每秒钟完成的浮点运算次数

    • MM:浮点运算次数

    • FLOPS=MTFLOPS=\frac{M}{T}

    • 度量单位:MFLOPS、GFLOPS、TFLOPS…

提高 CPU 速度的策略

  • 多核技术
  • 多线程技术

流水线技术与指令级并行

流水线处理的概念

若将一重复的处理过程分解为若干子过程,每个子过程都可在专用设备构成的流水线功能段上实现,并可与其它子过程同时执行,这种技术称为流水技术

流水线的类型

  • 按流水线位于计算机系统的层次划分
    • 系统级流水线 / 宏流水线(多计算机系统串行)
    • 处理器级流水线
    • 部件级流水线
  • 按流水线功能的强弱划分
    • 单功能流水线
    • 多功能流水线
      • 静态流水线
      • 动态流水线
  • 按流水线是否有反馈回路划分
    • 线性流水线
    • 非线性流水线(需要流水线调度)
  • 按流水线输出端任务流出顺序与输入端任务流入顺序是否相同划分
    • 顺序流动流水线(入出顺序相同)
    • 异步流动流水线(入出顺序不同)
      • 无序流水线
      • 错序流水线
      • 乱序流水线
  • 按流水线一次处理对象的数量划分
    • 标量流水线
    • 超标量流水线
    • 向量流水线
    • 超长指令字流水线

浮点运算流水线

浮点加减 / 乘除流水线

  1. 阶码比较
  2. 尾数对齐
  3. 尾数加 / 减
  4. 规格化

指令流水线

指令流水线策略

  1. 增加指令流水线深度
    • 局限性
      • 指令执行过程的细化有限度
      • 随着深度增加,缓冲器增多,延迟加大,性能提高受阻碍
  2. 增加指令流水线条数

RISC-V 基本指令流水线

  1. 设计指令获取、执行的硬件逻辑电路
  2. 对硬件逻辑分段
    • 尽量使每段处理功能相对独立,处理时间基本均衡。
    • 保证当前指令在执行期间,指令流和数据流始终一个流向。
    • 分段结果己是最细的划分:每段中仅有一个用于指令处理的功能部件。
  3. 段间加入流水线寄存器
  4. 设计流水线控制器

流水线性能度量 ⭐️

时空图

吞吐率

  • 单位时间内,流水线所完成的任务数输出结果的数量

  • 最大吞吐率 TPmaxTP_\text{max}:流水线在达到稳定状态后所得到的吞吐率。

    • 各段运行时间相等:TPmax=1TCLKTP_\text{max}=\frac{1}{T_\text{CLK}}
    • 各段运行时间不等:TPmax=1max{τi}=1τTP_\text{max}=\frac{1}{\max\{\tau_i\}}=\frac{1}{\tau}
  • 实际吞吐率 TPTP:流水线 mm 段组成,完成 nn 个的任务吞吐率为实际吞吐率。

    • mm 段流水线,各段运行时间相等,为一个时钟周期 TCLKT_\text{CLK}
      • 完成 nn 个任务所用时间:Tn(m)=(m+(n1))×τ=(m+(n1))×TCLKT_n(m)=(m+(n-1))\times\tau=(m+(n-1))\times T_\text{CLK}
      • 实际吞吐率:TP=nTn(m)=n(m+(n1))×TCLK=TPmax1+m1nTP=\frac{n}{T_n(m)}=\frac{n}{(m+(n-1))\times T_\text{CLK}}=\frac{TP_\text{max}}{1+\frac{m-1}{n}}
    • 各段运行时间不等
      • 完成 nn 个任务所用时间:Tn(m)=i=1mτi+(n1)×max{τi}T_n(m)=\sum_{i=1}^m\tau_i+(n-1)\times\max\{\tau_i\}
      • 实际吞吐率:TP=nTn(m)=ni=1mτi+(n1)×max{τi}TP=\frac{n}{T_n(m)}=\frac{n}{\sum_{i=1}^m\tau_i+(n-1)\times\max\{\tau_i\}}
  • 使用 MIPSMIPS 表示:TP=MIPS×106=fCLKCPITP=MIPS\times 10^6=\frac{f_\text{CLK}}{CPI}

    • 单流水线计算机系统:由于 CPI最佳=1CPI_\text{最佳}=1,故 TPmax=fCLKTP_\text{max}=f_\text{CLK}

加速比

加速比 SS 定义为等功能非流水线执行时间 T(1)T(1)流水线执行时间 T(m)T(m) 之比。

S=Sn(m)=Tn(1)Tn(m)S=S_n(m)=\frac{T_n(1)}{T_n(m)}

  • mm 段流水线,nn 个任务,若每段运行时间均为 ττ
    • Tn(1)=nmτT_n(1)=n\cdot m\tau
    • Tn(m)=mτ+(n1)τT_n(m)=mτ+(n-1)\cdot\tau
    • Sn(m)=mnm+n1=m1+m1nS_n(m)=\frac{mn}{m+n-1}=\frac{m}{1+\frac{m-1}{n}}
    • 可见,增大指令流水线的级数和送入流水线的指令数均可提高运行速度。

效率

效率即流水线的设备利用率。流水线有通过(填充)时间和排空时间,效率 E<1E<1

各段运行时间相等

mm 个功能段,nn 个任务,各段运行时间为 ττ,各段效率 eie_i 相等,即 ei=nτTn(m)e_i=\frac{nτ}{T_n(m)}

总效率 E=1mi=1mei=nτTn(m)=nm+n1=11+m1nE=\frac{1}{m}\sum_{i=1}^{m}e_i=\frac{nτ}{T_n(m)}=\frac{n}{m+n-1}=\frac{1}{1+\frac{m-1}{n}}

可见当 nmn \gg m 时,E1E\approx 1

各段运行时间不等
E=n 个任务占用的时空区m 个段总的时空区E=\frac{n\text{ 个任务占用的时空区}}{m\text{ 个段总的时空区}}

指令流水线的性能提高

结构相关 / 冒险

  • 部分功能单元没有充分流水
    • 解决:将流水线设计得更合理
  • 资源冲突:两个以上需要同时使用硬件资源
    • 解决
      • 增加资源副本
      • 改变资源以能够并发使用
        • 主存访问冲突:哈佛结构(指令和数据分离)
        • 两个加法器:ALU、地址加法器
      • 延迟(或暂停)冲突段 / 在冲突段插入流水线气泡

数据相关 / 冒险

  • 操作数未有效生成,就被作为后续指令的操作数
  • 类型
    • 先写后读(RAW,Read After Write)
    • 先读后写(WAR)
    • 写后写(WAW)
  • 解决
    • 采用转发/直通/相关直接通路技术
    • 增加专用硬件(推后法)
    • 利用编译器
    • 对寄存器读写做特别设计(RISC-V)

控制相关 / 冒险

  • 对条件分支指令的处理方法
    1. 冻结流水线:检测到分支指令就清除紧随分支并插入气泡。
    2. 静态分支预测
      • 不会发生
      • 总会发生
      • 编译器预测
      • 测试法
    3. 动态分支预测
      • 分支历史表(分支预测缓存)
      • 分支历史移位寄存器
    4. 延迟分支:在转移指令之后插入没有数据相关或控制相关的有效指令
  • 带转移开销的流水线性能
    • 控制相关对流水线性能造成的损失远比数据相关要大得多。
    • 有停顿流水线的实际 CPI=理想 CPI+各种相关造成的停顿周期数指令数\text{有停顿流水线的实际 CPI}=\text{理想 CPI}+\frac{\text{各种相关造成的停顿周期数}}{\text{指令数}}
    • 带转移开销流水线的加速比=流水线深度有停顿流水线的实际 CPI\text{带转移开销流水线的加速比}=\frac{\text{流水线深度}}{\text{有停顿流水线的实际 CPI}}

提高指令级并行的技术

  • 乱序执行

  • 推测执行

多发射处理器

  • 超标量

  • 超长指令字处理器(VLIW)

总线与输入 / 输出系统

总线类型

  • 按连接层次
    • 片内总线
    • 系统总线
    • 通信总线
  • 按数据位数
    • 并行总线
    • 串行总线
  • 按用法
    • 专用总线
    • 公用(共享)总线

总线的信息传输方式

  • 过程

    1. 传输请求

    2. 总线仲裁

    3. 部件 / 设备寻址

    4. 数据传输

      • 并行传送方式

      • 串行传送方式

      • 分时传送方式

      • 消息传送方式

    5. 总线释放

  • 通信方式

    • 同步通信方式
      • 速度快,逻辑简单
      • 缺点:时钟速率受慢速设备限制
    • 异步通信方式
      • 无时钟信号线
      • 使用握手协议

总线仲裁

  • 集中式仲裁
    • 链式查询方式(菊花链):离总线控制器越近优先级越高
    • 计数器定时查询方式(轮询)
    • 独立请求方式
菊花链轮询独立请求
线数332+[log2n]2+[\log_2n]2n+12n+1
可扩充性
可靠性
优先级固定可变可变
总线分配速度
  • 分布式仲裁

典型的总线

  • 系统总线(内总线)
    • ISA 总线
    • PCI 总线
    • PCIe 总线
  • 通信总线(外总线)
    • RS-232C
    • USB
    • SCSI
    • SAS
    • ATA
    • SATA

输入输出技术

  • 程序查询方式
  • 中断方式
  • 直接存储器存取(DMA)
  • I/O 通道

并行体系结构

  • SISD: 单指令流单数据流(串行计算机)

  • SIMD: 单指令流多数据流

    • 阵列处理机
    • 向量处理机
  • MIMD: 多指令流多数据流

    • 多处理器系统(共享内存)
      • UMA:每个处理器 / 内核访问内存的时间一样
      • NUMA:……不一样
    • 多计算机系统(不共享内存,通信采用消息机制)
      • MPP:大规模并行处理机(高性能)
      • Cluster:集群(性价比
      • 网格(客户端 — 服务器,计算任务只在客户端节点进行,服务器进行任务分发和结果汇总)

  • 计组
© hawa130转载请注明出处
License: CC BY-NC-SA 4.0

上一篇

操作系统预习笔记

为什么操作系统概念这么多?
下一篇

All in One 折腾记录

All in Boom