在保护模式下必须使用段寻址,而我们必须先定义完所有段描述符后才能使用段机制。我们把所有段描述符都放在全局描述符表(GDT)中。
段描述符的格式
段描述符有许多属性,见下图。其中有的属性(比如段基址)被分成3部分存放,这是因为80386要兼容过去的CPU(80286已经有保护模式了)。
附上从网上找的图
各个字段的作用
段基址
在分段寻址机制中我们已经知道段基址是什么了:“段基址:偏移量”。
该字段有32位,由于历史原因被分为3部分存放在段描述符表中。还好分3部分存放对性能没有影响,为什么呢?
段界限字段和G字段
用来表示一个段的大小,结合段基址就可以知道段的起始地址和结束地址。“段基址:偏移量”中当偏移量超过段界限时CPU会触发相应的异常。
段界限只有20位,可以表示段的大小:
- 如果G(Granularity)字段为0,表示单位为Byte。段界限可表示1B~1MB的大小
- 如果G字段为1,表示单位为4KB。段界限可表示4KB~4GB的大小