一、Pentium 微处理器的内部结构
Pentium 是 Intel 公司 于 1993 年 3 月 推出的第五代 80x86 系列处理器,简称 P5 或80586,中文译名为“奔腾”,其集成度已超过100万只晶体管/片。其内部结构如下所示:
注释版如下 :
1.1 总线接口单元
总线接口部件包括三总线的控制:全部总线控制信号、独立的32位地址总线、独立的64位数据总线。
总线接口部件根据优先级高低协调数据的传送、指令的预取等操作,在处理机的内部部件和外部系统间提供控制。
Pentium 微处理器的总线接口单元拥有以下特征:
- **地址收发器和驱动器:**驱动地址信号 A 31 ∼ A 3 A_{31}\sim A_{3} A31∼A3、字节允许信号 B E 7 ‾ ∼ B E 0 ‾ \overline{BE7}\sim \overline{BE0} BE7∼BE0
- **数据总线收发器:**控制 D 63 ∼ D 60 D_{63}\sim D_{60} D63∼D60
- **总线宽度控制:**用 2 个输入端控制数据总线的宽度,4种:64位、32位、16位、8位
- **写缓冲:**配备一个暂时存储器,存放写到主存中的4个32位的数据,起到缓冲作用。
- **总线周期和总线控制:**支持多种总线周期控制,如成组传送、单个传送、总线仲裁、中断等。
- **奇偶校验的生成和控制:**实现数据完整性检测和错误检测。
- **Cache控制:**实现对Cache操作的控制和一致性检查。
1.2 流水线操作
流水线设计是将一个顺序的处理过程分解为若干个子过程,每个子处理过程称为一个段,完成一个具体的功能,并产生一个中间结果。
**指令流水线机制:**在冯.诺伊曼计算机体系结构中,一条指令的执行被分为几个步骤,每个步骤由流水线的相应段来完成,就构成了一条指令的流水线。
- **取指令:**从Cache或主存取指令
- **译码:**确定操作类型
- **生成操作数地址:**若需要存储器操作数,则确定操作数地址,由 Cache 或主存取数
- 完成操作
- **写回:**将结果写回寄存器或主存
1.2.1 指令预取
**预取缓存器的作用:**预取指令
预取缓冲器结构:2个部分,各32个字节,但只能有一个是工作状态,顺序取和转移取交替,由路径指针转换。
**预取时机:**总线部件不执行总线周期时,就执行一个取指令周期。预取缓冲器的优先权最低,预取操作不允许影响当前指令的执行。
1.2.2 超标量技术
超标量:CPU中有多条指令流水线。
Pentium 中U、V两条流水线,超标量为2。
**超标量目的:**改善标量指令的执行性能,与向量处理器相对比,由于多数应用都是标量运算,所以超标量技术代表了高性能处理器的发展方向。
改善指令流水线的不同途径
- 超流水线
- 超标量流水线
1.2.3 超标量执行
每条Pentium流水线由5段组成。
- **PF:**Prefetch Stage,指令预取,由指令Cache取指令,指令长度可变,存入一个预取缓冲器,2个32B部件。
- D1:Decode Stage 1,指令译码,确认操作数和寻址方式,完成指令配对检查。结合转移目标缓冲存储器(BTB,Branch target buffer)进行转移指令搜索,确定下次指令预取地址。
- **D2:**Decode Srage 2,操作数地址生成,计算存储器操作数地址。
- EX:Execution Stage,指令执行,运行ALU操作,完成数据Cache访问,验证非条件转移指令分支预测的正确性
- WB:Writeback Stage,写回,用计算结果修改目标,验证条件转移指令分支预测的正确性。
1.2.4 整数流水线
Pentium 微处理器配备了两条指令流水线:U流水线和V流水线。
U流水线:能够执行全部整数指令和浮点指令,
V流水线:仅能执行一些简单的整数指令和一些交换之类的浮点指令。
U、V两条流水线并行执行,并行发生两条指令的过程称为“配对”过程。
2个指令预取缓冲器,各32B,指令译码器还负责指令配对检查。
每条流水线有自己的ALU、地址生成电路、Cache接口。
1.2.5 分支预测判断
Pentium 微处理器为了实现分支预测判断,芯片内部设置了两个缓冲器:
- 预取缓存器
- 分支目标缓冲存储器(BTB)
-
在《计算机系统结构》中介绍过,BTB是小容量Cache,记录分支成功指令的地址和分支目标地址
-
预测正确,更新BTB记录
-
预测错误,清空流水线
-
1.3 分段与分页部件
- **段:**被保护的独立的存储地址空间。
- **分段目的:**在各应用程序间实行强制性的隔离,以便调用恢复
- **分段部件功能:**将逻辑地址转换成线性地址。
- Pentium处理器采用二级分页管理机制,配有转换旁视缓冲器TB。Pentium微处理器将4 KB定义为一页。
- **分页部件功能:**将线性地址转换成物理地址。
二、Pentium微处理器编程结构
2.1 基本结构寄存器
Pentium 微处理器有 16 个基本结构寄存器。
- 其中通用寄存器有8个,专用寄存器有2个,段寄存器有6个
和8086相比,Pentium多了两个附加段寄存器:FS、GS
标志位寄存器FLAGS
第0~11标识位和8086相同,仅介绍新增的几个
- 1213位-IOPL:**I/O特权级**,保存方式下,为I/O寻址操作设置最小保护级,**03**,0为最高优先级,程序CPL(当前特权级,current privilege level) ≥ IOPL(CPL数值上小于等于IOPL)时,I/O指令才能执行,否则产生异常。只有特权级为0级的程序才能修改IOPL
- 14-NT:嵌套任务,保护方式下,NT=1,当前执行的任务嵌套在另一个任务中,NT=0,无嵌套。
- 16-RF:恢复标志,RF = 1,即使遇到断点或调试故障,也不产生异常中断1(单步),成功执行指令时,RF自动清0.
- 17-VM:虚拟8086方式,保护方式下,VM=1,CPU工作在虚拟8086模式。
- 18-AC:对齐检查,AC=1,当访问地址出现对齐错误时,产生异常中断17。
- 19-VIF:虚拟中断标志,在虚拟方式下,VIF时是IF的虚拟映像。
- 20-VIP:虚拟中断挂起,指示虚拟中断是否挂起,为虚拟方式提供中断信息。
- 21-ID:标识标志,ID=1,表示该CPU支持CPUID指令,该指令提供厂商、产品系列等信息。
段寄存器
Pentium有6个段寄存器,每个都是16位长
-
CS:代码段寄存器
-
DS:数据段寄存器
-
ES、FS、GS:附加段寄存器:为某些串指令存放目的数据而附加的一个数据段。
-
SS:堆栈段寄存器。
-
每一个段寄存器都有一个与之相对应的段描述符高速缓存器,用来描述一个段的段基地址、段限(段的范围、长度)和段的属性。
-
段寄存器是程序员可见的,而段描述符寄存器对程序员是透明的
2.2 系统级寄存器
系统级寄存器包括4个系统地址寄存器和5个控制寄存器。
2.2.1 系统地址寄存器
由于系统存储管理的需要,配备了4个系统地址寄存器,用于控制分段存储器管理中数据结构的位置。
4个系统地址寄存器:
- 全局描述符表寄存器GDTR:GDT的32位线性基地址和16位段限
- 中断描述符表寄存器IDTR:IDT的32位线性基地址和16位段限
- 局部描述符表寄存器LDTR:LDT的32位线性基地址和20位段限和12位描述符属性以及16位的局部描述符表的段选择符
- 任务状态寄存器TR:任务状态段的16位段选择符、32位线性基地址、20位段限和12位描述符属性
段描述符
-
以段为单位为程序分配内存,段的信息是重要的。
-
段描述符:用于描述段的信息,8字节组成。
-
段描述符表:各个段的描述符作为一种数据结构,像数组似的组合在一起,就构成了描述符表。
-
描述符表的开始地址放在描述符表寄存器中,该首地址再加上描述符表偏移量,就会得到相应的描述符。
段描述符表
**GDT:**global descriptor table,全局描述符表,操作系统使用的段描述符和各项任务共用的段描述符放在一起组成的表。整个系统一个。
**LDT:**local descriptor table,局部描述符表,某项任务专用的所有的各种段描述符放在一起构成的表。每个任务各有一个。
**IDT:**中断描述符表,一种特殊的表,它把每个中断向量与描述符联系在一起,描述符包含中断服务程序入口地址和特性,整个系统一个。
对应3个描述符表,就有3个描述符表寄存器,用于保存描述符表的开始地址:
- GDTR:保存GDT开始地址和段长,48位
- LDTR:保存LDT开始地址和段长、属性,16+64位
- IDTR:保存LDT开始地址和段长,48位
任务寄存器TR:16+64位,保护方式下使用,保存当前正在执行任务的任务状态段的信息(包括段选择符、基地址、段长、属性),任务切换时,用它自动保存和恢复机器状态。CPU运行程序装入16位的段选择符,由段选择符选择64位的段描述符,装入高速缓存。
2.2.2 控制寄存器
Pentium微处理器由于控制管理的需要,配备了CRO-CR4控制寄存器。
作用:保存全局性机器状态。
- CR0:机器状态
- CR1:保留
- CR2:页故障线性地址寄存器
- CR3:页目录基地址
- CR4:设置 Pentium 扩展功能
下面详细介绍CR0:
CR0中有11个标志,分别表示或控制机器的状态。CR0寄存器 11 个标志的定义、作用和名称分别如下:
-
CR0
- PE: 保护方式允许,PE=1 保护方式,PE=0 实地址方式
- MP: 监视协处理器,MP=1有协处理器,MP=0无,用于运行286、386程序
- EM: 仿真协处理器,EM=1 由软件仿真协处理器,EM = 0 不仿真
- TS: 任务切换,TS=1出现任务切换,TS=0无。
- ET: 扩展类型,用于386,ET=1 配387,ET=0 配287,Pentium始终置1
- NE: 数值异常,NE=1 由16号中断处理浮点故障,NE=0由外部中断处理
- WP: 写保护,WP=1用户级只读页禁止写入,WP=0允许
- AM: 对齐屏蔽,AM=1屏蔽对准错误,AM=0 Efag中的AC位有效
- **NW:**不透明写,NW=1不透明写,只写Cache,不写主存。NW=0透明写,写直达,既写Cache,又写主存
- CD: 禁止Cache。CD=1禁止片内Cache填充。CD=0允许
- PG: 允许分页,PG=1允许分页,PG=0禁止
-
- CR3: 保存页目录表的基地址,PG=1有效,高20位有效,页目录表按页对齐(4KB)
- PWT:页面写直达,对外部Cache,PWT=1外部Cache写直达,PWT=0外部Cacbe写回
- PCD:页面Cache禁止,对外部Cache,PCD=1禁止外部Cache,PCD=0 允许
三、Pentium微处理器的外部结构
3.1 地址线及控制
- A 20 M ‾ \overline {A20M} A20M: A20 以上地址线屏蔽信号, 与ISA总线兼容, 仿真 8086 CPU 1M空间
-
A
31
∼
A
3
A31\sim A3
A31∼A3: 地址总线, 寻址4GB. 内部Cache, 地址双向.
- A31 ~ A3 突发传送时不变
- A2 ~ A0 在CPU中被编码, 形成 B E 7 ‾ ∼ B E 0 ‾ \overline {BE7} \sim \overline{BE0} BE7∼BE0的输出, 用于字节选择
- A D S ‾ \overline {ADS} ADS: 地址选通, 有效时表示CPU启动1个总线周期, T1有效.
- AP: 地址偶校验, 为存储和I/O传送提供地址偶校验位
- A P C H K ‾ \overline{APCHK} APCHK: 地址校验检查, 当检查到地址校验错时, 该信号变为逻辑0
3.2 数据线及控制
- B E 7 ‾ ∼ B E 0 ‾ \overline{BE7} \sim \overline{BE0} BE7∼BE0: 字节允许, 对应每个字节, 由地址A2 ~ A0产生
- D 63 ∼ D 0 D63 \sim D0 D63∼D0: 数据总线. 数据读写时, 按字节偶校验
- D P 7 ∼ D P 0 DP7 \sim DP0 DP7∼DP0: 数据偶校验. 每一位依次对应数据线上一个字节的偶校验
- P C H K ‾ \overline{PCHK} PCHK: 奇偶校验检查, 有效表明读数据时偶校验出错
- P E N ‾ \overline{PEN} PEN: 奇偶校验允许,如果该信号为逻辑0,只要读校验出错,CPU就会自动执行异常处理。若内存配置不带奇偶校验位,应使PEN = 1无效,否则引起异常中断
3.3 总线周期控制
- D / C ‾ D/\overline{C} D/C: 数据/控制
- M / I O ‾ M/I\overline{O} M/IO: 存储器/IO
- W / R ‾ W/\overline{R} W/R: 写/读
- B R D Y ‾ \overline{BRDY} BRDY: 突发就绪, 类似Ready, 结束一个总线周期,此时外设准备好,将进入总线流水,可用于确定是否插入等待状态
-
L
O
C
K
‾
\overline{LOCK}
LOCK: 总线锁定, LOCK前缀使该信号有效,用来指示现行总线周期不能被打断
- SCYC: 分割周期,地址指针未对准,需用2个总线周期。
3.4 Cache控制
- C a c h e ‾ \overline{Cache} Cache: Cache控制, 指示目前处于Cache周期
- P C D PCD PCD: 页面Cache禁止,反映CR3的PCD位状态,对外部Cache,有效时禁止
-
P
W
T
PWT
PWT: 页面写直达,反映CR3的PWT位状态,对外部Cache
- F L U S H ‾ \overline{FLUSH} FLUSH: Cache擦除,数据Gache中修改过的行写回操作,并使相应Cache行无效,对内部Cache
- K E N ‾ \overline{KEN} KEN: Cache允许, 有效时,指示进入突发读周期,将外部数据复制到内部Cache.
- W B / W T ‾ WB/\overline{WT} WB/WT: 写回/写直达, 对内部Cache
- F A D S ‾ \overline{FADS} FADS: 外部地址选通,指示地址总线由外部部件驱动
- H I T ‾ \overline{HIT} HIT: Cache命中
- H I T M ‾ \overline{HITM} HITM: 命中的Cache行被修改,用于在已修改过的Cache行写回到存储器之前, 禁止其他单元访问这些数据
- I N V INV INV: 无效请求, 使内部Cache行变为无效
- A H O L D AHOLD AHOLD: 地址保持请求,和EADS一起,用于Caehe监听,保持Cache一致性, 在DMA,存储器发生变化,若这两个信号有效,则Cache与存储相同地址的内容无效
- E W B E ‾ \overline{EWBE} EWBE: 外部写缓冲器空,若 E W B E ‾ \overline{EWBE} EWBE = 1无效,则外部Cache E(互斥)和M(修改)的行禁止写入
3.5 系统控制
- CLK: 时钟
- INIT: 初始化, 热复位, RESET类似,不清0Cache、浮点寄存器
- RESET: 复位,冷复位
- 实地址方式
- A31 - A20为 FFFH (12个)
- CS=F000H,EIP=0000FFF0H
- 清 0 Cache和浮点寄存器
- 清 0 相关寄存器
- INTR: 可屏蔽中断请求
- NMI: 非屏蔽中断请求
RESET VS INIT: 1)RESET立即复位。2)INIT当前指令结束后复位,且不清0 Cache、浮点寄存器
3.6 总线仲裁
- HOLD: 总线保持请求,请求Pentium停止总线驱动。完成当前总线周期后让出总线,用HLDA响应。
- HLDA: 总线保持响应,指示Pentium让出总线控制。
- BREQ: 总线请求,输出,指示Pentium内部已产生了一个总线请求。CPU向其他总线主控设备说明,它正在占用总线。
- BOFF: 总线释放,总线脱离,强制,当前时钟周期后,立即让出总线。
四、Pentium微处理器的操作模式
Pentium微处理器有两种操作模式:
- 实地址模式
- 保护虚地址模式
- 一般保护模式
- 虚拟8086模式
41 实地址模式
-
简称实地址方式,Pentium与8086兼容,基本体系结构相同。
-
能有效地使用8086所没有的寻址方式、32位寄存器和大部分指令,
-
存储空间为1M字节。不允许分页,所以线性地址就是物理地址。
-
物理地址 = 段地址 × 16 + 偏移地址
-
保留2个物理存储空间:
0000:0000H~0000:03FFH: 中断向量区, 每个中断向量占用4个字节
FFFF:0000H~FFFF:000FH: 系统初始化区
-
在实地址方式下, 可以把 Pentium 设置为保护模式
4.2 保护虚拟地址模式
简称保护方式。4GB物理空间,64TB逻辑空间.
在保护方式下,逻辑地址由选择符和偏移地址两部分组成,选择符存放在段寄存器中,但它不能直接表示段基地址,而
由操作系统通过一定的方法取得段基地址,再和偏移地址相加,从而求得所选存储单元的物理地址。
虚拟8086方式
Pentium微处理器允许在实方式和保护方式下执行8086的应用程序。
虚拟8086方式相当于程序运行在实地址方式
通过使用分页功能,可以把虚拟8086方式下的1MB地址空间映象到Pentium微处理器的4GB的物理空间中的任何位置。
虚拟8086方式与实地址方式的不同:
- 虚拟8086方式是一个程序的运行方式。
- 实地址方式是处理器的工作方式。
ppData\Roaming\Typora\typora-user-images\image-20240528212704906.png" alt=“image-20240528212704906” style=“zoom:80%;” />
虚拟8086方式
Pentium微处理器允许在实方式和保护方式下执行8086的应用程序。
虚拟8086方式相当于程序运行在实地址方式
通过使用分页功能,可以把虚拟8086方式下的1MB地址空间映象到Pentium微处理器的4GB的物理空间中的任何位置。
虚拟8086方式与实地址方式的不同:
- 虚拟8086方式是一个程序的运行方式。
- 实地址方式是处理器的工作方式。