《操作系统真象还原》--进入保护模式
实模式
什么是实模式
实模式,又叫实地址模式,实际上,实模式概念是在保护模式推出之后为了区别保护模式之前的8086CPU工作模式才有的,在8086时代CPU工作模式只有一种,自然没有实模式之说。
实模式的“实”体现在程序中用到的地址都是真实的物理地址,“段基址:段内偏移地址”产生的逻辑地址就是物理地址,即程序员可见的地址完全是真实的内存地址。
实模式的缺点
不安全
- 没有权限划分,操作系统程序和用户程序属于同一特权级.
- 程序中用到的地址都是真实的物理地址,逻辑地址等于物理地址.
- 程序可以自由修改段地址,也就是可以访问所有内存地址.
全局描述符表
全局描述符表示全局的,共用的,多个程序都可以在这个表定义自己的段描述符。我们进入保护模式的其中一个步骤之一就是加载全局描述符表,让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 <= 实际段界限大小。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号