Re: 有个问题请教下
《软件调试》勘误和意见
有个问题请教下
jackywei
2010-07-26, 20:04 下午
61页开始,“取线性地址的高10位得到PDE在页目录中的索引,即94a/4",这里除以4做何理解?
是因为94a是高12位,所以做移位运算(向右移动2位,即/4)得到高10位?
还是因为其他原因?
Re: 有个问题请教下
格蠹老雷
2010-07-27, 12:33 下午
是<font color=yellow>因为每个页目录项(PDE)是4个字节大小,除以4得到的是对应表项在页目录表中的表项序号</font>。[此回答不当,见下面的帖子,是右移2位,取高10位]
Re: 有个问题请教下
jackywei
2010-07-27, 13:18 下午
Raymond,我觉得你的答复是错误的。
问题的关键是:究竟是取高10,还是高12位;以及这个地方存的是索引项序号还是实际偏移值。
我估计你是把94a当做了实际的偏移值.但这样是不对的。
首先是94a是高12位,而不是按规则高10位,所以直接取94a来操作是不对的。
第二,94a对应得二进制是100101001010b,高10位是1001010010b,也就是0x252,这个就代表了序号,后面的*4得到了实际的偏移值。
你这里/4得到正确的值只不过是凑巧,只是因为94a是12位,右移2位(相当于除以4)正好得到高10位。
为表述清楚,这里不应该用94a/4这样的说法,而应该改成和你在描述4K页那里一样:由于0x94a0d678的高10位是100101001010b,也就是0x252就可以得到索引,再*4就得到了偏移值。
Re: 有个问题请教下
格蠹老雷
2010-07-28, 14:22 下午
赫赫,除以4永远是右移两位,不是凑巧,不过我在二楼的解释的确不对,低估了这个问题......
Re: 有个问题请教下
jackywei
2010-07-28, 15:07 下午
那这里/4是应该按我的解释,是为了取94a的高10位吧?
Re: 有个问题请教下
格蠹老雷
2010-07-28, 15:10 下午
对的,你说的很对