本頁使用了標題或全文手工轉換

寫入時複製

維基百科,自由的百科全書
跳至導覽 跳至搜尋

寫入時複製英語:Copy-on-write,簡稱COW)是一種電腦程式設計領域的最佳化策略。其核心思想是,如果有多個呼叫者(callers)同時請求相同資源(如記憶體或磁盤上的數據儲存),他們會共同取得相同的指標指向相同的資源,直到某個呼叫者試圖修改資源的內容時,系統才會真正複製一份專用副本(private copy)給該呼叫者,而其他呼叫者所見到的最初的資源仍然保持不變。這過程對其他的呼叫者都是透明的(transparently)。此作法主要的優點是如果呼叫者沒有修改該資源,就不會有副本(private copy)被建立,因此多個呼叫者只是讀取操作時可以共享同一份資源。

應用[編輯]

虛擬記憶體管理中的寫時複製[編輯]

一般把這種被共享存取的頁面標記為唯讀。當一個task試圖向記憶體中寫入數據時,記憶體管理單元(MMU)投擲一個異常,內核處理該異常時為該task分配一份實體記憶體並複製數據到此記憶體,重新向MMU發出執行該task的寫操作。

數據儲存中的寫時複製[編輯]

Linux等的檔案管理系統使用了寫時複製策略。

數據庫伺服器也一般採用了寫時複製策略,為用戶提供一份snapshot。

軟件應用中的寫時複製[編輯]

C++標準程式庫中的std::string類,在C++98/C++03標準中是允許寫時複製策略。但在C++11標準中為了提高並列性取消了這一策略。[1] GCC從版本5開始,std::string不再採用COW策略。

參考文獻[編輯]

  1. ^ Concurrency Modifications to Basic String. Open Standards. [2015-02-13].