3

根据mlock()手册页:

调用成功返回时,保证所有包含指定地址范围的一部分的页面都驻留在 RAM 中;这些页面保证保留在 RAM 中,直到以后解锁。

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

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

更新:

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

4

1 回答 1

5

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

迁移锁定页面

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

于 2014-01-21T22:10:27.490 回答