<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è) > 嵌入式系統 > 設計應用 > ARM9學(xué)習筆記之——MMU

ARM9學(xué)習筆記之——MMU

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
我記得有一次我去應聘ARM-Linux軟件工程師。結果被問(wèn)到ARM中的虛擬內存是怎么管理的。由于我只對X86平臺下的MMU了解,所以我被問(wèn)倒了。原來(lái)我所學(xué)的只是皮毛。還有很多東西值得我去深入。要做ARM-Linux下的驅動(dòng),熟悉虛擬內存應該是必須的。

ARM9中的虛擬內存是怎么實(shí)現的呢?以下是我的學(xué)習總結。

本文引用地址:http://dyxdggzs.com/article/201611/318812.htm

ARM920T核是通過(guò)CP15來(lái)實(shí)現MMU機制的。

1. 關(guān)于地址

要知道虛擬內存機制必須了解ARM9中的3種地址:VA(虛地址),MVA(修正后虛地址),PA(物理地址)

1)VA,是程序中的邏輯地址,0x00000000~0xFFFFFFFF。

2)MVA,由于多個(gè)進(jìn)程執行,邏輯地址會(huì )重合。所以,跟據進(jìn)程號將邏輯地址分布到整個(gè)內存中。MVA = (PID << 25) | VA

3)PA,MVA通過(guò)MMU轉換后的地址。

由2可知,地址位共32位,PID占7位,所以最多只能有 128 個(gè)進(jìn)程。而每個(gè)進(jìn)程可訪(fǎng)問(wèn)的地址位為25位,故只能分到 32MB 的地址空間。(注:不是物理內存空間)

PID是存放在CP15協(xié)處理器的C13寄存器的高7位。

2. 關(guān)于虛擬內存轉換

CP15從C2中獲得頁(yè)基址(TTB)。將 MVA 的高12位作為頁(yè)表索引值。獲得頁(yè)表項:TTB [ MVA >> 20 ]。注意:頁(yè)表項是32位的。

從上可知,一個(gè)頁(yè)表最多有4096個(gè)頁(yè)表項,也就是4K。那么,每個(gè)頁(yè)表項可以表示1MB的地址空間。

得來(lái)的項表項分三種:

1)段頁(yè)描述符,直接指向1MB的內存空間。

2)粗頁(yè)描述符,有256個(gè)二級頁(yè)表項,每個(gè)二級頁(yè)表項指向4KB的內存空間。

3)細頁(yè)描述符,有1024個(gè)二級頁(yè)表項,每個(gè)二級頁(yè)表項指向1KB的內存空間。

## 粗頁(yè)描述符中存放的是粗頁(yè)表二級表的基址。將MVA的[19~12]位用來(lái)進(jìn)行二級頁(yè)表查尋。粗頁(yè)表二級表分兩種:

1)大頁(yè)描述符,一個(gè)描述符可以對應64KB的內存地址,但16個(gè)二級描述符對應同一塊內存。

2)小頁(yè)描述符,一個(gè)描述符只對應4KB的內存地址,每個(gè)二級描述符只對應一塊內存。

## 細頁(yè)描述符中存放的是細頁(yè)表二級表的基址。將MVA的[19~10],共計10位用于進(jìn)行二級頁(yè)表索引。二級頁(yè)表共1024個(gè)描述符。剩下的10位作為基址,可訪(fǎng)問(wèn)空間為1024B。

如下是內存轉換圖:

思考:

通過(guò)上面的學(xué)習,了解到ARM將4GB的地址訪(fǎng)問(wèn)空間分成128個(gè)32MB,每份供一個(gè)進(jìn)程使用。如此以來(lái),一個(gè)進(jìn)程的地址訪(fǎng)問(wèn)空間只有32MB。如進(jìn)程1的地址空間為[0x02000000~0x03FFFFFF]。如果超出這個(gè)范圍,地址訪(fǎng)問(wèn)就是非法的。

那ARM9在設計CP15時(shí)為什么不為每一個(gè)進(jìn)程指定一個(gè)單獨的頁(yè)表。這樣以來(lái),每個(gè)進(jìn)程就可以獨地擁有4GB的地址空間。

如此以來(lái),進(jìn)程數就不再受限于128個(gè),可以多達1024個(gè)進(jìn)程。而每一個(gè)進(jìn)程的虛擬地址的空間可以擴展到4GB。



關(guān)鍵詞: ARM9MM

評論


技術(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>