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

时间:2013-03-07 15:43:17

标签: linux ubuntu memory-management

根据mlock()手册页:

  

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

这是否也能保证这些页面的物理地址在其整个生命周期内保持不变,或直到解锁?

如果不是(也就是说,如果它可以由内存管理器移动 - 但仍然保留在RAM中),是否有关于新位置或发生此类更改的事件可以说什么?

更新:

关于RAM中锁定页面的一致性,有什么可说的吗?如果CPU有缓存,那么mlocking是否保证RAM与缓存的一致性(假设回写缓存)?

1 个答案:

答案 0 :(得分:5)

没有。已使用内核的不可保存的LRU列表管理已mlocked的页面。顾名思义(并且mlock()保证)这些页面不能从RAM中逐出。但是,页面可以从一个物理页面帧迁移到另一个。以下是Unevictable LRU Infrastructure的摘录(为了清晰起见,添加了格式):

  

迁移已丢失的页面

     

正在迁移的页面已从LRU列表中隔离,并在页面取消映射时保持锁定状态,更新页面的地址空间条目并复制内容和状态,直到页面表条目已替换为条目指的是新页面。 Linux支持迁移mlocked页面和其他不可访问的页面。这只需将PG_mlockedPG_unevictable状态从旧页面移动到新页面。