# 第8章 CPU的结构和功能 > 📖 本章介绍CPU的功能、内部结构和指令执行过程。 > 🎯 重点理解CPU组成和指令周期 --- ## 📋 本章目录 - [[#8.1 CPU的结构]] - [[#8.2 指令周期]] - [[#8.3 指令流水]] - [[#8.4 中断系统]] - [[#本章小结]] --- ## 8.1 CPU的结构 ### 8.1.1 CPU的功能 > [!info] 核心功能 > 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 ``` ### 8.1.3 CPU的寄存器 #### 用户可见寄存器 | 寄存器类型 | 功能 | 示例 | |------------|------|------| | **通用寄存器** | 可编程使用,存放操作数 | AX, BX, CX, DX | | **数据寄存器** | 存放操作数 | 数据寄存器 | | **地址寄存器** | 存放地址 | 基址寄存器、变址寄存器 | | **条件码寄存器** | 存放运算结果状态 | Z(零)、C(进位)、S(符号)、O(溢出) | #### 控制和状态寄存器 | 寄存器 | 功能 | 可见性 | |--------|------|--------| | **PC** | 程序计数器,存放现行指令地址 | 用户可见 | | **IR** | 指令寄存器,存放当前指令 | 用户不可见 | | **MAR** | 存储器地址寄存器 | 用户不可见 | | **MDR** | 存储器数据寄存器 | 用户不可见 | | **PSW** | 程序状态字寄存器 | 部分可见 | **PC(程序计数器)**: - 存放现行指令地址 - 具有计数功能(PC+1→PC) - 遇到转移指令时可被修改 **IR(指令寄存器)**: - 存放当前正在执行的指令 - 包含操作码和地址码 - 操作码送CU译码 **MAR(存储器地址寄存器)**: - 存放将被访问的存储单元地址 - 位数与地址总线宽度相同 **MDR(存储器数据寄存器)**: - 存放欲存入存储器的数据或从存储器读出的数据 - 位数与数据总线宽度相同 ### 8.1.4 数据通路 ```mermaid graph TB subgraph "CPU内部数据通路" PC[PC] --> |"地址"| MAR[MAR] MAR --> |"地址"| MEM[主存] MEM --> |"数据"| MDR[MDR] MDR --> |"指令"| IR[IR] MDR --> |"数据"| ALU[ALU] REG[通用寄存器] <--> |"数据"| ALU ALU --> |"结果"| REG ALU --> |"状态"| PSW[PSW] end ``` --- ## 8.2 指令周期 ### 8.2.1 指令周期的基本概念 > [!info] 定义 > 指令周期是取出一条指令并执行这条指令的时间。 **组成**: ```mermaid graph LR A[指令周期] --> B[取指周期] A --> C[执行周期] B --> B1[取指令] B --> B2[分析指令] C --> C1[执行指令] ``` ### 8.2.2 指令周期流程 ```mermaid graph TB START[开始] --> FETCH[取指周期] FETCH --> DECODE[分析指令] DECODE --> EXEC[执行周期] EXEC --> CHECK{中断?} CHECK -->|是| INT[中断处理] CHECK -->|否| NEXT[取下一条指令] INT --> NEXT NEXT --> FETCH ``` ### 8.2.3 取指周期 **操作序列**: 1. PC → MAR(地址送MAR) 2. MAR → 地址总线 → 主存(地址送主存) 3. CU发读命令(控制信号) 4. 主存 → 数据总线 → MDR(指令送MDR) 5. MDR → IR(指令送IR) 6. PC + 1 → PC(程序计数器加1) 7. OP(IR) → CU(操作码送CU译码) ```mermaid sequenceDiagram participant PC participant MAR participant MEM as 主存 participant MDR participant IR participant CU PC->>MAR: PC → MAR MAR->>MEM: 地址送主存 CU->>MEM: 发读命令 MEM->>MDR: 指令送MDR MDR->>IR: 指令送IR Note over PC: PC+1 → PC IR->>CU: 操作码送CU ``` ### 8.2.4 执行周期 **不同指令的执行周期**: | 指令类型 | 执行操作 | |----------|----------| | **取数指令** | MAR → 主存 → MDR → 寄存器 | | **存数指令** | 寄存器 → MDR → 主存 | | **加法指令** | 取操作数 → ALU运算 → 存结果 | | **转移指令** | 修改PC值 | | **空操作指令** | 无操作 | ### 8.2.5 指令周期的时序 ```mermaid graph TB subgraph "指令周期时序" T0[时钟周期T0] --> T1[时钟周期T1] T1 --> T2[时钟周期T2] T2 --> T3[时钟周期T3] end subgraph "取指周期" T0 --> F1[PC → MAR] F1 --> F2[读主存] F2 --> F3[MDR → IR] F3 --> F4[PC+1] end subgraph "执行周期" T0 --> E1[分析指令] E1 --> E2[取操作数] E2 --> E3[执行操作] E3 --> E4[存结果] end ``` ### 8.2.6 指令流水 > [!info] 概念 > 将指令执行过程分解为多个阶段,各阶段并行执行。 **流水线阶段**: ```mermaid graph LR subgraph "指令流水线" IF[取指IF] --> ID[译码ID] --> EX[执行EX] --> MEM[访存MEM] --> WB[写回WB] end ``` **流水线时序**: ```mermaid gantt title 指令流水线时序 dateFormat X axisFormat %s section 指令1 取指IF : 0, 1 译码ID : 1, 2 执行EX : 2, 3 访存MEM : 3, 4 写回WB : 4, 5 section 指令2 取指IF : 1, 2 译码ID : 2, 3 执行EX : 3, 4 访存MEM : 4, 5 写回WB : 5, 6 section 指令3 取指IF : 2, 3 译码ID : 3, 4 执行EX : 4, 5 访存MEM : 5, 6 写回WB : 6, 7 ``` **加速比**: $$S = \frac{非流水线时间}{流水线时间} = \frac{n \times k}{k + (n-1)}$$ - n:指令数 - k:流水线级数 **流水线冲突**: | 冲突类型 | 原因 | 解决方法 | |----------|------|----------| | **结构冲突** | 硬件资源冲突 | 资源复制 | | **数据冲突** | 数据依赖 | 数据前递、流水线暂停 | | **控制冲突** | 分支指令 | 分支预测、延迟分支 | --- ## 8.3 中断系统 ### 8.3.1 中断的作用 > [!info] 中断定义 > 中断是指CPU暂停现行程序,转去处理中断请求,处理完毕后返回原程序继续执行。 **主要作用**: 1. **实现CPU与IO设备并行工作** 2. **处理机器故障** 3. **实现人机交互** 4. **实现多道程序** ### 8.3.2 中断系统组成 ```mermaid graph TB subgraph "中断系统" subgraph "中断源" IO[I/O设备] TIMER[定时器] FAULT[故障] SOFT[软件中断] end subgraph "中断判优" PRIO[优先级电路] end subgraph "中断响应" MASK[中断屏蔽] INTR[中断请求] INTA[中断响应] end subgraph "中断处理" SAVE[保存现场] SERVICE[中断服务] RESTORE[恢复现场] end end IO --> INTR TIMER --> INTR FAULT --> INTR SOFT --> INTR INTR --> PRIO PRIO --> MASK MASK --> INTA INTA --> SAVE SAVE --> SERVICE SERVICE --> RESTORE ``` ### 8.3.3 中断处理过程 ```mermaid graph TB START[中断请求] --> CHECK{允许中断?} CHECK -->|否| WAIT[等待] CHECK -->|是| SAVE1[保存断点] SAVE1 --> SAVE2[保存现场] SAVE2 --> EI[开中断] EI --> SERVICE[执行中断服务程序] SERVICE --> DI[关中断] DI --> RESTORE1[恢复现场] RESTORE1 --> RESTORE2[恢复断点] RESTORE2 --> RET[中断返回] RET --> END[继续执行] ``` ### 8.3.4 中断判优 **优先级原则**: 1. 硬件故障 > 软件中断 2. 高速设备 > 低速设备 3. 输入 > 输出 4. 实时设备 > 普通设备 **判优方法**: | 方法 | 原理 | 特点 | |------|------|------| | 硬件判优 | 优先级电路 | 速度快 | | 软件判优 | 程序查询 | 灵活,速度慢 | --- ## 📝 本章小结 ### 核心概念 1. **CPU功能**:指令控制、操作控制、时间控制、数据加工、中断处理 2. **CPU寄存器**:PC、IR、MAR、MDR、通用寄存器、PSW 3. **指令周期**:取指周期 + 执行周期 4. **指令流水**:提高并行度,加速指令执行 5. **中断系统**:实现CPU与IO并行,处理异常 ### 关键公式 - **流水线加速比**:$S = \frac{n \times k}{k + (n-1)}$ ### 重点图示 > [!summary] 必须掌握的内容 > 1. CPU内部结构框图 > 2. 指令周期流程图 > 3. 指令流水线时序图 > 4. 中断处理流程图 --- ## 🧪 自测练习 ### 概念题 1. 说明CPU的基本功能。 2. 比较CPU中各类寄存器的作用。 3. 解释指令流水线的原理和冲突。 ### 分析题 1. 画出取指周期的时序图。 2. 设计一个简单的中断处理流程。 --- ## 🔗 相关链接 - [[07_指令系统]] - 上一章 - [[09_控制单元功能]] - 下一章 - [[10_控制单元设计]] - 控制单元设计 - [[05_输入输出系统]] - 中断系统 --- *本章难度:⭐⭐⭐⭐⭐ 困难* *重要程度:⭐⭐⭐⭐⭐ 核心重点*