***COW技術簡介 ***
cow意思是寫時復制,在對頁表進程讀操作時,不會產生異常,對頁表進程寫操作時,會觸發page fault異常,通常這種機制的產生是通過對頁表設置read-only.在linux fork()函數中,依照父進程復制子進程,進行資源復制時,依照cow技術原則,子進程對父進程的資源讀操作時共享父進程資源,寫操作時,則復制相應的要寫的內存區域,這樣最直觀的好處是減少了內存消耗.有一個問題,一個父進程可以創建多個子進程,那么對於cow技術,也是相應的進程對寫的操作的內存區域進行相應的復制操作(我的猜測,實際需查明博客).
學習博客園華山大師兄的博文:
寫時復制技術的定義是:創建新進程不分配物理空間,只分配和父進程相同的虛擬內存空間.公用物理內存空間.不論是父進程還是子進程對物理內存空間進行改動時,會復制相應的內存區域.
在fork之后,exec之前,兩個進程使用的是相同的物理內存區,虛擬內存都映射到相同的物理內存區.若沒有exec會給子進程的堆棧段,數據段分配物理空間,代碼段則使用父進程的物理內存空間.若是因為exec()函數,會給子進程的代碼段分配物理內存.(exec函數的作用是加載新的程序到子進程,代替原來的程序,則相應的代碼段,數據段,堆棧段也要重新分配物理內存.)