UNIX:内存映射的文件,适用的约束



这个问题是为了理解适用于Unix Environ中的MEM映射文件的幼稚约束。

我们有一个在UNIX环境中运行的应用程序,该应用程序托管并提供具有键值键值文件的文件,仅读取访问,也能够在复制新版本的文件时在运行时刷新(带有更多键的probabaly) - 值对)。

我观察到的是,由于文件是mem映射的,因为我们使用更多键值配对的文件刷新文件,而随着RES MEM消耗的不多,VIRD内存消耗会增加。

  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 mem中。

是我的假设,正确的是

  1. 使用MEM映射文件,文件大小不限于可用的物理RAM,因为该文件将由OS ON-DEMAND分类/输出。
  2. 唯一的限制因子可以是为虚拟内存配置的磁盘空间。 在这种情况下,如何确定由OS确定的虚拟内存扩展的磁盘空间?文件的虚拟内存脚打印在哪里存储在硬盘中?

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

最新更新