在这篇文章我们将要做:
- 介绍选择子
- 实现一个选择子结构
选择子是什么?
在上篇文章中我们介绍了段描述符以及段描述符表,这篇文章我们复习一下段、段描述符、段描述符表的功能,并且介绍一下段选择子以及段描述符表。
段(Segment):在80X86中,我们知道分段机制将内存空间分为了多个线性区域,我们把这些线性区域称为段。由于我们要将这些段区分开来,于是我们对段赋予3个属性。他们分别是段基址(Base)、段界限(Limit)、段属性(Attribute),段基址表示了一个段在线性空间中的开始地址,段界限表示段内最大偏移量,也就是说,它定义了段的大小,段属性描述了段的一些特性,包括可读可写可执行、特权级等。
段描述符(Descriptor):在程序中我们需要定义一个数据结构来表示段,包括段基址(Base)、段界限(Limit)、段属性(Attribute)这3个属性,这个数据结构叫做 段描述符(Descriptor)。段是一个逻辑概念,段描述符是对应的数据结构。
段描述符表(Descriptor Table):在一个程序中,不仅仅是只有一个段(段描述符),我们需要一种方法将它们组织起来,也就是说需要一个数组来保存它们,这个结构就是段描述符表。段描述符表分为两种,一种是全局描述符表(GDT),一种是局部描述符表(LDT),系统中供所有任务使用的是全局描述符表,每个任务使用的是它自