x86体系结构gdt的设定

x86构架有两种内存保护和提供虚拟内存的方法——分段和分页。


通过分段,每一次访问一个内存地址,都会将地址值加上段的基地址,并检查段的长度。
通过分页,地址空间被分成4KB的块,称为页。每个页面都可以映射到称之为页帧的物理内存,这样就可以建立虚拟内存空间。
事实上,分段这种方式将逐渐退出历史舞台。然而,分段概念完全内置于x86构架之中,是无法绕过他构建系统的。

GDT,Global Descriptor Table:

一个段具备以下要素:base address和limit,对一个内存地址的访问,需要指出其使用哪个段,以及相对于这个段base address的offset,此offset应该小于此段的limit;此外在保护模式下,还需要规定段本身的访问权限access。
因此在保护模式下,对一个段的描述包含三方面因素:base address, limit,access,他们加起来被放在一个64bit的数据结构中,被称为段描述符。通常情况下,所有的段描述符被组织放入一个数组之中,这个全局的数组就是GDT。

GDT可以放置在内存的任何位置,当程序通过段寄存器来引用一个段描述符时,CPU必须知道GDT的入口,故GDT设置完成之后需要通过LDGT指定将GDT入口地址装入全局描述符表寄存器(GDTR)。

要引用GDT表中的某个段描述符,可以通过一个16bit的selector,段选择子中的索引号即作为GDT数组的下标,有13位,所以,GDT数组最多有8192个元素。

 现代操作系统中,给代码段和数据段分配不同的段描述符

原文地址:https://www.cnblogs.com/caidi/p/15146645.html