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

Linux mlock()-ed页是静态的,还是可以在物理RAM中移动?,linux,ubuntu,memory-management,Linux,Ubuntu,Memory Management,根据mlock()手册页: 包含指定地址范围一部分的所有页都是 保证在调用成功返回时驻留在RAM中; 这些页面保证在以后解锁之前一直保存在RAM中 这是否也可以保证这些页面的物理地址在其整个生命周期内保持不变,或者直到解锁 如果没有(也就是说,如果它可以被内存管理器移动,但仍然保留在RAM中),是否可以对新位置或发生此类更改时的事件说些什么 更新: 关于RAM中锁定页面的一致性,可以说些什么吗?如果CPU有缓存,那么mlock ing是否保证RAM与缓存的一致性(假设回写缓存)?否。已mlock

根据
mlock()
手册页:

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

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

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

更新:


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

否。已
mlock
的页面使用内核的不可战胜的LRU列表进行管理。顾名思义(而且
mlock()
保证)这些页面不能从RAM中移出。但是,页面可以从一个物理页面框架迁移到另一个物理页面框架。以下是摘录自(为清晰起见添加了格式):

迁移锁定的页面 正在迁移的页面已与LRU列表隔离,并在取消页面映射、更新页面的地址空间条目并复制内容和状态时保持锁定,直到页面表条目被引用新页面的条目替换为止。Linux支持迁移
mlocked
页面和其他无法访问的页面。这包括简单地将
PG_mlocked
PG_unevictable
状态从旧页面移动到新页面


我找不到明确的保证,但我也在努力思考一个场景,在物理内存中移动
mlock()
ed页(同时显然保留其虚拟地址)是有意义的。很好的问题(+1)您是否介意提供一些上下文,例如,在问题的答案很重要的情况下,您的代码做什么或需要做什么。NPE,我正在尝试找出将指向锁定缓冲区的指针传递给与主机CPU共享内存空间的加速器硬件是否安全。如果页面可以移动,那就不安全了。太棒了,谢谢。我认为这是类似的事情,但很高兴得到证实。出于兴趣,您如何将虚拟地址转换为物理地址?独特的“物理地址”概念不必存在于所有体系结构中。想想努马。连接到CPU A的内存很可能被视为与CPU B不同的物理地址范围。感谢您的摘录。这证实了我的怀疑,即我们不能依赖页面静止的假设。