linux 寫時複製 copyonwrite

2021-07-02 13:02:34 字數 520 閱讀 4131

如果多個程序

當父程序產生乙個子程序時,會把父程序的**段、資料段等拷貝給子程序,這裡邊有乙個寫時拷貝原則,這個動作並不是馬上執行的,要等到子程序去修改記憶體裡面的變數時候,才會進行拷貝,拷貝的機制並不是想象的那麼簡單,拷貝的時候只是拷貝子程序所需要的頁,每個程序os都會進行分頁管理,虛擬的記憶體空間2^32遠遠大於物理記憶體空間,然後把物理記憶體分成一頁一頁的形式,如果這個變數放在第一頁,就只會進行第一頁的拷貝,這個時候要操作第二頁的資料時候,這個時候作業系統會進行乙個軟中斷,也就是缺頁中斷,之後再把父程序中的資料拷貝到子程序中,如果父程序沒有產生缺頁中斷之前,父程序對變數進行了修改,作業系統也會維護程序之間的狀態,在父程序修改資料之前,把頁該拷貝的拷貝。

如果多個程序要讀取他們自己那部分資源的副本,那麼賦複製是不必要的,每個程序只要儲存乙個指向這個資源的指標就夠了,如果乙個程序要修改自己的那部分資源的副本,那麼就會複製那份資源,這就是寫時複製的含義。寫時複製的原因分析:加快速度,linux核心是段頁式管理機制,因段管理是從0開始,也可以叫頁式管理機制,只複製對應的頁,再中斷查詢,再賦值。

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...