Linux中的分页机制和虚拟机中的EPT机制

来源:互联网 发布:网易足球数据库 编辑:程序博客网 时间:2024/06/06 19:11
分页单元被用来将线性地址转化成物理地址。
32位线性地址被分割为以下三块:
页目录(10位) | 页表(10位) | 偏移量(12位)

页目录的物理地址被存放在控制寄存器cr3中。线性地址中的页目录域决定了页目录中指向正确的页表的那一项的位置,相应的页表域则决定了指向包含物理地址的页框的那一项在页表中的位置。偏移量则决定了在页框中的相对位置。


四级页表:
懒得翻译了。。。直接看图就好再见
线性地址中的第一部分称为“全局页目录”,PGD用于索引进程中的一个数组,这个数组也就是所谓的全局页目录,而这个数组中的项则指向下一级数组的起始地址,这些数组则被成为"上层页目录“及"中间页目录"。

通过PGD中的项找到PUD再找到PMD之后,则用其中的项来索引下一级数组,这一级数组被称为页表或页目录。

下一个部分称为PTE,用作页表的索引。虚拟内存页和页框之间的映射就此完成,因为页表的数组项都是指向页框的。

最后一个部分被称为偏移量,他指向了页内部的一个字节,所以归根结底,每个线性地址都指向内存中的一个字节。


相应的,linux页表相关的变量有以下几个:pte_t, pmd_t, pud_t, pgd_t分别对应Page Table, Page middle directory, Page upper directory, Page global directory.

下图是虚拟地址转换的过程,虚拟地址先转换成线性地址然后再转换成物理地址:


EPT地址转换分析:


0 0