当前位置:嗨网首页>书籍在线阅读

27-内存锁定

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.9 内存锁定

Linux 实现了请求页面调度,可以在需要时将页面从硬盘交换进来,当不再需要时再交换出去。这使得系统中进程的虚拟地址空间与实际的物理内存大小没有直接的关系,同时硬盘上的交换空间提供一个拥有近乎无限物理内存的假象。

对应用而言,交换是透明的,应用程序一般都不需要关心(甚至不需要知道)内核页面调度的行为。然而,在下面两种情况下,应用程序可能希望能够影响系统的页面调度:

确定性(Determinism)

时间约束严格的应用程序需要自己来决定页的调度行为。如果一些内存操作引起了页错误——这会导致昂贵的磁盘操作——应用程序则可能会超出要求的运行时间。如果能确保需要的页面总在内存中且从不被交换进磁盘,应用程序就能保证内存操作不会导致页错误,提供一致的、可确定的程序行为,从而提供了效能。

安全性(Security)

如果内存中含有私人信息,这些信息可能最终被页面调度以不加密的方式储存到硬盘上。例如,如果一个用户的私钥正常情况下是以加密的方式保存在磁盘上的,一个在内存中未加密的密钥备份最后可能保存在了交换文件中。在一个高度注重安全性的环境中,这样做可能是不可接受的。这样的应用程序可以请求将密钥一直保留在物理内存上。

当然,改变内核的行为可能会对系统整体的表现产生负面的影响。应用的确定性和安全性可能会提高,但是由于该应用的页被锁在了内存中,那么另一个应用的页就只能被换出内存。内核(如果我们相信其算法)总是换出“最优的页” ——也就是那些在未来最不可能被访问的页。因此,如果改变了内核的行为,那么它就只能将一个次优的页换出了。