1
6
不。不能保证虚拟地址是基于物理地址的(例如,它可能是一个在RAM中没有表示的映射文件)。而且,操作系统可以随时在物理内存中自由移动虚拟地址,因此不能保证物理地址将保持正确或有效。 为什么你认为你需要一个物理地址?你想完成什么? |
2
3
我相信您可以编写一个Linux内核模块,告诉您地址空间是如何映射的。那会很有趣的 或查看/proc/pid/maps 我在看 http://www.amazon.com/Linux-Kernel-Development-Robert-Love/dp/0672325128 |
3
1
如果代码不在内核中运行,就没有很好的方法可以做到这一点,但是如果您的程序在根目录下运行,并且您能够读取
问题是,当你这样做的时候,你的程序不会保持原样。即使包含地址的页面从未被调出过,它也可以被移动(在x86上,有些页面不能用于DMA,因此可以移动一个页面来设置IO操作,而且我确信还有其他原因可以移动一个页面而不被换出)。 此外,当您阅读页表时,它们会发生变化。您不能像在内核空间中那样将它们从应用程序空间锁定,所以我不确定您是否可以对这种结构进行良好的快照。 如果您真的想看到页面地址随着程序的变化而变化,那么最好的办法就是实现一个内核模块,它允许您查询页面地址,或者在每次调用特殊设备文件时读取整个页面映射。我不认为这太难,因为当前进程的进程控制块在调用驱动程序的读取函数时可用。如果您希望能够检查其他进程的映射,这将变得更加棘手。 |
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |