为mlockall
手册页上我的内核3.0说你如何理解mlockall手册页?
mlockall用于()锁映射到 调用进程的地址空间中所有页面。这包括代码页,数据和堆栈 段以及共享库,用户空间内核数据,共享内存和内存映射文件 。当呼叫成功返回时,所有映射的页面保证 驻留在RAM中;页面 保证留在RAM中,直到稍后解锁。
后来说,使用mlockall用于(),以防止对 页面故障延迟
实时进程进入 时间关键部分之前应该预留足够的锁定堆栈页,这样就没有调用 函数 可能导致页面错误。这可以通过调用一个分配足够大的自动变量(一个数组)的函数来实现,并且写入该数组占用的内存以触及这些堆栈页。这样, 足够的页面将被映射为堆栈并且可以被锁定到RAM中。虚拟写入确保甚至在临界区域中甚至不会发生写入时复制页面错误。
我知道这个系统调用无法猜测将会达到的最大堆栈大小,因此无法锁定堆栈的页面。但为什么上面显示的男人的第一部分说,这也是为堆栈完成的?这个手册页是否有错误,还是仅仅意味着锁定是为初始堆栈大小完成的?
请注意,Linux最初为每个进程提交128k的堆栈空间,似乎没有办法调整/覆盖它。因此,'mlockall'将锁定至少128k,这比任何合理的程序都需要更多。 – 2012-04-05 00:56:00