13.進程-fork函數的原理和進程空間

本文討論的僅僅限於Linux 32位系統

進程空間

進程空間,指的是進程的虛擬地址空間

每個進程都有自己的4GB 虛擬地址空間,每個進程的進程虛擬地址空間是相互隔離的,互不影響;

虛擬地址到物理地址的映射

每個進程都保留着自己的地址空間到物理地址的映射表;

這個頁(地址空間)到頁框(物理內存空間)的映射表就叫頁表;

fork函數的返回值

前一節講了 fork 就是將進程的地址空間完完全全的複製了一份(不是100%複製,除少數幾個地方外),實際在複製完後,操作系統會悄悄的修改複製出來的進程空間裏的 fork 函數的返回值,把它改成 0(準確的說不是改,而是根本就沒有複製原來的值,直接把它賦值爲 0);

這也就是子進程 fork 函數返回了 0 的原因;

寫時複製技術-Copy On Write(COW) 

當你的進程與其他的進程使用了內容一樣的頁框,MMU會把你的進程和其他的進程指向同一塊頁框;

讀取內容的時候,你和別人共享同一個頁框;即,讀時共享;

當你要進行修改的時候,MMU纔會複製出新的一塊頁框給你,即寫時複製;

發佈了319 篇原創文章 · 獲贊 29 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章