<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ò ) 收藏

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

我們大致了解了在我們的機器中扮演了什么角色以及它基本的工作內容是什么,下面我們將舉例子說(shuō)明它究竟是如何工作的(注意,本例中的并無(wú)針對某種特定的機型,它是所有工作的一個(gè)抽象)。

我們已經(jīng)知道,大多數使用虛擬存儲器的系統都使用一種稱(chēng)為分頁(yè)(paging)的技術(shù),就象我們剛才所舉的例子,虛擬地址空間被分成大小相同的一組頁(yè),每個(gè)頁(yè)有一個(gè)用來(lái)標示它的頁(yè)號(這個(gè)頁(yè)號一般是它在該組中的索引,這點(diǎn)和C/C++中的數組相似)。在上面的例子中0~4K的頁(yè)號為0,4~8K的頁(yè)號為1,8~12K的頁(yè)號為2,以此類(lèi)推。而虛擬地址(注意:是一個(gè)確定的地址,不是一個(gè)空間)被MMU分為2個(gè)部分,第一部分是頁(yè)號索引(page Index),第二部分則是相對該頁(yè)首地址的偏移量(offset). 。我們還是以剛才那個(gè)16位機器結合下圖進(jìn)行一個(gè)實(shí)例說(shuō)明,該實(shí)例中,虛擬地址8196被送進(jìn)MMU,MMU把它映射成物理地址。16位的CPU總共能產(chǎn)生的地址范圍是0~64K,按每頁(yè)4K的大小計算,該空間必須被分成16個(gè)頁(yè)。而我們的虛擬地址第一部分所能夠表達的范圍也必須等于16(這樣才能索引到該頁(yè)組中的每一個(gè)頁(yè)),也就是說(shuō)這個(gè)部分至少需要4個(gè)bit。一個(gè)頁(yè)的大小是4K(4096),也就是說(shuō)偏移部分必須使用12個(gè)bit來(lái)表示(2^12= 4096,這樣才能訪(fǎng)問(wèn)到一個(gè)頁(yè)中的所有地址),8196的二進(jìn)制碼如下圖所示:

該地址的頁(yè)號索引為0010(二進(jìn)制碼),既索引的頁(yè)為頁(yè)2,第二部分為000000000100(二進(jìn)制),偏移量為 4。頁(yè)2中的頁(yè)框號為6(頁(yè)2映射在頁(yè)框6,見(jiàn)上圖),我們看到頁(yè)框6的物理地址是24~28K。于是MMU計算出虛擬地址8196應該被映射成物理地址 24580(頁(yè)框首地址+偏移量=24576+4=24580)。同樣的,若我們對虛擬地址1026進(jìn)行讀取,1026的二進(jìn)制碼為 0000010000000010,page index=0000=0,offset=010000000010=1026。頁(yè)號為0,該頁(yè)映射的頁(yè)框號為2,頁(yè)框2的物理地址范圍是 8192~12287,故MMU將虛擬地址1026映射為物理地址9218(頁(yè)框首地址+偏移量=8192+1026=9218)

以上就是MMU的工作過(guò)程。

下面我們針對s3c2410的MMU(注1)進(jìn)行講解。

S3c2410總共有4種內存映射方式,分別是:

1.Fault (無(wú)映射)

2.Coarse Page (粗表)

3.Section (段)

4.Fine Page (細表)

我們以Section(段)進(jìn)行說(shuō)明。

ARM920T是一個(gè)32bit的CPU,它的虛擬地址空間為2^32=4G。而在Section模式,這4G的虛擬空間被分成一個(gè)一個(gè)稱(chēng)為段(Section)的單位(與我們上面講的頁(yè)在本質(zhì)上其實(shí)是一致的),每個(gè)段的長(cháng)度是1M (而我們之前所使用的頁(yè)的長(cháng)度是4K)。4G的虛擬內存總共可以被分成4096個(gè)段(1M*4096=4G),因此我們必須用4096個(gè)描述符來(lái)對這組段進(jìn)行描述,每個(gè)描述符占用4個(gè)Byte,故這組描述符的大小為16KB (4K*4096),這4096個(gè)描述符構為一個(gè)表格,我們稱(chēng)其為T(mén)ralaton Table.

上圖是描述符的結構

Section base address:段基地址(相當于頁(yè)框號首地址)

AP: 訪(fǎng)問(wèn)控制位Access Permission

Domain: 訪(fǎng)問(wèn)控制寄存器的索引。Domain與AP配合使用,對訪(fǎng)問(wèn)權限進(jìn)行檢查

C:當C被置1時(shí)為write-through (WT)模式

B: 當B被置1時(shí)為write-back (WB)模式

(C,B兩個(gè)位在同一時(shí)刻只能有一個(gè)被置1)

下面是s3c2410內存映射后的一個(gè)示意圖:


我的s3c2410上配置的SDRSAM大小為64M,該SDRAM的物理地址范圍是0x3000 0000~0x33FF FFFF(屬于Bank 6),由于1個(gè)Section的大小是1M,所以該物理空間可以被分成64個(gè)物理段(頁(yè)框).

在Section模式下,送進(jìn)MMU的虛擬地址(注1)被分為兩部分(這點(diǎn)和我們上面舉的例子是一樣的),這兩部分為 Descriptor Index(相當于上面例子的Page Index)和 Offset,descript index長(cháng)度為12bit(2^12=4096,從這個(gè)關(guān)系式你能看出什么?:) ),Offset長(cháng)度為20bit(2^20=1M,你又能看出什么?:)).觀(guān)察一下一個(gè)描述符(Descriptor)中的Section Base Address部分,它長(cháng)度為12 bit,里面的值是該虛擬段(頁(yè))映射成的物理段(頁(yè)框)的物理地址前12bit,由于每一個(gè)物理段的長(cháng)度都是1M,所以物理段首地址的后20bit總是為0x00000(每個(gè)Section都是以1M對齊),確定一個(gè)物理地址的方法是 物理頁(yè)框基地址+虛擬地址中的偏移部分=Section Base Address20+Offset ,呵呵,可能你有點(diǎn)糊涂了,還是舉一個(gè)實(shí)際例子說(shuō)明吧。假設現在執行指令

MOV REG, 0x30000012

虛擬地址的二進(jìn)制碼為00110000 00000000 00000000 00010010

前 12位是Descriptor Index= 00110000 0000=768,故在Translation Table里面找到第768號描述符,該描述的Section Base Address=0x0300,也就是說(shuō)描述符所描述的虛擬段(頁(yè))所映射的物理段(頁(yè)框)的首地址為0x3000 0000(物理段(頁(yè)框)的基地址=Section Base Address左移20bit=0x030020=0x3000 0000),而Offset=000000 00000000 00010010=0x12,故虛擬地址0x30000012映射成的物理地址=0x3000 0000+0x12=0x3000 0012(物理頁(yè)框基地址+虛擬地址中的偏移)。你可能會(huì )問(wèn)怎么這個(gè)虛擬地址和映射后的物理地址一樣?這是由我們定義的映射規則所決定的。在這個(gè)例子中我們定義的映射規則是把虛擬地址映射成和他相等的物理地址。我們這樣書(shū)寫(xiě)映射關(guān)系的代碼:

void mem_mapping_linear(void)

{

unsigned long descriptor_index, section_base, sdram_base, sdram_size;

sdram_base=0x30000000;

sdram_size=0x 4000000;

for (section _base= sdram_base,descriptor_index = section _base>>20;

section _base sdram_base+ sdram_size;



關(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>