日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MMU存储管理

發(fā)布時(shí)間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MMU存储管理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?嵌入式系統(tǒng)中,存儲(chǔ)系統(tǒng)差別很大,可包含多種類型的存儲(chǔ)器件,如FLASH,SRAM,SDRAM,ROM等,這些不同類型的存儲(chǔ)器件速度和寬度等各不相同;在訪問存儲(chǔ)單元時(shí),可能采取平板式的地址映射機(jī)制對(duì)其操作,或需要使用虛擬地址對(duì)其進(jìn)行讀寫;系統(tǒng)中,需引入存儲(chǔ)保護(hù)機(jī)制,增強(qiáng)系統(tǒng)的安全性。為適應(yīng)如此復(fù)雜的存儲(chǔ)體系要求,ARM處理器中引入了存儲(chǔ)管理單元來管理存儲(chǔ)系統(tǒng)。
一.內(nèi)存管理單元(MMU)概述
在ARM存儲(chǔ)系統(tǒng)中,使用MMU實(shí)現(xiàn)虛擬地址到實(shí)際物理地址的映射。為何要實(shí)現(xiàn)這種映射?首先就要從一個(gè)嵌入式系統(tǒng)的基本構(gòu)成和運(yùn)行方式著手。系統(tǒng)上電時(shí),處理器的程序指針從0x0(或者是由0Xffff_0000處高端啟動(dòng))處啟動(dòng),順序執(zhí)行程序,在程序指針(PC)啟動(dòng)地址,屬于非易失性存儲(chǔ)器空間范圍,如ROM、FLASH等。然而與上百兆的嵌入式處理器相比,FLASH、ROM等存儲(chǔ)器響應(yīng)速度慢,已成為提高系統(tǒng)性能的一個(gè)瓶頸。而SDRAM具有很高的響應(yīng)速度,為何不使用SDRAM來執(zhí)行程序呢?為了提高系統(tǒng)整體速度,可以這樣設(shè)想,利用FLASH、ROM對(duì)系統(tǒng)進(jìn)行配置,把真正的應(yīng)用程序下載到SDRAM中運(yùn)行,這樣就可以提高系統(tǒng)的性能。然而這種想法又遇到了另外一個(gè)問題,當(dāng)ARM處理器響應(yīng)異常事件時(shí),程序指針將要跳轉(zhuǎn)到一個(gè)確定的位置,假設(shè)發(fā)生了IRQ中斷,PC將指向0x18(如果為高端啟動(dòng),則相應(yīng)指向0vxffff_0018處),而此時(shí)0x18處仍為非易失性存儲(chǔ)器所占據(jù)的位置,則程序的執(zhí)行還是有一部分要在FLASH或者ROM中來執(zhí)行的。那么我們可不可以使程序完全都SDRAM中運(yùn)行那?答案是肯定的,這就引入了MMU,利用MMU,可把SDRAM的地址完全映射到0x0起始的一片連續(xù)地址空間,而把原來占據(jù)這片空間的FLASH或者ROM映射到其它不相沖突的存儲(chǔ)空間位置。例如,FLASH的地址從0x0000_0000-0x00ff_ffff,而SDRAM的地址范圍是0x3000_0000-0x31ff_ffff,則可把SDRAM地址映射為0x0000_0000-0x1fff_ffff而FLASH的地址可以映射到0x9000_0000-0x90ff_ffff(此處地址空間為空閑,未被占用)。映射完成后,如果處理器發(fā)生異常,假設(shè)依然為IRQ中斷,PC指針指向0x18處的地址,而這個(gè)時(shí)候PC實(shí)際上是從位于物理地址的0x3000_0018處讀取指令。通過MMU的映射,則可實(shí)現(xiàn)程序完全運(yùn)行在SDRAM之中。
在實(shí)際的應(yīng)用中,可能會(huì)把兩片不連續(xù)的物理地址空間分配給SDRAM。而在操作系統(tǒng)中,習(xí)慣于把SDRAM的空間連續(xù)起來,方便內(nèi)存管理,且應(yīng)用程序申請(qǐng)大塊的內(nèi)存時(shí),操作系統(tǒng)內(nèi)核也可方便地分配。通過MMU可實(shí)現(xiàn)不連續(xù)的物理地址空間映射為連續(xù)的虛擬地址空間。
操作系統(tǒng)內(nèi)核或者一些比較關(guān)鍵的代碼,一般是不希望被用戶應(yīng)用程序所訪問的。通過MMU可以控制地址空間的訪問權(quán)限,從而保護(hù)這些代碼不被破壞。
二.MMU地址映射的實(shí)現(xiàn)
MMU的實(shí)現(xiàn)過程,實(shí)際上就是一個(gè)查表映射的過程。建立頁表(translate table)是實(shí)現(xiàn)MMU功能不可缺少的一步。頁表是位于系統(tǒng)的內(nèi)存中,頁表的每一項(xiàng)對(duì)應(yīng)于一個(gè)虛擬地址到物理地址的映射。每一項(xiàng)的長度即是一個(gè)字的長度(在ARM中,一個(gè)字的長度被定義為4字節(jié))。頁表項(xiàng)除完成虛擬地址到物理地址的映射功能之外,還定義了訪問權(quán)限和緩沖特性等。
1、映射存儲(chǔ)塊的分類 
MMU 支持基于節(jié)或頁的存儲(chǔ)器訪問,MMU可以用下面四種大小進(jìn)行映射:
節(jié)(Section) 構(gòu)成1MB 的存儲(chǔ)器塊
支持3 中不同的頁尺寸:
微頁(Tiny page) 構(gòu)成1KB 的存儲(chǔ)器塊
小頁(Small page) 構(gòu)成4KB 的存儲(chǔ)器塊
大頁(Large page) 構(gòu)成64KB 的存儲(chǔ)器塊
其中對(duì)于節(jié)映射使用一級(jí)轉(zhuǎn)換表就可以了,而對(duì)于微頁、小頁、大頁則需要使用兩級(jí)轉(zhuǎn)換表。
存在主存儲(chǔ)器內(nèi)的轉(zhuǎn)換表有兩個(gè)級(jí)別:
2、第一級(jí)轉(zhuǎn)換表
(注:本文中的頁表與轉(zhuǎn)換表同義)

存儲(chǔ)節(jié)轉(zhuǎn)換表和指向第二級(jí)表的指針。
注: 上圖中粗糙頁表欄中的最后一項(xiàng)應(yīng)為‘01’
第一級(jí)表的每個(gè)入口是一個(gè)描述它所關(guān)聯(lián)的1MB 虛擬地址是如何映射的描述符。見表3-1,根據(jù)bits[1:0]的組合,有四種可能:
·? 如果bits[1:0]==0b00,所關(guān)聯(lián)的地址沒有被映射,試圖訪問他們將產(chǎn)生一個(gè)轉(zhuǎn)換錯(cuò)(fault)。因?yàn)樗麄儽挥布雎?#xff0c;所以軟件可以利用這樣的描述符的bits[31:2]做自己的用途。推薦為描述符繼續(xù)保持正確的訪問權(quán)限。
·? 如果bits[1:0]==0b10,這個(gè)入口是它所關(guān)聯(lián)地址的節(jié)描述符。見節(jié)描述符和轉(zhuǎn)換節(jié)參考中的細(xì)節(jié)。
·? 如果bits[0]==1,這個(gè)入口給出粗糙第二級(jí)表(bit[1]==0),或精細(xì)第二級(jí)表(bit[1]==1)。

每一種類型的表描述了它所關(guān)聯(lián)的1MB 存儲(chǔ)區(qū)域的映射。粗糙第二級(jí)表較小,每個(gè)表1KB,每個(gè)精細(xì)第二級(jí)表4KB。然而粗糙第二級(jí)表只能映射大頁和小頁,精細(xì)第二級(jí)表可以映射大頁、小頁和微頁。
節(jié)描述符和轉(zhuǎn)換節(jié)參考
l???????? 如果第一級(jí)描述符是節(jié)描述符,那么各個(gè)字段有如下的意義:
Bits[1:0] 描述符類型標(biāo)識(shí)(0b10 表示節(jié)描述符)
Bits[3:2] 高速緩存和緩沖位
Bits[4] 由具體實(shí)現(xiàn)定義
Bits[8:5] 這個(gè)描述符控制的節(jié)的16 種域之一
Bits[9] 現(xiàn)在沒有使用,應(yīng)該為零
Bits[11:10] 訪問控制,見表3-3
Bits[19:12] 現(xiàn)在沒有使用,應(yīng)該為零
Bits[31:20] 節(jié)基址,形成物理地址的高12 位

文章出處:http://www.diybl.com/course/6_system/linux/Linuxjs/2008611/124749.html

總結(jié)

以上是生活随笔為你收集整理的MMU存储管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。