80X86保护运行模式
时间:2007-02-06 来源:zw_ren
1、80X86保护运行模式
80X86芯片上的内存管理包括地址转换寄存器、高级多任务硬件、保护机制以及分页虚拟内存机制。
1.1 系统寄存器
用于系统编程的系统寄存器主要包括以下几类:
标专寄存器EFLAGS
内存管理寄存器
控制寄存器
调试寄存器
测试寄存器
系统标志寄存器EFLAGS控制着I/O、可屏蔽中断、调试、任务切换以及保护模式和多任务环境下虚拟8086程序的执行。
内存管理寄存器有4个,用于分段内存管理:
GDTR - 全局描述符表寄存器
LDTR - 局部描述符表寄存器
IDTR - 中断描述符表寄存器
TR - 任务寄存器
其中前两个寄存器GDTR,LDTR分别指向段描述符表GDT和LDT。IDTR寄存器指向中断向量表。TR寄存器指向处理器所需的当前任务的信息。
80386共有4个控制寄存器,分别是CR0、CR1、CR2、CR3。
控制寄存器CR0含有系统整体的控制标志。其中:
PE - 保护模式开启位,如果设置了该比特位,就会使处理器开始在保护模式下运行
MP - 协处理器存在标志,用于控制WAIT指令的功能,以配合协处理器的执行。
EM - 仿真控制,指示是否需要仿真协处理器的功能。
TS - 任务切换,每当任务切换时处理器就会设置该比特位,并且在解释协处理器指
令之前测试该位。
ET - 扩展类型,该位指出了系统中所含有的协处理器类型。
PG - 分页操作,该位指示出是否使用页表将线性地址变换成物理地址。
1.2 内存管理
内存管理主要涉及处理器的内存寻址机制。80x86使用两步将一个分段形式的逻辑地址转换为实际物理内存地址。
段变换,将一个由段选择符和段内偏移构成的逻辑地址转换为一个线性地址;
页变换,将线性地址转换为对应的物理地址,该步是可选的。
1.3 段变换
1.4 段描述符
段描述符向CPU提供了将逻辑地址映射为线性地址所必要的信息。描述符是由程序编译器、链接器、加载器或操作系统创建的。
基地址:定义段在4GB线性空间中的位置。处理器会将基地址的三个部分组合成一个32位的值。
段限长:定义了段的最大长度。处理器将组合段限长的两个部分形成一个20位的值。处理器会根据颗粒度位字段的值解释段限长域的实际含义:
1 当以1字符为单元时,则定义了最高可为1MB字节的长度;
2 当以4KB字节为单元时,则定义了最高可为4GB字节的长度
颗粒度:指定了限长字段值代表的单元含义。当为0时,限长单元值为1字节;当该位为1时,限长单元值为4KB字节。
类型:用于区分各种不同类型的描述符。
描述符特权级DPL:用于保护机制。
段存在位:如果该位是零,则该描述符无效,不能用于地址变换过程。
访问位:该处理器访问过该段时,就会设置该比特位。
1.5 描述符表
段描述符中保存在描述符表中的,有两类描述符表:
全局描述符表GDT
局部描述符表LDT
描述符表是由8字节构成的描述符项的内存中的一个数组。描述符表的长度是可变的,最多可含有8192个描述符。但是对于GDT表,其第一个描述符是不用的。
处理器通过使用GDTR和LDTR寄存器来定位GDT表和当前的LDT表。这两个寄存器以线性地址的方式保存了描述符表的基地址和表的长度。指令lgdt和sgdt用于访问GDTR寄存器;指令lldt和sldt用于访问LDTR寄存器。lgdt使用的是内存中一个6字节操作数来加载GDTR寄存器的。头两个字节代表描述符表的长度,后4个字节是描述符表的基地址。然而请注意,访问LDTR寄存器的指令lldt所使用的操作数却是一个2字节的操作数,表示全局描述符表GDT中一个描述符项的选择符。该选择符所对应的GDT表中的描述符项应该对应一个局部描述符表。
80X86芯片上的内存管理包括地址转换寄存器、高级多任务硬件、保护机制以及分页虚拟内存机制。
1.1 系统寄存器
用于系统编程的系统寄存器主要包括以下几类:
标专寄存器EFLAGS
内存管理寄存器
控制寄存器
调试寄存器
测试寄存器
系统标志寄存器EFLAGS控制着I/O、可屏蔽中断、调试、任务切换以及保护模式和多任务环境下虚拟8086程序的执行。
内存管理寄存器有4个,用于分段内存管理:
GDTR - 全局描述符表寄存器
LDTR - 局部描述符表寄存器
IDTR - 中断描述符表寄存器
TR - 任务寄存器
其中前两个寄存器GDTR,LDTR分别指向段描述符表GDT和LDT。IDTR寄存器指向中断向量表。TR寄存器指向处理器所需的当前任务的信息。
80386共有4个控制寄存器,分别是CR0、CR1、CR2、CR3。
控制寄存器CR0含有系统整体的控制标志。其中:
PE - 保护模式开启位,如果设置了该比特位,就会使处理器开始在保护模式下运行
MP - 协处理器存在标志,用于控制WAIT指令的功能,以配合协处理器的执行。
EM - 仿真控制,指示是否需要仿真协处理器的功能。
TS - 任务切换,每当任务切换时处理器就会设置该比特位,并且在解释协处理器指
令之前测试该位。
ET - 扩展类型,该位指出了系统中所含有的协处理器类型。
PG - 分页操作,该位指示出是否使用页表将线性地址变换成物理地址。
1.2 内存管理
内存管理主要涉及处理器的内存寻址机制。80x86使用两步将一个分段形式的逻辑地址转换为实际物理内存地址。
段变换,将一个由段选择符和段内偏移构成的逻辑地址转换为一个线性地址;
页变换,将线性地址转换为对应的物理地址,该步是可选的。
1.3 段变换
1.4 段描述符
段描述符向CPU提供了将逻辑地址映射为线性地址所必要的信息。描述符是由程序编译器、链接器、加载器或操作系统创建的。
基地址:定义段在4GB线性空间中的位置。处理器会将基地址的三个部分组合成一个32位的值。
段限长:定义了段的最大长度。处理器将组合段限长的两个部分形成一个20位的值。处理器会根据颗粒度位字段的值解释段限长域的实际含义:
1 当以1字符为单元时,则定义了最高可为1MB字节的长度;
2 当以4KB字节为单元时,则定义了最高可为4GB字节的长度
颗粒度:指定了限长字段值代表的单元含义。当为0时,限长单元值为1字节;当该位为1时,限长单元值为4KB字节。
类型:用于区分各种不同类型的描述符。
描述符特权级DPL:用于保护机制。
段存在位:如果该位是零,则该描述符无效,不能用于地址变换过程。
访问位:该处理器访问过该段时,就会设置该比特位。
1.5 描述符表
段描述符中保存在描述符表中的,有两类描述符表:
全局描述符表GDT
局部描述符表LDT
描述符表是由8字节构成的描述符项的内存中的一个数组。描述符表的长度是可变的,最多可含有8192个描述符。但是对于GDT表,其第一个描述符是不用的。
处理器通过使用GDTR和LDTR寄存器来定位GDT表和当前的LDT表。这两个寄存器以线性地址的方式保存了描述符表的基地址和表的长度。指令lgdt和sgdt用于访问GDTR寄存器;指令lldt和sldt用于访问LDTR寄存器。lgdt使用的是内存中一个6字节操作数来加载GDTR寄存器的。头两个字节代表描述符表的长度,后4个字节是描述符表的基地址。然而请注意,访问LDTR寄存器的指令lldt所使用的操作数却是一个2字节的操作数,表示全局描述符表GDT中一个描述符项的选择符。该选择符所对应的GDT表中的描述符项应该对应一个局部描述符表。
相关阅读 更多 +