Copy-on-Write (CoW)
Philosophy
他設計的主要目的是避免不必要的資料複製,想像我們有一本 1000 頁的書,當我們只是在第 100 頁修改一個字,我們不會想要複製整本書,而是希望只製作一個新的第 100 頁,並且將這一頁指向舊的那本書
Mechanism
1. 共享階段
當系統想想要複製資料時,實際上他只是創建一個指標指向同一塊記憶體
2. 監控階段
系統監控對這塊資料的存取,如果只是讀取操作,就繼續讓指標指向同一塊區域
3. 觸發複製
當其中一個指標嘗試修改資料,系統才會進行複製
Granularity
但就像在 Philosophy 講的,我們如果只是修改一小部分的資料,我們並不想對資料進行完整的複製,這時我們就引入了 Granularity 的概念
在作業系統中,記憶體以 Page 為單位管理 (SSD),當我們修改共享記憶體時,系統只會複製修改位置的 Page ,並且在這個 Page 上操作,而修改完的檔案內容就是新的 Page 配上舊的資料兩者相加得到