根据mlock()
手册页:
包含指定地址范围一部分的所有页面都是 当呼叫成功返回时,保证驻留在RAM中; 保证页面保留在RAM中,直到稍后解锁。
这是否也能保证这些页面的物理地址在其整个生命周期内保持不变,或直到解锁?
如果不是(也就是说,如果它可以由内存管理器移动 - 但仍然保留在RAM中),是否有关于新位置或发生此类更改的事件可以说什么?
更新:
关于RAM中锁定页面的一致性,有什么可说的吗?如果CPU有缓存,那么mlocking是否保证RAM与缓存的一致性(假设回写缓存)?
答案 0 :(得分:5)
没有。已使用内核的不可保存的LRU列表管理已mlocked
的页面。顾名思义(并且mlock()
保证)这些页面不能从RAM中逐出。但是,页面可以从一个物理页面帧迁移到另一个。以下是Unevictable LRU Infrastructure的摘录(为了清晰起见,添加了格式):
迁移已丢失的页面
正在迁移的页面已从LRU列表中隔离,并在页面取消映射时保持锁定状态,更新页面的地址空间条目并复制内容和状态,直到页面表条目已替换为条目指的是新页面。 Linux支持迁移
mlocked
页面和其他不可访问的页面。这只需将PG_mlocked
和PG_unevictable
状态从旧页面移动到新页面。