我需要一种将页面从一个虚拟地址范围复制到另一个而不实际复制数据的方法。范围很大,延迟很重要。 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/