李庚睿的毕业论文(保护模式) - 图文 下载本文

标题 作者 说明 毕业论文 李超 ?所有版权作者保留 题目 时间 页数 80386保护模式与Linux内核引导分析 2005-4-1 共91页 路漫漫其修远兮,吾将上下而求所。

段保护

段描述符

段描述符提供处理器从逻辑地址到物理地址转换时使用的数据。描述符只能由编译器、连接器、装载器或操作系统来创建,而不能由应用程序创建。 它由三部分组成分别是,基地址、段界限及段属性。这一点我在上一章已作了介绍。这里需要特别说明的是P位:

·P位:段存在位。如果该位为0,表示此描述符为无效。当选择子想导入这个描述符到段寄存器时,处理器产生异常。特别有意思的是,操作系统正好可以使用这个标志位来实现虚拟内存,正如我上面一节所讲,段交换正是处理器通过对P位的检查来实现交换的。P在以下两种情况下会置0:

1. 映射的线性地址空间超出了段界限的范围时,P位会被置0。 2. 当段不在物理内存而处于虚拟内存时,该位会被置0。

说明:创建和维护描述符是由操作系统完成的,而不能由应用程序对其操作。通常编译器、汇编器、装载程序会辅助操作系统来完成这项工作。

描述符表

GDT与LDT在内存中的示意图:

第49页

标题 作者 说明 毕业论文 李超 ?所有版权作者保留 题目 时间 页数 80386保护模式与Linux内核引导分析 2005-4-1 共91页 路漫漫其修远兮,吾将上下而求所。

386系统中一共有三种描述符表:GDT、LDT与IDT。IDT我将在中断一章中

进行详细介绍。下面我只针对前两种描述符表进行介绍。描述符表只是简单的在内存中开辟一段连续空间。表中的每一项是一个描述符入口地址,描述

13

符由8个字节组成。描述符表的长度是可变的,但最大只能有8K(2) 个表项。这些信息我已在上面做了介绍。需要特别说明一点,GDT表中的第一项被INTEL用于其它用途,不能再被使用(包括操作系统在内),否则处理器会发出异常警告。

那么GDT中的第一项到底做什么用呢。INTEL是这样解释的,可以将当前任务中不使用的段寄存器如GS,ES,FS等指向这个描述符。当用户使用这些不应该使用的段寄存器(如得到GS所指向的段)时(这显然不是一个正确的操作),处理器就会发出警报。告诉用户使用了不该使用的段寄存器。反之,如果系统软件没有将GS等未使用的段寄存器指向GDT中的第一项,而是随便指向了一个位置,那么如果用户误使用了GS所指向的地址,其后果将是非常严重的。

第50页