中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

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

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

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

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

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

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

        以上就是MMU的工作過程。

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

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

        1.Fault (無映射)

        2.Coarse Page (粗表)

        3.Section (段)

        4.Fine Page (細表)

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

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

        上圖是描述符的結構

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

        AP: 訪問控制位Access Permission

        Domain: 訪問控制寄存器的索引。Domain與AP配合使用,對訪問權限進行檢查

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

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

        MOV REG, 0x30000012

        虛擬地址的二進制碼為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ī)則是把虛擬地址映射成和他相等的物理地址。我們這樣書寫映射關系的代碼:

        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;



        評論


        相關推薦

        技術專區(qū)

        關閉