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

标签 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 架构。我没有看到他们对这个特定架构的实现。

最佳答案

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

关于linux - 如何使属于特定进程的特定内存页无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156845/

相关文章:

Linux - 安装用户空间文件系统(模仿一个 :-) ) as a FileSystem

linux - 针对 Chrome 的 Raspbian 修复 "did not shut down properly"

php - 使用 PHPExcel 处理 .xls 获取 OOM

C++ 结构内存分配

iOS 应用程序在方法调用时崩溃

具有存在文件名的linux grep命令

linux - 无法通过 Composer 安装 Laravel 5.1,但可以在 5.2 上运行

c++ - 在 std::set 容器中使用常量字符指针:内存消耗

c - 如何在 C 中使用 GMP 库分配浮点值?

java - 管理内存中非常大的 xml