我需要从用户空间获取大页面(2 MB)的物理地址。我设法从页面映射中获取了正常 4 KB 页面的物理地址,如https://shanetully.com/2014/12/translating-virtual-addresses-to-physcial-addresses-in-user-space/#codeprocpidpagemapcode所示但是我不明白我应该如何使用页面映射来获取大页面的物理地址。pagemap中如何表示大页面页框号?任何参考资料,尤其是任何一段代码都将受到高度赞赏。
2124 次
1 回答
1
应该是一样的。普通页和大页之间的主要区别在于页表的几层。对于大页面(至少在 x86 上),页表遍历提前结束。
大页面通常以比典型页面更多的零结尾,因为它们需要与其大小对齐(在 2MB 的情况下,低 21 位应该全部为零)。
如果您从读取中获取 -EINVAL,请查看页面地图文档中的此引用(该示例读取错误的字节数):
如果您没有在 8 字节边界上开始读取(例如,如果您在文件中寻找奇数字节),或者读取的大小不是倍数,则从任何文件中读取都将返回 -EINVAL 8个字节。
于 2016-06-01T04:27:06.003 回答