mlock() – 页面是静态的,还是可以在物理RAM中移动?

根据mlock()手册页:

当呼叫成功返回时,包含指定地址范围一部分的所有页面保证驻留在RAM中; 页面被保证留在RAM中,直到后来解锁。

这是否也保证这些页面的物理地址在其整个生命周期中是恒定的,或者直到解锁?

如果没有(也就是说,如果它可以被内存pipe理器移动 – 但仍然保留在RAM中),有什么可以说的新位置,或事件发生这样的变化?

更新:

关于RAM中locking页面的一致性,可以说任何东西吗? 如果CPU有caching,那么mlock-ing保证与caching的RAM一致性(假设回写caching)?

Solutions Collecting From Web of "mlock() – 页面是静态的,还是可以在物理RAM中移动?"

mlocked页面使用内核的不可修改的LRU列表进行管理。 顾名思义(和mlock()保证)这些页面不能从RAM中驱逐。 但是,页面可以从一个物理页面框架迁移到另一个。 这里是一个不可预知的LRU基础设施摘录(格式添加为清晰):

迁移MLOCKED页面

正在迁移的页面已经从LRU列表中分离出来,并且在取消映射页面,更新页面的地址空间条目以及复制内容和状态时保持锁定状态,直到页表项被替换为引用新的页面。 Linux支持mlocked页面和其他不可修复页面的迁移。 这涉及到简单地将PG_mlockedPG_unevictable状态从旧页面移动到新页面。