0%

[CSAPP]汇编篇 1.分段机制与GDT|LDT

分段机制#

在32位系统中, 每个进程都认为拥有了2^32 的内存空间。其实这是一种假象,实际上操作系统内核一般占据2GB,剩余的2GB由用户空间的进程共享。其实,操作系统有种 保护方式,就是,使程序能拥有独立的内存空间,又认为占据了4GB空间。 段的特征有以下三个:段基址(base,长度32位),段限长(单位为2^12即4k,长度为20位),段属性(访问属性,12位)。 这三个特征存储在段描述符(segmentdescriptor)之中。

全局描述符表GDT#

在整个系统中,全局描述符表GDT只有一张(一个cpu对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址在哪。Intel的设计者提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令GDT的入口地址装入此寄存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。GDTR中存放的是GDT在内存中的基地址和其表长界限

指令LGDT和SGDT分别用于加载和保存GDTR寄存器的内容。

段选择子#

由GDTR访问全局描述符表是通过“段选择子”(实模式下的段寄存器)来完成的。段选择子是一个16位的寄存器(同实模式下的段寄存器相同)

NEED TO DO LATER#