Copy On Write寫時複製原理

2021-09-23 06:06:42 字數 828 閱讀 7634

copy on write寫時複製

日誌檔案的刪除策略非常簡單:啟動乙個後台執行緒定期掃瞄log file列表,把儲存時間超過閥值的檔案直接刪除(根據檔案的建立時間).為了避免刪除檔案時仍然有read操作(consumer消費),採取copy-on-write方式.

linux核心在使用fork建立程序時,基本上會使用copy-on-write(cow)技術。這裡解釋一下cow技術以及為什麼在fork中使用。

wiki上對cow的解釋:

意思上就是:在複製乙個物件的時候並不是真正的把原先的物件複製到記憶體的另外乙個位置上,而是在新物件的記憶體對映表中設定乙個指標,指向源物件的位置,並把那塊記憶體的copy-on-write位設定為1.

這樣,在對新的物件執行讀操作的時候,記憶體資料不發生任何變動,直接執行讀操作;而在對新的物件執行寫操作時,將真正的物件複製到新的記憶體位址中,並修改新物件的記憶體對映表指向這個新的位置,並在新的記憶體位置上執行寫操作。

這個技術需要跟虛擬記憶體和分頁同時使用,好處就是在執行複製操作時因為不是真正的記憶體複製,而只是建立了乙個指標,因而大大提高效率。但這不是一直成立的,如果在複製新物件之後,大部分物件都還需要繼續進行寫操作會產生大量的分頁錯誤,得不償失。所以cow高效的情況只是在複製新物件之後,在一小部分的記憶體分頁上進行寫操作。

cow在程式設計中被廣泛應用。

特別是在作業系統當中,當乙個程式執行結束時,作業系統並不會急著把其清除出記憶體,原因是有可能程式還會馬上再執行一次(從磁碟把程式裝入到記憶體是個很慢的過程),而只有當記憶體不夠用了,才會把這些還駐留記憶體的程式清出。

--------------------- 

原文(本文內容有新增): 

Copy On Write寫時複製

copy on write解決的問題 早期unix系統建立程序的方式存在缺陷 當發出fork 系統呼叫時,核心原樣複製父程序的整個位址空間並把複製的那乙份分配給子程序。這種行為是非常耗時的,因為它需要 為子程序的頁表分配頁幀 為子程序的頁分配頁幀 初始化子程序的頁表 把父程序的頁複製到子程序相應的頁...

Copy On Write 寫時複製

維基百科 寫入時複製 copy on write 是乙個被使用在程式設計領域的最佳化策略。其基礎的觀念是,如果有多個呼叫者 callers 同時要求相同資源,他們會共同取得相同的指標指向相同的資源,直到某個呼叫者 caller 嘗試修改資源時,系統才會真正複製乙個副本 private copy 給該...

寫時複製Copy On Write

copy on write簡稱cow,不是奶牛,好處就是能保證資料的完整性,掉電的話容易恢復。在執行複製和賦值的時候,不會真正的copy,只有真正對內容進行修改時,才會進行複製,複製完之後再去修改 懶複製 copy on write一定使用了 引用計數 必然有乙個變數類似於refcnt 當第乙個st...