【发布时间】:2013-02-22 21:37:45
【问题描述】:
根据mlock() 手册页:
包含指定地址范围一部分的所有页面都是 调用成功返回时保证常驻RAM; 这些页面保证在以后解锁之前一直保留在 RAM 中。
这是否也保证这些页面的物理地址在其整个生命周期内保持不变,或者直到解锁?
如果不是(也就是说,如果它可以被内存管理器移动 - 但仍保留在 RAM 中),关于新位置或发生此类更改的事件有什么可以说的吗?
更新:
关于 RAM 中锁定页面的一致性有什么说法吗?如果 CPU 有缓存,那么 mlock-ing 是否保证 RAM 与缓存的一致性(假设回写缓存)?
【问题讨论】:
-
我找不到明确的保证,但我也很难想到将
mlock()ed 页面移动到物理内存中的场景(同时显然保留其虚拟地址)。好问题(+1) -
您是否介意提供一些上下文,即在问题的答案很重要时,您的代码做什么或需要做什么。
-
NPE,我试图确定将指向锁定缓冲区的指针传递给与主机 CPU 共享内存空间的加速器硬件是否安全。如果页面可以移动,那就不安全了。
-
太棒了,谢谢。我认为这是类似的事情,但很高兴得到确认。出于兴趣,您如何将虚拟地址转换为物理地址?
-
唯一的“物理地址”概念不一定存在于所有架构中。想想NUMA。连接到 CPU A 的内存很可能被视为与 CPU B 不同的物理地址范围。
标签: linux ubuntu memory-management