Q1. 什麼是物理地址?什麼是虛地址?什麼是線性地址?
A:
1) 將主板上的物理內存條所提供的內存空間定義為物理內存空間,其中每個內存單元的實際地址就是物理地址;
2) 將應用程序員看到的內存空間定義為虛擬地址空間(或地址空間),其中的地址就叫做虛擬地址(或虛地址),一般用“段:偏移量”的形式來描述,如A815:CF2D;
3) 線性地址空間是指一段連續的、不分段的、范圍為0~4GB的地址空間,一個線性地址就是線性地址空間的一個絕對地址。
Q2. 在保護模式下,MMU如何把一個虛地址轉換為物理地址?
A:在保護模式下,內存管理單元(MMU)由一個或一組芯片組成,其功能是指虛擬地址映射為物理地址,即進行地址轉換;MMU是一種硬件電路,它包含分段部件和分頁部件兩個部件,分別叫做分段機制和分頁機制,分段機制是把一個虛擬地址轉換為線性地址,分頁機制是把一個線性地址轉換為物理地址。
Q3. 為什麼對32位線性地址空間要采用兩級頁表?
A:頁表是把線性地址映射到物理地址的一種數據結構,4GB的線性空間可以被劃分為1M個4KB大小的頁,每個頁表項占4字節,則1M個頁表項的頁表就需要占用4MB空間,而且還要求是連續的,於是采用兩級頁表來實現;兩級頁表就是對頁表再進行分頁,第一級稱為頁目錄,其中存放關於頁表的信息;4MB的頁表再次分頁,可以分為1K個4KB大小的頁。
Q4. 頁面高速緩存的作用是什麼?Linux為什麼主要采用分頁機制來實現虛擬存儲管理?它為什麼采用三級分頁模式而不是兩級?
A:
1) 頁面高速緩存自動保留處理器最近使用的32項頁表項,因此可以覆蓋128KB范圍的內存;
2) Linux主要采用分頁機制來實現虛擬存儲器管理,原因為:
A. Linux的分段機制使得所有的進程都使用相同的段寄存器,這使得內存管理變得簡單;
B. Linux的設計目標之一就是能夠被移植到絕大多數流行的處理平台上,但許多RISC處理器支持的分段功能非常有限;為了保證可移植性,Linux采用三級分頁模式,因為許多處理器都采用64位結構;Linux定義了三種類型的頁表:頁目錄(PGD)、中間目錄(PMD)和頁表(PT)。