如果父級正在與另一個進程共享某些頁面,並且將父級分叉。從我所知道的孩子複製頁面表,我們將頁面設置爲只讀,並進行寫時複製。但是,如果我們寫入錯誤,這將創建共享內存頁面的副本。 Linux內核如何避免這種情況?共享內存頁面和分支
2
A
回答
4
內核知道哪些內存頁面是使用共享內存操作分配的。當一個孩子分叉時,這些頁面沒有標記爲寫時複製,因此它們將在所有過程中保持共享。
這記錄在vm_area_struct
數據結構中,在vm_flags
成員中。其中一個標誌是VM_SHARED
。毫米/ memory.c包含以下功能確定是否頁應該轉換爲COW
static inline int is_cow_mapping(vm_flags_t flags)
{
return (flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE;
}
如果你想看到更多的關於這個標誌的設置和使用,去Linux Cross Reference和搜索VM_SHARED。
相關問題
- 1. CUDA性能:分支和共享內存
- 2. 分叉和共享頁面
- 3. (Android)Apps是否共享內存頁面?
- 4. 如何在分支進程中查找共享/複製的內存頁面C
- 5. SourceSafe共享和分支
- 6. CUDA:共享內存分配
- 7. 拆分共享內存?
- 8. 數據分配和共享內存
- 9. 如何分享共享內存?
- 10. PHP和共享內存
- 11. Java和C++共享內存
- 12. POSIX共享內存和msync
- 13. 共享內存和IPC
- 14. 共享內存和多
- 15. C-fork()和共享內存
- 16. electron.atom.io和共享內存
- 17. 指針和共享內存
- 18. 共享內存和常量
- 19. 共享內存和叉
- 20. 內存共享
- 21. Git - 分支和共享代碼庫
- 22. bazaar共享存儲庫vs同位分支vs堆疊分支
- 23. 在刪除共享內存之前從共享內存中分離
- 24. CUDA共享內存
- 25. C共享內存
- 26. 在共享內存
- 27. RDMA內存共享
- 28. 共享內存段
- 29. Linux共享內存
- 30. X平面共享內存問題10
爲什麼會出錯? –