在X86系列微处理器中,真正开始引入段式/页式存储管理的处理器是80386,而其后的各代处理器产品的存储管理和80386大都大同小异,因此本书以80386为例对X86系列微处理器的存储管理进行介绍。
1985年,Intel推出80386处理器。和16位的8086、80286不同,80386采用32位的结构,其数据总线、地址总线和内部寄存器的宽度都是32位的,所以其寻址空间高达4 GB。为了提供更加强大的存储管理能力,80386设置了由分段部件和分页部件组成的存储管理部件MMU,负责将指令中操作数的逻辑地址转换为物理地址,再将物理地址交给总线接口部件BIU访问存储器,从而实现完整的存储管理功能。
图5-11 80386的通用寄存器
在寄存器方面,80386的寄存器数量增加到了34个,从功能上可以分成通用寄存器、段寄存器、指令指针寄存器、状态标志寄存器、控制寄存器、系统地址寄存器、调试寄存器和测试寄存器8类。
通用寄存器是在8086的通用寄存器基础上发展而来的,共有8个,分别是EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP,都是32位寄存器(见图5-11)。这8个寄存器都是从8086相同符号的寄存器扩展到32位而得到,因而其命名也是在8086的16位寄存器名基础上增加一个字母E。和8086的AX、BX、CX、DX寄存器可以当做两个8位寄存器相仿,EAX、EBX、ECX和EDX寄存器也可以用来寄存32位、16位或8位的数据。ESI、EDI、ESP和EBP寄存器也可以用来寄存32位或16位的数据。
在段寄存器方面,和8086相比,80386增加了两个段寄存器FS和GS,使得80386的段寄存器数量变成了6个。增加的FS和GS是和ES类似的附加数据段寄存器,用以增强处理器的数据访问能力。同时80386微处理器提供了更多的存储器管理方式,在不同的存储器管理方式之下,段寄存器有着不同的功能,这些功能将在下一节中更加详细地描述。
80386的指令指针寄存器也被扩展为32位,称作EIP,用来寄存一个32位存储指令代码的内存单元偏移地址。同时其低16位仍然可以被独立使用,以便和8086的IP寄存器兼容。(www.xing528.com)
80386的状态标志寄存器在8086的基础上新增加了四个标志:IOPL、NT、RF和VM,其他的标志位作用与8086完全相同。这四个标志位里面,IOPL(输入/输出特权级标志)占用2位,用来表示当前任务是4个特权级别中的哪一个;NT(任务嵌套标志位)占用1位,用来表示任务之间是否存在嵌套关系(0=无嵌套);RF(恢复标志)占用1位,用于单步操作或设断点调试程序时使用;VM(虚拟8086方式标志)占用1位,用作在保护方式和虚拟8086方式之间进行切换使用。这样,80386的32位标志位寄存器(EFLAG)实际使用的位数是13位。
除此之外,80386还新增了一系列的新寄存器,用来实现更加强大的功能。新寄存器的第一组是控制寄存器,由CR0、CR1、CR2和CR3四个寄存器组成,其中CR1未定义。CR0作为机器状态字在80386中被定义了6位,被用作控制和状态标志。这6位分别是用来控制是否启动80386内部分页部件工作的分页允许控制位PG、表示有无协处理器的处理器扩展类型控制位ET、任务切换控制位TS、用来表示是否仿真协处理器的仿真协处理器控制位EM、监控协处理器控制位MP和用来表示系统是否进入保护方式的保护方式控制位PE。CR2用作页故障线性地址寄存器,用来寄存最后出现页故障的32位线性地址,在页式管理中使用。CR3则作为页目录基地址寄存器使用,用来寄存页目录表的物理基地址,由于80386的页目录表总是按照4 KB页面边界对齐的,所以CR3的低12位永远是0。
系统地址寄存器是80386新增加寄存器的第二组,共有4个,用来在保护方式下管理4个系统表。在保护模式下,80386的段地址由8字节的描述符确定,存储描述符的一块存储区域就是描述符表,又称系统表。80386的四个系统表分别是:全局描述符表GDT、局部描述符表LDT、中断描述符表IDT和系统任务段TSS。这些描述符表是实现存储管理的重要部件,在相应的48位系统地址寄存器GDTR、LDTR、IDTR和TSSR中存放了这些描述符的32位基地址和16位界限值,用来确定对应的描述符表的基地址和长度界限。为了实现处理器的调试和测试功能,80386还增加了8个32位的调试寄存器和2个32位的测试寄存器。
除了这些之外,和8086、80286等处理器相比,80386处理器的最大进展在于引入了强大的存储管理能力,其最主要的增强是定义了三种不同的存储器管理方式:分别是实地址方式(实模式)、保护方式和虚拟8086方式。处理器可以在几种不同存储器管理方式之间切换,当微处理器工作在不同的存储管理方式时,80386的段寄存器具有不同的功能。尤其是在保护方式下,80386处理器具有8086所不具备的对完整的段页式存储管理的支持能力。
实地址方式是80386用来和8086处理器兼容的模式,在这种模式下,80386的各段寄存器具有和8086的段寄存器相同的功能,物理地址的产生方式也和8086完全相同。段地址左移4位再与偏移地址相加的物理地址产生方式使得物理地址的位数被限制在20位,寻址空间也被限制在1 MB。
当处理器工作在保护方式时,物理地址的生成和实地址方式完全不同。这时段寄存器的内容不再直接代表段地址而是一个段描述符的索引。依靠这个索引和80386处理器内的一系列机制,MMU产生相应的线性地址,以实现段式管理的基本功能。
在保护方式下,当80386的状态标志寄存器里的虚拟方式位VM被置位后,微处理器将工作在虚拟8086(Virtual 8086)模式。虚拟8086模式是80386处理器的第三种工作方式,在此方式下,80386微处理器具有一个虚拟的8086体系结构并执行8086的指令集,段寄存器的功能也和8086相同。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。