Linux是否按需加载程序页面?

时间:2013-10-10 10:00:57

标签: linux

我编写了一个程序守护程序,当计算机的硬盘驱动器控制器崩溃时,它会启动某种自我修复程序。这个程序已经运行正常,但我担心程序(大约18KB编译文件大小)可能无法被操作系统完全加载到RAM中,并且 - 当我真的不走运时 - 某些程序页面必须从正好在程序必须处于活动状态并且不再可能进行磁盘访问时才能使用磁盘。

毕竟,大多数时候程序都在无限循环中检查是否一切正常并且95%的程序代码未被使用。因此,我认为,内核可以通过从RAM中删除未使用的程序页来优化RAM使用。

所以,我的问题是: Linux加载并将所有程序代码页保存到内存中,使得无需再次访问 来运行程序代码本身,程序启动后

技术细节:Linux内核2.6.36+,大约1 GB内存,Debian 5,无交换空间活动

我已经learned我可以通过调用mlockall(MCL_CURRENT | MCL_FUTURE);阻止交换,但想知道我是否真的需要更新我的机器。

2 个答案:

答案 0 :(得分:1)

不,程序代码页是内存映射到进程的地址空间,与其他任何mmap()没有太大区别,所以如果你长时间不访问这些页面,它们最终会从RAM中删除。为避免这种情况,只需使用mlockall()电话。

答案 1 :(得分:0)

来自mlockall手册

mlockall() locks all pages mapped into the address space of the calling process.
This  includes  the pages of the code, data and stack segment, as well as shared
libraries, user space kernel data, shared memory, and memory-mapped files.   All
mapped pages are guaranteed to be resident in RAM when the call returns success‐
fully; the pages are guaranteed to stay in RAM until later unlocked.

因此,如果锁定,页面将在此处。但是,无论何种锁定,修改已安装的硬盘分区总是存在很大风险。