我想向 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 架构。我没有看到他们对这个特定架构的实现。
最佳答案
您必须执行与 mprotect
系统调用相同的操作(参见 mm/mprotect.c
),仅针对不同于current
的进程.
关于linux - 如何使属于特定进程的特定内存页无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156845/