我們知道了一個進程如何採用請求調頁,僅調入包括第一條指令的頁面,從而能夠很 快開始執行。然而,通過系統呼叫 fork() 的進程建立最初可以通過使用類似於頁面共用的技術,繞過請求調頁的需要。這種技術提供了快速的進程建立,並最小化必須分配給新建立進程的新頁面的數量。
回想一下,系統呼叫 fork() 建立了父進程的一個複製,以作為子進程。傳統上,fork() 為子進程建立一個父進程地址空間的副本,複製屬於父進程的頁面。然而,考慮到許多子進程在建立之後立即呼叫系統呼叫 exec(),父進程地址空間的複製可能沒有必要。
因此,可以採用一種稱為
寫時複製的技術,它通過允許父進程和子進程最初共用相同的頁面來工作。這些共用頁面標記為寫時複製,這意味著如果任何一個進程寫入共用頁面,那麼就建立共用頁面的副本。
圖 1 進程 1 修改頁面 C 前後