实模式
实模式
实模式是针对80286或更高版本微处理器的一种操作系统模式。
基本概念
寻址方式
在实模式下,寻址采用的是32位段和偏移量的方式,最大寻址空间可达4GB,最大分段容量为4GB(Pentium Pro及以后版本为64GB)。在这种模式下,CPU能够进入虚拟8086方式,这是一种在保护模式下的实模式程序运行环境。
程序运行原理
实模式下程序的运行主要依赖于CPU执行指令以及处理相关的数据。CPU通过CS寄存器和IP寄存器来定位指令在内存中的位置。此外,程序通常需要访问不同类型的数据段,这些数据段的位置由DS、ES、FS、GS、SS等寄存器指示。程序也可能需要调用系统服务子程序,这种情况下,80x86系列处理器使用中断机制来实现系统服务。
保护模式
地址转换方式
在保护模式下,地址转换方式发生了显著的变化。相对于实模式中的“左移4位加偏移”方法,保护模式采用了查询全局描述符表(GDT)或局部描述符表(LDT)的方式来获取段基址。尽管这两种方式表面上看起来不同,但实际上它们都是对“shadow register”的映射,只不过实模式中的映射方式是固定的,而保护模式中的映射方式则是用户自定义的。
数据段
在保护模式下,原有的代码段、数据段、堆栈段、中断服务程序等依然存在,统称为“数据段”。这些数据段通过描述符来进行描述,描述符集成了在一个名为描述符表的数据段中。
描述符
描述符是用来描述各种数据段的8字节数组。根据描述符的类型,其结构也会有所不同。多个描述符组成的集合构成了描述符表,而描述符表本身也是一个数据段,也需要使用描述符进行描述。
选择子
选择子是一个2字节的数字,包含16位信息。其中,最低两位表示RPL,第三位表示是使用GDT还是LDT进行查找,其余13位则给出了所需描述符在描述符表中的地址。
描述符表
描述符表负责完成地址转换的工作,相当于一张地址转换函数表。
GDTR和LDTR
为了指示GDT和LDT在内存中的位置,80x86系列处理器新增了GDTR和LDTR这两个寄存器。GDTR是一个48位的寄存器,用来存储GDT在内存中的段地址和段限。LDTR则用于指示LDT在内存中的位置,但它本身也是一个数据段,因此它的描述符必须位于GDT中。
中断描述符表
对于中断服务,80x86系列处理器提供了中断/陷阱描述符,并构建了一个中断描述符表(IDT)。IDT表的最大项数为256,由于80x86仅支持256个中断,因此IDT的实际最大项数为256。
多任务支持
任务切换
在保护模式下,80286及其后续型号实现了对多任务的硬件支持。任务切换的本质是程序的切换,这意味着需要保存程序运行的环境。为此,引入了任务状态段(TSS)数据段,用于存储任务的环境信息。TSS数据段也有对应的描述符,放置在GDT中。TR寄存器作为一个选择子,用于检索TSS数据段的信息。
分页机制
为了有效地支持多任务,防止不同任务之间的地址冲突,引入了分页机制。分页机制实现了程序内部地址到物理地址的映射,从而确保了不同任务之间的隔离。80x86系列处理器采用了两级页表方案,并添加了CR3寄存器,用于存储页目录在内存中的地址。CR3作为任务环境的一部分,在任务切换时会被保存到TSS数据段中。
保护模式扩展
保护模式除了增加新的寄存器和数据段外,还引入了一些新的机制,如权限检测和线性地址到物理地址的映射。这些机制使得保护模式能够在多任务环境下更加安全高效地运行。
术语解释
在保护模式中,出现了许多新的术语,如RPL、CPL、EPL、DPL、PL、任务特权、I/O特权、一致代码段等。这些术语反映了保护模式中新加入的权限级别和访问限制的概念。
参考资料
3.2.CPU中的实模式.CSDN博客.2024-11-02
保护模式概述 原创.CSDN博客.2024-11-02
目录
概述
基本概念
寻址方式
程序运行原理
保护模式
地址转换方式
数据段
描述符
选择子
描述符表
GDTR和LDTR
中断描述符表
多任务支持
任务切换
分页机制
保护模式扩展
术语解释
参考资料