能力值:
( LV2,RANK:10 )
|
-
-
2 楼
[QUOTE=;]...[/QUOTE]
GDTR是48位寄存器,从16位到47位前32位表GDT在内存中的地址,是线性地址,还是需要通过页表转换成物理地址
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
刚才顺便复习了一下GDTR和LDTR,看看是不是有用,不知道有没有错误的地方?
GDTR是一个48位寄存器,指向全局描述符表GDT,从16位到47位前32位表示GDT在内存中的地址,是线性地址,需要通过页表转换成物理地址
LDTR是一个16位寄存器,是在GDT中的索引,指向局部描述符表LDT,每个任务有一个LDT,不同的LDT占用不同的内存段,由不同的系统描述符描述,这些系统描述符放在GDT中.
LDTR里面保存的是索引值,指向LDT在GDT中的位置,只需要修改LDTR寄存器的内容,就可以指向不同的LDT
如果手头上有虚拟地址xxxx:yyyyyyyy
首先从GDTR中取出GDT的基址BA找到GDT
xxxx一共16位,根据倒数第三位即T1位判断
如果T1=0,xxxx的前13位表示的是GDT的位置索引,根据索引得到一个描述符
该描述符含有段的基址与其他各种信息,段的起始地址+yyyyyyyyy就得到线程地址
如果T1=1,那么从LDTR得到LDT的位置索引,在GDT里面找到LDT描述符,LDT描述符里面包含LDT的线性地址
找到LDT,取出xxxx的前13位,在LDT中找到段描述符,该段描述符里面包含段的基址等信息.
而后段的基址加上yyyyyyyy得到线性地址
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
同问。
http://bbs.pediy.com/showthread.php?t=92299
|