ARM存儲(chǔ)器之:存儲(chǔ)保護(hù)單元MPU
15.4存儲(chǔ)保護(hù)單元MPU
一些嵌入式系統(tǒng)使用多任務(wù)的操作和控制。這些系統(tǒng)必須提供一種機(jī)制來(lái)保證正在運(yùn)行的任務(wù)不破壞其他任務(wù)的操作。即要防止系統(tǒng)資源和其他一些任務(wù)不受非法訪問(wèn)。要達(dá)到這一目的通常有軟件保護(hù)和硬件保護(hù)兩種途徑。這里軟件保護(hù)是指僅靠軟件來(lái)保護(hù)系統(tǒng)資源。系統(tǒng)中無(wú)保護(hù)硬件或硬件沒(méi)啟動(dòng)。在多任務(wù)的系統(tǒng)中,通常要運(yùn)行操作系統(tǒng)來(lái)達(dá)到任務(wù)間同步與通信。所以,這種軟件的資源保護(hù)通常由操作系統(tǒng)來(lái)完成。但這種通過(guò)軟件來(lái)協(xié)調(diào)任務(wù)運(yùn)行,保護(hù)系統(tǒng)資源的做法有時(shí)會(huì)出現(xiàn)一些不可避免的問(wèn)題。如當(dāng)對(duì)一個(gè)通信用串口寄存器進(jìn)行操作時(shí),如果一個(gè)任務(wù)正在使用串口,則它沒(méi)有辦法來(lái)防止其他任務(wù)使用同一個(gè)串口。因此,若要成功使用該串口,則必須通過(guò)一個(gè)訪問(wèn)該串口的系統(tǒng)調(diào)用來(lái)協(xié)調(diào)。使用這些調(diào)用任務(wù)的非授權(quán)訪問(wèn),很容易破壞經(jīng)過(guò)該串口的通信。因此資源的不合理使用也許是不可避免的。
相反,受保護(hù)系統(tǒng)有專門(mén)的硬件來(lái)檢測(cè)和限制系統(tǒng)資源的訪問(wèn)。它能保證資源的所有權(quán),任務(wù)需要遵守一組由操作環(huán)境定義的、由硬件維護(hù)的規(guī)則,在硬件級(jí)上授予監(jiān)視和控制資源程序的特殊權(quán)限。受保護(hù)系統(tǒng)主動(dòng)防止一個(gè)任務(wù)使用其他任務(wù)的資源。因此使用硬件主動(dòng)監(jiān)視系統(tǒng)比協(xié)調(diào)加強(qiáng)的軟件歷程,提供了更好的保護(hù)。
ARM中配備的有效保護(hù)系統(tǒng)資源的硬件,有兩種:
·MPU(MemoryProtectionUnit);
·MMU(MemoryManagementUnit)。
MMU是比MPU提供了功能更強(qiáng)大的內(nèi)存保護(hù)機(jī)制,MPU只提供了內(nèi)存區(qū)域保護(hù),而MMU是在此基礎(chǔ)上提供了虛擬地址映射技術(shù),而且在操作上,MMU要比MPU負(fù)責(zé)。本節(jié)主要討論帶MPU的處理器內(nèi)核,MMU將在下一節(jié)詳細(xì)介紹。
15.4.1保護(hù)域(ProtectionRegions)
ARM處理器中的MPU使用“域(regions)”來(lái)對(duì)內(nèi)存單元進(jìn)行管理。域是與存儲(chǔ)空間相關(guān)聯(lián)的屬性,處理器核將這些數(shù)據(jù)保存在協(xié)處理器CP15的一些寄存器中。通常域的個(gè)數(shù)為8個(gè),編號(hào)為從0~7。
域的大小和起始地址保存在CP15的寄存器c6中。大小可以是4KB~4GB的任何2的乘冪。域的起始地址必須是其大小的倍數(shù)。比如,一個(gè)定義為4KB的域其起始地址可以是0x12345000,而一個(gè)大小定義為8KB的域起始地址只能是0x2000的倍數(shù)。
另外,操作系統(tǒng)可以為這些域分配更多的屬性:訪問(wèn)權(quán)限、cache和寫(xiě)緩存。存儲(chǔ)器基于當(dāng)時(shí)的處理器模式(管理模式或用戶模式)可以設(shè)定這些區(qū)域的訪問(wèn)權(quán)限為讀/寫(xiě)、只讀和不可訪問(wèn)。
當(dāng)處理器訪問(wèn)主存的一個(gè)域時(shí),MPU比較該域的訪問(wèn)權(quán)限屬性和當(dāng)時(shí)的處理器模式。如果請(qǐng)求符合域的訪問(wèn)標(biāo)準(zhǔn),則MPU允許內(nèi)核讀/寫(xiě)主存;如果存儲(chǔ)器請(qǐng)求不符號(hào)域的訪問(wèn)標(biāo)準(zhǔn),將產(chǎn)生一個(gè)異常信號(hào)。
異常信號(hào)被送到處理器核。處理器核執(zhí)行一個(gè)異常向量,然后跳轉(zhuǎn)到異常處理程序,異常處理程序判斷異常類(lèi)型為預(yù)取指或數(shù)據(jù)中止,然后根據(jù)異常類(lèi)型,跳轉(zhuǎn)到相應(yīng)的服務(wù)例程。
對(duì)于ARM處理器,存儲(chǔ)空間的某一部分可以被分配給一個(gè)以上的區(qū)域。也就是說(shuō)域可以重疊。在重疊的域內(nèi),可以設(shè)置域的優(yōu)先級(jí)。在分配訪問(wèn)權(quán)限時(shí)重疊域比非重疊域有更大的靈活性。后面一節(jié)將會(huì)詳細(xì)介紹域的重疊。
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
評(píng)論