GDTR和GDT
GDT和GDTR关系
GDT是global descriptor table,全局描述符表,它是描述符组成的一张描述符表。描述符就是段描述符它用来描述一个段的信息,由8个字节组成(64bit),其中信息包括了段地址和偏移地址界限等,特权级等一些信息。
GDTR中的r是register,表示的是用来存储GDT位置的寄存器,叫做全局描述符表寄存器。GDTR内部有48位,分为32位的线性地址和16位的边界。
IA-32中地址线是32位宽,所以最大内存4GB。GDT一定是存储在内存里的,通过GDTR就可以找到GDT。那GDTR可以指向多少个GDT呢?我们来算一算,GDTR的偏移地址是16位最大寻址能力是2^16 B,而一个GDT是占用8B=2^3 B,所以最大可以存储2^13(8192)个GDT。
两者的关系我理解是这样的:把GDTR理解为指针,GDT理解为指针指向的内存,要访问GDT就要通过GDTR,因为GDT是有标号的,所以要访问某个GDT只需从GDTR中获得基地址+标号*8即可。
关于图中为什么GDT画在底端的1M内存,因为GDT是保护模式下的机制,但是需要在进入保护模式之前就完成对GDT的初始化即在实模式下,众所周知实模式下只能访问1M内存,所以才有了途中的画法。