簡體   English   中英

從用戶空間管理虛擬內存

[英]Manage virtual memory from userspace

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

你要做的事情並非完全可能,因為,至少在x86上,內存不能在細粒度上重新映射。 您可以重新映射內存的最小量子是一個4k頁面,包含任何給定變量(例如,X)的頁面可能包含其他變量或程序數據。

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

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

首先,您應該通過獲取其地址並屏蔽最后幾位來查找X變量所在的頁面 - 使用sysconf(_SC_PAGE_SIZE)查詢系統頁面大小,以便知道要屏蔽多少位。 然后,您可以使用MAP_FIXED | MAP_SHARED創建與此頁面重疊的共享內存映射 MAP_FIXED | MAP_SHARED標志為mmap(2)mmap2(2) 您應該復制頁面的初始內容並在新映射后恢復它。 由於其他變量可能位於同一頁面中,因此您應該非常小心內存布局並更好地使用專用的共享內存對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM