操作系统开发--GDT(全局描述符表)详解
我们知道CPU存在实模式和保护模式的操作模式。当计算机启动后,我们进入的是实模式,而实模式的内存寻址方式是通过:段值 × 16 + 偏移 = 物理地址。这样只能具有1MB的寻址能力。如果想要更为强大的寻址能力,就必须通过一定机制,进入具有更强大寻址能力的保护模式。
在保护模式下,不光提供了强大的寻址能力,还提供了内存保护,能够防止用户程序改写内核代码,并为操作系统提供了更好的硬件保障。在该模式下,有了32位的寄存器,一个寄存器就可以表示4G的地址空间,那段值加偏移这样的寻址方式是不是就不用了呢?当然不会。在这里,而是用了另外的方式来表示。
采用的方式就是引入了数据结构GDT,即全局描述符表,不知道有多少人听过?说简单点,GDT就是一个数组,每一个元素就是一个描述符,多个组合一起就构成了全局描述符表。而每一个描述符共64位,包含了以下的这些信息:段基址、段长度、属性。原来的段寄存器,比如CS,DS等存的值则不是段偏移了,而是GDT的索引,通过该索引就可以找到对应的描述符。现在是不是明白了呢?接下来我们再详细的解释一下一个描述符中各个位的意义吧。
上面说过,段寄存器中保存的是索引,那么段寄存器中的数据又是什么样呢?
好了,这下是不是明白了呢?看完这些,原来GDT的概念是这么的简单。
如果此篇文章对您有所帮助,请多多支持哦!您的支持是我一直写下去的动力!