本文討論的僅僅限於Linux 32位系統
進程空間
進程空間,指的是進程的虛擬地址空間;
每個進程都有自己的4GB 虛擬地址空間,每個進程的進程虛擬地址空間是相互隔離的,互不影響;
虛擬地址到物理地址的映射
每個進程都保留着自己的地址空間到物理地址的映射表;
這個頁(地址空間)到頁框(物理內存空間)的映射表就叫頁表;
fork函數的返回值
前一節講了 fork 就是將進程的地址空間完完全全的複製了一份(不是100%複製,除少數幾個地方外),實際在複製完後,操作系統會悄悄的修改複製出來的進程空間裏的 fork 函數的返回值,把它改成 0(準確的說不是改,而是根本就沒有複製原來的值,直接把它賦值爲 0);
這也就是子進程 fork 函數返回了 0 的原因;
寫時複製技術-Copy On Write(COW)
當你要進行修改的時候,MMU纔會複製出新的一塊頁框給你,即寫時複製;