答案 0 :(得分:4)
它确保内存始终在RAM中,并且永远不会移动到交换磁盘。这使得访问这些内存位置更多更快,因为与RAM相比,磁盘速度非常慢。
在实时系统中(linux不是RTS btw!),您需要极低的延迟,因此在时间关键代码中通常无法接受导致磁盘访问的内存访问。
答案 1 :(得分:2)
例如,它可用于实时应用程序或高安全性数据处理。 这是来自mlockall()文档的引用:
实时应用程序需要确定性计时,等等 调度, 分页是意外程序执行延迟的一个主要原因。实时应用程序通常也会切换到 带sched_setscheduler(2)的实时调度程序。 Crypto- 图形安全软件通常将密码或密钥等关键字节作为数据结构处理。作为分页的结果, 这些秘密可以转移到 持久的交换存储介质,在安全软件清除了秘密之后很久就可以访问它们 RAM并终止。 (但请注意 笔记本电脑上的挂起模式和一些台式计算机将系统的RAM副本保存到磁盘,无论内存锁定。)
使用mlockall()来防止页面错误延迟的实时进程应该保留足够的锁定堆栈页面 进入时间关键部分,所以没有 页面错误可能是由函数调用引起的。这可以通过调用分配足够大的函数来实现 自动变量(一个数组)并写入mem- 由此数组占用的ory以触摸这些堆栈页面。这样,就可以为堆栈映射足够的页面 锁定在RAM中。虚拟写入确保 在临界区中甚至不能发生写时复制页面错误。
答案 2 :(得分:1)
使用实时处理时,关键因素是实时组件 - 即您无法承受从内存等待换入/换出。