2012-06-19 60 views
0

我實際上想要做的是將寫入某個內存區域中的寫入重定向到兩個進程之間共享的獨立內存區域。這可以在用戶級完成嗎?例如,對於某個頁面X.我想要做的是在寫入時將其映射(虛擬到物理)更改爲某個共享映射。這是可以實現的嗎?我也需要透明地做到這一點,即程序仍然使用頁面X中的變量名稱或指針,但在幕後,我們正在使用不同的頁面。從用戶空間管理虛擬內存

回答

1

是的,可以在Linux中替換內存映射,但不建議這樣做,因爲它非常不便攜。

首先,你應該找出在什麼頁面X變量位於利用其地址和屏蔽掉最後的幾個位 - 爲了知道有多少位來屏蔽掉與sysconf(_SC_PAGE_SIZE)查詢系統頁面大小。然後,您可以使用MAP_FIXED | MAP_SHARED標誌創建與本頁重疊的共享內存映射到mmap(2)mmap2(2)。您應該複製頁面的初始內容並在新映射後將其恢復。由於其他變量可能駐留在同一頁面中,因此應該非常小心內存佈局並更好地使用專用的共享內存對象。

+0

嗯,這相當聰明:)。但是因爲我需要在多線程環境中這樣做,所以我最好小心可能發生的競爭條件。 – pythonic

1

你想要做的並不完全是可能的,因爲至少在x86上,內存無法在精細的比例尺上重新映射。您可以重新映射內存的最小量子是4k頁面,並且包含任何給定變量(例如X)的頁面可能包含其他變量或程序數據。

這就是說,您可以使用mmap()系統調用在進程之間共享內存。

+0

你沒有告訴我任何新東西。我已經知道你在說什麼了。 – pythonic