页表项是什么

职业培训 培训职业 2025-01-04
以x86的机器为例,当允许paging的时候:页表分了两级,32位地址被划分为10,10,12CR3寄存器装了第一级页表(也叫页目录)的物理地址,这个地址一定是对齐到一个页框的边界的。这个对应的页框将装着第一级页目录,也就是说,页目录用掉了4KB,其中含有1024个页目录项,每个项占

以x86的机器为例,当允许paging的时候:

页表分了两级,32位地址被划分为10,10,12

CR3寄存器装了第一级页表(也叫页目录)的物理地址,这个地址一定是对齐到一个页框的边界的。这个对应的页框将装着第一级页目录,也就是说,页目录用掉了4KB,其中含有1024个页目录项,每个项占4Byte。这每个4byte就是你所要问的东西了。每个项有20位是下一级的一个页表的位置(为什么是20位呢?因为intel设计的页表是对其到4KB的边界的,于是只要20位地址,再左移12位就得到了这个地址)。而另外的12位用于存放一些控制位,常见的有present,user, dirty, accessed,r/w等,具体的查intel的开发者手册,上面讲的很详细。页表项和页目录项内容差不多,稍有区别。

为了定位一个虚拟地址(在x86里应该是分段后的地址,叫线性地址),先拆出前10位,配合CR3找到相应的页目录项,然后得到了对应页表的地址,在没有错误的情况下再把线性地址的中间10位拿出来找到相应的页表项,然后就读出了20位(还没左移12位,页框肯定是对齐到4KB的边界的)的这个线性地址对应的页框,再加上12位就得到了物理地址。其他还有什么不明白的建议看一下相关的更深入的书籍,比如understanding the linux kernel之类的,讲的还是比较细致的。

标签

版权声明:本文由哟品培原创或收集发布,如需转载请注明出处。

本文链接:http://www.yopinpei.com/20250104/2/1180868

猜你喜欢
其他标签