ch3 CPU 子系统¶
1. CPU 基本情况概述¶
CPU 是计算机中的核心部件,具有数据运算功能和系统控制功能。主要部件包括时序系统、控制部件、缓存部件、寄存器堆、运算部件,部件通过数据 / 控制通路互连,形成 CPU 的硬件架构(微架构)。
- 运算部件:对操作数进行运算,主要是算术运算 / 逻辑运算。
- 缓存部件:为提高 CPU 从主存中读取指令 / 数据的效率,在 CPU 内部集成了多级缓存部件。用于缓存从主存中读取的部分指令 / 数据。
- 寄存器堆:存储各种用途的数据信息。一般用小容量的多端口存储器来构成寄存器堆。
- 通用寄存器:多个,有全局唯一地址,可通过地址码访问,可在机器指令中直接使用。用于提供操作数、地址码、存放运算结果等。
- 暂存器:多个,内部专用,无需分配地址码,不能在机器指令中显式使用。用来暂存产生的临时数据,以备在后续操作过程中使用。
- 指令寄存器(IR):只有一个,用于存放指令代码。从存储器或者指令缓存中读取到指令以后,就直接存入到指令寄存器中。
- 程序计数器(PC):只有一个,用来指明指令在存储器中的存放位置,即存储单元的地址码。取指令结束后,PC 保存的地址码自动修改,以指向下一条指令的存储单元,修改量取决于指令字长和存储器的编址单位。
- 程序状态字寄存器(PSW):只有一个,用于记录现行程序的运行状态和程序的工作模式。其中的特征位(进位 C、溢出 O、零值 Z、符号 S、奇偶 P),也称标志位,指令执行时,根据情况自动设置这些特征位,作为后续操作的判断依据。编程设定位(跟踪位 T、允许中断 I、程序优先级 P、运行模式)可通过程序来设定。
- 地址寄存器(MAR):只有一个,读写存储器时,先要定位存储单元,因此设置 MAR 来存放目标单元的地址码。先将有效地址送入 MAR,再启动后续的读写操作。
- 数据缓冲寄存器(MBR):只有一个,过渡性地存放 CPU 与主存之间交换的数据。无论是从主存读取的数据,还是写入到主存的数据,都要经过 MBR。
- 堆栈指针(SP):只有一个,固定存放堆栈的栈顶单元的地址码。根据这个地址码,去读写堆栈。
- 控制器:根据指令、时钟信号、外部信号等信息,产生各种控制信号(微命令),以便控制各种功能部件协同工作,完成指令的功能。根据产生微命令的方式,有两类控制单元:
- 组合逻辑控制器:组合逻辑硬件电路
- 微程序控制器:微程序译码
- 时序部件
- 时序信号:周期、节拍、脉冲等频率型信号序列。产生时序信号的部件称为时许发生器或时序系统,由一个低频振荡器和倍频逻辑组成。低频信号振荡器是一个低频脉冲源,能输出固定频率的基准脉冲信号(外频),作为系统时钟信号。系统时钟信号经过倍频放大以后,产生执行指令所需要的各种时序信号:节拍信号(CPU 时钟周期信号);工作周期信号(机器周期信号);指令周期信号。指令周期包括若干机器周期;机器周期包括若干时钟周期。
【CPU 的工作原理】
- 主要功能
- 处理指令:控制指令的执行顺序
- 执行操作:产生控制信号控制部件工作
- 控制时间:控制各步操作的时序
- 数据运算:算术和逻辑运算
- 执行指令的流程
- 读取指令:从存储器中读取
- 指令译码:通过控制器进行、产生控制信号
- 指令执行:寻址、取数、运算
- 后续工作:保存结果、响应外部请求等
- 部件的工作方式
- 同步控制方式:每步操作都向统一的外部时序信号对齐;各步操作之间无交互。
- 异步控制方式:每步操作都不需向统一的外部时序信号对齐;各步操作之间通过交互应答来实现协同。
【外部连接与 I/O 控制任务】
- 外部连接类型
- 单处理机系统:通过前端总线与北桥芯片组连接
- 多处理机系统:高性能 CPU 中集成了主存、视频和 PCI-E 接口,CPU 之间通过 QPI 与芯片组之间通过 DMI 总线互连。
- 在 I/O 控制中的任务:主机与外设之间进行数据输入 / 输出操作时,在不同的 I/O 控制模式下,CPU 承担的任务各不相同:
- 程序传送模式:CPU 直接执行 I/O 指令
- 中断模式:CPU 执行中断服务程序
- DMA 模式:CPU 管理 DMA 控制器、善后处理
- IOP 和 PPU 模式:CPU 组织 I/O 程序,管理 IOP 与 PPU,以及善后处理
2. 指令系统¶
设计 CPU 的一般过程:指令系统 \(\to\) 数据通路 \(\to\) 控制器 \(\to\) CPU 定型。
【指令】计算机执行某类操作的信息的集合,是 CPU 工作的主要依据。
【指令集】处理器能执行的全体指令的集合(CISC、RISC),决定了计算机的硬件功能,是计算机中软硬件的分界面。
【指令 / 数据字】指令 / 数据的一组二进制代码。
【指令 / 数据字长】指令 / 数据的二进制代码位数。
【机器字长】计算机能够直接处理的二进制数据的位数,等于寄存器的宽度。
【指令集类型】
- CISC:复杂指令集计算,指令数量多;指令长度可以不固定,指令格式和寻址方式多样;很多指令会涉及存储器读写操作,指令周期长;一般在通用处理器中使用。
- RISC:精简指令集计算,指令数量少;指令长度固定,指令格式和寻址方式种类少;一般只有少量指令(如取数 / 存数)才会读写存储器,其余指令只涉及 CPU 内部寄存器,指令周期短;一般在高端服务器中使用。
【指令格式】[操作码][地址码 A / 操作数 D]
- 指令字长:包括定长指令格式与变长指令格式。
- 操作码结构:包括定长操作码、扩展操作码与复合型操作码结构。
- 地址结构:指令中提供的地址包括地址偏移量 / 立即数,以及寄存器编号。
- 地址提供方式:包括显式地址和隐式地址方式。
- 地址结构类型:包括四地址结构指令、三地址结构指令、二地址结构指令、一地址结构指令、零地址结构指令。零地址结构指令用于处理机的特殊控制,针对隐含约定的寄存器,如返回指令。
- 操作数类型
- 地址码数据:寄存器编号或者存储器地址,无符号整数
- 数值型数据:定点数、浮点数等,一般用补码表示
- 字符型数据:通常表示为 ASCII 码 / 汉字机内码格式
- 逻辑型数据:常规二进制代码,不具有数值含义
- MIPS \(32\) 架构的指令格式:RISC,指令字长为 \(32\) 位,寄存器数量为 \(32\) 个。
【指令中的寻址方式】指形成操作数地址或寻找操作数的方式。一条指令,可能会涉及多种寻址方式。操作码可隐含说明不同寻址方式,指令中可设置寻址方式字段。
- 立即寻址:指令中直接包含了操作数。用来提供偏移量、常数、设置初值等
- 直接寻址:指令中直接给出操作数的地址码。包括主存直接寻址(绝对寻址)、寄存器直接寻址(针对操作数在寄存器中的情况)
- 间接寻址:指令给出操作数的间接地址,一般只在 CISC 中。包括主存间接寻址、寄存器间接寻址、堆栈间接寻址。
- 变址、基址寻址:指令给出一个寄存器号和一个地址量,寄存器内容与地址量之和为有效地址。变址寻址指令提供基准量,寄存器提供偏移量;基址寻址指令提供偏移量,寄存器提供基准量,比如二维数组的读写就是基址寻址。采用基址 + 变址的方式,可以处理三维数组。
- PC 相对寻址:指令给出偏移量,PC 当前值与偏移量相加得到有效地址。是一种特殊的基址寻址方式,有效地址相对于 PC 浮动,编程方便。
- 页面寻址(伪直接寻址):指令给出位移量,PC 的高位部分与位移量拼接,形成有效地址。用于页式存储系统。寻址速度快,适于组织程序模块,有效利用存储空间。
【指令的功能和类型】
- 数据传送类指令:主要用来实现寄存器之间、存储器单元之间以及寄存器 - 存储器单元的数据传送。主要包括取数指令、存数指令、数据传送、数据交换和堆栈操作等。设计时需要考虑规定传送范围、指明传送单位、设置寻址方式。
- I/O 指令:设计时需考虑 I/O 指令对设备的适应性、主机对外设的寻址方式、I/O 指令的设计思路。
- 算术 / 逻辑运算指令:设计时需考虑操作数类型、符号、进制等,运算结束后设置 CPU 相应状态标志寄存器。
- 程序控制类指令:包括转移指令、转子指令(调用)、返回指令、软中断指令等。
3. 运算部件与运算器组织¶
【关键问题】如何以加法器为基础,实现各种类型的算术逻辑运算处理。
【解决思路】复杂运算转换为四则运算,进而转换为加法运算。
【解决方法】在加法器的基础上,增加移位传送功能,并且输入运算控制条件。
【串行加法器】低位向高位依次传递进位信号。影响运算速度的主要因素就是进位信号的传递。
【并行加法器】各位进位信号同时形成。
【分组进位】组内并行、组间并行。速度 / 结构介于全串行和全并行之间。
【运算器的组织】
- 带多路选择器的运算器:R 各自独立;可同时向 ALU 提供两个操作数;采用单向内总线。
- 带输入锁存器的运算器:单口 RAM 不能同时向 ALU 提供两个操作数;用锁存器暂存操作数;采用双向内总线。
- 位片式运算器:用双口 RAM(两地址端、两数据端)作通用寄存器组,可同时提供数据;用多路选择器作输入逻辑,不需暂存操作数;ALU 增加乘、除功能,用乘商寄存器存放乘数、乘积或商。
4. MIPS32 架构 CPU 设计¶
MIPS 是一种无内部互锁流水级微处理器。存储器按字节编址;通用寄存器 \(32\) 个、CPO 专用寄存器 \(8\) 个,宽度 \(32\) 位;采用 RISC 架构。
【指令格式与指令集】指令字长固定为 \(32\) 位,寄存器型寻址,指令中给出寄存器号。
- R 型指令:操作数和保存结果均通过寄存器进行
- I 型指令:操作数中涉及立即数,结果保存到寄存器
- J 型指令:实现无条件转移
【寻址方式】通过 \(op\) 字段和 \(func\) 字段(R 型指令)隐含说明寻址方式。
- 立即数寻址:操作数在指令中的立即数字段
- 寄存器直接寻址:操作数直接在寄存器中
- 基址寻址:操作数由寄存器和立即数字段联合产生
- PC 相对寻址:操作数由寄存器和立即数字段联合产生
- 伪直接寻址:也叫页面寻址,由 PC 高 \(4\) 位与指令中的地址段组合产生有效地址
【指令代码与功能】
- R 型指令:包括 \(3\) 寄存器 R 型指令、\(2\) 寄存器 R 型指令、\(1\) 寄存器 R 型指令。
- I 型指令:包括面向运算的 I 型指令、面向访存的 I 型指令、面向数位设置的 I 型指令、面向条件转移(分支)的 I 型指令(是标准的 PC 相对寻址方式)。
- J 型指令:是标准的页面寻址方式(伪直接寻址),包括无条件跳转、调用与联接。
【单周期 CPU 特性总结】
- 指令周期与时钟周期等长,且宽度较大;
- 处理器的 \(CPI = 1\);
- 在指令周期中,各种硬件资源均被相应的功能操作独占,不能共享,硬件利用率低;
- 所有指令无论其实际执行时间长短,均分配较长的时钟周期,时间浪费严重;
- 对简单的小规模指令集支持较好;
- 难胜任浮点或更复杂指令集。
5. 提升 CPU 性能的高级技术¶
【流水线】把指令过程分解为若干子过程,每个子过程都可有效地在其专用功能段上与其它子过程重叠执行,这种技术称为流水技术。流水技术适合于大量相同指令的执行。
【流水线的基本类型】
- 按流水线的处理层级可分为:操作部件级流水、指令级流水、处理机级流水。
- 按流水线能完成的功能数量可分为:单功能流水线、多功能流水线(静态多功能、动态多功能)。
- 按处理的数据形态可分为:标量流水线、向量流水线。
- 按流水线内各段的连接模式可分为:线性流水线、非线性流水线。
- 按流水线输入输出对应关系可分为:顺序流水线、乱序流水线。
【流水线的性能指标】
- 吞吐率:单位时间内处理的任务数或数据量。
- 加速比 SP:同一程序,不采用流水的执行时间与采用流水线的执行时间的比值。
- 利用率 PE:流水线中各部件的平均利用率,即一定时间内,部件实际工作时间与部件总时间的比值(段时比)。
【五段式数据通路】取指段 IF、译码段 ID、执行段 EX、访存段 MEM、写回段 WB。
【流水线冒险】在指令流水线中当遇到一些情况使得流水线无法正确执行后续指令而引起流水线阻塞或停顿,这个现象称为流水线冒险。
- 结构冒险:同一部件同时被不同指令所用,导致硬件资源发生冲突。
- 数据冒险:后面指令用到前面指令的结果,但指令结果还没产生。
- 控制冒险:当遇到改变指令执行顺序的转移指令(调用、返回等)、异常和中断情况时,在形成转移地址之前,流水线中已有若干后续指令在执行,这时需要清除这些指令。
【标量流水线】在每个时钟周期只发射 \(1\) 条指令,并要求每个时钟周期只从流水线流出一条指令的结果。
【超标量流水线】是指在每个时钟周期向流水线发射多条指令,并能从流水线流出多个结果。
【SMT 同步多线程】使 CPU 能够执行分别来自多个线程的指令(一种硬件多线程技术)。
【多核技术】多核处理器也称为片上多处理器,主要特征是在一个处理器芯片上集成多个 CPU 内核。