Q1. 為什麼把進程的地址空間劃分為“內核空間”和“用戶空間”?
A:Linux的虛擬地址空間的大小為4GB,內核將這4GB的空間分為兩部分,較高的1GB(虛地址0xC0000000到0xFFFFFFFF)供內核使用,稱為“內核空間”;而較低的3GB(虛地址0x00000000到0xBFFFFFFF)供各個進程使用,稱為“用戶空間”;因為每個進程可以通過系統調用進入內核,因此,內核空間由系統內的所有進程共享;於是,從具體進程的角度來看,每個進程都可以擁有4GB的虛擬地址空間(也叫做虛擬內存)。
Q2. Linux是如何實現“請求調頁”的?
A:
1) 如果被訪問的頁不在內存,也就是說,這個頁還沒有被存放在任何一個物理頁面中,那麼,內核分配一個新的頁面並將其適當地初始化,這種技術稱為“請求調頁”;
2) “請求調頁”是一種動態內存分配技術,它將頁面的分配推遲到不能再推遲為止,也就是說,一直推遲到進程要訪問的頁不在物理內存時為止,由此引起一個缺頁異常;該技術的引入主要是因為進程開始運行時並不訪問其地址空間中的全部地址。