新聞中心

ARM中MMU的作用

作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
讓我們從歷史發(fā)展的角度看MMU的作用

這一部分可結(jié)合蔡于清的講解【網(wǎng)址:http://www.another-prj.com/viewthread.php?tid=28&extra=page%3D1】來看,下面的大部分內(nèi)容轉(zhuǎn)載此處,針對自己的理解做了一些擴(kuò)充性說明。只是需要注意的是,在蔡于清此部分的講解中,有幾處小的錯(cuò)誤,完成此部分的講解后可以進(jìn)行更正。

MMU功能部件是與虛擬內(nèi)存技術(shù)(virtual memory)緊密聯(lián)系在一起的。

第一階段:最初,計(jì)算機(jī)內(nèi)存很小,而且非常昂貴,大多數(shù)都是以KB為單位的。相應(yīng)的,當(dāng)時(shí)程序規(guī)模很小,不復(fù)雜,所以內(nèi)存還是能夠滿足需求的。在看《Linkers andLoaders》的時(shí)候,也是從這個(gè)階段講解,不過此書的核心視角是從Linkers和Loaders的發(fā)展來看的。也就是,計(jì)算機(jī)剛剛出現(xiàn)時(shí),還是比較簡陋的,各種復(fù)雜的技術(shù)是伴隨著人們需求的提高而出現(xiàn)的。把握住這一點(diǎn),就可以從需求的角度入手探討技術(shù),可以分析它如何滿足了這樣的需求。通過這種分析,理解上就比較簡單一些了。

第二階段:程序規(guī)模擴(kuò)大,考慮到成本問題,出現(xiàn)了overlay技術(shù),也就是內(nèi)存覆蓋策略?;镜脑砭褪前殉绦蚍指畛稍S多稱為“覆蓋塊”的片斷。覆蓋塊0首先加載運(yùn)行,結(jié)束時(shí)調(diào)用另一個(gè)覆蓋塊。覆蓋塊的調(diào)度是由OS來完成的,但是事先需要分割,這部分工作是程序員借助Linkers來完成的。但是畢竟枯燥,由此帶來的開銷也比較大。于是進(jìn)入第三個(gè)階段。

第三階段:出現(xiàn)virtual memory。虛擬存儲器的基本思想是程序,數(shù)據(jù),堆棧的總的大小可以超過物理存儲器的大小,操作系統(tǒng)把當(dāng)前使用的部分保留在內(nèi)存中,而把其他未被使用的部分保存在磁盤上。比如對一個(gè)16MB的程序和一個(gè)內(nèi)存只有4MB的機(jī)器,OS通過選擇,可以決定各個(gè)時(shí)刻將哪4M的內(nèi)容保留在內(nèi)存中,并在需要時(shí)在內(nèi)存和磁盤間交換程序片段,這樣就可以把這個(gè)16M的程序運(yùn)行在一個(gè)只具有4M內(nèi)存機(jī)器上了。而這個(gè)16M的程序在運(yùn)行前不必由程序員進(jìn)行分割。

伴隨著這種技術(shù)的出現(xiàn),“virtual address,即VA”和“physical address,即PA”也就出現(xiàn)了。一般來說,CPU看到的地址是VA,VA是有地址線來決定的。比如,s3c2410是32位的SoC,那么它的尋址空間為2^32=4GB,那么VA空間也就是4GB。但是在嵌入式系統(tǒng)中,物理存儲器是不會有這么大的?,F(xiàn)在這塊s3c2410的實(shí)際內(nèi)存SDRAM也就 64MB,遠(yuǎn)遠(yuǎn)小于4GB。也就是說,VA是4GB,PA是64MB,PA的地址空間是VA地址空間的子集。既然PA沒有VA那么大,而且CPU只能看到 VA,那么CPU如何找到PA呢?這也正是MMU的基本作用之一,就是提供VA到PA的轉(zhuǎn)換機(jī)制,除了硬件的支持外,軟件上實(shí)際就是維護(hù)一張表,表中的內(nèi)容是VA到PA的轉(zhuǎn)換法則。由于有了MMU,那么就可以實(shí)現(xiàn)利用VA找到實(shí)際物理內(nèi)存區(qū)域。

現(xiàn)在討論為什么要實(shí)現(xiàn)VA到PA的映射。就ARM而言,系統(tǒng)上電后,CPU的PC指向0x00000000或者0xffff0000,這是由CPU的設(shè)計(jì)者決定的。在這個(gè)位置,一般安排非易失性存儲器地址空間,比如rom,flash等。但是flash等響應(yīng)速度慢,這就稱為提高系統(tǒng)性能的一個(gè)瓶頸。而 sdram則具有很高的響應(yīng)速度,為了提高系統(tǒng)運(yùn)行速度,可以把flash中的應(yīng)用程序下載到sdram中執(zhí)行,也就是一個(gè)簡單的loader的功能實(shí)現(xiàn)。這樣就出現(xiàn)一個(gè)問題,ARM響應(yīng)exception時(shí),程序指針指向固定的VA,比如,假設(shè)發(fā)生了IRQ中斷,那么PC執(zhí)行0x00000018(如果是高端啟動,則指向0xffff0018處。)但是此處仍然為非易失性存儲器,也就是說,程序的一部分仍然在flash或者rom中執(zhí)行。這時(shí)可以利用 MMU,把sdram的地址映射到0x00000000起始的一片連續(xù)地址空間,而把原來flash映射到其他不相沖突的存儲空間位置。例如,flash 的地址范圍0x00000000-0x00ffffff,sdram的地址范圍0x30000000-0x31ffffff。那么可以把sdram映射到 0x00000000-0x1fffffff(此處地址空間未被占用)。映射完成后,如果處理器異常,假設(shè)依然為IRQ中斷,pc指向 0x00000018,但是pc實(shí)際上是從物理地址0x30000018處讀取指令。通過mmu的映射,可以實(shí)現(xiàn)系統(tǒng)運(yùn)行的加速。這個(gè)地方也可以說明 bootloader中常見的中斷向量表的設(shè)置,為什么有些使用b,有些使用ldr了?!綽的跳轉(zhuǎn)空間只能是+-32M,而ldr可以大的多了。】

在實(shí)際的應(yīng)用過程中,還可能會把兩片不連續(xù)的物理地址空間分配給sdram,而在os中,習(xí)慣上把sdram的空間連續(xù)起來,方便實(shí)現(xiàn)動態(tài)內(nèi)存管理。通過mmu可以實(shí)現(xiàn)不連續(xù)的物理地址空間映射為虛擬地址空間。

另外一個(gè)需求就是,實(shí)現(xiàn)不同的運(yùn)行級別,那么一些關(guān)鍵的代碼可以設(shè)定不被普通應(yīng)用程序訪問。這也是通過mmu控制訪問權(quán)限來實(shí)現(xiàn)的。

綜上三個(gè)階段所述,可見MMU的作用主要就是兩個(gè):

· 實(shí)現(xiàn)VA到PA的映射(可以因此實(shí)現(xiàn)方便的動態(tài)內(nèi)存管理)
· 實(shí)現(xiàn)不同的訪問權(quán)限。


關(guān)鍵詞: ARMMM

評論


技術(shù)專區(qū)

關(guān)閉