ARM存儲(chǔ)器之:存儲(chǔ)管理單元MMU
15.5.4MMU的使能與禁止
MMU的使能/禁止可以通過(guò)CP15寄存器的c1的bit[0]來(lái)控制。
·bit[0]=0,MMU禁止。
·bit[0]=1,MMU使能。
下面的例子顯示了典型的MMU使能過(guò)程。
【例15.4】典型的MMU使能過(guò)程。
MRCp15,0,r0,c1,0,0
ORRr0,#01
MCRp15,0,r0,c1,0,0
當(dāng)MMU被禁止時(shí),存儲(chǔ)訪問(wèn)執(zhí)行下列過(guò)程。
①當(dāng)禁止MMU時(shí),存儲(chǔ)系統(tǒng)是否支持Cache和寫(xiě)緩存,根據(jù)不同芯片設(shè)計(jì)不同而有所不同(ARM公司將設(shè)計(jì)權(quán)交給芯片廠商)。
·如果芯片規(guī)定當(dāng)禁止MMU時(shí)禁止Cache和寫(xiě)緩存,則存儲(chǔ)訪問(wèn)不考慮C、B控制位。
·如果芯片規(guī)定禁止MMU時(shí)使能Cache和寫(xiě)緩存,則數(shù)據(jù)訪問(wèn)被視為無(wú)Cache(uncachable)和寫(xiě)緩存(unbufferable)的,即C=0、B=0。讀取指令時(shí),如果系統(tǒng)是統(tǒng)一的TLB,則C=0;如果使用分開(kāi)的TLB,則C=1。
②存儲(chǔ)訪問(wèn)不受權(quán)限控制,MMU也不會(huì)產(chǎn)生存儲(chǔ)訪問(wèn)中止信號(hào)。
③所有物理地址和虛擬地址相等,即使用平板存儲(chǔ)模式。
使能/禁止MMU時(shí)需要注意以下幾個(gè)問(wèn)題。
·在使能MMU之前,正確的傳輸表要在內(nèi)存中事先建立,CP15的相關(guān)寄存器必須完成初始化操作。
·如果使用的不是平板存儲(chǔ)模式(物理地址和對(duì)應(yīng)虛擬地址相等),在禁止/使能MMU時(shí),虛擬地址和物理地址的對(duì)應(yīng)關(guān)系發(fā)生變化,這時(shí)應(yīng)該清除(Flush)Cache中的當(dāng)前地址變換入口(Entry)。
·如果完成禁止/使能MMU的代碼的物理地址和虛擬地址不同,則禁止/使能MMU將帶來(lái)很大麻煩,因此建議完成使能/禁止MMU的代碼的物理地址和虛擬地址相同。
15.5.5虛擬地址到物理地址的轉(zhuǎn)換
(1)地址重定位
為了使任務(wù)有各自的虛擬存儲(chǔ)器映射,MMU硬件采用地址重定位,在地址訪問(wèn)主存之前,轉(zhuǎn)換有處理器輸出的虛擬地址。當(dāng)處理器產(chǎn)生一個(gè)虛擬地址時(shí),MMU取出這個(gè)虛擬地址的高位,遍歷傳輸表,從而形成一個(gè)物理地址。
虛擬存儲(chǔ)空間到物理存儲(chǔ)空間的映射是以內(nèi)存塊為單位進(jìn)行的。也就是說(shuō),虛擬存儲(chǔ)空間中一塊連續(xù)的存儲(chǔ)空間被映射到物理存儲(chǔ)空間中同樣大小的一塊連續(xù)存儲(chǔ)空間。
虛擬存儲(chǔ)空間到物理存儲(chǔ)空間地址重映射過(guò)程如圖15.24所示。
圖15.24虛擬存儲(chǔ)空間到物理存儲(chǔ)空間地址重映射過(guò)程
ARM支持的存儲(chǔ)塊的大小有以下幾種。
·段(Sections):大小為1M的存儲(chǔ)塊。
·大頁(yè)(Largepages):大小為64KB。
·小頁(yè)(Smallpages):大小為4KB。
·極小頁(yè)(TinyPages):大小為1KB。
段和大頁(yè)只需通過(guò)一次映射就可以將虛擬地址轉(zhuǎn)換成物理地址,也可以根據(jù)需要增加一級(jí)映射,采用兩級(jí)映射的方式再將大頁(yè)分成16KB的子頁(yè),小頁(yè)分成1KB的子頁(yè)。極小頁(yè)不能再分,只能以1KB大小的整頁(yè)為單位。
ARM在內(nèi)存中存在兩級(jí)頁(yè)表以實(shí)現(xiàn)上述地址映射過(guò)程。
·一級(jí)頁(yè)表:一級(jí)頁(yè)表包括兩種類型的頁(yè)表項(xiàng),即保持指向二級(jí)頁(yè)表起始地址的頁(yè)表項(xiàng)和保存用于轉(zhuǎn)換段(Section)地址的頁(yè)表項(xiàng)。一級(jí)頁(yè)表也稱為段頁(yè)表(sectionpagetable)。
·二級(jí)頁(yè)表:二級(jí)頁(yè)表包含以大頁(yè)和小頁(yè)為單位的地址變換頁(yè)表項(xiàng)。
一級(jí)頁(yè)表將4G地址空間劃分為多個(gè)1MB的段(Section),因此一級(jí)頁(yè)表包含4096個(gè)頁(yè)表項(xiàng)。一級(jí)頁(yè)表是一個(gè)混合表,可以作為二級(jí)頁(yè)表的目錄表,也可以作為用于轉(zhuǎn)換1MB段(也可視為1MB的虛擬頁(yè))的普通頁(yè)表。當(dāng)一級(jí)頁(yè)表作為頁(yè)目錄時(shí),其頁(yè)表項(xiàng)包含的是代表1MB虛擬空間的二級(jí)頁(yè)表指針。二級(jí)頁(yè)表分為粗頁(yè)表(Coarse)和細(xì)頁(yè)表(Fine)。當(dāng)一級(jí)頁(yè)表用于轉(zhuǎn)換一個(gè)1MB的段時(shí),其頁(yè)表項(xiàng)包含的是物理存儲(chǔ)器中對(duì)應(yīng)1MB頁(yè)幀(pageframe)的首地址。
注意 | 目錄頁(yè)表項(xiàng)和1MB的段頁(yè)表項(xiàng)可以共存于一級(jí)頁(yè)表中。 |
一個(gè)粗二級(jí)頁(yè)表(Coarse)包含256個(gè)頁(yè)表項(xiàng),占有1KB的主存空間,每個(gè)頁(yè)表項(xiàng)將一個(gè)4KB的虛擬存儲(chǔ)塊轉(zhuǎn)換成一個(gè)4KB的物理存儲(chǔ)塊。粗二級(jí)頁(yè)表支持4KB和64KB的頁(yè),頁(yè)表項(xiàng)包含的是4KB或64KB的頁(yè)幀地址。如果轉(zhuǎn)換的是一個(gè)64KB的頁(yè),則對(duì)于每個(gè)64KB的頁(yè),同一個(gè)頁(yè)表項(xiàng)必須在頁(yè)表中重復(fù)16次。
一個(gè)細(xì)二級(jí)頁(yè)表(Fine)有1024個(gè)頁(yè)表項(xiàng),占有4KB的主存空間,每個(gè)頁(yè)表項(xiàng)轉(zhuǎn)換一個(gè)1KB的存儲(chǔ)塊。細(xì)頁(yè)表支持1KB、4KB、64KB虛存頁(yè),每個(gè)頁(yè)表項(xiàng)包含1KB、4KB或64KB的物理頁(yè)幀首地址。如果轉(zhuǎn)換的是4KB的頁(yè),則同一個(gè)頁(yè)表項(xiàng)必須在頁(yè)表中連續(xù)重復(fù)4次;如果轉(zhuǎn)換的是64KB的頁(yè),則同一個(gè)頁(yè)表項(xiàng)需要在頁(yè)表中連續(xù)重復(fù)64次。
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
評(píng)論