【问题标题】:POSIX compliant way to walk process memoryPOSIX 兼容的方式来遍历进程内存
【发布时间】:2014-08-23 15:57:59
【问题描述】:
有没有一种方法可以让进程遍历它自己的符合 POSIX 的内存?这必须在不修改进程源代码的情况下完成,但我们可以插入系统调用。
该应用程序适用于需要防止 fork() 之后的写时复制意外延迟的实时系统。一种解决方案是调用 mlockall(),然后对进程映射的所有内存执行虚拟写入。在 Linux 中,内存映射在 /proc/self/maps(或 /proc//maps)中可用,但这不是 POSIX 兼容性的要求。
【问题讨论】:
标签:
memory-management
posix
real-time
【解决方案1】:
在 POSIX 中,我只能找到 posix_madvise(),它需要给定的内存区域作为输入。此外,posix_madvise() 没有指定它是否会影响写入时的性能,并且似乎只适用于内存映射文件。
我相信这是一个简单的问题,即为自己构建一个已分配数据的列表,然后执行写入。我还看到建议分配一个大的虚拟堆栈并用零填充它,这样堆栈变量访问就不会阻塞。如果我理解这个问题,你不需要也不应该复制程序代码。
使用 POSIX,您将无法找到和加载在没有程序控制的情况下分配的页面。