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

分页单元被用来将线性地址转化成物理地址。
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地址转换分析:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值