如何使属于特定进程的特定内存页无效

时间:2013-11-23 00:17:56

标签: linux memory memory-management linux-kernel

我想在Linux内核中添加一个函数,给定进程ID和虚拟内存地址,该函数使属于该进程的页面无效并包含该内存地址。

基本上,如果尝试访问该页面,我想强制进程出现页面错误。

我不想使用缓存抖动或任何类似的东西。我希望我的功能在浪费过程的时间方面非常临床。例如,我不想刷新整个tlb或类似的东西。

对不起家伙不包括我已经尝试过的东西。但我已经尝试了很多。关于如何做到这一点的任何想法都非常受欢迎,非常感谢。

更新:

我看到有这些功能:

flush_cache_all()
flush_cache_mm(mm)
flush_cache_dup_mm(mm)
flush_cache_range(vma, start, end)
flush_cache_page(vma, vmaddr, pfn)
flush_dcache_page(page)
flush_icache_range(start, end)
flush_icache_page(vma,pg)

但我不确定哪些可用于x86-64架构。我没有看到他们对这种特定架构的实现。

1 个答案:

答案 0 :(得分:1)

您必须与mprotect系统调用(请参阅mm/mprotect.c)执行相同操作,仅适用于与current不同的进程。