2013-08-01 28 views
1

如果同一進程鎖定共享內存中同一頁的一部分的兩個地址。將解鎖一個地址解鎖共享頁面?在最近版本的linux內核允許非特權進程鎖定內存之後,關於這種鎖定堆棧的文檔相當不清楚。mlock在linux中堆疊

回答

2
  • 內存鎖不疊加,即,已經通過呼叫鎖定幾次頁與mlock()或mlockall用於()將通過單個呼叫被解鎖以munlock用於()的相應範圍或由munlockall()調用。

  • 只要至少在一個位置或至少一個進程被鎖定,映射到多個位置或多個進程的頁面將保持鎖定在RAM中。

參考:中mlock(2) man page注。

+0

目前尚不清楚。因此,假設我有兩個地址,從第1頁到第2頁的一半,從第2頁的第2部分到第2頁的結尾,其他的從第2頁的結尾開始。如果我鎖定地址1,然後地址2然後解鎖地址1,會發生什麼情況。 – Satvik

+0

頁面是鎖定/解鎖全部。在你的場景中,'mlock(p1)'調用將鎖定第1頁和第2頁。而'munlock(p2)'調用將僅解鎖第2頁。在第一個'mlock(p1)'對應的'munlock(p1)'被執行後,頁面1將被解鎖。 – TheCodeArtist

+0

Mine case是mlock(a1){鎖定頁1和2},mlock(a2){第2頁已被鎖定},munlock(a1)。這會解鎖頁面1和2嗎? – Satvik