虛擬地址到物理地址的地址變換過程

虛擬地址到物理地址的地址變換過程

2015-05-09  青島  張俊浩 

內容部分來自《Unix內核源碼剖析》

軟件環境:UNIX V6

硬件環境:PDP-11/4016位計算機)


第二章《進程》一節闡述了PDP-11/40的虛擬地址到物理地址的地址變換過程。


MMU通過APR(Active Page Register)寄存器將虛擬地址變換爲物理地址。

APR寄存器由一個PARPage Address Register)寄存器和一個PDRPage Description Register)寄存器構成。

內核通過向與執行進程相對應的、供用戶進程用使用的APR設定適當的值,保證各用戶擁有獨立的虛擬地址空間。

APR共有8組,APR[0]-APR[7]。進程的虛擬地址空間以頁或者段爲單位進行管理,一組APR對應一頁。APR{PARPDR}PAR用來保存與各頁物理地址的基地址有關信息,PDR用來保存各頁的塊(以64字節爲單位)數以及是否允許訪問等信息。每一頁最多可以分配128個塊(8KB)。


【虛擬地址到物理地址的轉化過程】:虛擬地址的高位3比特決定了對應的頁(APR),APR11-0位決定了物理地址基地址的塊地址,加上虛擬地址的12-6比特得到物理內存的塊地址,再加上作爲塊內偏移值的虛擬地址的5-0位,就得到了最後的地址。(如下圖所解析~


上面解析了PDP-11/40MMU的虛擬地址到物理地址的轉化過程,但我們繼續思考,爲什麼處理器對內存管理採用“虛擬地址空間”概念,這樣做有什麼好處?虛擬地制定本質是什麼?

1.採用“虛擬地址空間”的優勢:

1)實現對內存訪問的管理。不同進程使用的虛擬地址彼此隔離。如果程序能直接訪問物理地址,也就能訪問其他進程正在使用的物理內存區域,進而可能是其他進程或者操作系統崩潰。一個進程中的代碼無法更改正在由另一進程使用的物理內存。

2)提高內存的使用效率。通過將不連續的物理內存區域映射到連續的虛擬內存區域,程序可以使用一系列相鄰的虛擬地址來訪問物理內存中不相鄰(MMU完成相應的映射)的大內存緩衝區;程序可以使用一系列虛擬地址來訪問大於可用物理內存的內存緩衝區,當物理內存的供應量變小時,內存管理器會將物理內存頁(通常大小爲 4 KB)保存到磁盤文件,數據或代碼頁會根據需要在物理內存與磁盤之間移動。

3)編程效率。虛擬地址是可重定位程序(ELF)實現的基礎,對於每個程序來說是一塊從02N次方(這裏N=16)的“虛擬”內存,MMU會完成虛擬地址到內存物理地址的轉化~

2.採用“虛擬地址空間”的本質:

與其說虛擬地址,倒不如說內核給程序(代碼段、數據段)提供了統一的訪問模式(抽象出統一的訪問模式)基址加偏移量(這也是內存的分層次的斷頁管理模式)。所以所有程序的編碼你可以從假設的“0”基址開始開始編程,具體基址操作系統設定並由MMU完成地址轉化~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章