保护模式与分段模式

简介

为什么要有保护模式?

  • Intel 80386 只有在保护模式下,才可以提供更好的保护机制和更大的寻址空间;
  • 没有保护机制,任何应用软件都可以任意地访问所有计算机资源;
  • 许多操作系统功能(比如分页)都是建立在保护模式上设计的;

实模式

bootloader 在 BIOS 之后开始运行时,PC 处于 16 位实模式运行状态。

它主要有以下特点:

  • 实模式下,上层软件可以访问的物理内存空间不超过 1MB

  • 实模式将整个物理内存看成分段的区域,每一个指针都是指向实际的物理内存。

  • 通过修改 A20 地址线可以完成从实模式到保护模式的切换。

保护模式

概念

GDT 与 LDT:

  • 保护模式下,有两个段表:GDT(Global Descriptor Table)和 LDT(Local Descriptor Table)

段描述符:GDT 表的内容;

  • 为了兼容各个不同版本的 CPU,它的形式比较复杂;
  • 它最重要的字段是 segment basesegment limit
  • 也称之为段,此处的段与 ELF 源程序中的 .text.data 等概念中的段,是相同的。

段选择子:16 bits,GDT 表的索引;

  • [0:2] 是表格的优先级 (00 最高,11 最低),[2:3] 是表格的类型 (0 为 GDT),[3:16] 是 GDT 的索引;

介绍

保护模式有以下特点:

  • 80386 的 32 根地址线全部有效;
  • 上层软件可以寻址高达 4G 字节的地址空间,可访问 64TB 的逻辑地址空间;
  • 采用了分段存储管理机制 和 分页存储管理机制。

分段存储管理机,逻辑地址(由段选择子 selector 与段偏移 offset 组成)到物理地址转换会通过以下的两个步骤:

  1. 第一步是从逻辑地址得到一个线性地址:

    1
    
    线性地址 = 段描述符表[段选择子[15:3] ] + 段偏移
    
  2. 如果未开启分页地址转换,则线性地址即为物理地址;否则需要由操作系统进一步处理。