+ -
当前位置:首页 → 问答吧 → X86分页找到页表里的 20位的页面指针后,到底怎处理得到物理地址啊?

X86分页找到页表里的 20位的页面指针后,到底怎处理得到物理地址啊?

时间:2010-08-25

来源:互联网

20位的页面指针是某一个物理页面起始地址的高20位,该地址的低12位总为0,保证了该指针总是指向一个4K物理页面的起始位置。

怎理解啊?想不明白。是简单的相加吗?

假如页面指针是 0xFF000  页指针寄存器里的后offset是FFF。
那么得到的物理地址是么什么呢?

作者: zhangsuozhu   发布时间: 2010-08-25

晕。看明白了。20位页面指针可以全为0xFFFFF.这个指针其实就是一个地址的高20位。 而低12位是线性地址的offset字段部分。

可以想象一下,故计在实际访问物理地址时。取一个页表条目。判断完权限后,与掉低12位,然后与offset部分相加.

CPU处理的伪代码如下:
  1. pt_entry= get_pt_entrise(pt);
  2. flag = pt_entry&0xFFF;
  3. if (flag & priv)
  4.       phy_addr = pt_entry&0xFFFFF000 + offset;
复制代码
我个人这么觉的。

作者: zhangsuozhu   发布时间: 2010-08-25