-
[操作系统实习日记]关于GDT的理解! - [零零碎碎]
2009-03-19
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://kerochan.blogbus.com/logs/36749327.html
GDT我从lab1开始疑惑,现在总算比较明朗了。
内存里有个GDT,就是GD数组。每个GD长64位。GD可以是段描述符,格式见http://os.pku.edu.cn:8080/gaikuang/files/09ospro/readings/i386/s05_01.htm的5.3图,JOS在mmu.h中定义了Segdesc。
GDTR(寄存器)存放了GDT在内存中的(物理)地址,GDTR是48位的,其中32位存放地址,16位是段限(尚未明白是干什么的)。GDTR在内核启动过程中由一条lgdtr指令赋值。
GDT不仅存放了段描述符,还存放了LDT基址。
通过段选择子在GDT中选出GD,段选择子16位,其中13位用于寻址,1位用于表明在GDT中还是在LDT中寻找,还有2位权限位。
另外类似有LDT和LDTR。任务切换时,GDTR是不变的,而LDTR会变,在切换任务时由段选择子存放在LDTR中,在GDT中找到该LDT的地址,并且赋值给一个隐藏的寄存器。即是说,GDTR和LDTR的结构是不一样的,GDTR存放了GDT地址,而LDTR只需要存放一个在GDT中的偏移量,实际的LDT地址是放在一个隐藏寄存器里的。
还真是有点小复杂,其实还没完全弄透彻。
收藏到:Del.icio.us








评论
陈XQ太发指了,把操统实习提到了这学期,本来我们就这么忙....
这周lab1就要截止了,赶报告ing~~