在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

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

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

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

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

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

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

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

      以上就是MMU的工作過程。

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

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

      1.Fault (無映射)

      2.Coarse Page (粗表)

      3.Section (段)

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

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

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

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

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

      AP: 訪問控制位Access Permission

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

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

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

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

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


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

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

      MOV REG, 0x30000012

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

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



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

      評論


      相關(guān)推薦

      技術(shù)專區(qū)

      關(guān)閉