我實際上想要做的是將寫入某個內存區域中的寫入重定向到兩個進程之間共享的獨立內存區域。這可以在用戶級完成嗎?例如,對於某個頁面X.我想要做的是在寫入時將其映射(虛擬到物理)更改爲某個共享映射。這是可以實現的嗎?我也需要透明地做到這一點,即程序仍然使用頁面X中的變量名稱或指針,但在幕後,我們正在使用不同的頁面。從用戶空間管理虛擬內存
0
A
回答
1
是的,可以在Linux中替換內存映射,但不建議這樣做,因爲它非常不便攜。
首先,你應該找出在什麼頁面X
變量位於利用其地址和屏蔽掉最後的幾個位 - 爲了知道有多少位來屏蔽掉與sysconf(_SC_PAGE_SIZE)
查詢系統頁面大小。然後,您可以使用MAP_FIXED | MAP_SHARED
標誌創建與本頁重疊的共享內存映射到mmap(2)
或mmap2(2)
。您應該複製頁面的初始內容並在新映射後將其恢復。由於其他變量可能駐留在同一頁面中,因此應該非常小心內存佈局並更好地使用專用的共享內存對象。
1
你想要做的並不完全是可能的,因爲至少在x86上,內存無法在精細的比例尺上重新映射。您可以重新映射內存的最小量子是4k頁面,並且包含任何給定變量(例如X)的頁面可能包含其他變量或程序數據。
這就是說,您可以使用mmap()
系統調用在進程之間共享內存。
+0
你沒有告訴我任何新東西。我已經知道你在說什麼了。 – pythonic
相關問題
- 1. 虛擬內存空間
- 2. 限制虛擬內存空間for malloc()
- 3. 虛擬地址空間vs虛擬內存
- 4. 虛擬內存處理
- 5. 虛擬內存到物理內存
- 6. 物理內存與虛擬內存
- 7. 虛擬內存或物理內存
- 8. 使用和不使用虛擬析構器的內存管理
- 9. 虛擬機管理
- 10. 將內核空間虛擬地址映射到Windows 10驅動程序中的用戶空間虛擬地址
- 11. 虛擬內存
- 12. 虛擬內存?
- 13. 如何將指針指向物理內存從內核空間傳遞到用戶空間並將其映射到虛擬空間
- 14. 進程虛擬內存 - 堆棧和堆之間的空間
- 15. 內核虛擬地址空間中的高內存映射
- 16. 在虛擬地址空間中使用內存映射文件
- 17. 當沒有交換空間時,虛擬內存如何存在?
- 18. x86_64 Linux進程的用戶空間虛擬內存佈局是什麼?
- 19. 如果物理內存量大於虛擬內存量,虛擬內存是否仍然是有用的內存管理方案?
- 20. 從用戶空間訪問NOR內存
- 21. 如何從用戶空間註冊虛擬卡到alsa?
- 22. 是否可以從用戶空間創建虛擬IOHIDDevice?
- 23. 如何在linux中控制虛擬內存管理?
- 24. c中的虛擬內存地址管理#
- 25. 虛擬內存的使用
- 26. 用戶邏輯內存和虛擬內存之間有什麼區別?
- 27. 有什麼辦法從模擬器清理空間/內存?
- 28. 清理部分虛擬內存?
- 29. 虛擬和物理內存/ OutOfMemoryException
- 30. 如何理解虛擬內存?
嗯,這相當聰明:)。但是因爲我需要在多線程環境中這樣做,所以我最好小心可能發生的競爭條件。 – pythonic