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


轉自:https://blog.csdn.net/yunfenglw/article/details/45603823

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/yunfenglw/article/details/45603823
虛擬地址到物理地址的地址變換過程

2015-05-09  青島  張俊浩 

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

軟件環境:UNIX V6

硬件環境:PDP-11/40(16位計算機)

 

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

 

 

 

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

APR寄存器由一個PAR(Page Address Register)寄存器和一個PDR(Page Description Register)寄存器構成。

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

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

 

 

 

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

 

 

 

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

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

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

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

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

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

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

 

 


————————————————
版權聲明:本文為CSDN博主「天朗-星空」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yunfenglw/article/details/45603823


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM