我试图找到任何允许进程分配“临时”内存的系统功能--即被进程认为可以丢弃的内存,并且在需要内存时可以被系统拿走,但允许进程尽可能地从可用内存中受益。换句话说,进程告诉系统,当进程不使用内存时,牺牲内存块是可以的。释放块也比交换它更好(它更昂贵,或者同样昂贵,交换它而不是重新构造它的内容)。
系统(例如Linux)在内核中有这些东西,比如F/S内存缓存。我正在寻找这样的东西,但可用的用户空间。
我知道有很多方法可以从程序中实现这一点,但是处理这个问题更像是一个核心任务。在某种程度上,我在问内核:
具体来说,我感兴趣的是一个可以在Linux上工作的解决方案,但是我很想了解其他任何O/S是否存在。
更新
关于我期望它如何工作的一个例子:
下面是在现有MM上这样做的问题:
为了使页面不被传呼,我必须将它们分配给任何东西。但是,他们可以在任何时候被呼出,而不需要事先通知。使用mincore()进行测试并不能保证当mincore()完成时页面仍然存在。使用mlock()需要提升权限。
因此,我能接触到的最接近的方法是使用mlock()和匿名页面。按照我先前提出的期望,将是:
然而,当我使用页面时,我并不需要将它们锁定在RAM中。此外,如果内存被过度提交,MAP_NORESERVE也会出现问题。
发布于 2014-03-15 07:49:54
这就是VmWare ESXi服务器,也就是Virtual Machine Monitor (VMM)层实现的内容。这是虚拟机中使用的一种方法,它是从虚拟机来宾获得reclaim内存的一种方式。拥有比实际使用的内存更多的内存的虚拟机会将其释放/释放给VMM,以便将其分配给需要它的虚拟机来宾。
本文介绍了Memory Reclamation的这种技术:vsphere5.pdf。
在类似的行中,您可以在内核中实现类似的内容。
https://stackoverflow.com/questions/22421014
复制相似问题