<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 解析S3C2410 MMU(存儲器管理單元)

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

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

,全稱(chēng)Memory Manage Unit, 中文名——。

本文引用地址:http://dyxdggzs.com/article/201809/389171.htm

許多年以前,當人們還在使用DOS或是更古老的操作系統的時(shí)候,計算機的內存還非常小,一般都是以K為單位進(jìn)行計算,相應的,當時(shí)的程序規模也不大,所以?xún)却嫒萘侩m然小,但還是可以容納當時(shí)的程序。但隨著(zhù)圖形界面的興起還用用戶(hù)需求的不斷增大,應用程序的規模也隨之膨脹起來(lái),終于一個(gè)難題出現在程序員的面前,那就是應用程序太大以至于內存容納不下該程序,通常解決的辦法是把程序分割成許多稱(chēng)為覆蓋塊(overlay)的片段。覆蓋塊0首先運行,結束時(shí)他將調用另一個(gè)覆蓋塊。雖然覆蓋塊的交換是由OS完成的,但是必須先由程序員把程序先進(jìn)行分割,這是一個(gè)費時(shí)費力的工作,而且相當枯燥。人們必須找到更好的辦法從根本上解決這個(gè)問(wèn)題。不久人們找到了一個(gè)辦法,這就是虛擬存儲器(virtual memory).虛擬存儲器的基本思想是程序,數據,堆棧的總的大小可以超過(guò)物理存儲器的大小,操作系統把當前使用的部分保留在內存中,而把其他未被使用的部分保存在磁盤(pán)上。比如對一個(gè)16MB的程序和一個(gè)內存只有4MB的機器,OS通過(guò)選擇,可以決定各個(gè)時(shí)刻將哪4M的內容保留在內存中,并在需要時(shí)在內存和磁盤(pán)間交換程序片段,這樣就可以把這個(gè)16M的程序運行在一個(gè)只具有4M內存機器上了。而這個(gè)16M的程序在運行前不必由程序員進(jìn)行分割。

任何時(shí)候,計算機上都存在一個(gè)程序能夠產(chǎn)生的地址集合,我們稱(chēng)之為地址范圍。這個(gè)范圍的大小由CPU的位數決定,例如一個(gè)32位的CPU,它的地址范圍是0~0xFFFFFFFF (4G),而對于一個(gè)64位的CPU,它的地址范圍為0~0xFFFFFFFFFFFFFFFF (64T).這個(gè)范圍就是我們的程序能夠產(chǎn)生的地址范圍,我們把這個(gè)地址范圍稱(chēng)為虛擬地址空間,該空間中的某一個(gè)地址我們稱(chēng)之為虛擬地址。與虛擬地址空間和虛擬地址相對應的則是物理地址空間和物理地址,大多數時(shí)候我們的系統所具備的物理地址空間只是虛擬地址空間的一個(gè)子集,這里舉一個(gè)最簡(jiǎn)單的例子直觀(guān)地說(shuō)明這兩者,對于一臺內存為256MB的32bit x86主機來(lái)說(shuō),它的虛擬地址空間范圍是0~0xFFFFFFFF(4G),而物理地址空間范圍是0x000000000~0x0FFFFFFF(256MB)。

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

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


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

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

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

例1:

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

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

例2:

MOVE REG,8192

被轉換為

MOVE REG,24576

因為虛擬地址8192在頁(yè)2中,而頁(yè)2被映射到頁(yè)框6(物理地址從24576到28671)

例3:

MOVE REG,20500

被轉換為

MOVE REG,12308

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

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

MOV REG,32780

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


上一頁(yè) 1 2 3 4 下一頁(yè)

關(guān)鍵詞: S3C2410 MMU 存儲器管理單元

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>