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