MMU提供的一個關鍵服務是,能使各個任務作為獨立的程序在其自己的私有存儲空間運行.地址轉換過程允許運行的多個程序使用相同的虛擬地址,而各自存儲在物理存儲器的不同位置.
區(qū)域可以是活躍的,也可以是睡眠的:活躍區(qū)域包含當前系統(tǒng)正在使用的代碼或數(shù)據(jù);睡眠區(qū)域包含當前不使用,但可能在短時間內變?yōu)榛钴S的代碼或數(shù)據(jù).睡眠區(qū) 域是被保護的,因此當前正在運行的任務是不能訪問的.MPU和MMU的主要區(qū)別是,MMU中增加了額外的硬件,以支持虛存.
一個重定位寄存器只能轉換一塊存儲空間.這塊存儲空間的大小由虛擬地址的偏移量部分所占的位數(shù)所決定.ARM的MMU中臨時存放轉換數(shù)據(jù)的一組重定位寄存 器實際上是一個由64個重定位寄存器組成的全相聯(lián)cache.這個cache就是轉換旁路緩沖器--TLB.TLB緩存最近被訪問的頁的轉換數(shù)據(jù).MMU 還使用主存中的表來存放描述系統(tǒng)中用到的虛擬存儲器映射數(shù)據(jù),這些轉換數(shù)據(jù)的表就是頁表.頁表中的每個項代表了將虛擬存儲器的一個頁轉換到物理存儲器的一 個頁幀所需要的所有信息.
在MMU中,區(qū)域被定義為一組頁表的集合,并作為虛存中的連續(xù)頁完全由軟件控制.除了L1一級頁表外,所有其他的頁表都代表虛存的1MB空間.如果一個區(qū) 域的大小大于1MB或者它跨過頁表的1MB邊界地址,那么就必須使用一組頁表來描述這個區(qū)域.頁表可以駐留在存儲器中,而不必映射到MMU硬件.
當在2個應用程序任務間實現(xiàn)上下文切換時,處理器其實要發(fā)生多次上下文切換.它先從用戶模式任務切換到內核模式任務,以處理準備運行下一個應用程序任務時的上下文數(shù)據(jù)的移動;然后,它從內核模式任務切換到下一個上下文的新的用戶模式任務.
MMU在轉換一個地址時失敗,就會產(chǎn)生一個中止異常.MMU只有在轉換失敗,權限錯誤和域錯誤時,才會中止.
L1住頁表包含2種類型的頁表項:保存指向二級頁表起始地址指針的頁表項和保存用于轉換1MB頁的頁表項.L1頁表也稱為段頁表.當L1頁表作為頁目錄 時,其頁表項包含的是1MB虛擬空間的L2粗頁表或L2細頁表指針;當L1頁表用于轉換一個1MB的段時,其頁表項包含的是物理存儲器中1MB頁幀的首地 址.目錄頁表項和1MB的段頁表項可以共存于L1主頁表.CP15:c2寄存器保存轉換表基地址TTB--指向L1主頁表在虛存中的位置.
TLB只支持兩種類型的命令:清除TLB和鎖定TLB中的轉換數(shù)據(jù).存儲器訪問時,MMU將虛擬地址的一部分與TLB中的所有值進行比較.如果TLB中已 有所要的轉換數(shù)據(jù),即為一次TLB命中,則由TLB提供物理地址的轉換數(shù)據(jù).如果TLB中不存在有效的轉換數(shù)據(jù),即為一次TLB失效,則MMU會由硬件自 動處理TLB失效,通過主存中的頁表搜索有效的轉換數(shù)據(jù),并將其裝入TLB的64行的一行.如果TLB中的某一行是鎖定的,則當TLB清除命令發(fā)出時,它 仍然保留在TLB中.
在受保護的系統(tǒng)中,主要有兩類資源需要監(jiān)視:存儲器系統(tǒng)和外圍設備.存儲器中對區(qū)域的訪問可以是讀/寫,只讀或不可訪問,基于當時的處理器模式--管理模 式或用戶模式,還有一些附加的權限.區(qū)域還有控制cache和寫緩沖器屬性的cache寫策略.當處理器訪問主存的一個區(qū)域時,MPU比較該區(qū)域的訪問權 限屬性和當時的處理器模式.如果請求符合區(qū)域訪問標準,則MPU允許內核讀/寫主存;如果存儲器請求導致存儲器訪問違例,則MPU產(chǎn)生一個異常信號.
區(qū)域與內核是馮.諾依曼結構還是哈佛結構無關.每個區(qū)域通過0~7的號碼來標識和引用.區(qū)域的屬性如下:
(1)區(qū)域可以相互重疊; (2)每個區(qū)域都分配有一個優(yōu)先級,該優(yōu)先級與分配區(qū)域的權限無關; (3)當區(qū)域重疊時,具有最高優(yōu)先級的區(qū)域的屬性可以覆蓋其他區(qū)域的屬性,優(yōu)先級僅作用于重疊部分的地址; (4)區(qū)域的起始地址必須是其大小的倍數(shù); (5)區(qū)域的大小可以是4KB~4GB之間的任何2的乘冪; (6)訪問所定義區(qū)域外的存儲器將產(chǎn)生異常.如果是內核預取指令,則MPU產(chǎn)生預取指令中止異常;如果是存儲器數(shù)據(jù)請求,則產(chǎn)生數(shù)據(jù)中止異常. 在啟用存儲器保護單元之前,必須至少定義一個數(shù)據(jù)區(qū)域和一個指令區(qū)域,而且必須在啟用cache和寫緩沖器之前(或同時)啟用存儲器保護單元.控制器通過 設置CP15的主寄存器c1~5來配置MPU.通過配置寄存器c2和c3來設置區(qū)域的cache和寫緩沖器的屬性,寄存器c5控制區(qū)域的訪問權限,在寄存 器c6里有8個或16個次寄存器用來定義每個區(qū)域的大小和位置.初始化MPU,cache和寫緩沖器需要以下步驟: (1)使用CP15:c6來定義指令和數(shù)據(jù)區(qū)域的大小和位置 (2)使用CP15:c5來設置每個區(qū)域的訪問權限 (3)分別使用CP15:c2和CP15:c3來設置每個區(qū)域的cache和寫緩沖器屬性 (4)使用CP15:c1來使能cache和MPU 每個內核有3個CP15寄存器用來控制區(qū)域的cache和寫緩沖器屬性.其中CP15:c2:c0:0和CP15:c2:c0:1兩個寄存器保存D- cache和I-cache區(qū)域屬性;第三個寄存器,CP15:c3:c0:0用于保存區(qū)域寫緩沖器屬性,并應用于存儲器數(shù)據(jù)區(qū)域.當配置數(shù)據(jù)區(qū)域時,區(qū) 域的cache位和寫緩沖器位一起決定區(qū)域的策略.寫緩沖器位有2個用途:使能和禁止區(qū)域的寫緩沖器和設置區(qū)域的cache策略.區(qū)域的cache位控制 寫緩沖器位的作用.當cache位為0時,寫緩沖器位為1,則使能寫緩沖器;寫緩沖器位為0,則禁用寫緩沖器.當cache位為1時,cache和寫緩沖 器都被使能,此時寫緩沖器位決定cache策略.若寫緩沖器位為0,則區(qū)域使用直寫策略;若寫緩沖器位為1,則區(qū)域使用回寫策略.
|
|