c - Linux mremap 没有释放旧映射?

标签 c linux

我需要一种将页面从一个虚拟地址范围复制到另一个而不实际复制数据的方法。范围很大,延迟很重要。 mremap 可以做到这一点,但问题是它也会删除旧的映射。由于我需要在多线程环境中执行此操作,因此我需要同时使用旧映射,所以稍后当我确定没有其他线程可以使用它时,我将释放它。在不修改内核的情况下,这可能吗?该解决方案只需要使用最新的 Linux 内核。

最佳答案

这是在 5.7 内核中作为新标志添加到 mremap(2) 中的,称为 MREMAP_DONTUNMAP。这会在移动页表条目后保留现有映射。

https://github.com/torvalds/linux/commit/e346b3813067d4b17383f975f197a9aa28a3b077#diff-14bbdb979be70309bb5e7818efccacc8

关于c - Linux mremap 没有释放旧映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18904547/

相关文章:

linux - 由于 mkdir 拒绝,无法安装软件

c - 在 Hp-UX ksh 中执行交互式命令(意外)并获取子进程

c++ - Linux 上的 GMP(MPIR) 链接器错误

c - 如何在 C 中获取公钥的指纹?

python - 从 IP 地址获取主机名

c - ARM GDB 无法仅在 Linux 上访问内存

linux - 无法找到软件包 openal-soft

c - 使用 C : how to read cell-structure properly 读取 .mat 文件

c - 如何在服务器中支持 1 TB 的内存?

python - 如何从同样动态创建 salt 状态的循环中要求动态创建的 salt 状态?