天天看點

Linux作業系統基礎知識之二:記憶體尋址

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為什麼主要采用分頁機制來實作虛拟存儲管理?它為什麼采用三級分頁模式而不是兩級?

1)        頁面高速緩存自動保留處理器最近使用的32項頁表項,是以可以覆寫128KB範圍的記憶體;

2)        Linux主要采用分頁機制來實作虛拟存儲器管理,原因為:

A.      Linux的分段機制使得所有的程序都使用相同的段寄存器,這使得記憶體管理變得簡單;

B.      Linux的設計目标之一就是能夠被移植到絕大多數流行的處理平台上,但許多RISC處理器支援的分段功能非常有限;為了保證可移植性,Linux采用三級分頁模式,因為許多處理器都采用64位結構;Linux定義了三種類型的頁表:頁目錄(PGD)、中間目錄(PMD)和頁表(PT)。

繼續閱讀