??高性能處理器一般會提供一個內(nèi)存管理單元(MMU)喊衫,MMU輔助操作系統(tǒng)進行內(nèi)存管理,提供虛擬地址和物理地址的映射杆怕、內(nèi)存訪問權(quán)限保護和Cache緩存控制等硬件支持族购。操作系統(tǒng)內(nèi)核借助MMU可以讓用戶感覺到程序好像可以使用非常大的內(nèi)存空間。
?為了理解基本的MMU操作原理陵珍,需要先搞清楚下面幾個概念:
- TLB(Translation Lookaside Buffer):即轉(zhuǎn)旁路緩存寝杖,TLB是MMU的核心部件,它緩存少量的虛擬地址與物理地址的轉(zhuǎn)換關系互纯,是轉(zhuǎn)換表的Cache朝墩,因此也被稱為“快表”。
- TTW(Translation Table Walk):即轉(zhuǎn)換表漫游伟姐,當TLB中沒有緩存對應的地址轉(zhuǎn)換關系時收苏,需要通過對內(nèi)存中轉(zhuǎn)換表(大多數(shù)處理器的轉(zhuǎn)換表為多級頁表)的訪問來獲得虛擬地址和物理地址的對應關系。TTW成功后愤兵,結(jié)果寫入TLB中鹿霸。
??下圖是一個典型的ARM處理器訪問內(nèi)存的過程,其他處理器也類型秆乳。
??當ARM要訪問處理器時懦鼠,MMU先查找TLB中的虛擬地址表。如果ARM的結(jié)構(gòu)支持分開的數(shù)據(jù)TLB(DTLB)和指令TLB(ITLB)屹堰,則除了取指令使用ITLB外肛冶,其他都使用DTLB。
??若TLB中沒有虛擬地址的入口扯键,則轉(zhuǎn)換表遍歷硬件并從存放于主存儲器內(nèi)的轉(zhuǎn)換表中獲取地址轉(zhuǎn)換信息的訪問權(quán)限(執(zhí)行TTW)睦袖,同時將這些信息放入TLB,或者被放在一個沒有使用的入口或者替換一個已經(jīng)存在的入口荣刑,之后馅笙,在TLB條目中控制信息的控制下,當訪問權(quán)限允許時厉亏,對真實物理地址的訪問將在Cache或在內(nèi)存中發(fā)生董习,如下圖:
ARM內(nèi)TLB條目中的控制信息用于控制對對應地址的訪問權(quán)限以及Cache的操作
- C(高速緩存)和B(緩沖)位被用來控制對應地址的高速緩存和寫緩沖,并決定是否進行高速緩存爱只。
- 訪問權(quán)限和域位用來控制讀寫訪問是否被允許皿淋,如果不允許,MMU則像ARM處理器發(fā)送一個存儲器異常,否則訪問將被允許執(zhí)行窝趣。
??MMU具有虛擬地址和物理地址轉(zhuǎn)換蔗喂、內(nèi)存訪問權(quán)限保護等功能,這將使得Linux操作系統(tǒng)能單獨為系統(tǒng)的每個用戶分配獨立的內(nèi)存空間并保證用戶空間不能訪問內(nèi)核空間的地址高帖,為操作系統(tǒng)的虛擬內(nèi)存管理模塊提供硬件基礎。