实模式和保护模式

1.实模式:  

   80386 处理器在实模式下的存储器寻址方式和8086 基本一致,由段寄存器的内容乘以 16 作为基地址,加上段内的偏移地址形成最终的物理地址,这时候它的 32 位地址线只使用了低 20 位,即可访问 1MB 的物理地址空间。在实模式下,80386 处理器不能对内存进行分页机制的管理,所以指令寻址的地址就是内存中实际的物理地址。

   Intel 早期的 8086 CPU 提供了 20 根地址线,可寻址空间范围即 0~2^20(00000H~FFFFFH)的 1MB 内存空间。但 8086 的数据处理位为 16 位,无法直接寻址 1MB 内存空间,所以 8086提供了段地址加偏移地址的地址转换机制,就是我们常见的‖段地址(16 位):偏移地址(16 位或有效地址)‖,实际的计算方法为:‖段地址*0x10H+偏移地址‖

2.保护模式

   寻址高达 4G 字节的线性地址空间和物理地址空间,可访问 64TB(有 2^14 个段,每个段最大空间为 2^32 字节)的虚拟地址空间,可采用分段存储管理机制和分页存储管理机制。

3.分段模式

   当 CPU 执行一条访存指令时(一个具体的指令),基于分段模式的具体硬件操作过程如下:

1. 根据指令的内容确定应该使用的段寄存器,比如取内存指令的内存地址所对应的数据段寄存器为 DS;

2. 根据段寄存器 DS 的值作为选择子,以此选择子值为索引,在段描述符表(可理解为一个大数组)找到索引指向的段描述符(可理解为数组中的元素);

3. 在段描述符中取出基地址域(段的起始地址)和地址范围域(段的长度)的值;

4. 将指令内容确定的地址偏移,与地址范围域的值比较,确保地址偏移小于地址范围,这样是为了确保地址范围不会跨出段的范围;(第一层保护)

5. 根据指令的性质(当前指令的 CS 值的低两位)确定当前指令的特权级,需要高于当前指令访问的数据段的特权级;(第二层保护);

6. 根据指令的性质(指令是做读还是写操作),需要当前指令访问的数据段可读或可写;(第三层保护)

7. 将 DS 指向的段描述符中基地址域的值加上指令内容中指定的访存地址段内偏移值,形成实际的物理地址(实现地址转换),发到数据地址总线上,到物理内存中寻址,并取回该地址对应的数据内容。

4.全局描述符表

  全局描述符表的是一个保存多个段描述符的“数组”,其起始地址保存在全局描述符表寄存器 GDTR 中。GDTR 长 48 位,其中高 32 位为基地址,低 16 位为段界限。


全局描述符表寄存器 (Global Descriptor Table Register,GDTR):指向全局段描述符表 GDT

局部描述符表寄存器 (Local Descriptor Table Register,LDTR):指向局部段描述符表LDT

中断门描述符表寄存器 (Interrupt Descriptor Table Register, IDTR):指向一张包含中断处理子程序入口点的表(IDT)

任务寄存器 (Task Register,TR):这个寄存器指向当前任务信息存放处,这些信息是处理器进行任务切换所需要的。

你可能感兴趣的:(实模式和保护模式)