为什么我们需要在RAM中锁定进程的地址空间?

时间:2012-03-22 08:35:45

标签: c linux real-time

http://linux.die.net/man/2/mlockall

  

mlockall ()将所有调用进程的虚拟地址空间锁定到RAM中,防止将内存分页到交换区域。

为什么这在实时系统中很重要?

3 个答案:

答案 0 :(得分:4)

它确保内存始终在RAM中,并且永远不会移动到交换磁盘。这使得访问这些内存位置更多更快,因为与RAM相比,磁盘速度非常慢。

在实时系统中(linux不是RTS btw!),您需要极低的延迟,因此在时间关键代码中通常无法接受导致磁盘访问的内存访问。

答案 1 :(得分:2)

例如,它可用于实时应用程序或高安全性数据处理。 这是来自mlockall()文档的引用:

  

实时应用程序需要确定性计时,等等   调度,          分页是意外程序执行延迟的一个主要原因。实时应用程序通常也会切换到   带sched_setscheduler(2)的实时调度程序。 Crypto-          图形安全软件通常将密码或密钥等关键字节作为数据结构处理。作为分页的结果,   这些秘密可以转移到          持久的交换存储介质,在安全软件清除了秘密之后很久就可以访问它们   RAM并终止。 (但请注意          笔记本电脑上的挂起模式和一些台式计算机将系统的RAM副本保存到磁盘,无论内存锁定。)

     

使用mlockall()来防止页面错误延迟的实时进程应该保留足够的锁定堆栈页面   进入时间关键部分,所以没有          页面错误可能是由函数调用引起的。这可以通过调用分配足够大的函数来实现   自动变量(一个数组)并写入mem-          由此数组占用的ory以触摸这些堆栈页面。这样,就可以为堆栈映射足够的页面   锁定在RAM中。虚拟写入确保          在临界区中甚至不能发生写时复制页面错误。

答案 2 :(得分:1)

使用实时处理时,关键因素是实时组件 - 即您无法承受从内存等待换入/换出。