【发布时间】:2016-04-26 06:28:41
【问题描述】:
我的问题如下:
我mmap(内存映射)一个文件到虚拟内存空间。 当我第一次使用 pointer 访问文件的第一个字节时,操作系统会尝试访问内存中的数据,但它会失败并引发 page fault,因为数据现在不存在于内存中。因此操作系统会将数据从磁盘交换到内存中。最后我的访问将成功。
(问题来了) 当我修改数据(内存中)并写回磁盘文件时,我如何才能释放物理内存以供其他使用,但保留虚拟内存以根据需要将数据取回内存? 这听起来像是操作系统知道内存耗尽的页面出和页面入行为,它将LRU(或类似的东西)内存页面交换到磁盘(交换文件)并为其他进程释放物理内存,并且根据需要将被驱逐的数据取回内存。但是这个机制是由操作系统控制的。
由于某些原因,我需要自己控制页面出和页面入行为。那我该怎么办?破解内核?
【问题讨论】:
-
为什么你想这样做?你试图解决的实际问题是什么?用例是什么?
-
@JoachimPileborg 我正在研究 H-Store 团队提出的“反缓存”方法。 “反缓存”与 OS 中的 VMM 类似。他们都想处理数据大小远大于内存大小的情况。我想实现一个用户空间 VMM 进行比较。
标签: c memory memory-management linux-kernel