<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 解析S3C2410 MMU(存儲(chǔ)器管理單元)

          解析S3C2410 MMU(存儲(chǔ)器管理單元)

          作者: 時(shí)間:2018-09-14 來源:網(wǎng)絡(luò) 收藏

          ,全稱Memory Manage Unit, 中文名——。

          本文引用地址:http://www.ex-cimer.com/article/201809/389171.htm

          許多年以前,當(dāng)人們還在使用DOS或是更古老的操作系統(tǒng)的時(shí)候,計(jì)算機(jī)的內(nèi)存還非常小,一般都是以K為單位進(jìn)行計(jì)算,相應(yīng)的,當(dāng)時(shí)的程序規(guī)模也不大,所以內(nèi)存容量雖然小,但還是可以容納當(dāng)時(shí)的程序。但隨著圖形界面的興起還用用戶需求的不斷增大,應(yīng)用程序的規(guī)模也隨之膨脹起來,終于一個(gè)難題出現(xiàn)在程序員的面前,那就是應(yīng)用程序太大以至于內(nèi)存容納不下該程序,通常解決的辦法是把程序分割成許多稱為覆蓋塊(overlay)的片段。覆蓋塊0首先運(yùn)行,結(jié)束時(shí)他將調(diào)用另一個(gè)覆蓋塊。雖然覆蓋塊的交換是由OS完成的,但是必須先由程序員把程序先進(jìn)行分割,這是一個(gè)費(fèi)時(shí)費(fèi)力的工作,而且相當(dāng)枯燥。人們必須找到更好的辦法從根本上解決這個(gè)問題。不久人們找到了一個(gè)辦法,這就是虛擬存儲(chǔ)器(virtual memory).虛擬存儲(chǔ)器的基本思想是程序,數(shù)據(jù),堆棧的總的大小可以超過物理存儲(chǔ)器的大小,操作系統(tǒng)把當(dāng)前使用的部分保留在內(nèi)存中,而把其他未被使用的部分保存在磁盤上。比如對(duì)一個(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í)候,計(jì)算機(jī)上都存在一個(gè)程序能夠產(chǎn)生的地址集合,我們稱之為地址范圍。這個(gè)范圍的大小由CPU的位數(shù)決定,例如一個(gè)32位的CPU,它的地址范圍是0~0xFFFFFFFF (4G),而對(duì)于一個(gè)64位的CPU,它的地址范圍為0~0xFFFFFFFFFFFFFFFF (64T).這個(gè)范圍就是我們的程序能夠產(chǎn)生的地址范圍,我們把這個(gè)地址范圍稱為虛擬地址空間,該空間中的某一個(gè)地址我們稱之為虛擬地址。與虛擬地址空間和虛擬地址相對(duì)應(yīng)的則是物理地址空間和物理地址,大多數(shù)時(shí)候我們的系統(tǒng)所具備的物理地址空間只是虛擬地址空間的一個(gè)子集,這里舉一個(gè)最簡(jiǎn)單的例子直觀地說明這兩者,對(duì)于一臺(tái)內(nèi)存為256MB的32bit x86主機(jī)來說,它的虛擬地址空間范圍是0~0xFFFFFFFF(4G),而物理地址空間范圍是0x000000000~0x0FFFFFFF(256MB)。

          在沒有使用虛擬存儲(chǔ)器的機(jī)器上,虛擬地址被直接送到內(nèi)存總線上,使具有相同地址的物理存儲(chǔ)器被讀寫。而在使用了虛擬存儲(chǔ)器的情況下,虛擬地址不是被直接送到內(nèi)存地址總線上,而是送到內(nèi)存管理單元——(主角終于出現(xiàn)了:])。他由一個(gè)或一組芯片組成,一般存在與協(xié)處理器中,其功能是把虛擬地址映射為物理地址。

          大多數(shù)使用虛擬存儲(chǔ)器的系統(tǒng)都使用一種稱為分頁(paging)。虛擬地址空間劃分成稱為頁(page)的單位,而相應(yīng)的物理地址空間也被進(jìn)行劃分,單位是頁框(frame).頁和頁框的大小必須相同。接下來配合圖片我以一個(gè)例子說明頁與頁框之間在的調(diào)度下是如何進(jìn)行映射的


          在這個(gè)例子中我們有一臺(tái)可以生成16位地址的機(jī)器,它的虛擬地址范圍從0x0000~0xFFFF(64K),而這臺(tái)機(jī)器只有32K的物理地址,因此他可以運(yùn)行64K的程序,但該程序不能一次性調(diào)入內(nèi)存運(yùn)行。這臺(tái)機(jī)器必須有一個(gè)達(dá)到可以存放64K程序的外部存儲(chǔ)器(例如磁盤或是FLASH),以保證程序片段在需要時(shí)可以被調(diào)用。在這個(gè)例子中,頁的大小為4K,頁框大小與頁相同(這點(diǎn)是必須保證的,內(nèi)存和外圍存儲(chǔ)器之間的傳輸總是以頁為單位的),對(duì)應(yīng)64K的虛擬地址和32K的物理存儲(chǔ)器,他們分別包含了16個(gè)頁和8個(gè)頁框。

          我們先根據(jù)上圖解釋一下分頁后要用到的幾個(gè)術(shù)語,在上面我們已經(jīng)接觸了頁和頁框,上圖中綠色部分是物理空間,其中每一格表示一個(gè)物理頁框。橘黃色部分是虛擬空間,每一格表示一個(gè)頁,它由兩部分組成,分別是Frame Index(頁框索引)和位p(present 存在位),F(xiàn)rame Index的意義很明顯,它指出本頁是往哪個(gè)物理頁框進(jìn)行映射的,位p的意義則是指出本頁的映射是否有效,如上圖,當(dāng)某個(gè)頁并沒有被映射時(shí)(或稱“映射無效”,F(xiàn)rame Index部分為X),該位為0,映射有效則該位為1。

          我們執(zhí)行下面這些指令(本例子的指令不針對(duì)任何特定機(jī)型,都是偽指令)

          例1:

          MOVE REG,0 //將0號(hào)地址的值傳遞進(jìn)寄存器REG.

          虛擬地址0將被送往MMU,MMU看到該虛地址落在頁0范圍內(nèi)(頁0范圍是0到4095),從上圖我們看到頁0所對(duì)應(yīng)(映射)的頁框?yàn)?(頁框2的地址范圍是8192到12287),因此MMU將該虛擬地址轉(zhuǎn)化為物理地址8192,并把地址8192送到地址總線上。內(nèi)存對(duì)MMU的映射一無所知,它只看到一個(gè)對(duì)地址8192的讀請(qǐng)求并執(zhí)行它。MMU從而把0到4096的虛擬地址映射到8192到12287的物理地址。

          例2:

          MOVE REG,8192

          被轉(zhuǎn)換為

          MOVE REG,24576

          因?yàn)樘摂M地址8192在頁2中,而頁2被映射到頁框6(物理地址從24576到28671)

          例3:

          MOVE REG,20500

          被轉(zhuǎn)換為

          MOVE REG,12308

          虛擬地址20500在虛頁5(虛擬地址范圍是20480到24575)距開頭20個(gè)字節(jié)處,虛頁5映射到頁框3(頁框3的地址范圍是 12288到16383),于是被映射到物理地址12288+20=12308。

          通過適當(dāng)?shù)脑O(shè)置MMU,可以把16個(gè)虛頁隱射到8個(gè)頁框中的任何一個(gè),但是這個(gè)方法并沒有有效的解決虛擬地址空間比物理地址空間大的問題。從上圖中我們可以看到,我們只有8個(gè)頁框(物理地址),但我們有16個(gè)頁(虛擬地址),所以我們只能把16個(gè)頁中的8個(gè)進(jìn)行有效的映射。我們看看例4會(huì)發(fā)生什么情況

          MOV REG,32780

          虛擬地址32780落在頁8的范圍內(nèi),從上圖總我們看到頁8沒有被有效的進(jìn)行映射(該頁被打上X),這是又會(huì)發(fā)生什么?MMU注意到這個(gè)頁沒有被映射,于是通知CPU發(fā)生一個(gè)缺頁故障(page fault).這種情況下操作系統(tǒng)必須處理這個(gè)頁故障,它必須從8個(gè)物理頁框中找到1個(gè)當(dāng)前很少被使用的頁框并把該頁框的內(nèi)容寫入外圍存儲(chǔ)器(這個(gè)動(dòng)作被稱為page copy),隨后把需要引用的頁(例4中是頁8)映射到剛才釋放的頁框中(這個(gè)動(dòng)作稱為修改映射關(guān)系),然后從新執(zhí)行產(chǎn)生故障的指令(MOV REG,32780)。假設(shè)操作系統(tǒng)決定釋放頁框1,那么它將把虛頁8裝入物理地址的4-8K,并做兩處修改:首先把標(biāo)記虛頁1未被映射(原來虛頁1是被影射到頁框1的),以使以后任何對(duì)虛擬地址4K到8K的訪問都引起頁故障而使操作系統(tǒng)做出適當(dāng)?shù)膭?dòng)作(這個(gè)動(dòng)作正是我們現(xiàn)在在討論的),其次他把虛頁8對(duì)應(yīng)的頁框號(hào)由X變?yōu)?,因此重新執(zhí)行MOV REG,32780時(shí),MMU將把32780映射為4108。


          上一頁 1 2 3 4 下一頁

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();