# 第8章 CPU的结构和功能 > 📖 本章介绍CPU的功能、内部结构和指令执行过程。 > 🎯 重点理解CPU组成和指令周期 > ⚠️ **考试范围**:8.1、8.2、8.3(不含8.3.4和8.3.5)、8.4节不考。复习重点:例题8.1,课后习题8.1、8.2、8.11、8.12 > 🔥 **高频考点**:CPU功能与组成、指令周期/机器周期/时钟周期关系、流水线性能计算、流水线冲突分析 --- ## 📋 本章目录 - [[#8.1 CPU的结构]] - [[#8.2 指令周期]] - [[#8.3 指令流水]] - [[#本章小结]] - [[#📖 真题与作业精选]] - [[#例题与解析]] --- ## 8.1 CPU的结构 ### 8.1.1 CPU的功能 > [!info] 核心功能 > CPU负责协调并控制计算机各部件执行程序的指令序列。 **基本功能**: | 功能 | 说明 | |------|------| | **指令控制** | 控制程序的顺序执行 | | **操作控制** | 产生完成每条指令所需的控制命令 | | **时间控制** | 对各种操作加以时间上的控制 | | **数据加工** | 对数据进行算术运算和逻辑运算 | | **中断处理** | 处理异常情况和特殊请求 | CPU就像公司的大脑:指令控制按顺序执行程序,像总经理按顺序安排工作;操作控制产生控制信号,像总经理发出工作指令;时间控制控制操作时序,像总经理控制工作进度;数据加工进行各种运算,像员工处理数据;中断处理处理紧急事件,像总经理处理紧急情况。 ### 8.1.2 CPU结构框图 ```mermaid graph TB subgraph "CPU内部结构" subgraph "运算器" ALU[ALU
算术逻辑单元] ACC[ACC
累加寄存器] PSW[PSW
程序状态字] REG[通用寄存器组] end subgraph "控制器" CU[CU
控制单元] PC[PC
程序计数器] IR[IR
指令寄存器] MAR[MAR
存储器地址寄存器] MDR[MDR
存储器数据寄存器] end end ALU <--> |"数据"| REG ALU <--> |"数据"| ACC CU --> |"控制信号"| ALU CU --> |"控制信号"| REG PC --> |"地址"| MAR IR --> |"指令"| CU MAR <--> |"地址"| MEM[主存] MDR <--> |"数据"| MEM style ALU fill:#ff9999 style CU fill:#99ccff style PC fill:#99ff99 style IR fill:#ffcc99 ``` CPU结构就像公司的组织架构:运算器中,ALU(算术逻辑单元)是生产车间负责加工产品,ACC(累加寄存器)是操作台临时存放加工中的产品,PSW(程序状态字)是状态指示灯显示当前工作状态,通用寄存器组是工具箱存放常用工具。控制器中,CU(控制单元)是总经理指挥整个公司运转,PC(程序计数器)是任务清单记录下一个要执行的任务,IR(指令寄存器)是当前任务单记录正在执行的任务,MAR(存储器地址寄存器)是仓库地址簿记录要访问的仓库位置,MDR(存储器数据寄存器)是传送带传送仓库和车间之间的物品。 当你执行一条加法指令时:PC记录下一条指令的地址,IR存放当前加法指令,CU译码并发出控制信号,ALU执行加法运算,ACC存放运算结果,PSW记录运算状态。 > [!tip] 考试高频题型 > 给出CPU结构图,要求识别各寄存器(A、B、C、D分别是什么)并描述取指/读数的数据通路。这是期中考试的经典题型,务必掌握图中每个部件的功能和数据流向。 ### 8.1.3 CPU的寄存器 #### 用户可见寄存器 | 寄存器类型 | 功能 | 示例 | |------------|------|------| | **通用寄存器** | 可编程使用,存放操作数 | AX, BX, CX, DX | | **数据寄存器** | 存放操作数 | 数据寄存器 | | **地址寄存器** | 存放地址 | 基址寄存器、变址寄存器 | | **条件码寄存器** | 存放运算结果状态 | Z(零)、C(进位)、S(符号)、O(溢出) | 通用寄存器像员工可以使用的工具,可编程使用存放各种数据;数据寄存器专门存放数据;地址寄存器专门存放地址;条件码寄存器记录运算结果的状态。 #### 控制和状态寄存器 | 寄存器 | 功能 | 可见性 | |--------|------|--------| | **PC** | 程序计数器,存放现行指令地址 | 用户可见 | | **IR** | 指令寄存器,存放当前指令 | 用户不可见 | | **MAR** | 存储器地址寄存器 | 用户不可见 | | **MDR** | 存储器数据寄存器 | 用户不可见 | | **PSW** | 程序状态字寄存器 | 部分可见 | PC(程序计数器)记录下一个要执行的任务,执行完一个任务后自动指向下一个任务,遇到跳转指令时指向跳转目标。IR(指令寄存器)记录正在执行的任务,包含操作码(要做什么)和地址码(操作数在哪里),操作码送给CU译码。MAR(存储器地址寄存器)记录要访问的仓库位置,把地址送到仓库。MDR(存储器数据寄存器)传送仓库和车间之间的物品。PSW(程序状态字寄存器)显示当前工作状态,包括条件码、中断屏蔽位等。 > [!important] 数据通路(期中/期末常考) > **取指数据通路**:PC → MAR → 主存 → MDR → IR(这是最基本的数据通路,必须熟记) > **读数据通路**:X → MAR → 主存 → MDR → ALU → ACC(从内存读操作数参与运算) > 这两条数据通路在考试中经常以识图题的形式出现,参见真题精选部分。 --- ## 8.2 指令周期 ### 8.2.1 指令周期的基本概念 > [!info] 定义 > 指令周期是指从取指令到执行完该指令所需的全部时间。 **指令周期的组成**: - **取指周期**:取指令的时间 - **执行周期**:执行指令的时间 指令周期就像完成一个任务的时间:取指周期是从仓库取任务单的时间,执行周期是执行任务的时间。简单指令取指周期+执行周期,复杂指令取指周期+多个执行周期。 ### 8.2.2 指令周期的时序 ```mermaid graph TB A[取指周期] --> B[执行周期] B --> C[取指周期] C --> D[执行周期] D --> E[...] ``` **时序信号**: - **时钟周期**:CPU的最小时间单位 - **机器周期**:完成一个基本操作的时间 - **指令周期**:完成一条指令的时间 > [!tip] 三者关系(考试重点) > **时钟周期**(最小)< **机器周期**(一个机器周期通常包含若干时钟周期)< **指令周期**(一条指令可能需要多个机器周期) > > 这三者的包含关系是选择题和填空题的高频考点。记住:一个指令周期包含若干机器周期,一个机器周期包含若干时钟周期。 时钟周期像CPU的最小工作时间单位,1GHz CPU的时钟周期是1ns;机器周期完成一个基本操作的时间,通常包含几个时钟周期;指令周期完成一条指令的时间,根据指令类型不同而不同。 ### 8.2.3 指令执行过程 **取指周期**: 1. PC → MAR → 地址总线 2. CU发出读命令 3. 存储器 → 数据总线 → MDR 4. MDR → IR 5. PC + 1 → PC **执行周期**: 1. IR的操作码 → CU译码 2. CU发出控制信号 3. 执行指令操作 取指周期像从仓库取任务单:把任务单地址送到仓库地址簿,告诉仓库要取任务单,仓库把任务单送到传送带,任务单送到当前任务单,任务清单指向下一个任务。执行周期像执行任务:总经理看任务单决定要做什么,总经理发出工作指令,员工执行任务。 当你执行一条加法指令时:取指周期从内存取加法指令到CPU,执行周期执行加法运算。 --- ## 8.3 指令流水 ### 8.3.1 流水线的基本概念 > [!info] 定义 > 流水线是指将指令执行过程分成多个阶段,多个指令可以同时在不同阶段执行。 **流水线的阶段**: - **取指(IF)**:取指令 - **译码(ID)**:译码指令 - **执行(EX)**:执行指令 - **访存(MEM)**:访问存储器 - **写回(WB)**:写回结果 流水线就像工厂的生产线:取指从仓库取原材料,译码看图纸决定要做什么,执行加工产品,访存从仓库取需要的材料,写回把成品放到仓库。多个指令可以同时在不同阶段执行,提高吞吐率和效率。 ### 8.3.2 流水线的性能 这是本章最重要的计算题考点,几乎每次考试都会出现。 **吞吐率**(单位时间完成的指令数): $$TP = \frac{n}{k + (n-1)}$$ 其中 $n$ 为指令条数,$k$ 为流水线段数,每段假设时间相同为 $\Delta t$。当各段时间不同时,吞吐率受限于最慢的段: $$TP_{max} = \frac{1}{\max(\Delta t_i)}$$ **加速比**(非流水线时间 / 流水线时间): $$S = \frac{nk}{k + (n-1)}$$ **效率**(流水线各段的利用率): $$E = \frac{S}{k} = \frac{n}{k + (n-1)}$$ 流水线性能像工厂的生产效率:吞吐率是单位时间完成的任务数,加速比是流水线比非流水线快多少倍,效率是流水线的利用率。 假设流水线有4个阶段,执行100条指令:吞吐率100/(4+99)=0.97条/周期,加速比100×4/(4+99)=3.88,效率3.88/4=97%。 > [!warning] 不等段流水线计算(作业/考试原题) > 当各段时间不相等时,完成时间 = 第一段总时间 + (n-1) x max(各段时间),吞吐率以最慢段为瓶颈。详见真题精选第1题。 ### 8.3.3 流水线冲突 流水线冲突分析是考试中分析题的常见考点,要能判断指令间存在哪种冲突以及如何解决。 **结构冲突**:硬件资源不足,两个指令同时访问同一个存储器,增加硬件资源解决。 **数据冲突**:指令之间有数据依赖,后面的指令需要前面指令的结果。解决方法:数据旁路(将结果直接转发给后续指令)或流水线暂停(插入气泡等待数据就绪)。 **控制冲突**:分支指令改变程序流,跳转指令导致流水线需要重新取指。解决方法:分支预测或延迟分支。 结构冲突像两个工人都要用同一个工具,多买几个工具解决;数据冲突像上一个产品还没做完下一个产品需要它的零件,等做完或先做其他产品解决;控制冲突像突然改变生产计划,提前预测或等确定后再生产解决。 > [!tip] 冲突判断技巧(考试高频) > - 看两条指令是否同时使用同一硬件资源 → 结构冲突 > - 看后一条指令的源操作数是否是前一条指令的目的操作数 → 数据冲突(RAW/RAW相关) > - 看是否出现条件转移或无条件跳转 → 控制冲突 > 一道题中可能同时出现多种冲突,注意逐一排查。参见真题精选第2题。 --- ## 📝 本章小结 ### 核心概念 1. **CPU功能**:指令控制、操作控制、时间控制、数据加工、中断处理 2. **CPU结构**:运算器、控制器、寄存器 3. **指令周期**:取指周期、执行周期 4. **指令流水**:提高CPU效率的重要技术 5. **流水线冲突**:结构冲突、数据冲突、控制冲突 ### 关键术语 | 术语 | 英文 | 含义 | |------|------|------| | CPU | Central Processing Unit | 中央处理器 | | ALU | Arithmetic Logic Unit | 算术逻辑单元 | | CU | Control Unit | 控制单元 | | PC | Program Counter | 程序计数器 | | IR | Instruction Register | 指令寄存器 | | MAR | Memory Address Register | 存储器地址寄存器 | | MDR | Memory Data Register | 存储器数据寄存器 | | 流水线 | Pipeline | 指令流水 | | 吞吐率 | Throughput | 单位时间完成指令数 | | 加速比 | Speedup | 流水线相对非流水线的提升 | ### 重点图示 > [!summary] 必须掌握的图 > 1. CPU内部结构图(识别各寄存器) > 2. 取指/读数据通路图 > 3. 指令周期时序图 > 4. 流水线时空图 > 5. 流水线冲突示意图 --- ## 📖 真题与作业精选 以下是来自作业、期中/期末考试和复习资料的精选题目,考试中出现过原题或类似题。 ### 真题1:不等段流水线性能计算(作业三原题) **题目**:某5段流水线各段时间分别为4ns、5ns、6ns、7ns、4ns,执行200条指令。求最大吞吐率、完成时间和效率。 **解答**: 1. **最大吞吐率**:受限于最慢的段(第4段,7ns),所以 $$TP_{max} = \frac{1}{7\text{ns}}$$ 2. **完成时间**:第一条指令经过全部5段的时间 + 后续199条指令每条等待一个最慢段的时间 $$T = (4+5+6+7+4) + (200-1) \times 7 = 26 + 1393 = 1400\text{ns}$$ 也可以用另一种理解:流水线建立后每7ns出一条指令,第一条26ns完成,之后每隔7ns完成一条。总时间 = 26 + 199 x 7 = 1400ns。 3. **效率**:各段实际工作时间之和 / (段数 x 总时间) $$E = \frac{5 \times 200}{5 \times 200 + 4 \times 7} \times 100\% = \frac{1000}{1028} \times 100\% \approx 97.3\%$$ 分子是各段的有效工作量(200条指令 x 5个段),分母要加上流水线排空阶段末尾4个段各空闲了一个最慢段时间(4 x 7ns换算成的工作单元数)。 > [!tip] 解题要点 > 不等段流水线的关键是找到**最慢段**,它决定了流水线的实际吞吐率。这类题是作业和考试的高频计算题。 ### 真题2:流水线冲突分析(作业三原题) **题目**:分析以下指令序列中的相关与冲突: ```assembly MUL R2, R1, R0 ; R2 = R1 x R0 JEQ X ; 若Z=1则跳转到X ADD R3, R4, R5 ; R3 = R4 + R5 ``` **解答**: - **MUL与JEQ**:存在**数据相关**。JEQ需要检测PSW中的Z(零)标志位,而该标志位由MUL指令的运算结果设置。MUL还没执行完,JEQ就可能需要读取Z标志,因此产生数据冲突。同时JEQ是条件转移指令,还会引起**控制冲突**(是否跳转不确定,流水线不知道下一条取哪里的指令)。 - **ADD与前面的指令**:ADD的源操作数R4、R5和目的操作数R3与MUL、JEQ均无数据依赖关系,因此ADD与前面的指令**不存在数据相关**。但JEQ引起的控制冲突仍会影响ADD是否应该被取指执行。 > [!tip] 冲突分析三步法 > 1. 先找数据依赖:后指令的源操作数是否等于前指令的目的操作数 > 2. 再找控制依赖:是否出现跳转/分支指令 > 3. 最后看结构依赖:是否同时访问同一硬件资源 ### 真题3:CPU寄存器识别与数据通路(复习资料原题) **题目**:某CPU内部结构图中标注了A、B、C、D四个部件,分别连接在数据通路上。请指出它们分别是什么寄存器,并描述取指和读数据的完整数据通路。 **解答**: - **A = MDR**(存储器数据寄存器):CPU与主存之间传送数据的缓冲 - **B = MAR**(存储器地址寄存器):存放要访问的主存地址 - **C = IR**(指令寄存器):存放当前正在执行的指令 - **D = PC**(程序计数器):存放下一条要执行的指令地址 **取指数据通路**:PC → MAR → 主存(取指令)→ MDR → IR 具体过程:PC把指令地址送到MAR,MAR通过地址总线把地址送到主存,主存根据地址找到指令并通过数据总线送到MDR,MDR把指令送到IR,同时PC+1指向下一条指令。 **读数据通路**:X → MAR → 主存(读数据)→ MDR → ALU → ACC 具体过程:操作数地址X送到MAR,MAR把地址送到主存,主存找到数据送到MDR,MDR把数据送到ALU参与运算,运算结果送到ACC。 > [!important] 期中/期末曾考此题 > 识别CPU结构图中各部件是经典考试题型。关键记忆:MAR管地址、MDR管数据、IR存指令、PC存下条地址。 ### 真题4:流水线效率分析与改进(复习资料原题) **题目**:某流水线只有IF、ID、EX、WB四个阶段,各段时间为IF(2t)、ID(2t)、EX(t)、WB(t)。计算该流水线的效率,并提出改进方案。 **解答**: 1. **原流水线效率**:最慢段为2t(IF和ID),流水线实际吞吐率以2t为节拍。 - 非流水线总时间 = 2t + 2t + t + t = 6t - 流水线时间 = 4段建立时间 + (n-1) x 2t = 6t + (n-1) x 2t - 当n足够大时,加速比 S = 6t / 2t = 3 - 效率 E = S / k = 3 / 4 = 75%... 实际上因各段时间不等,效率约为 50% 各段利用率:IF段和ID段持续工作(利用率100%),EX段只工作t但占2t的时间槽(利用率50%),WB段同样50%。平均效率 = (100% + 100% + 50% + 50%) / 4 = 75%。但由于EX和WB的闲置,整体效率降至约50%。 2. **改进方案**(二选一): - **方案一:拆分慢段**——将ID拆成ID1(t)和ID2(t)两段,使所有段的时间都变为t,流水线均匀,效率提升到接近100% - **方案二:并联重复设置**——在ID段和EX段各设置两套硬件,交替使用,使吞吐率翻倍 > [!tip] 流水线改进的核心思路 > 效率低的根本原因是各段时间不均衡,导致快的段等待慢的段。改进方法要么拆分慢段使之均匀,要么并联重复设置瓶颈段。 --- ## 例题与解析 ### 例题1:CPU功能分析 **题目**:简述CPU的五大功能。 **答案**: CPU的五大功能:指令控制控制程序的顺序执行,像总经理按顺序安排工作;操作控制产生完成每条指令所需的控制信号,像总经理发出工作指令;时间控制对各种操作加以时间上的控制,像总经理控制工作进度;数据加工对数据进行算术运算和逻辑运算,像员工处理数据;中断处理处理异常情况和特殊请求,像总经理处理紧急情况。 ### 例题2:指令周期计算(参考课后习题8.1、8.2) **题目**:某CPU主频为1GHz,取指周期为4个时钟周期,执行周期为6个时钟周期,求执行100条指令所需时间。 **答案**: 主频1GHz=10^9 Hz,时钟周期1/10^9 =1ns。 取指周期4个时钟周期=4ns,执行周期6个时钟周期=6ns。 单条指令时间=4+6=10ns。 100条指令时间=100 x 10ns=1000ns=1us。 > 这道题对应课后习题8.1和8.2的类型,计算指令周期时间是最基础的考题。 ### 例题3:流水线性能计算(参考例题8.1) **题目**:某CPU有4级流水线,执行100条指令,求吞吐率、加速比和效率。 **答案**: 流水线阶段数k=4,指令数n=100。 吞吐率TP=100/(4+99)=0.97条/周期。 加速比S=100 x 4/(4+99)=3.88。 效率E=3.88/4=97%。 > 这是例题8.1的标准题型,各段时间相等的情况。考试中可能变为不等段时间,参见真题精选第1题。 ### 例题4:流水线冲突分析 **题目**:分析以下指令序列中的数据冲突: ``` ADD R1, R2, R3 ; R1 = R2 + R3 SUB R4, R1, R5 ; R4 = R1 - R5 ``` **答案**: ADD指令产生R1的值,SUB指令需要R1的值。如果ADD指令还没执行完SUB指令就需要R1的值,就会发生数据冲突(RAW相关——写后读冲突)。 解决方案:数据旁路(ADD指令执行完后直接把结果传给SUB指令,不用等写回阶段)或流水线暂停(插入气泡等ADD指令执行完后再执行SUB指令)。 ### 例题5:中断系统设计 **题目**:设计一个简单的中断系统,支持4个中断源。 **答案**: 中断请求:4个中断请求触发器(IR0-IR3)保存中断请求信号。 中断屏蔽:4个中断屏蔽触发器(IM0-IM3)控制中断是否被屏蔽。 中断判优:优先级编码器,IR0>IR1>IR2>IR3。 中断响应:中断响应信号(INTA),CPU响应中断请求。 中断向量表:4个中断向量,存放中断服务程序入口地址。 --- ## ⚡ 知识点速记卡 > 考前快速过一遍,30秒回忆整章核心 > > **考试题型分布**:选择/填空(CPU寄存器识别、周期关系)、计算(流水线性能)、分析(流水线冲突判断) **CPU五大功能**:指令控制(顺序执行)、操作控制(发控制信号)、时间控制(时序)、数据加工(ALU运算)、中断处理。 **CPU内部关键寄存器**:PC(下条指令地址)、IR(当前指令)、MAR(访存地址)、MDR(访存数据)、PSW(程序状态)、ACC(累加器)、通用寄存器组。考试常考:给出结构图让你标注各寄存器名称。 **指令周期层次关系**:指令周期(最大)> 机器周期 > 时钟周期(最小)。一个指令周期包含若干机器周期,一个机器周期包含若干时钟周期。这是选择题高频考点。 **取指数据通路**:PC → MAR → 主存 → MDR → IR,PC+1 → PC。读数据通路:X → MAR → 主存 → MDR → ALU → ACC。这两条通路务必熟记。 **流水线五阶段**:IF(取指)→ ID(译码)→ EX(执行)→ MEM(访存)→ WB(写回)。 **流水线公式(等段时间)**:完成时间 T = k + (n-1)(以时钟周期数计),吞吐率 TP = n/(k+n-1),加速比 S = nk/(k+n-1)。n=100条、k=4级 → TP约等于0.97,S约等于3.88。 **流水线公式(不等段时间)**:吞吐率受限于最慢段,TP_max = 1/max(Delta_t_i)。完成时间 = 满载时间 + (n-1) x 最慢段时间。 **流水线三种冲突**:结构冲突(争硬件,加资源)、数据冲突(数据依赖,旁路或暂停)、控制冲突(分支跳转,预测或延迟)。考试中给出指令序列让你判断冲突类型是常见分析题。 **冲突判断口诀**:后读前写的数 → 数据冲突;跳转分支 → 控制冲突;同争一个硬件 → 结构冲突。 --- ## 🔗 相关链接 - [[00_计算机组成原理学习指南]] - 返回主目录 - [[07_指令系统]] - 上一章 - [[09_控制单元功能]] - 下一章 - [[10_控制单元设计]] - 控制单元设计 --- *本章难度:⭐⭐⭐⭐⭐ 困难* *重要程度:⭐⭐⭐⭐⭐ 重点* *考试占比:约15%-20%,流水线计算几乎必考* *复习建议:重点练习流水线性能计算(不等段时间)和冲突分析,结合课后习题8.11、8.12强化训练*