中央处理器
中央处理器¶
CPU的功能和基本结构¶
- AH、AL中的H指的是AX这个寄存器的高位,High;L指的就是低位,Low




指令执行过程¶
现在已经不使用机器周期,不采用如下的三级时序系统。而是采用单周期CPU和多周期CPU。也就是默认机器周期 = 时钟周期。
- 指令周期是CPU从主存中取出并执行一条指令所需的全部时间。
- 多周期CPU:一条指令的执行过程被拆分为若干个独立的阶段(如取指、译码、执行、访存、写回),每个阶段占用1个时钟周期。不同指令包含的阶段数不同,因此指令周期不等长。单周期CPU:所有指令的完整执行均在1个时钟周期内完成,无阶段拆分。时钟周期长度必须满足最慢指令的需求。
- 单周期:一锤子买卖,硬件堆满,主频拉胯,浪费大; 多周期:分步走,硬件复用,主频高,效率好。
- 单周期的时钟周期 = 题目里给出的最长的那条路径(也就是所谓的需要的最长时间)。这也导致了单周期CPU的时钟周期通常比多周期CPU的时钟周期长。
这里对于为什么时钟周期会变而不是CPU震荡晶体决定,可以理解成CPU主动降频。
-
在一条指令的执行过程中,单周期CPU的每个控制信号保持不变,每个部件只能使用一次;多周期CPU的控制信号可能发生改变,同一个部件可使用多次。
-
这里为什么把(SP) -> MAR是因为,堆栈和主存统一编址,所以实际上就是把下一条指令的地址(PC)存入堆栈栈顶。


数据通路的功能和基本结构¶

单总线结构¶
- CPU可以视为由数据通路和控制部件(CU)两大部分组成。
- 数据在指令执行过程所经过的路径,包括路径上的部件,称为数据通路。ALU、通用寄存器、状态寄存器、Cache、MMU、浮点运算逻辑、异常和中断处理逻辑等,都是指令执行过程中数据流经的部件,都属于数据通路的一部分。
- 组成数据通路的元件主要分为组合逻辑元件和时序逻辑元件。
- 组合逻辑元件(操作元件):在逻辑组合元件中,任何时刻产生的输出仅取决于当前的输入。组合逻辑元件不含存储信号的记忆单元,也不受时钟信号的控制,输出与输入之间无反馈通路,信号是单向传输的。如:加法器、ALU、译码器、多路选择器、三态门等。
- 时序逻辑元件(状态元件):任何时刻的输出不仅与该时刻的输入有关,还与该时刻以前的输入有关,因此时序电路必然包含存储信号的记忆单元。此外,时序逻辑元件必须在时钟节拍下工作。如,各类寄存器和存储器:通用寄存器组、程序计数器、状态/移位/锁存寄存器等。
- 当CPU内部电路采用总线连接方式时,总线上信号流动的原则如下:每个时刻只有一个期间发出信号(否则会导致总线冲突),每个时刻可以有一个或多个期间接收信息。
- “采用总线”就像一条窄路上所有的车都得排队通过(分时),谁先走后走由控制器说了算;“不采用总线”就像专门给每个重要位置修了高架桥和直通车道(并行),虽然花钱多,但大家都能同时跑起来。
| CPU内部总线方式的数据通路 | 不采用CPU内部总线方式的数据通路(专用通路) |
|---|---|
| 结构简单 | 结构复杂,硬件量大 |
| 性能低 | 性能高 |
| 存在较多冲突现象 | 基本不存在数据冲突现象 |
下图中2、3的MDRin描述有偏差,应当是MDRinE。

专用通路结构¶

控制器的功能和工作原理¶
- 控制器 (CU) = PC + IR + 指令译码器 + 时序系统 + 操作控制器

硬布线控制器¶
- 硬布线控制器由复杂的组合逻辑门电路和触发器构成,也成为组合逻辑控制器。
- 硬布线控制器中也有微命令与微操作的概念,并非微程序控制器的专有概念。
- 微命令是完成某一操作需要发出的有效的控制信号;微操作则是具体的我们要怎么做。
- FE、IND、EX、INT这四个触发器实际上都集成在CU中。
- ID(Instruction Decoder):指令译码器。
-
定长机器周期中,若一个机器周期中如果操作的个数比节拍的个数大,优先把操作往后放。
-
FE:Fetch Cycle,取指周期
-
IND:Indirect Cycle,间址周期
- EX:Execute Cycle,执行周期
- INT:Interrupt Cycle,中断周期


上图理解即可



微程序控制器的基本原理¶
- 控制存储器不和主存统一编址。
- 通常控制存储器采用ROM组成。
- 微指令的地址形成发生有断定法和增量法μPC += 1
- 大多数情况下,微指令是顺序执行的。但如果遇到类似
if-else的条件分支指令,微程序也需要进行跳转。那么,微程序根据什么来决定跳不跳转呢?就是根据“可判定的外部条件”。(同样也要多留一位“无操作”)




微指令的设计¶
- 水平型和垂直型的区别并不是为指令格式的水平或垂直表示。控制信号经过编码产生是一种控制字段的编码方式,属于水平型微指令;垂直型微指令在微指令中设置了微操作码字段。


微程序控制单元的设计¶
CISC 因为太复杂,只能退而求其次用微程序来降低设计难度;RISC 因为够简单,所以有资本直接上纯硬件电路,追求极致的速度。

异常和中断机制¶
一、 基本概念
- 定义: CPU在执行程序时,遇到内部突发事件或外部硬件请求,打断当前原本的指令控制流,自动转去执行相应的处理程序(此时会切换到内核态),处理完毕后再返回被打断处继续执行的机制。
- 作用: 保护系统安全(如防止除零错误导致系统崩溃),协调CPU与慢速外部设备之间的并行工作。
二、 异常和中断的分类对比
| 大类 | 触发源头 | 同步/异步 | 典型细分与返回特征 |
|---|---|---|---|
| 异常 (内中断) | CPU内部(执行某条具体指令时产生) | 同步 | 1. 故障 (Fault): 可恢复错误(如缺页)。修复后返回发生故障的当前指令重新执行。 2. 陷阱 (Trap): 预先安排的“有意为之”(如系统调用)。执行完后返回下一条指令。 3. 终止 (Abort): 极其严重的硬件损坏。不可恢复,直接强行结束进程。 |
| 中断 (外中断) | CPU外部(如I/O设备完成、定时器到期) | 异步 | 1. 可屏蔽中断 (INTR): 受CPU内部IF标志位控制,可以暂时不响应。 2. 不可屏蔽中断 (NMI): 极其紧急(如掉电),无视屏蔽标志位,CPU必须立刻响应。 |
三、 异常和中断的检测与响应
- 检测时机:
- 异常: 在指令执行的过程中被硬件随时检测到。
- 中断: CPU在每条指令执行周期的末尾,才会主动去探测是否有外部请求。
- 硬件响应流程(中断隐指令): 当检测到异常或中断时,硬件会自动按顺序发出控制信号执行以下三个动作,无需软件干预:
- 关中断: 将程序状态字寄存器(PSW)中的中断允许位(IF)清零,确保“保存现场”过程不被新的中断破坏。
- 保存断点和程序状态: 将当前的程序计数器(PC,即下一条指令地址)和程序状态字寄存器(PSW)压入内核栈。
-
寻找入口地址: 根据硬件生成的中断类型号(或异常号)查找内存中的“中断向量表”,取出对应的中断服务程序首地址并送入PC,完成跳转。
-
进程上下文由操作系统的内核程序实现,而异常/中断的相应则由硬件实现。
- 内中断检测到了一定会处理;外中断不一定。
指令流水线¶

指令流水线的基本概念和性能指标¶
- 加速比:完成同一批任务,不使用流水线所用的时间与使用流水线所用时间之比。
- 效率:流水线的设备利用率。
- 在流水线CPU中,PC不再是执行完一条指令才变化的,而是每过一个时钟周期就会变化。


指令流水线的影响因素和分类¶
- IF(Instruction Fetch)
- 408考试中锁存器和流水段寄存器是一个东西。
- 适当增加流水段的个数,会使得每个流水段内的操作更简单,流水段的延迟更小,缩短了时钟周期,从而可以提高时钟频率。
- RAW是后面的一条指令,需要“读取(Read)”前面一条指令“写入(Write)”的结果。

- 结构相关(资源冲突)。类比操作系统的互斥。

-
数据相关(数据冲突)。类比操作系统的同步。
-
旁路技术,又称转发技术。
-
Load-Use 数据冒险,特指当一条访存指令(如
lw,从内存读取数据)紧挨着一条算术逻辑指令(如add,需要使用这个数据参与运算)时发生的冲突。
代码示例:
lw $t0, 0($t1)(把内存里的数据装载到寄存器$t0中)add $t2, $t0, $t3(立刻使用$t0的数据和$t3相加)
-
转发技术能解决大部分的数据冒险,唯独解决不了 Load-Use 冒险,是因为“物理时间倒流是不可能的”。load要在访存ME阶段才能取出数来,因此只能选择”等一等“ + 转发技术来解决。
-
从寄存器中取数在 ID 段,如果有转发机制,ID 段取出的错数会在 EX 段的入口处被截胡、被覆盖。因此不需要暂停流水线,直接拿新数继续算;从主存中取数是在Mem段。

- 控制相关(控制冲突)
- 插入空操作可使条件转移指令的结果在取下一条有效指令之前确定。




处理机的度(Degree)就是指 CPU 在同一个时钟周期内,最多能同时发射(执行)多少条指令。
多数超标量CPU都结合动态流水线调度技术,通过动态分支预测等手段,指令不按顺序执行,这种方式称为乱序执行
!!!图中的不能调整是错误的!!!

空分复用技术

时分复用技术

五段式指令流水线¶





多处理器的基本概念¶
多处理器系统的基本概念¶
- 流水线技术同样在SIMD和MIMD中也有应用。
- 标量流水线处理机是属于SISD结构。






硬件多线程¶


“超线程”(Hyper-Threading,简称 HT)是 Intel 家的商业叫法,它在计算机体系结构中的学术正规名称叫做 同步多线程(Simultaneous Multithreading,简称 SMT)。简单用一句话概括:超线程就是用极其低廉的硬件成本,让操作系统产生幻觉,把“1 个物理核心”当成“2 个逻辑核心”来用,目的是为了把超标量流水线里闲置的计算资源全部榨干。这项技术的CPU需要芯片组、操作系统和应用软件的支持,才能发挥该项技术的优势。

多处理机内存架构对比:UMA vs NUMA
-
UMA (Uniform Memory Access, 统一内存访问)
-
核心定义: 所有的处理器共享同一个物理内存。
-
最大特征: 任何处理器访问任何内存地址的时间是完全相等的。
-
典型代表: SMP(Symmetric Multiprocessor,对称多处理机系统)通常就是 UMA 架构。
-
优点: 硬件结构简单,软件/OS编程容易(不用管数据存在哪,反正访问速度都一样)。
-
缺点(考点): 扩展性极差。因为大家都走同一条系统总线去访问同一块内存,CPU 数量一多,总线就严重拥堵,成为性能瓶颈。
-
需要解决的问题是Cache的一致性。
-
NUMA (Non-Uniform Memory Access, 非统一内存访问)
-
核心定义: 内存被物理分割,每个处理器(或节点)拥有自己直接连接的本地内存,但依然可以通过互连网络访问其他处理器的远程内存。
-
最大特征: 访问时间不相等。访问本地内存极快,访问远程内存较慢。
-
优点(考点): 扩展性极好。打破了单一总线的瓶颈,适合构建成百上千核的大型服务器。
-
缺点: 编程复杂。操作系统需要极强的调度能力(NUMA 亲和性),尽量让 CPU 处理自己本地内存里的数据,避免跨节点访存。
习题笔记¶
-
n位CPU通常表示的意思是机器字长为n位,与数据总线的位数相同。
-
PC的位数取决于存储器容量和指令字长。对于后者,我的理解如下,程序指令数量不变时,指令越长占用内存越多,需要更大寻址空间,因此 PC 位数要更大。
-
通用寄存器供用户自由编程,可以存放数据和地址。而指令寄存器是专门用于存放指令的专用寄存器,不能由专用寄存器代替。
-
指令译码器仅对操作码字段进行译码,地址码的解析、运算、处理全部在 ID(译码阶段)完成。
-
地址译码器是主存等存储器的组成部分,其作用是根据输入的地址码唯一选定一个存储单元,它不是CPU的组成部分。
-
间址会取出EA后拼接到IR。
-
PSW 对应用程序员(高级语言)透明,对汇编/系统级程序员不完全透明,且其可修改性受权限位限制。
-
边界对齐(自然对齐):数据起始地址为该数据自身占用字节数的整数倍;
存储字边界对齐:数据 / 存储字起始地址为存储字长(字节)的整数倍;
-
CPU可以通过指令周期的不同阶段来区分是指令还是数据。
-
MAR、MDR两者与主存之间的数据传送是有专属读写控制信号的。
-
读用MUX,写用地址译码器。
-
指令译码是像取指一样机器会自发做的,这一步指的是产生控制信号(IR) -> CU,以及读取通用寄存器组。
-
若在执行指令的过程中发生严重错误,如控制器出错、存储器校验错等,则程序将无法继续执行,只能终止。
-
异常有非法指令、地址非法、校验错、页面失效、运算溢出和除数为零等。
-
系统调用属于自陷,它是用户程序主动、自愿地通过一条特殊指令(如
int 0x80或syscall),触发一个“陷阱”,从而陷入内核态执行。