910 likes | 1.27k Views
§2.3 32 位微处理器 80386. 有关技术名词简介 80386 的体系结构 80386 的三种工作方式 80386 的寄存器 80386 的虚拟存储机制与片内两级存储管理 80386 的中断 80386 的信号和总线. 32 位机为了支持多任务操作及提高处理速度,普遍采用了一些现代先进计算机硬、软件技术, 如流水线技术、虚拟存储器技术、高速缓冲存储器技术、内存管理技术及分支预测技术等 。 1. 有关技术名词简介 CISC 和 RISC
E N D
§2.3 32位微处理器80386 有关技术名词简介 80386 的体系结构 80386 的三种工作方式 80386 的寄存器 80386 的虚拟存储机制与片内两级存储管理 80386 的中断 80386 的信号和总线
32位机为了支持多任务操作及提高处理速度,普遍采用了一些现代先进计算机硬、软件技术,如流水线技术、虚拟存储器技术、高速缓冲存储器技术、内存管理技术及分支预测技术等。 1. 有关技术名词简介 • CISC和RISC CISC是复杂指令集计算机(Complex Instruction Set Computer)的英文缩略语。是指以微程序为基础、具有较复杂指令系统的计算机
在60年代到80年代初期这一阶段中,以微程序控制器为基础的处理机占主流地位,IBM公司从60年代初开始把计算机产品系列化并做到软件兼容后,处理机体系结构设计中采用微程序技术作为控制指令执行的控制器的基础,在当时是比较适合的。因为在一个产品系列中,低档机指令系统中的指令的基本操作,可以以微程序方式存放在微存储器中(只读存储器),这个微存储器称为“核”。在60年代到80年代初期这一阶段中,以微程序控制器为基础的处理机占主流地位,IBM公司从60年代初开始把计算机产品系列化并做到软件兼容后,处理机体系结构设计中采用微程序技术作为控制指令执行的控制器的基础,在当时是比较适合的。因为在一个产品系列中,低档机指令系统中的指令的基本操作,可以以微程序方式存放在微存储器中(只读存储器),这个微存储器称为“核”。
如果高档机要求增加功能更强的、更复杂的指令,则只需要扩充这个核,增加相应的微程序,即可做到从低档机到高档机的软件向上兼容。如果高档机要求增加功能更强的、更复杂的指令,则只需要扩充这个核,增加相应的微程序,即可做到从低档机到高档机的软件向上兼容。 RISC--精简指令集计算机(Reduced Instruction Set Computer)是指采用简化了的指令系统和硬连线控制器的计算机。它是在高效的流水线技术的基础上,充分利用指令并行执行和编译优化技术的计算机。
RISC出现在80年代,它的含义是简化指令系统的计算机,它舍弃不常用的复杂指令,并充分改进频繁使用的基本指令的实际执行效率,把微程序控制器改为硬连线控制器,加强寄存器-寄存器操作指令,从而简化了计算机结构,提高了性能。后来,RISC技术强调优化流水线技术,使在一个机器周期内完成一个基本指令的执行。
当前,Intel公司的CISC产品80X86仍占有极大的优势,其原因是在80X86/MS-DOS平台上开发的应用软件有上亿个,远比RISC机器的软件丰富。CISC机器上的软件不能在RISC系统上运行。为了保持与这么多的应用软件兼容,Intel公司采取了逐步向RISC技术过渡的策略,现已在80486和Pentium中采用了RISC技术。当前,Intel公司的CISC产品80X86仍占有极大的优势,其原因是在80X86/MS-DOS平台上开发的应用软件有上亿个,远比RISC机器的软件丰富。CISC机器上的软件不能在RISC系统上运行。为了保持与这么多的应用软件兼容,Intel公司采取了逐步向RISC技术过渡的策略,现已在80486和Pentium中采用了RISC技术。
RISC结构是对计算机体系结构的一次重大变革,它可使微型计算机、工作站、小型计算机、大型计算机甚至超级计算机都由同一类型的处理机组成,这些不同机型的软件可做到二进制兼容。经过多年的发展,RISC已成为一种体系结构的设计思想,它与CISC的差别已不再是指令集的多少,远远超出了原来的含义和概念。
计算机流水线(Computer Pipeline) 把计算机的指令或操作分解成一系列可独立执行的步,并将多条指令或多个操作的步,按流水线方式重叠执行的一种工作方式。其特点是多条指令或多个操作并行处理,虽然每条指令或每个操作的执行步骤并未减少,但从整体看却加快了指令流进程,提高了整体处理速度。
计算机流水线一般分为指令流水线和运算流水线两种。计算机流水线一般分为指令流水线和运算流水线两种。 80年代初出现RISC后,即把流水线技术作为首选技术,在RISC中最初的目标是每个时钟周期执行1条指令,后来提出在1个时钟周期执行多条指令的目标,于是便出现了超流水线(Superpipelined)、超标量(Superscalar)等体系结构。
所谓超流水线结构是把一个时钟周期再细分为多个子周期,每个子周期发出一条指令;而超标量结构是在每个时钟周期内发射多条指令,这就要求在微处理器片内集成两条或两条以上的流水线,如Pentium和Pentium Pro就采用这种超标量结构设计技术。若把超标量与超流水线结合起来,就称为超标量超流水线结构。
虚拟存储器(Virtual Memory) 虚拟存储器允许用户运行一个比主存储器容量大得多的可随机访问的存储空间。通常在存储系统中有一个速度较快、容量比较小的内部主存储器,还有一个速度较慢、容量很大的外存储器,通过操作系统和硬件的配合,使二者构成一个有机的整体。对用户来说,好像有一个容量比实际主存大得多的主存可供使用,但它并不是真正的物理上的主存,因此称为虚拟存储器。
虚拟存储器的地址称为虚地址或逻辑地址,与之对应的称为实地址或物理地址。虚地址是程序员所看到的地址,是在程序中可使用的地址;实地址是CPU可访问的地址。在使用虚拟存储器的系统中,CPU实际访问的仍然是主存储器,通常程序放在磁盘等外存中,借助于存储管理部件将其映射到主存而被CPU访问。在80386/80486等微处理器中,虚拟存储器容量可高达246=64TB(64兆兆字节),主存容量为232=4GB(4千兆字节)。虚拟存储器的地址称为虚地址或逻辑地址,与之对应的称为实地址或物理地址。虚地址是程序员所看到的地址,是在程序中可使用的地址;实地址是CPU可访问的地址。在使用虚拟存储器的系统中,CPU实际访问的仍然是主存储器,通常程序放在磁盘等外存中,借助于存储管理部件将其映射到主存而被CPU访问。在80386/80486等微处理器中,虚拟存储器容量可高达246=64TB(64兆兆字节),主存容量为232=4GB(4千兆字节)。
高速缓冲存储器(Cache) 位于CPU与主存储器之间,对程序员透明的一种高速小容量存储器。所谓透明是指不必程序员自己去加以操作和控制。 高速缓冲存储器简称高速缓存,它是用最快速的SRAM构成。在配备有高速缓存的微型机中,每次访问存储器时,都先访问高速缓存,若访问的内容在高速缓存中,访问到此为止;否则,再访问主存储器,并把有关内容及相关数据块取入高速缓存。
这样,如果大部分针对高速缓存的访问都能成功,则在主存储器容量保持不变的情况下,访存速度可接近高速缓存的存取速度,这无疑可提高微机的运行速度。这样,如果大部分针对高速缓存的访问都能成功,则在主存储器容量保持不变的情况下,访存速度可接近高速缓存的存取速度,这无疑可提高微机的运行速度。 高速缓存的工作机制,是基于一种所谓局部性原则,即指程序在访问代码和数据时,如果某位置已被访问,该位置在短时间内可能还要再被访问;如果某位置已被访问,该位置的邻近位置可能还要再被访问。这是因程序中相关的数据块大都按顺序存放,且一般都存在相邻的存储单元中。
访问存储器时,若能在高速缓存中找到所需内容,称为“命中”,否则就是“不命中”。不命中的原因与高速缓存容量不足等有关。为了弥补片上高速缓存的不足,以及高速缓存与主存间的速度差距,通常采用多级高速缓存的方案。即在片上高速缓存与主存之间增加1级或多级速度稍慢但容量较大的高速缓存。访问存储器时,若能在高速缓存中找到所需内容,称为“命中”,否则就是“不命中”。不命中的原因与高速缓存容量不足等有关。为了弥补片上高速缓存的不足,以及高速缓存与主存间的速度差距,通常采用多级高速缓存的方案。即在片上高速缓存与主存之间增加1级或多级速度稍慢但容量较大的高速缓存。
2. 80386 的体系结构 80386DX的数据总线和地址总线都是32位,直接寻址的内存空间达到4GB,虚拟地址空间为64TB。芯片上集成了27.5万个晶体管,主频为16~33MHz,在16MHz主频下,运行速度为3~4MIPS(即每秒可执行300万到400万条指令)。由于采用了全32位体系结构,它能提供真正的多任务处理和建立虚拟系统的能力。
80386 的功能部件 分段部件 逻辑地址 指令预取部件 IPU 16字节指令预取队列 线性地址 指令 线性地址 逻 辑 地 址 指 令 字 节 指令译码部件IDU 分页部件 线性地址 指令译码器 物理地址 译码指令队列 物理地址 物理地址 译好码的指令 执行部件 EU 总线接口部件BIU 存储器 接口 协处理器 ALU 总线请求判优 64位移位加法器 数据和地址驱动 操作数和结果 8个32位通用寄存器 控制信号驱动 控制和保护测试 协处理器控制 CPU MMU
3. 80386的三种工作方式 80386共有三种工作方式:即实地址方式、保护虚拟地址方式和虚拟8086方式。 实地址方式与8086/8088工作原理类似,CPU只能访问存储空间的最低1MB,采用段地址和偏移地址相结合的方法来寻址存储单元,即将段地址左移4位再加上偏移地址,每段最大可为64K,各段允许重叠。存储区中保留中断区中
保留中断向量区(地址为00000~003FFH)和初始化向量区(地址为FFFFO~FFFFFH)两个固定区域。保留中断向量区(地址为00000~003FFH)和初始化向量区(地址为FFFFO~FFFFFH)两个固定区域。 在上电和复位时,80386(包括80486, Pentium等)便进入实地址方式,实地址方式是一种为建立保护方式作准备的方式. 保护虚拟地址方式是80386最常用的方式,该方式引入了虚拟存储器概念。虚拟地址空间达64TB,CPU可访问的物理存储空间为4GB。在这种方式下,对存储单元的寻址址不同于8086/8088,
段地址不再象在实方式下那样由段寄存器提供。这时,段寄存器中包含有选择子(Selector),它用于从描述符表中选择一个描述符(descriptor),描述符描述了一个存储器的段的起始地址、界限值和属性,依据此种数据结构来实现对存储单元的访问。段地址不再象在实方式下那样由段寄存器提供。这时,段寄存器中包含有选择子(Selector),它用于从描述符表中选择一个描述符(descriptor),描述符描述了一个存储器的段的起始地址、界限值和属性,依据此种数据结构来实现对存储单元的访问。 虚拟8086是一种特殊的保护方式,一种运行在保护方式下的8086方式,即既有保护功能又能执行8086的应用程序。
在80386保护方式下,支持多任务操作。此时,某一个任务可能运行在虚拟8086方式,而另一些任务运行在保护方式,操作系统为每个任务分配一定量的时间,使得系统看上去好象在同时执行多个任务,对每个任务好象独用一台完整的计算机。在80386保护方式下,支持多任务操作。此时,某一个任务可能运行在虚拟8086方式,而另一些任务运行在保护方式,操作系统为每个任务分配一定量的时间,使得系统看上去好象在同时执行多个任务,对每个任务好象独用一台完整的计算机。
Intel80X86微处器三种工作模式关系: 实模式、保护模式和虚拟86模式 三种模式之间的转换见图: ※LMSW指令 PROTECTED 保护模式 RESET 对CPU复位 ※修改CR0指令 实模式REAL 的PE位=1 RRESET位后修改CR0的PE=0 执行IRETD指令 通过中断 RESET信号 VIRTUAL 虚拟8086
4. 80386的寄存器结构 80386的寄存器按功能可分成四类,它们是基本寄存器、控制寄存器、系统地址寄存器、调试及测试寄存器。我们主要介绍第一种--基本寄存器,简要介绍其他寄存器。 如下图所示,基本寄存器包括通用寄存器、指令指针寄存器、标志寄存器和段寄存器。
(1)通用寄存器 8个32位通用寄存器EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI都是由8086/8088中的8个16位通用寄存器扩展位数而来,它们的低16位可以独立存取,以便与8086/8088兼容,名称分别称为AX、BX、CX、DX、SP、BP、SI和DI。其中前4个寄存器还可进一步分别分为两个8位寄存器,分别称为AH、AL,BH、BL,CH、CL,DH和DL。
(2)指令指针寄存器EIP 用来存放要执行的下一条指令的地址偏移量,工作在32位下的EIP,寻址范围4GB(4千兆字节)。它的低16位与8086/8088兼容,称为IP,寻址范围为64KB。
ID VIP VIF AC VM RF NT IOPL OF DF IF TF SF ZF AF PF CF (3)标志寄存器EFLAGS 80X86和Pentium Pro的标志寄存器的各位标志名。 31 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 … 80X86~Pentium Pro的标志寄存器
EFLAGS为32位标志寄存器,80386实际占有14位标志,分为三类:状态标志、控制标志和系统方式标志。其中状态标志与控制标志的含义在8086/8088中已作介绍,系统方式标志则是表示系统处于什么方式的标志。新增的标志位含义如下: IOPL:I/O特权级标志,仅适用于保护方式,由13位和12位指明I/O操作的级别(0~3级,IOPL=00为最高级,IOPL=11为最低级)。只有当任务的现行特权级IOPL,I/O指令才能顺利执行,否则产生中断,使任务挂起。
NT:任务嵌套标志,表示当前执行的任务是否嵌套于另一任务中。当一个任务被嵌套时,该标志置1。NT:任务嵌套标志,表示当前执行的任务是否嵌套于另一任务中。当一个任务被嵌套时,该标志置1。 RF:恢复标志,用于调试操作中,每当顺利执行完一条指令,RF自动清零;而RF=1表示下一条指令遇到断点或调试故障也不产生异常中断,强迫程序恢复执行。 VM:虚拟8086方式标志,VM=1时,表示工作在虚拟8086方式。在保护方式下,设置VM=1便进入虚拟8086方式。
上述标志位中,状态标志位为CF、PF、AF、ZF、SF、OF及NT;控制标志位共4个,分别是DF、IF、TF和IOPL;系统方式标志位则为RF和VM。上述标志位中,状态标志位为CF、PF、AF、ZF、SF、OF及NT;控制标志位共4个,分别是DF、IF、TF和IOPL;系统方式标志位则为RF和VM。 (4)段寄存器 段寄存器仍是16位,共有6个,分别为CS、DS、SS、ES、FS和GS,前4个与8086/8088相同,而FS和GS则是80386~Pentium Pro扩充的两个附加数据段寄存器。
与8086/8088类似,80386内存单元的地址仍由段基址和段内偏移地址构成,分两种情况:与8086/8088类似,80386内存单元的地址仍由段基址和段内偏移地址构成,分两种情况: 在实地址方式和虚拟8086方式下,分段部件只要把16位段寄存器中的内容左移4位,就得到对应段的基地址,再加上偏移地址,就得到了存储单元的地址,这个地址叫线性地址。寻址范围最大为1MB,每段大小固定为64KB。
在保护方式下,每一段的大小是可选择的,从1字节到4千兆字节之间变化。此时段寄存器中存放的并不是一个真正的段地址,而存的是一个选择子,如下图所示:在保护方式下,每一段的大小是可选择的,从1字节到4千兆字节之间变化。此时段寄存器中存放的并不是一个真正的段地址,而存的是一个选择子,如下图所示: CS 选择子 代码段 数据段 DS 选择子 描 述 符 表 堆栈段 SS 选择子 附加段 选择子 ES 附加段 FS 选择子 GS 选择子 附加段 保护方式下段基地址的产生
通过选择子从一个含有8192个描述符的描述符表中选择一个描述符,描述符给出了每一个段的起始地址,即线性基地址;还给出了此段界限值即长度;并指出了段的属性,即位置、大小、类型(代码段、堆栈段还是数据段)及保护特性。根据描述符便可找到段基地址。这时段寄存器的内容虽不象实地址方式下那样(左移4位)直接得到对应段的基地址,但它仍然间接地选择对应段的基地址。通过选择子从一个含有8192个描述符的描述符表中选择一个描述符,描述符给出了每一个段的起始地址,即线性基地址;还给出了此段界限值即长度;并指出了段的属性,即位置、大小、类型(代码段、堆栈段还是数据段)及保护特性。根据描述符便可找到段基地址。这时段寄存器的内容虽不象实地址方式下那样(左移4位)直接得到对应段的基地址,但它仍然间接地选择对应段的基地址。
其它寄存器 47 16 15 0 GDTR 线性地址 界 限 线性地址 界 限 IDTR 选择子 LDTR 31 16 15 0 CR0 MSW CR1 CR2 CR3 15 0 选择子 TR
31 0 DR0 DR1 DR2 DR3 DR4 DR5 DR6 DR7 31 0 TR6 TR7
(5) 控制寄存器(CR0~CR3)(32位)(8086CPU中无) 其中: CR1—— 备用 CR3—— 用于提供页目录的基地址 CR2—— 用于提供页故障线性地址。 CR0—— 其低16位与80286CPU中一样,是机器状态字R。 CR0功能:作为机器状态字(MSW)用以表示比标志(FLAG)对CPU 影响更大的标志,这些标志反映了系统 的工作状态。
CR0的控制位分为如下五大类: 1..与CPU工作模式有关的控制位PG(分页)、PG(置CPU为虚拟地址保护方式) 2..与CPU片内的CACHE有关的控制位:CE、WT 3..与协处理器或浮点运算部件有关的控制位:TS、EM、MP、 NE。 4..对位控制位:AM 5..页的写保护控制位:WP
(6) 系统地址寄存器: 用于进行从虚拟地址向实际物理地址的转换。 1. 功能: 主要用于在保护模式下,管理 4个系统表,这4个系统表为: ※GDT(Global Descriptor Table)全局描述符表 ※LDT(Local Descriptor Table)局部描述符表 ※IDT(Interrupt Descriptor Table)中断描述符表 ※TSS(Task State Segment)任务状态段
系统地址寄存器:地址寄存器为 GDTR GDT LDTR 分别用来指定 LDT 的大小在M中的位 IDIR IDT 置。 TR ——用以指定TSS任务状态段,只用来存放 任务环境的,其在M中的位置和大小 由TR指定。 其中: GDTR和IDTR共48位:32位的表基地址字段+16位的表 边界字段。 31 0 15 0 表基址 表限
可在实模式方式下,通过编程对GDTR和IDTR加载,以实现对GDT和IDT在保护方式下的初始化操作。可在实模式方式下,通过编程对GDTR和IDTR加载,以实现对GDT和IDT在保护方式下的初始化操作。 15 0 15 0 31 0 15 0 选择器字段 属性字段 表基址字段 边界字段 LDTR和TSR共80位:32位的表基址字段+20位的边界字段 +12位的访问权字段 +16位的选择器字段。 对LDTR和TR的说明: ※这两个寄存器只能在保护方式下使用。 ※在保护模式下程序可访问字段仅限于段选择器字段,即只能用指令加载段选择器。
用LLDT和LT指令可设置成改变相应的选择器字段,依选择器字段可 从全局描述符表中找到指定的基地址描述符和任务状态段描述符,在将描述符中的32位段基址和16位的段限及16位的属性字段加载到 LDTR和TR的64位高速缓冲寄存器中。
(7) 调试寄存器和测试寄存器 • 80386 有8个32位调试寄存器,用于调试与设置断点。 • DR0~DR3用来写入断点的32位线性地址 • DR4~DR5 INTEL保留 • DR6调试状态寄存器 • DR7配合断点设置的断点控制寄存器 • 2个32位测试寄存器 TR6、TR7 • TR6 存放测试控制命令 • TR7 为数据寄存器
5. 80386 的虚拟存储机制与片内两级存储管理 (1)、布局要点 ①、80X86的存贮器有三种工作方式: 实地址方式 虚地址保护方式 虚拟86模式 所以其地址空间分为:物理存贮空间和虚拟存贮空间 虚拟存贮空间即程序占有的存贮空间,其存贮量由CPU的体系结构确定。 实际物理地址空间是 CPU可直接访问存贮空间,其 存贮空间范围由CPU的地址总线位数决定。
②、二者存贮空间示意图如下: 每个任务使用64TB字节的存贮空间(2 ) 46 任务N 物理地 址空间 ROR .RAM 任务N-1 任务X (虚拟空间) 由磁盘等外 存支撑 存贮器管理部件 任务X 任务1 任务2 D15 D2 D1 D0 索引值 TI RPL 32位偏移地址
(2).实模式下存储器地址的产生 与8086/8088相似, 物理地址20位 物理地址PA = 段地址 + 偏移地址 • = ( 段寄存器 ) × 16 + 偏移地址 • = ( 段寄存器 ) × 10H + 偏移地址 • 即段寄存器的内容左移4位,加上偏移地址 • 段地址由段寄存器提供: CS、SS、DS、ES、FS、GS 16位 • 偏移地址由指令中的寻址方式提供, 范围在0~FFFFh。 特点:1) 段地址直接由段寄存器得到 2) 20根地址线有效
分页 管理 机制 PG=1 分段 管理 机制 31 0 31 0 15 0 31 0 : 选择子 偏移量 段寄存器 PG=0 物理地址 虚拟地址 线性地址 物理地址空间 线性地址空间 虚拟地址空间 最大232 213 × 232×2 = 246 = 64T 232 与实际的配置有关 (3).保护模式下存储器地址的产生 当PG=0时, 分页管理机制关闭, 线性地址就是物理地址
分段管理机制 • 将存储空间分为若干个段, • 存储单元的地址为: 段基地址(32位) + 段内偏移地址(32位) • 其中 段基地址通过指令中的段寄存器间接获取 • 偏移地址由指令中的寻址方式获取. • 如 MOV AX, DS: [EBX] • 存储单元的段基地址通过DS 寄存器间接获取 • 偏移地址为EBX寄存器的内容 与实方式下不同的是, 段基地址不是通过段寄存器直接得到, 保护方式下, 段寄存器起到的是索引的作用(称为段选择子).
保护方式下的段 • 每个段由三个参数定义: • 段基值: 指示段在线性地址空间中的起始地址. 32位 • 段界限: 规定段的大小. 0~4G • 段属性: 规定段的主要特性 用于表示段的三个参数的数据称为描述符, 每个描述符长8字节 每个段都有一个相应的描述符来描述.
代码段描述符 数据段描述符 存储段描述符 LDT段描述符 任务状态段描述符 系统段描述符 描 述 符 调用门描述符 任务门描述符 中断门描述符 陷阱门描述符 门 描 述 符 为支持虚拟存储管理和多任务的处理,使用了多种类型的描述符, 根据功能的不同, 在不同类型的描述符中存放不同的控制信息. 利用描述符的内容, CPU可以自动完成访问范围和权限的检查.
15 8 7 6 5 4 3 2 1 0 字节0 段 界 限 值 的 15 ~ 0 位 段 基 值 的 15 ~ 0 位 字节2 字节1 P DT 1 E W R A ED C 段 基 值 的 23 ~16 位 字节4 字节3 DPL A V L G D 0 段界限值 19~16 位 段 基 值 的 31~24 位 字节6 字节5 字节7 存储段描述符格式 存储段用于存放程序直接进行访问的代码和数据的段。 存储段描述符用于描述存储段。