一、回顾
在前面的课程学习中我们了解到,段寄存器有96位,其中80位不可见,包括Base,limit,attribute。16位可见,即段选择子selector。
对段寄存器进行写入时,CPU根据段选择子到GDT表中寻找段描述符,段描述符共8字节,64位,CPU根据段描述符填充段寄存器。
那么问题就是,如何用64位的段描述符来填充80位的段寄存器呢?为了解决该问题,我们需要学习段描述符的P,G位。
段描述符结构
段寄存器结构
二、P位
这个位比较简单,当P=1时,段描述符有效;当P=0时,段描述符无效。
三、G位
由于Intel考虑向前兼容,我们会发现段描述符的结构比较混乱,东一块西一块的。Attribute在段描述符高4字节的8-23位,Base在段描述符的低4字节的16-31位,高4字节的0-7位和24-31位。上述两个属性没有数据丢失,段寄存器和段描述符内的位数是一样多的。而Limit在段寄存器内占32位,在段描述符内只有20位。