上一篇我们通过实验讲解了10-10-12分页的基本情况。这一篇将更细致讲解10-10-12分页的硬件基础以及理论知识。
除了CR3寄存器指向的是真实的物理地址外,我们所能看见的都是线性地址。下面我们认识一些新的名词:
在这个图示中,CR3寄存器指向的是一个页,我们也称为页目录表(PDT)。这个页的大小在winodws操作系统中,分页的粒度一般是4KB,当然还有一种大页(4MB)我们暂时不讨论。这个页的大小是4096个字节,每一个成员都是4字节大小的地址,那么这个页能存1024个地址。这个页目录表里每一个成员我们又称为页目录表项(PDE)。而里面的每一个成员又指向一个页表(PTT),一个页表大小也是4KB,页表的每个成员也是占有4个字节的地址,我们称为页表项(PTE),PTE所指向的地址才是真正的物理地址。
那么为什么是10-10-12分页呢,我们从图示的后面看起,一个物理页是4KB大小,计算机寻址的最小单位是字节,所以需要用大小来存储地址以此来找全这个物理页。而页表和页目录表的每一个成员都占用4字节,也就是总共有1024个成员,所以我们想找全1024个成员需要
的大小来存储。10-10-12分页就是这么由来的。
在intel手册文档中记载着32位分页机制:
逻辑处理器使用32位分页(32-bit paging)当且仅当CR0.PG = 1且CR4.PAE = 0。32位分页将32位线性地址翻译为40位物理地址。虽然40位可以表示1 TB,但线性地址仅限于32位,因此每次最多只能访问4 GB的线性地址空间。
32位分页使用分层的分页结构来为线性地址进行翻译。CR3用于定位第一个分页结构,即页目录。表4-3说明了CR3在32位分页中的使用方式。
32位分页可以将线性地址映射到4 KB页面或4 MB页面。图4-2说明了使用4 KB页面时的翻译过程。
有了之前的基础我们看这个图应该清晰明了。