維基百科:寫入時複製(copy-on-write)是乙個被使用在程式設計領域的最佳化策略。其基礎的觀念是,如果有多個呼叫者(callers)同時要求相同資源,他們會共同取得相同的指標指向相同的資源,直到某個呼叫者(caller)嘗試修改資源時,系統才會真正複製乙個副本(private copy)給該呼叫者,以避免被修改的資源被直接察覺到,這過程對其他的呼叫只都是通透的(transparently)。此作法主要的優點是如果呼叫者並沒有修改該資源,就不會有副本(private copy)被建立。
- 為子程序的頁表分配頁幀
- 為子程序的頁分配頁幀
- 初始化子程序的頁表
- 把父程序的頁複製到子程序相應的頁中
這種建立位址空間的方法涉及許多記憶體訪問,消耗許多cpu週期,並且完全破壞了快取記憶體中的內容。在大多數情況下,這樣做常常是毫無意義的,因為許多子程序通過裝入乙個新的程式開始它們的執行,這樣就完全丟棄了所繼承的位址空間。
現在的linux核心採用一種更為有效的方法,稱之為寫時複製(copy on write,cow)。這種思想相當簡單:父程序和子程序共享頁幀而不是複製頁幀。然而,只要頁幀被共享,它們就不能被修改,即頁幀被保護。無論父程序還是子程序何時試圖寫乙個共享的頁幀,就產生乙個異常,這時核心就把這個頁複製到乙個新的頁幀中並標記為可寫。原來的頁幀仍然是寫保護的:當其他程序試圖寫入時,核心檢查寫程序是否是這個頁幀的唯一屬主,如果是,就把這個頁幀標記為對這個程序是可寫的。
Copy On Write寫時複製
copy on write解決的問題 早期unix系統建立程序的方式存在缺陷 當發出fork 系統呼叫時,核心原樣複製父程序的整個位址空間並把複製的那乙份分配給子程序。這種行為是非常耗時的,因為它需要 為子程序的頁表分配頁幀 為子程序的頁分配頁幀 初始化子程序的頁表 把父程序的頁複製到子程序相應的頁...
寫時複製Copy On Write
copy on write簡稱cow,不是奶牛,好處就是能保證資料的完整性,掉電的話容易恢復。在執行複製和賦值的時候,不會真正的copy,只有真正對內容進行修改時,才會進行複製,複製完之後再去修改 懶複製 copy on write一定使用了 引用計數 必然有乙個變數類似於refcnt 當第乙個st...
關於 copy on write 寫時複製
先舉個小例子,在我們學習c 的時候,我不相信老師沒跟你提過什麼是字串string淺拷貝深拷貝的問題,就是 string a i am a programer string b a 這是所謂的淺拷貝,當然我們不是在討論淺拷貝的問題,我只是讓大家知道b只是字串 i am a programer 的乙個引...