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

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

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

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

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

          以上就是MMU的工作過程。

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

          S3c2410總共有4種內(nèi)存映射方式,分別是:

          1.Fault (無映射)

          2.Coarse Page (粗表)

          3.Section (段)

          4.Fine Page (細(xì)表)

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

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

          上圖是描述符的結(jié)構(gòu)

          Section base address:段基地址(相當(dāng)于頁框號(hào)首地址)

          AP: 訪問控制位Access Permission

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

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

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

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

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


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

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

          MOV REG, 0x30000012

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

          前 12位是Descriptor Index= 00110000 0000=768,故在Translation Table里面找到第768號(hào)描述符,該描述的Section Base Address=0x0300,也就是說描述符所描述的虛擬段(頁)所映射的物理段(頁框)的首地址為0x3000 0000(物理段(頁框)的基地址=Section Base Address左移20bit=0x030020=0x3000 0000),而Offset=000000 00000000 00010010=0x12,故虛擬地址0x30000012映射成的物理地址=0x3000 0000+0x12=0x3000 0012(物理頁框基地址+虛擬地址中的偏移)。你可能會(huì)問怎么這個(gè)虛擬地址和映射后的物理地址一樣?這是由我們定義的映射規(guī)則所決定的。在這個(gè)例子中我們定義的映射規(guī)則是把虛擬地址映射成和他相等的物理地址。我們這樣書寫映射關(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;



          評(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); })();