Unix:内存映射文件,约束适用?

时间:2014-01-31 11:05:19

标签: unix memory-mapped-files virtual-memory

这个问题是为了理解适用于unix环境中Mem-Mapped文件的类型限制。

我们有一个在unix环境中运行的APP,它托管并提供具有只读访问权限的密钥值的Mem映射文件的文件,也能够在复制新版本文件时在运行时刷新(可能更多密钥) - 值对。)

我观察到的是,由于文件是Mem-Mapped,因为我们用更多的键值对刷新文件,VIRT内存消耗随着RES内存消耗的增加而增加。

  PID    PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
12948    16   0 43240 9936 2996 S  0.0  0.1   0:00.00 lookup_server
12951    16   0  562m  16m 9972 S  0.0  0.1   0:00.09 lookup_server

据我所知,这是因为整个文件被复制为硬盘中的虚拟内存页面,只有少数需要的页面在RES内存中。

我的假设是否正确,

  1. 使用Mem-Mapping文件,文件大小不限于可用的物理RAM,因为文件将由操作系统按需分页输入/输出。
  2. 并且唯一的限制因素可能是为虚拟内存配置的磁盘空间。    在这种情况下,如何识别OS为虚拟内存扩展标识的磁盘空间?文件的虚拟内存脚印在哪里存储在硬盘中?

1 个答案:

答案 0 :(得分:0)

我认为2)仅在您使用MAP_PRIVATE映射文件时才适用,然后仅在您修改内存中的页面时才适用。如果映射没有MAP_PRIVATE的页面,则该文件已在磁盘上,无需复制到交换文件中。 1)是否正确 - 您可以映射比可用内存更大的文件。 但请记住,操作系统仍然需要分配页表 - 所以不要尝试映射1TB文件。