《操作系统真象还原》--进入保护模式

实模式

什么是实模式

实模式,又叫实地址模式,实际上,实模式概念是在保护模式推出之后为了区别保护模式之前的8086CPU工作模式才有的,在8086时代CPU工作模式只有一种,自然没有实模式之说。

实模式的“实”体现在程序中用到的地址都是真实的物理地址,“段基址:段内偏移地址”产生的逻辑地址就是物理地址,即程序员可见的地址完全是真实的内存地址。

实模式的缺点

不安全

  1. 没有权限划分,操作系统程序和用户程序属于同一特权级.
  2. 程序中用到的地址都是真实的物理地址,逻辑地址等于物理地址.
  3. 程序可以自由修改段地址,也就是可以访问所有内存地址.

 

全局描述符表

全局描述符表示全局的,共用的,多个程序都可以在这个表定义自己的段描述符。我们进入保护模式的其中一个步骤之一就是加载全局描述符表,让CPU知道全局描述符表的位置,在操作内存的时候,CPU就会根据描述符的信息检查这操作是否有效。

全局描述符表位于内存中,由GDTR寄存器指向全局描述符表的内存地址。GDTR寄存器大小为48位,初始化GDTR的指令为:lgdt 48位数值。

这48位数值的后32位表示GDT的起始地址,前16位表示GDT的大小,单位为字节,即2的16次方,大小为65536字节;每个描述符大小为8字节,所以GDT最多容纳65536/8=8192个段。

选择子

段寄存器中存入的是选择子(selector),段寄存器是16位,所以选择子也是16位。

保护模式下,使用选择子获取段描述符,从段描述符中取出段基址。

 

进入保护模式

A20地址线

在实模式下,A20地址线是默认禁用的,原因是还未进入保护模式之前,地址总线还是要模拟20位的效果,即只保留20位以内的地址,如果地址超过20位,地址就会回绕到0,将地址20位(从0开始算)舍弃,所以要将A20地址线给禁用掉。但进入保护模式后,我们需要恢复地址总线的原貌,即使地址超过20位,地址也不应该回绕到0,所以此时将A20地址线打开,我们就能访问超过20位的地址了。因此,打开A20地址线,是进入保护模式的步骤之一。

CR0的PE位

  进入保护模式的最后一个步骤是,打开CR0的PE位,CR0是控制寄存器。控制寄存器是CPU的窗口,它既可以展示CPU的内部状态,也可以控制CPU的运行机制。CR0的第0位,PE位,就是保护模式的开关,我们打开PE位,就是告诉CPU接下来我们要进入保护模式。

进入保护模式

  由上面可以知道,进入保护模式的步骤如下:

  ① 打开A20地址线

  ② 加载GDT

  ③ 将CR0的PE位置为1

 

保护模式之内存段的保护

保护模式的保护二字体现在哪?

事实上,当使用一个内存段时,实际上就是往段寄存器中加载一个选择子,为了出现非法引用的情况,处理器会做出如下检查。

根据选择子的值验证段描述符是否超越界限。(数组index是否越界)。

偏移地址+数据长度-1 <= 实际段界限大小。

posted @ 2023-01-12 15:16  stu--wy  阅读(127)  评论(0)    收藏  举报