页表含有2^20个表项,每项占用4B。如果作为一个表来存放,最多将占用4MB的内存。
为了减少内存占用量,80x86使用了两级表。
由此,高20位线性地址到物理地址的转换也被分成两步来进行,每步使用(转换)其中的10bit;
第一级表称为页目录,page directory。它被存放在1页4K页面中,具有2^10(1K)个4B长度的表项。这些表项指向对应的二级表。
线性地址的最高10位(位31-22)用作一级表(页目录)中的索引值来选择2^10个二级表之一。
第二级表称为页表,page table,它的长度也是1个页面,最多含有1K个4B的表项。每个4B表项含有相关页面的20位物理基地址。二级页表使用线性地址中间10位(位21-12)作为表项索引值,以获取含有页面20位物理基地址的表项。该20位页面物理基地址和线性地址中的低12位(页内偏移)组合在一起就得到了分页转换过程的输出值,即对应的最终物理地址。
CR3寄存器指定页目录表的基地址。
Linux内核完全剖析,p102
就是第一级是页目录,第二级是页表。第一级中的表项用于在第二级中找一个表项;第二级中的每个表项含有一个20位物理基地址。
这是指的分段已经实现了,之后的分页操作;