我可以编写一个程序来启动其他留在物理 RAM 中并避免交换到磁盘的小程序吗?我很好奇 Linux 和 Windows 的答案。
2 回答
mlock
POSIX 系统可以使用/munlock
将内存锁定到 RAM 中。在 Windows 上,您可以使用VirtualLock
.
不过,在几乎所有情况下,您都希望让操作系统来处理这类事情。
编辑:详细说明,如果您想要这样做的原因是性能或响应能力,请不要. 几乎你想要这样做的唯一原因是阻止密码或加密密钥意外写入磁盘,攻击者可能会得到它。
引用其中一位用户的话:
是的,有:让程序调用 VirtualLock 函数:
进程锁定的页面保留在物理内存中,直到进程解锁或终止。这些页面保证在锁定时不会写入页面文件。
我相信 SetProcessWorkingSetSize 函数也可能会有所帮助。
对于那些认为我是异端甚至暗示这可能有用的人:
请注意,在内存中锁定页面可能是有正当理由的。一个有效的原因可能是用户正在运行 CD 刻录机,而 CD 刻录机不断换页并因此导致缓冲区欠载,从而产生过山车。在这种情况下,锁定内存缓冲区以使其不会被分页是有效的,即使这意味着计算机的其余部分会慢下来,因为这仍然比给用户一个过山车好。也可能有其他正当理由——我的观点是,虽然通常不建议将页面锁定在内存中,但仍然存在有效情况,我认为终止这个想法不会帮助这里的 OP。
更新:查看 Process Hacker 的 Reduce Working Set 菜单选项。