文档很清楚:
位图由8字节整数数组表示,PFN#i处的页面映射到数组元素#i/64的位#i%64,字节顺序为本机顺序。当一位设置,则相应的页面处于空闲状态。
但我对linux内部,甚至处理二进制文件都没有经验。PFN应该是一个整数吗?
我想做的是弄清楚是否为一系列虚拟地址设置了空闲位。我在/proc/{pid}/maps
中查找虚拟地址范围,例如01ac3000
-01fe5000
。我如何获得该范围的PFN,以及如何读取该文件(在C++或Python中(以查找空闲位?
我在这里看到了该文件作者的Python示例。但我一直在把对旧kpageidle(每页64位(进行操作的读取转换为位图文件,位图文件是一种紧凑的表示。
我想您错过了/proc/{pid}/pagemap的一个文件,它提供了虚拟地址到PFN的映射。通过读取/proc/{pid}/pagemap,您可以获得PFN,然后检查/sys/kernel/mm/page_idle/bitmap中的位图,以确定PFN是否空闲。