JILK - CPU - (5) - CPU管理的內存模型

CPU提供了一些相關的措施來管理物理內存,這些管理方式的存在旨要是:將程序裏所出現的邏輯地址與計算機的物理內存地址解耦合。如果直接將應用程序裏的邏輯地址與物理內存地址等同起來,那麼就相當於兩者緊密的耦合在一起了,硬件的發展和操作系統的演化都呼喚更具靈活的方式來決定如何將邏輯地址和物理地址進行映射。因此就需要CPU建立相應的內存管理機制,以便解耦程序的邏輯地址和物理地址。CPU的內存管理機制既能靈活地提供邏輯地址與物理地址之間的映射方案,又能提供對內存訪問的相應保護措施。這樣程序員的視角里只需要關心程序的邏輯地址空間,邏輯地址空間與物理地址空間之間的映射交由CPU和操作系統來處理。

Intel CPU提供的內存管理模型有三種:

1)平坦的內存模型(Flat memory model)。從一個應用程序的角度,其所操縱的邏輯地址都落入在一個線性地址空間裏,包括程序的代碼、所用的數據、堆棧等東西都落入這個線性地址空間裏。在非64位模式下,這個線性地址空間爲4G(2^32)大小。每個應用程序都認爲自己擁有一個4G大小的線性地址空間,然後每個應用程序裏的線性地址空間一般再通過頁式管理,與實際的物理地址空間進行映射。當啓用頁式管理時,線性地址空間被劃分爲一頁頁,每頁的大小一般是4KB(當應用了擴展頁面大小(Page Size Extensions, PSE)後,頁面的大小可爲4MB),然後物理地址空間也被劃分爲一頁頁,當然這裏的物理地址空間所包含不一定只是物理內存,也可以是物理硬盤上的一部分區域。線性地址空間裏的一頁映射到物理地址空間裏的一頁,從而爲內存的管理提供了非常大的靈活性。譬如頁面的粒度大小可調,所支持的物理地址空間的大小可調(當啓用頁地址擴展(Page Address Extensions, PAE)後,可支持超過4GB大小的物理內存;而在64位模式下,支持的物理地址空間可超過64GB)。

2)分段的內存模型(Segmented memory model)。從一個應用程序的角度,其所操縱的邏輯地址都落入一個個的段裏,每個段有各自的起始邏輯地址和各自的大小,這些都由段的描述符來描述。其實質就是將線性空間劃分成一個個的段,段與段之間可以重疊。譬如CPU根據一個邏輯地址得到其所在的段描述符和在段內的偏移量後,經過運算得出其段內地址,然後這個段內地址就是作爲一個線性空間裏的地址,然後再映射到具體的物理地址中去。在64位模式下,CPU已經無視段的存在(FS、GS除外),認爲所有段的基地址都在線性地址0,而直接應用平坦的內存模型。

3)實地址的內存模型(Real-address mode memory model)。這是8086下的內存模型。其實它就是分段的內存模型的特例化,因實地址的內存模型也是一種分段的內存模型,只不過其每個段的大小均爲64KB,且其線性地址空間最大爲1MB。

Three memory management models

上圖來自《Intel 64 and IA-32 Architecture Software Developers Manaual Volume1》。

在不同的CPU操作模式下,可用的內存模型會有所不同:

1)在保護模式(Protected mode)下,三種內存模型都可用得上,而實地址模型只能在虛擬8086模式下使用。

2)實地址模式(Real-address mode)下,在該模式下,只能使用實地址模型了。

3)系統管理模式(System management mode)下,CPU切換到了一個稱爲系統管理RAM(system management RAM)的獨立地址空間裏,訪問該地址空間的模型與實地址模型相似。

4)兼容模式(Compatibility mode)下,可用的內存模型與32位的保護模式下的一樣。

5)64位模式(64-bit model)下,分段模型和實地址模型被拋棄,直接應用平坦的模型,得到64位的線性地址空間。

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