284 lines
16 KiB
Markdown
284 lines
16 KiB
Markdown
# 第三章 32位 Pentium 微处理器
|
||
|
||
> 本章系统介绍 Pentium(奔腾)32 位微处理器的内部结构、寄存器组、编程模型、引脚信号以及操作模式,是从 8086 向 32 位保护模式过渡的核心章节。
|
||
|
||
---
|
||
|
||
## 一、详细内容分析
|
||
|
||
### 1. Pentium 处理器内部结构(3.1)
|
||
|
||
#### 1.1 基本构成(四大部分)
|
||
|
||
Pentium 内部按功能可划分为以下四部分:
|
||
|
||
| 功能部件 | 组成 | 作用 |
|
||
|---------|------|------|
|
||
| **总线接口部件** | 内外总线接口 | 与外部存储器、I/O 交换数据 |
|
||
| **存储器扩展及管理** | 代码 Cache、数据 Cache、转移目标缓冲器(BTB)、分段分页部件 | 高速缓存与管理虚拟地址 |
|
||
| **控制器** | 控制 ROM、控制部件、预取缓冲存储器、指令译码部件 | 指令流的驱动与解释 |
|
||
| **运算器** | 整数运算部件(U/V 双 ALU)、整数寄存器组、浮点运算部件、浮点寄存器组 | 数据加工 |
|
||
|
||
#### 1.2 结构六大特性(重点)
|
||
|
||
1. **超标量流水线,超标量为 2**——拥有 U、V 两条独立整数流水线,每周期最多可并行执行 2 条整数指令。
|
||
2. **分立 Cache,指令数据各 8 KB**——代码 Cache 与数据 Cache 分离,避免取指/取数冲突;并各有 TLB(快表)配合。
|
||
3. **8 级流水线的浮点运算部件**——浮点单元流水线深度 8 级,明显深于整数流水线。
|
||
4. **动态转移预测**——通过 BTB(Branch Target Buffer)记录分支历史,预测分支目标地址,减少流水线断流。
|
||
5. **数据线内部 32 位、外部 64 位**——属于 32 位机;外部数据总线加宽到 64 位以提升传输带宽。
|
||
6. **4 种工作方式**——实地址模式、保护虚地址模式(含虚拟 8086 模式)、系统管理模式。
|
||
|
||
#### 1.3 双流水线 U / V
|
||
|
||
- **U 流水线(Universal Pipeline)**:可执行所有整数指令,包括复杂指令。
|
||
- **V 流水线(Vicinal Pipeline)**:只能执行简单指令(U 流水线的子集)。
|
||
- 两条流水线都有独立的地址生成器、ALU,可同时工作,实现"超标量"。
|
||
- 整数寄存器组 8 个 32 位寄存器(EAX/EBX/ECX/EDX/ESP/EBP/ESI/EDI)为 U、V 共享。
|
||
|
||
#### 1.4 Cache 与 TLB
|
||
|
||
- 指令 Cache 8 KB、数据 Cache 8 KB,**双端口**结构,每个时钟可存取 32 位(数据侧 64 位)。
|
||
- Cache 中各含一个 **TLB**(Translation Lookaside Buffer),用于缓存最近使用的页表项,加速虚实地址转换。
|
||
|
||
---
|
||
|
||
### 2. Pentium 微处理器编程结构(3.2)
|
||
|
||
#### 2.1 寄存器组总览(5 部分)
|
||
|
||
Pentium 寄存器组共 **71** 个寄存器,分为:
|
||
|
||
| 类别 | 数量 | 说明 |
|
||
|------|------|------|
|
||
| 基本结构寄存器 | 16 | 通用 8 + 专用 2 + 段 6 |
|
||
| 系统级寄存器 | 9 | 系统地址 4 + 控制 5(CR0-CR4) |
|
||
| 调试寄存器 | 8 | DR0–DR7 |
|
||
| 模型专用寄存器 | 20 | 用于性能监控、机器检测等 |
|
||
| 浮点寄存器 | 18 | 8 × 80 位数据 + 8 × 16 位控制/状态/标记 + 2 × 16/80 |
|
||
|
||
#### 2.2 基本结构寄存器(与 8086 对比)
|
||
|
||
Pentium 将 8086 的 16 位寄存器**全部扩展为 32 位**(在前面加 "E"),但仍兼容使用低 16 位。
|
||
|
||
**通用寄存器(8 个 32 位)**
|
||
|
||
| 32 位 | 16 位 | 8 位(H/L) | 名称 |
|
||
|-------|-------|-------------|------|
|
||
| EAX | AX | AH / AL | 累加器 |
|
||
| EBX | BX | BH / BL | 基址寄存器 |
|
||
| ECX | CX | CH / CL | 计数寄存器 |
|
||
| EDX | DX | DH / DL | 数据寄存器 |
|
||
| ESP | SP | — | 堆栈指针 |
|
||
| EBP | BP | — | 基址指针 |
|
||
| ESI | SI | — | 源变址寄存器 |
|
||
| EDI | DI | — | 目的变址寄存器 |
|
||
|
||
**专用寄存器(2 个)**
|
||
|
||
| 32 位 | 16 位 | 名称 |
|
||
|-------|-------|------|
|
||
| EIP | IP | 指令指针 |
|
||
| EFLAGS | FLAGS | 标志寄存器 |
|
||
|
||
**段寄存器(6 个 16 位)**
|
||
|
||
CS、DS、SS、ES、**FS、GS**——Pentium 比 8086 增加了 FS、GS 两个附加段寄存器,便于复杂数据访问。
|
||
|
||
#### 2.3 标志寄存器 EFLAGS
|
||
|
||
EFLAGS 扩展为 32 位(8086 仅 16 位),新增标志位含义如下:
|
||
|
||
| 位 | 标志 | 含义 |
|
||
|----|------|------|
|
||
| **VM**(17) | 虚拟 8086 方式 | VM=1 时 CPU 工作在虚拟 8086 模式 |
|
||
| **RF**(16) | 恢复标志 | RF=1 时即使遇断点也不产生单步异常 |
|
||
| **NT**(14) | 嵌套任务 | NT=1 表示当前任务嵌套于另一任务 |
|
||
| **IOPL**(12、13) | I/O 特权级 | 0–3,0 最高;CPL ≤ IOPL 才能执行 I/O 指令 |
|
||
| **AC**(18) | 对齐检查 | AC=1 时未对齐访问产生异常中断 17 |
|
||
| **VIF**(19) | 虚拟中断标志 | IF 的虚拟映像 |
|
||
| **VIP**(20) | 虚拟中断挂起 | 指示虚拟中断是否挂起 |
|
||
| **ID**(21) | 标识标志 | ID=1 表示支持 CPUID 指令 |
|
||
| OF/DF/IF/TF/SF/ZF/AF/PF/CF | 与 8086 相同 | 溢出/方向/中断允许/陷阱/符号/零/辅助进位/奇偶/进位 |
|
||
|
||
> 与 8086 相同部分:低 12 位状态标志基本保留;新增位集中在高 16 位。
|
||
|
||
#### 2.4 段寄存器与保护模式段描述符
|
||
|
||
- **6 个段寄存器**(CS/DS/SS/ES/FS/GS)每个 16 位,**程序员可见**,但实际段信息存放在内部的 **段描述符寄存器**(64 位,对程序员透明)。
|
||
- 段描述符寄存器包含:**32 位段基址 + 20 位段限(界限) + 12 位段属性**。
|
||
- **段描述符**:8 字节,用于描述段的信息(基址、限长、属性)。
|
||
- **段描述符表(GDT/LDT)**:把多个段描述符组织成表。
|
||
- **段选择符**:16 位,存于段寄存器中,指出对应描述符在描述符表中的位置(含索引、表选择、特权级)。
|
||
- **保护模式下逻辑地址→物理地址**:逻辑地址 = 段选择符 : 32 位段内偏移;由选择符查描述符表得 32 位段基址,基址 + 偏移 = 物理地址。
|
||
|
||
#### 2.5 系统级寄存器(系统地址 + 控制)
|
||
|
||
**系统地址寄存器(4 个)**——确定各种描述符表的基址:
|
||
|
||
| 寄存器 | 全称 | 格式 | 数量 |
|
||
|--------|------|------|------|
|
||
| **GDTR** | 全局描述符表寄存器 | 32 位基地址 + 16 位界限 | 整个系统 1 个 GDT |
|
||
| **IDTR** | 中断描述符表寄存器 | 32 位基地址 + 16 位界限 | 整个系统 1 个 IDT |
|
||
| **LDTR** | 局部描述符表寄存器 | 16 位选择符 + 32 位基址 + 20 位界限 + 12 位属性 | 每个任务 1 个 LDT |
|
||
| **TR** | 任务状态寄存器 | 16 位选择符 + 32 位基址 + 20 位界限 + 12 位属性 | 任务切换时保存/恢复机器状态 |
|
||
|
||
**控制寄存器(5 个:CR0–CR4)**——用于控制 CPU 工作模式和分页机制:
|
||
|
||
- **CR0**:含 **PE 位**(保护模式允许,PE=1 进入保护模式)和 **PG 位**(分页允许,PG=1 启用分页)。
|
||
- CR1:保留未用。
|
||
- CR2:缺页(Page Fault)时保存导致异常的线性地址。
|
||
- CR3:页目录基址寄存器(PDBDR),保存页目录表的物理基址。
|
||
- CR4:扩展控制位(如 PSE 4 MB 页、PAE 等)。
|
||
|
||
---
|
||
|
||
### 3. Pentium 微处理器外部结构(3.3)
|
||
|
||
Pentium 引脚主要分为 10 类功能:
|
||
|
||
1. **地址线及控制**:A31–A3(32 位地址),A20M(地址位 20 屏蔽,用于实模式回绕)、ADS/ADSC、AP(地址偶校验)、APCHK、BE7–BE0(8 字节选通)。
|
||
2. **数据线及控制**:D63–D0(64 位数据总线)、DP7–DP0(数据偶校验)、PCHK、PEN。
|
||
3. **总线周期控制**:D/C、M/IO、W/R 信号组合定义总线周期类型;BRDY、NA(地址请求下一流水)、LOCK、SCYC 等。
|
||
4. **Cache 控制**:CACHE、PCD(页级 Cache 禁止)、PWT(写直达)、KEN(Cache 行使能)、WB/WT、EADS、FLUSH、INV 等。
|
||
5. **系统控制**:CLK(60/66.6 MHz 外部、内部 100/120/133/166/200 MHz 倍频)、INIT、RESET、INTR、NMI。
|
||
6. **总线控制**:HOLD/HLDA(DMA 申请)、BREQ(总线请求)、BOFF(强制释放)。
|
||
7. **检测与处理**:BUSCHK、IERR、FERR、IGNNE、FRCMC。
|
||
8. **系统管理模式**:SMI、SMIACT。
|
||
9. **测试**:TCK、TDI、TDO、TMS、TRST(JTAG)。
|
||
10. **跟踪和检查**:PM0–PM2、BP0–BP3(性能监控/断点)、BT0–BT3(分支跟踪)、IU/IV/IBT(U/V 流水线指令完成/分支输出)、R/S、PRDY。
|
||
|
||
外部时钟为 60 或 66.6 MHz,**内部倍频**(1.5/2/2.5/3 倍)后得到 100/120/133/166/200 MHz 等频率。
|
||
|
||
---
|
||
|
||
### 4. Pentium 微处理器的操作模式(3.5)
|
||
|
||
Pentium 有 **3 种主要操作模式**:
|
||
|
||
```
|
||
实地址模式(Real Mode)
|
||
保护虚地址模式 ┬─ 一般保护模式
|
||
└─ 虚拟 8086 模式
|
||
```
|
||
|
||
#### 4.1 实地址模式(Real Mode)
|
||
|
||
- Pentium 与 8086 兼容,基本体系结构相同。
|
||
- 存储空间 **1 MB**;**不允许分页**,所以线性地址 = 物理地址。
|
||
- **物理地址 = 段地址 × 16 + 偏移地址**(与 8086 完全一致)。
|
||
- 保留两个物理区域:
|
||
- 中断向量区:`0000:0000H ~ 0000:03FFH`(1 KB)
|
||
- 系统初始化区:`0FFFF:0000H ~ 0FFFF:000FH`(16 字节)
|
||
- 可以在实模式下通过设置控制寄存器切换到保护模式。
|
||
|
||
#### 4.2 保护虚地址模式
|
||
|
||
**保护概念**包含三方面:
|
||
1. **任务间存储器空间保护**:每个任务有独立地址空间。
|
||
2. **段属性及界限保护**:通过段描述符中的限长、属性检查越界。
|
||
3. **特权级保护**:见下文。
|
||
|
||
**存储空间**:
|
||
- 32 位物理地址 → **4 GB** 物理地址空间。
|
||
- 46 位逻辑地址 → **64 TB** 逻辑地址空间。
|
||
|
||
**环(特权级)**:4 级,0~3(高→低):
|
||
- **0 级**:最高特权级(内核/操作系统核心)。
|
||
- **3 级**:最低特权级(用户程序)。
|
||
- 高特权级可访问低特权级数据;低特权级**可调用**高特权级程序(通过门机制),但不能任意访问。
|
||
|
||
**保护模式存储器寻址**:逻辑地址 = 选择符 + 偏移地址;通过选择符查描述符表得段基址,与偏移相加得到物理地址。
|
||
|
||
#### 4.3 虚拟 8086 模式
|
||
|
||
- 是保护模式下的一种**子模式**。
|
||
- 标志位 VM=1 时进入。
|
||
- 使 Pentium 可以在保护模式下**执行 8086 应用程序**(如运行 DOS 程序),同时仍享受分页、特权级等保护特性。
|
||
|
||
#### 4.4 分页机制(补充)
|
||
|
||
- 保护模式下可启用分页(CR0.PG=1),将 32 位线性地址映射到 32 位物理地址。
|
||
- 二级页表结构:页目录(Page Directory)+ 页表(Page Table),每页 4 KB。
|
||
- CR3 保存页目录基址;CR2 保存缺页线性地址。
|
||
- TLB 用于缓存最近用过的页表项,命中可显著加速地址转换。
|
||
|
||
---
|
||
|
||
### 5. 知识点扩展(PPT 之外补充)
|
||
|
||
#### 5.1 Pentium 的"三大技术"——考试高频
|
||
|
||
Pentium 相对 80386 的核心创新在于 **RISC 化超标量设计**,主要三大技术:
|
||
|
||
1. **超标量(Superscalar)**:双流水线 U/V,单周期可发射 2 条指令。
|
||
2. **超流水线(Superpipelined)**:整数流水线 5 级(取指、译码1、译码2、执行、写回),浮点 8 级,深度流水线提高主频。
|
||
3. **动态分支预测(Branch Prediction)**:通过 BTB 缓存分支历史,目标地址预测准确率可达 75–90%。
|
||
|
||
#### 5.2 后继型号演进(简要)
|
||
|
||
- **Pentium Pro (P6)**:引入乱序执行(OOO)、集成 L2 Cache、RISC 微操作(μop)将 CISC 指令分解为 RISC 类操作。
|
||
- **Pentium II**:P6 核心 + MMX 多媒体指令集,Slot 1 封装。
|
||
- **Pentium III**:增加 **SSE**(Streaming SIMD Extensions,70 条新指令,128 位 XMM 寄存器)。
|
||
- **Pentium 4 (NetBurst)**:超长流水线(20~31 级)、高主频、引入 **SSE2/SSE3**,主打频率战。
|
||
- **新增指令(Pentium 起)**:CPUID、RDTSC、CMPXCHG8B、RDMSR/WRMSR 等系统管理类指令;MMX(多媒体扩展);后续 SSE 系列。
|
||
|
||
#### 5.3 与 8086 的核心差异速查表
|
||
|
||
| 项目 | 8086 | Pentium |
|
||
|------|------|---------|
|
||
| 数据总线宽度 | 16 位 | 内部 32 位 / 外部 64 位 |
|
||
| 地址总线宽度 | 20 位 | 32 位 |
|
||
| 物理地址空间 | 1 MB | 4 GB |
|
||
| 通用寄存器 | 16 位 | 32 位(兼容 16 位与 8 位) |
|
||
| 段寄存器 | 4 个(CS/DS/SS/ES) | 6 个(+ FS/GS) |
|
||
| 流水线 | 无 / 简单预取 | U/V 双流水线超标量 |
|
||
| Cache | 无 | L1 分立 8K+8K |
|
||
| 分支预测 | 无 | BTB 动态预测 |
|
||
| 工作模式 | 实模式 | 实模式 + 保护模式 + 虚拟 8086 |
|
||
|
||
---
|
||
|
||
## 二、考点总结
|
||
|
||
### 必背核心(高频)
|
||
|
||
- 【高频】**Pentium 与 8086 的对比**:寄存器 32 位扩展、段寄存器增加到 6 个、外部数据总线 64 位、地址线 32 位、物理空间 4 GB。
|
||
- 【高频】**Pentium 三大技术**:超标量(U/V 双流水线,2 条指令/周期)、超流水线(整数 5 级、浮点 8 级)、动态分支预测(BTB)。
|
||
- 【高频】**32 位扩展寄存器**:EAX/EBX/ECX/EDX/ESP/EBP/ESI/EDI、EIP、EFLAGS;可继续拆分使用 AX/BX/CX/DX 与 AH/AL 等。
|
||
- 【高频】**段寄存器 6 个**:CS、DS、SS、ES、FS、GS;段描述符 8 字节 = 32 位基址 + 20 位限 + 12 位属性。
|
||
- 【高频】**控制寄存器 CR0 的 PE/PG 位**:PE=1 进入保护模式;PG=1 启用分页;二者组合出实模式/保护无分页/保护有分页/虚拟 8086 四种工作方式。
|
||
- 【高频】**控制寄存器 CR1–CR4 作用**:CR1 保留;CR2 保存缺页线性地址;CR3 页目录基址;CR4 扩展控制(PSE/PAE 等)。
|
||
- 【高频】**特权级 0–3**:0 最高(内核)、3 最低(用户);高可访问低,低通过门调用高。
|
||
- 【高频】**虚拟地址到物理地址转换**:
|
||
- 实模式:物理 = 段 × 16 + 偏移(1 MB 空间)。
|
||
- 保护模式:物理 = 段描述符基址 + 32 位偏移(先分段,再分页)。
|
||
- 启用分页后:线性地址 → 经页目录、页表 → 物理地址。
|
||
|
||
### 常考要点
|
||
|
||
- **基本构成 4 部分**:总线接口、存储器管理(Cache/BTB/分页)、控制器(ROM/译码/预取)、运算器(整数 U/V + 浮点)。
|
||
- **结构特性 6 条**:超标量 2、分立 Cache 8K+8K、浮点 8 级流水、动态分支预测、内 32 外 64、4 种工作方式。
|
||
- **U/V 流水线差异**:U 可执行全部整数指令;V 只能执行简单指令;整数寄存器组共享。
|
||
- **Cache 结构**:指令 8 KB + 数据 8 KB,双端口,每时钟取 32 位(数据 64 位),各带 TLB。
|
||
- **预取缓冲器**:2 个 32 B 预取缓冲器,每次可预取 256 位(32 B)。
|
||
- **寄存器组组成**:基本结构 16 + 系统级 9 + 调试 8 + 模型专用 20 + 浮点 18 = 共 71 个。
|
||
- **EFLAGS 新增位**:VM(位 17)、RF(16)、NT(14)、IOPL(12–13)、AC(18)、VIF(19)、VIP(20)、ID(21);其余低位与 8086 相同。
|
||
- **IOPL 含义**:CPL ≤ IOPL 时才允许执行 I/O 指令与设置 IF;只有特权级 0 才能修改 IOPL。
|
||
- **系统地址寄存器**:GDTR(基址+界限)、IDTR、LDTR、TR;GDT/IDT 整个系统唯一,LDT 每个任务一个。
|
||
- **段描述符与段选择符**:段选择符 16 位(含索引、表选择、特权级),程序员可见;段描述符 8 字节,透明。
|
||
- **4 种工作方式**:实地址、保护虚地址、虚拟 8086、系统管理(SMM);由 CR0 与 EFLAGS.VM 共同决定。
|
||
- **实模式保留区**:中断向量区 `0000:0000–0000:03FF`、系统初始化区 `0FFFF:0000–0FFFF:000F`。
|
||
- **外部时钟**:60/66.6 MHz,内部倍频到 100/120/133/166/200 MHz。
|
||
- **引脚分类**:10 大类——地址线、数据线、总线周期控制、Cache 控制、系统控制、总线控制、检测与处理、系统管理、测试、跟踪检查。
|
||
- **新增指令**:CPUID、RDTSC、CMPXCHG8B、RDMSR/WRMSR、MMX、SSE 系列(Pentium III 起)。
|
||
|
||
### 简答/计算题常见考法
|
||
|
||
1. **画出 Pentium 内部结构框图**并标出 U/V 流水线、Cache、BTB、控制 ROM 等关键部件。
|
||
2. **说明实模式/保护模式下逻辑地址到物理地址的转换过程**。
|
||
3. **说明 CR0 中 PE、PG 各位组合所对应的工作状态**。
|
||
4. **解释特权级 0–3 的含义及访问规则**。
|
||
5. **比较 Pentium 与 8086 的寄存器结构**(位数、名称、用途)。
|
||
6. **说明 U/V 流水线的分工**及超标量含义。
|
||
7. **说明 BTB 与动态分支预测的作用**。
|
||
8. **解释段描述符、段选择符、GDT/LDT 的关系**。 |