當前位置:
首頁 > 知識 > MMU與邏輯地址,物理地址和虛擬地址之間的關係

MMU與邏輯地址,物理地址和虛擬地址之間的關係

MMU是Memory Management Unit的縮寫,中文名是 內存管理 單元,它是 中央處理器 (CPU)中用來管理 虛擬存儲器 、物理存儲器的控制線路,同時也負責 虛擬地址 映射為 物理地址 ,以及提供硬體機制的內存訪問授權,多用戶多進程操作系統。

虛擬地址又稱為線性地址,將線性地址轉換到物理地址,需要用到頁式MMU;而將邏輯地址轉換到虛擬地址,需要用到段式MMU。

虛擬存儲器的基本思想是程序,數據,堆棧的總的大小可以超過物理存儲器的大小,操作系統把當前使用的部分保留在內存中,而把其他未被使用的部分保存在磁碟上。比如對一個16MB的程序和一個內存只有4MB的機器,操作系統通過選擇,可以決定各個時刻將哪4M的內容保留在內存中,並在需要時在內存和磁碟間交換程序片段,這樣就可以把這個16M的程序運行在一個只具有4M內存機器上了。而這個16M的程序在運行前不必由程序員進行分割。

——地址範圍、虛擬地址映射為物理地址 以及 分頁機制

任何時候,計算機上都存在一個程序能夠產生的地址集合,我們稱之為地址範圍。這個範圍的大小由CPU的位數決定,例如一個32位的CPU,它的地址範圍是0~0xFFFFFFFF (4G),而對於一個64位的CPU,它的地址範圍為0~0xFFFFFFFFFFFFFFFF (16E).這個範圍就是我們的程序能夠產生的地址範圍,我們把這個地址範圍稱為虛擬地址空間,該空間中的某一個地址我們稱之為虛擬地址。與虛擬地址空間和虛擬地址相對應的則是物理地址空間和物理地址,大多數時候我們的系統所具備的物理地址空間只是虛擬地址空間的一個子集。這裡舉一個最簡單的例子直觀地說明這兩者,對於一台內存為256M的32bit x86主機來說,它的虛擬地址空間範圍是0~0xFFFFFFFF(4G),而物理地址空間範圍是0x00000000~0x0FFFFFFF(256M)。

在沒有使用虛擬存儲器的機器上,地址被直接送到內存匯流排上,使具有相同地址的物理存儲器被讀寫;而在使用了虛擬存儲器的情況下,虛擬地址不是被直接送到內存地址匯流排上,而是送到存儲器管理單元MMU,把虛擬地址映射為物理地址。

大多數使用虛擬存儲器的系統都使用一種稱為分頁(paging)機制。虛擬地址空間劃分成稱為頁(page)的單位,而相應的物理地址空間也被進行劃分,單位是頁幀(frame).頁和頁幀的大小必須相同。在這個例子中我們有一台可以生成32位地址的機器,它的虛擬地址範圍從0~0xFFFFFFFF(4G),而這台機器只有256M的物理地址,因此他可以運行4G的程序,但該程序不能一次性調入內存運行。這台機器必須有一個達到可以存放4G程序的外部存儲器(例如磁碟或是FLASH),以保證程序片段在需要時可以被調用。在這個例子中,頁的大小為4K,頁幀大小與頁相同——這點是必須保證的,因為內存和外圍存儲器之間的傳輸總是以頁為單位的。對應4G的虛擬地址和256M的物理存儲器,他們分別包含了1M個頁和64K個頁幀。

X86 MMU提供的定址模式有4K/2M/4M的PAGE模式(根據不同的CPU,提供不同的能力),此處提供的是目前大部分操作系統使用的4K 分頁 機制的描述,並且不提供ACCESS CHECK的部分。

ARM cpu地址轉換涉及三種地址: 虛擬地址 (VA,Virtual Address),變換後的虛擬地址(MVA,Modified Virtual Address), 物理地址 (PA,Physical Address)。沒有啟動MMU時,CPU核心、cache、MMU、外設等所有部件使用的都是物理地址。啟動MMU後,CPU核心對外發出的是虛擬地址VA,VA被轉換為MVA供cache、MMU使用,並再次被轉換為PA,最後使用PA讀取實際設備。

MMU與邏輯地址,物理地址和虛擬地址之間的關係

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

typescript入門,可以一起探討提點意見互相學習
short數組保存unicode編碼和unicode編碼轉換成shrot數組

TAG:程序員小新人學習 |