免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2119 | 回复: 2
打印 上一主题 下一主题

影子描述项 不理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-12 17:25 |只看该作者 |倒序浏览
(1)80386的段式内存管理机制
首先,在 80386CPU中增设了两个寄存器:一个是全局性的段描述表寄存器GDTR,另一个是局部性的段描述表寄存器LDTR,分别可以用来执行存储在内存中的一个段描述结构数组,或者称为段描述表。访问这两个寄存器的专用指令设计成“特权指令”
在此基础上,段寄存器的高13位用作访问段描述表中具体描述结构的下标。GDTR或LDTR中的段描述表指针和段寄存器中给出的下标结合在一起,才决定了具体的段表述表项在内存中的什么地方。每个段描述表项的大小是8个字节,每个描述表项含有段的基地址和段的大小,再加上其他一些信息
每当一个寄存器的内容发生改变时,CPU就把由这段寄存器的新内容所决定的段描述项装入CPU内部的一个影子描述项。这样,CPU中有几个段寄存器就有几个影子描述项,所以也可以看作是对段寄存器的扩充。扩充后的段寄存器分成两部分,一部分是可见的(对程序而言),还与原先的段寄存器一样;另一部分是不可见的,就是用来存放影子描述项的空间,这一部分是专供CPU内部使用的

请问此处指的影子描述项具体是什么呢,是tss段吗?

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
2 [报告]
发表于 2010-04-12 20:11 |只看该作者
回复 1# tianhailong


LZ可以看一下ULK3的2.2.3. Fast Access to Segment Descriptors
这里所谓的影子描述项是段描述符的一个影子,只不过这个影子存放的位置系统程序员是不能访问的
这里的影子只是为了缩短对段描述符表的访问时间
你的段寄存器存了哪个选择符,就将对应的描述符存放到影子描述项里,这样再访问段内的某个位置
时可以直接使用影子的内容来确定段的基址、访问权限等,就不需要先寻址到段描述符表中的段描述符
然后再读取这个描述符,之后再进行访问的解析了。省去了这个寻址的过程

这个与tss没有关系

论坛徽章:
0
3 [报告]
发表于 2010-04-13 11:10 |只看该作者
回复  tianhailong


LZ可以看一下ULK3的2.2.3. Fast Access to Segment Descriptors
这里所谓的影子 ...
openspace 发表于 2010-04-12 20:11



    谢谢,明白了,意思是说,把段寄存器指向的描述符装入cpu的影子描述符中(可以理解为一些寄存器吧 ?), 这样在访问内存是,就不需要每次都从段描述符中读取地址,从cpu内部就可以获得地址,加快访问效率,是这样吗?

    还有几个基础问题请教一下,cpu换到另一个代码段时,从段描述符获得基地址,然后从这个基地址+eip的位移,获得第一条指令地址?
    在以后的执行中,根据eip内容执行,那么eip的位移是相对于段的基地址,还是相对于cpu的当前位置?
    如果相对于段基地址,比如说eip=2000时,获得下一条指令地址,要这样做,段基址+2000,这样每执行一条指令,都需要访问影子描述项一次?

    基础不扎实,请教了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP