求教一个 GDT 和 LDT 关系的问题

Q3277631 2012-04-23 06:51:21
假如用a:b这个逻辑地址,

当T1=1时,LDTR就可以当成段选择符,先由GDTR找到GDT表,

然后加上LDTR的偏移值,找到LDT描述符,再由里面的基值加上a的偏移值(即LDT段基址+a段选择符),

最后找到LDT中的局部段描述符,加上b的偏移值来得到最终的线性地址呢?


=3=抱歉,有点绕,,但这就是我现在所能了解的,,,求救高人,,没积分了,,,
...全文
140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
moon_cat 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

很简单了,线性地址的高十位<< 2是页目录索引,加上cr3就是gdt 了,21_12位再取出的便为页面地址,低位是偏移
[/Quote]

晕。GDT怎么就成了这个了,兄台你搞错了木有?你知道GDT是什么么?
moon_cat 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

Linux内核木有使用LDT
[/Quote]

别乱讲好吧,linux 0.11内核每个进程3个LDT,LDT[0] 为空,LDT[1]是CODE,LDT[2]是DATA
hyx365593317 2012-04-26
  • 打赏
  • 举报
回复
很简单了,线性地址的高十位<< 2是页目录索引,加上cr3就是gdt 了,21_12位再取出的便为页面地址,低位是偏移
拓跋野 2012-04-26
  • 打赏
  • 举报
回复
Linux内核木有使用LDT
moon_cat 2012-04-25
  • 打赏
  • 举报
回复
形象的比喻是这么的,GDT是内核的‘GDT’,LDT是进程的‘GDT’,但是LDT的入口在GDT登记,LLDT时,要是是LDT,那么先去GDT找到LDT(s)的索引,然后顺着索引,找到LDT实体,然后就加载啦....,你滴明白的干活?
w456201 2012-04-23
  • 打赏
  • 举报
回复
GDT中应该是LDT的段描述符吧,是用a段选择符+GDTR找到的吧,但这样LDTR什么时候用呢=3=我也有点纠结了,,,
Q3277631 2012-04-23
  • 打赏
  • 举报
回复
是不是LDT也要先寻找GDT

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧