天天看點

虛拟位址到實體位址的位址變換過程【轉】

虛拟位址到實體位址的位址變換過程

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完成位址轉化~

虛拟位址到實體位址的位址變換過程【轉】

【作者】​​張昺華​​

【微信公衆号】 張昺華

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.

繼續閱讀