2014-01-31 50 views
0

這個問題是爲了解unix environ中適用於Mem映射文件的種類約束。Unix:內存映射文件,約束適用?

我們有一個在unix環境下運行的應用程序,該應用程序承載並提供具有隻讀訪問權限的鍵值的Mem映射文件的文件,並且在複製新版本的文件時能夠在運行時進行刷新(可能含有更多鍵值對)。

我觀察到的是,由於文件是Mem-Mapped,因爲我們使用更多的鍵值對刷新文件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中。

是我的假設正確,那

  1. 與MEM-映射文件,文件大小不限於可用的物理內存,因爲文件將被換入/出通過點播的OS。
  2. 並且只有限制因素可以是爲虛擬內存配置的磁盤空間。 在這種情況下,我如何識別操作系統爲虛擬內存擴展標識的磁盤空間?文件的虛擬內存足跡在哪裏存儲在硬盤中?
+0

渴望知道虛擬內存是否受磁盤空間限制,以及磁盤上的哪些位置維護虛擬內存頁? – Shashi

回答

0

我認爲2)僅適用於將映射文件與MAP_PRIVATE然後僅當您修改內存中的頁面時。如果您在不使用MAP_PRIVATE的情況下映射頁面,則該文件已存在於磁盤中,不需要將其複製到交換文件中。 1)正確 - 您可以映射比可用內存大的文件。 但請記住,操作系統仍然需要分配頁表 - 所以不要嘗試映射1TB文件。