Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix:内存映射文件,是否适用约束?_Unix_Memory Mapped Files_Virtual Memory - Fatal编程技术网

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

Unix:内存映射文件,是否适用约束?,unix,memory-mapped-files,virtual-memory,Unix,Memory Mapped Files,Virtual Memory,这个问题是为了理解unix环境中适用于Mem映射文件的种类限制 我们有一个在unix环境中运行的应用程序,该应用程序托管并提供具有只读访问权限的键值Mem映射文件,并且能够在复制新版本文件时在运行时刷新(可能具有更多键值对) 我观察到的是,由于文件是Mem映射的,当我们使用更多的键值对刷新文件时,VIRT内存消耗会随着RES Mem消耗量的减少而增加 PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12948 16

这个问题是为了理解unix环境中适用于Mem映射文件的种类限制

我们有一个在unix环境中运行的应用程序,该应用程序托管并提供具有只读访问权限的键值Mem映射文件,并且能够在复制新版本文件时在运行时刷新(可能具有更多键值对)

我观察到的是,由于文件是Mem映射的,当我们使用更多的键值对刷新文件时,VIRT内存消耗会随着RES Mem消耗量的减少而增加

  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中只需要很少的页面

我的假设对吗

  • 对于Mem映射文件,文件大小不限于可用的物理RAM,因为文件将由操作系统按需进行分页
  • 唯一的限制因素是为虚拟内存配置磁盘空间。 在这种情况下,如何识别操作系统为虚拟内存扩展标识的磁盘空间?文件的虚拟内存足迹存储在硬盘中的什么位置
  • 我认为2)仅适用于使用map_PRIVATE映射文件,然后仅适用于修改内存中的页面。如果在映射页面时未使用map_PRIVATE,则该文件已在磁盘上,无需复制到交换文件中。 1) 正确--您可以映射比可用内存大的文件。
    但是请记住,操作系统仍然必须分配页表,因此不要尝试映射1TB的文件。

    想知道虚拟内存是否受到磁盘空间的限制,以及unix在磁盘上的何处维护虚拟内存页?