在64位Linux中, calculate, getTax
使用4级分页结构(IA-32E paging
/ PML4
/ PDPT
/ PD
)。前三个结构中的条目给出了相应的下一个结构的物理地址。我的问题是所有这些分页结构的物理地址是否会映射到分页表中?如果它们已映射,则采用哪种模式(PT
/ User
)?非常感谢!
我捕获了一些Supervisor
在vcpu
期间访问过的特定内存地址。这些地址采用KVM
(客户物理帧号)格式。我想告诉这些gfn
是否映射到内核或用户空间。所以我遍历了guest虚拟机(虚拟机)分页表,找出映射到这些gfns
的相应页表条目。请参阅我之前的问题here。
我发现一些分页结构的物理地址映射在分页表中,而有些则不是。也就是说,一些寻呼结构的物理地址(例如gfns
给出的PT
的地址)在页表中没有有效的对应PDE
。由于我已经更改了PTE
的内存机制,我担心这种现象可能是由我的代码引起的,或者我的页面表行走代码可能有问题。
所以我想在正常的Linux中知道这些东西是如何处理的 非常感谢!
答案 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不是一个非常自然和正确的现象。