Linux中所有分页结构的物理地址是否都映射到页表中

时间:2015-05-30 00:41:35

标签: linux-kernel paging virtualization kvm

在64位Linux中, calculate, getTax使用4级分页结构(IA-32E paging / PML4 / PDPT / PD)。前三个结构中的条目给出了相应的下一个结构的物理地址。我的问题是所有这些分页结构的物理地址是否会映射到分页表中?如果它们已映射,则采用哪种模式(PT / User)?非常感谢!

我捕获了一些Supervisorvcpu期间访问过的特定内存地址。这些地址采用KVM(客户物理帧号)格式。我想告诉这些gfn是否映射到内核或用户空间。所以我遍历了guest虚拟机(虚拟机)分页表,找出映射到这些gfns的相应页表条目。请参阅我之前的问题here

我发现一些分页结构的物理地址映射在分页表中,而有些则不是。也就是说,一些寻呼结构的物理地址(例如gfns给出的PT的地址)在页表中没有有效的对应PDE。由于我已经更改了PTE的内存机制,我担心这种现象可能是由我的代码引起的,或者我的页面表行走代码可能有问题。

所以我想在正常的Linux中知道这些东西是如何处理的 非常感谢!

2 个答案:

答案 0 :(得分:2)

在64位Linux中,所有物理地址始终使用Supervisor映射映射到内核空间的一半内核。

您可以通过添加PAGE_OFFSET来将物理地址转换为线性内核映射中的相应虚拟地址,{x}是0xffff880000000000

你确定你正确处理1GB和2MB"大页面"在你的页面表格中?

答案 1 :(得分:0)

在普通的Linux中,CR3包含包含Page表的PML4的帧的PA。最后一位虚拟地址在该帧中偏移。该偏移处的数据包含下一级页面帧的PA。通过这种方式,可以访问包含所需数据的相应页面框架。包含PT结构的地址不会映射到任何页面表格中。

对于KVM,来宾物理页面是由内核进行mmaped的虚拟地址。 guest虚拟机使用的那些地址需要映射到物理帧,这是主机内核的职责和自由裁量权。因此主机内核可以根据自己的算法映射一些页面而不是其他页面。因此,如果某些gfn被映射而其他gfn不是一个非常自然和正确的现象。

相关问题