MMU記憶體管理單元介紹

2021-07-24 15:13:44 字數 1989 閱讀 3145

本篇文章簡要闡述mmu的概念,以及以段位址的轉換過程為例,簡單說明mmu將虛擬位址轉換成實體地址的過程。更多詳細內容請檢視《arm-mmu(中文手冊).pdf》。

mmu的實現過程,實際上就是乙個查表對映的過程。建立頁表(translate table)是實現mmu功能不可缺少的一步。頁表是位於系統的記憶體中,頁表的每一項對應於乙個虛擬位址到實體地址的對映。每一項的長度即是乙個字的長度(在arm中,乙個字的長度被定義為4位元組)。頁表項除完成虛擬位址到實體地址的對映功能之外,還定義了訪問許可權和緩衝特性等。

mmu 支援基於節或頁的儲存器訪問, mmu 可以用下面四種大小進行對映:

節 ( section ) 構成 1mb 的儲存器塊。

微頁 ( tiny page ) 構成 1kb 的儲存器塊。

小頁 ( small page ) 構成 4kb 的儲存器塊。

大頁 ( large page ) 構成 64kb 的儲存器塊。

其中對於節對映使用一級轉換表就可以了,而對於微頁、小頁、大頁則需要使用兩級轉換表。

if(va < 32m)

mva = va | ( pid<<25 )

else

mva = va

只是上面的過程是由硬體實現的。這樣為va進行了一級對映,為什麼呢?在linux系統裡,每個程序的位址空間0-4g,0-3g是程序獨有的,稱為使用者空間,3g-4g是系統的,稱為核心空間,所有程序共享。如果兩個程序所用的va有重疊,在切換程序時,為了把重疊的va對映到不同的pa上,需要重建頁表、使無效caches和tlbs。使用了mva,使程序在va相同的情況下,使用不同的mva,進而pa也不同。這就是在va與pa之間加上一次到mva的對映的意義。

3)pa,實體地址,mva通過mmu轉換後的位址。

一級頁表使用 4096 個描述符來表示 4gb 空間,每個描述符對應 1mb 的虛擬位址,儲存它對應的 1mb 物理空間的起始位址,或者儲存下一級頁表的位址。每個描述符佔 4 個位元組,格式如下:

使用 mva[31:20]來索引一級頁表(20-31 一共 12 位,2^12=4096,所以是4096 個描述符)。其中段位址的轉換流程如下圖所示:

①頁表基址暫存器位[31:14]和 mva[31:20]組成乙個低兩位為 0 的 32 位位址, mmu 利用這個位址找到段描述符。

②取出段描述符的位[31:20](段基址,section base address),它和 mva[19:0]組成乙個 32 位的實體地址(這就是 mva 對應的 pa)

從mva 到 pa 的轉換需要訪問多次記憶體,大大降低了 cpu 的效能,有沒有辦法改進呢?

程式執行過程中,用到的指令和資料的位址往往集中在乙個很小的範圍內,其中的位址、資料經常使用,這是程式訪問的區域性性。由此,通過使用乙個高速、容量相對較小的儲存器來儲存近期用到的頁表條目(段、大頁、小頁、極小頁描述符),避免每次位址轉換都到主存中查詢,這樣就大幅提高效能。這個儲存器用來幫助快速地進行位址轉換,成為轉譯查詢快取(translation lookaside buffers, tlb)。

當 cpu 發出乙個虛擬位址時,mmu 首先訪問 tlb。如果 tlb 中含有能轉換這個虛擬位址的描述符,則直接利用此描述符進行位址轉換和許可權檢查,否則 mmu 訪問頁表找到描述符後再進行位址轉換和許可權檢查,並將這個描述符填入tlb 中,下次再使用這個虛擬位址時就直接使用 tlb 用的描述符。

若轉換成功,則稱為」命中」。linux 系統中,目前的」命中」率高達 90%以上,使分頁機制帶來的效能損失降低到了可接收的程度。若在 tlb 中進行查表轉換失敗,則退縮為一般的位址變換,概率小於 10%。

MMU記憶體管理單元

mmu記憶體管理單元主要負責虛擬位址到實體地址的對映。在沒有使用虛擬儲存器的機器上,虛擬位址被直接送到記憶體匯流排上,使具有相同位址的物理儲存器被讀寫。而在使用了虛擬儲存器的情況下,虛擬位址不是被直接送到記憶體位址匯流排上,而是送到記憶體管理單元 mmu,再由mmu對映到物理記憶體中。如上圖所示,使...

記憶體管理單元MMU實驗

mmu介紹 許可權管理 當我們使用windows時,有時候會彈出位址訪問錯誤,但這不影響整個作業系統的執行。假設a b程式的時序圖如下 因為a b程式的位址空間各不相同。許可權管理就使得a程式無法訪問b程式的位址。如果a程式寫的非常糟糕,a程式並不能破壞核心。假如有兩個hello.c檔案,如圖 這兩...

MMU記憶體管理單元簡介

mmu 全稱叫做 memory manage unit,也就是記憶體管理單元。在老版本的 linux 中要求處理器必須有 mmu,但是現在 linux 核心已經支援無 mmu 的處理器了。mmu 主要完成的功能如下 虛擬位址 va,virtual address 實體地址 pa,physcicala...