1. 程式人生 > >Linux寫時拷貝實現原理

Linux寫時拷貝實現原理

        傳統的fork系統呼叫直接把所有資源複製給新建立的程序,這種實現過於簡單並且效率低下。        寫時拷貝指的是兩個任務可以同時自由讀取記憶體,但任意一個任務試圖對記憶體進行修改時,記憶體就會複製一份提供給修改方單獨使用,以免影響到其他的任務使用。        Linux的fork()使用寫時拷貝頁實現。寫時拷貝是一種可以推遲甚至免除拷貝資料的技術。核心此時並不複製整個程序地址空間,而是讓父程序和子程序共享同一個拷貝。fork()只能夠產生本任務的映象,因此需要使用exec配合才能夠啟動別的新的任務。exec可以用新的可執行映像提花當前的可執行映像,因此在fork產生了一個新任務之後,新任務可以呼叫exec來執行新的可執行檔案。fork和exec通常用於產生新任務,而如果要產生新執行緒,則可以使用clone.        fork()的實際開銷就是複製父程序的頁表以及給子程序建立唯一的程序描述符。