Cortex-M3-MPU(存儲(chǔ)器保護(hù)單元)
MPU使命-關(guān)鍵系統(tǒng)
本文引用地址:http://cafeforensic.com/article/202205/434657.htm這種系統(tǒng)往往都用于性命攸關(guān)的場合,且必須連續(xù)無故障地工作,比如,火車調(diào)度系統(tǒng)、生命維持系統(tǒng)、大型發(fā)動(dòng)機(jī)驅(qū)動(dòng)器、核子反應(yīng)堆控制、網(wǎng)絡(luò)/電信的數(shù)據(jù)交換中樞等。如果失能,將導(dǎo)致慘重的經(jīng)濟(jì)與損失,甚至?xí)篃o數(shù)人死于非命。因此,決不允許這類系統(tǒng)出現(xiàn)
上述情況。然而,這些系統(tǒng)的復(fù)雜度往往都非常高,幾乎不可能由開發(fā)人員保證這種可靠性。因此,需要在硬件水平上加入一個(gè)“公安機(jī)關(guān)”。通過它設(shè)置各種類型的“禁地”,并且施加多種規(guī)章條例。一旦發(fā)現(xiàn)違章,則強(qiáng)制改變執(zhí)行流和處理器的工作狀態(tài),以便可以由軟件做進(jìn)一步的處理。這樣,就可以為不同的程序限定一個(gè)內(nèi)存使用范圍,從而使野指針或惡意破壞無法影響不允許訪問的區(qū)域。此即存儲(chǔ)器保護(hù)單元(MPU)。有時(shí),對存儲(chǔ)器的管理更進(jìn)一步,做到可以對地址執(zhí)行變換的程度,此時(shí)程序使用的地址未必是真實(shí)的存儲(chǔ)器地址。它在MPU的基礎(chǔ)上,還消滅了內(nèi)存碎片和浪費(fèi),并且能進(jìn)一步地讓應(yīng)用程序擁有方便舒適的地址空間,從而使程序規(guī)模可以擴(kuò)大甚至數(shù)百倍。此即為“存儲(chǔ)器管理單元”(MMU)。
MPU概覽
在Cortex‐M3處理器中可以選配一個(gè)存儲(chǔ)器保護(hù)單元(MPU),它可以實(shí)施對存儲(chǔ)器(主要是內(nèi)存和外設(shè)寄存器)的保護(hù),以使軟件更加健壯和可靠。在使用前,必須根據(jù)需要對其編程。如果沒有啟用MPU,則等同于系統(tǒng)中沒有配MPU。MPU有如下的能力可以提高系統(tǒng)的可靠性:
阻止用戶應(yīng)用程序破壞操作系統(tǒng)使用的數(shù)據(jù)
阻止一個(gè)任務(wù)訪問其它任務(wù)的數(shù)據(jù)區(qū),從而把任務(wù)隔開。
可以把關(guān)鍵數(shù)據(jù)區(qū)設(shè)置為只讀,從根本上消除了被破壞的可能。
檢測意外的存儲(chǔ)訪問,如,堆棧溢出,數(shù)組越界。此外,還可以通過MPU設(shè)置存儲(chǔ)器regions的其它訪問屬性,比如,是否緩區(qū),是否緩沖等。
MPU在執(zhí)行其功能時(shí),是以所謂的“region”為單位的。一個(gè)region其實(shí)就是一段連續(xù)的地址,只是它們的位置和范圍都要滿足一些限制(對齊方式,最小容量等)。CM3的MPU共支持8個(gè)regions。怎么,嫌少?是少了點(diǎn),不過,還允許把每個(gè)region進(jìn)一步劃分成更小的“子region”。此外,還允許啟用一個(gè)“背景region”(即沒有MPU時(shí)的全部地址空間),不過它是只能由特權(quán)級(jí)享用。在啟用MPU后,就不得再訪問定義之外的地址區(qū)間,也不得訪問未經(jīng)授權(quán)的region。否則,將以“訪問違例”處理,觸發(fā)MemManage fault。
MPU定義的regions可以相互交迭。如果某塊內(nèi)存落在多個(gè)region中,則訪問屬性和權(quán)限將由編號(hào)最大的region來決定。比如,若1號(hào)region與4號(hào)region交迭,則交迭的部分受4號(hào)region控制。
MPU的典型設(shè)置
在典型的情況下,當(dāng)需要阻止用戶程序訪問特權(quán)級(jí)的數(shù)據(jù)和代碼時(shí),可以啟用MPU。在設(shè)計(jì)MPU regions時(shí),需要考慮到下列的regions:如下圖:
MPU的自定義設(shè)置后的權(quán)限
評論