【发布时间】:2011-12-23 19:02:12
【问题描述】:
希望标题清楚。我有一块通过 mmap() 获得的内存。一段时间后,我得出结论,我不再需要这个范围内的数据。但是,我仍然希望保持这个范围。也就是说,我不想调用 mummap()。我正在努力成为一个好公民,而不是让系统交换超出它的需要。
有没有办法告诉 Linux 内核 if 给定页面由物理页面支持并且 如果 内核决定它需要该物理页面,不要麻烦写那个页面来交换?
我想在后台这个神奇的函数调用会破坏给定虚拟页面和物理页面之间的任何映射(如果存在),而无需先写入交换。
【问题讨论】:
-
munmap 有什么问题?它完全按照您所说的去做。如果要确保以后的 mmap 不会重用相同的虚拟地址,可以在 munmap 之后使用 MAP_FIXED+PROT_NONE 进行 mmap 以保留地址...
-
你怎么知道它是这样做的(将支持的物理页面写入交换)?
-
@ChrisDodd 我只能使用 munmap() 如果我可以保证随后对 mmap() 的调用 - 使用适当的参数进行 - 将保留相同的页面。正是这种缺乏保证第二个 mmap() 将成功阻止我使用 munmap() 的保证。重要的是,我的内存块的开始和结束不会改变,即使我在不同时间知道特定页面不再包含有用的数据。
-
@user309483 我想我不能保证这些页面是为交换而写的,但同样,这纯粹是为了成为系统上的好公民。如果它们被写入交换,我想节省系统的工作量。
标签: linux swap mmap virtual-memory pagefile