我想在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架构。我没有看到他们对这种特定架构的实现。
答案 0 :(得分:1)
您必须与mprotect
系统调用(请参阅mm/mprotect.c
)执行相同操作,仅适用于与current
不同的进程。