如何获取大页面的物理地址

时间:2016-05-31 21:51:46

标签: c linux linux-kernel huge-pages

我需要从用户空间获取大页面(2 MB)的物理地址。我设法从页面地图中获取了正常的4 KB页面的物理地址,如https://shanetully.com/2014/12/translating-virtual-addresses-to-physcial-addresses-in-user-space/#codeprocpidpagemapcode所示,但是我不明白我应该如何使用页面图来获取大页面的物理地址。如何在页面映射中表示巨大的页面页框号?任何参考文献,特别是任何代码都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

应该是一样的。普通页面和大页面之间的主要区别是页面表的几层。对于大页面(至少在x86上),页表行走提前结束。

大页面通常以比典型页面更多的零结尾,因为它们需要与它们的大小对齐(在2MB的情况下,低21位应该都为零)。

如果从读取中获取-EINVAL,请查看pagemap documentation中的引用(该示例读取错误的字节数):

  

如果不是,则从任何文件中读取将返回-EINVAL   在8字节边界上开始读取(例如,如果你寻找一个奇数   进入文件的字节数),或者如果读取的大小不是a   8个字节的倍数。