新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM存儲(chǔ)器之:存儲(chǔ)管理單元MMU

        ARM存儲(chǔ)器之:存儲(chǔ)管理單元MMU

        作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

        本文引用地址:http://www.104case.com/article/257009.htm

        ⑤域控制位失效

        域控制位失效包括兩種類(lèi)型。一種基于段的存儲(chǔ)訪問(wèn)域控制失效。在一級(jí)描述符中包含4位的域標(biāo)識(shí)符。該標(biāo)識(shí)符指定了本段所屬的域,在讀取一級(jí)描述符時(shí),它檢查域訪問(wèn)控制寄存器c3中對(duì)應(yīng)于該域的控制位,如果相應(yīng)的兩位控制位為0b00,說(shuō)明該域不允許存儲(chǔ)訪問(wèn),這時(shí),就產(chǎn)生了基于段的存儲(chǔ)訪問(wèn)域控制失效。第二種是基于頁(yè)的存儲(chǔ)訪問(wèn)中域控制位失效。在一級(jí)描述符中包含4位的域標(biāo)識(shí)符。該標(biāo)識(shí)符指定了本頁(yè)所屬的域,在讀取一級(jí)描述符時(shí),它檢查域訪問(wèn)控制寄存器c3中對(duì)應(yīng)于該域的控制位,如果相應(yīng)的兩位控制位為0b00,說(shuō)明該域不允許存儲(chǔ)訪問(wèn),這時(shí)就產(chǎn)生了基于頁(yè)的存儲(chǔ)訪問(wèn)域控制失效。

        ⑥訪問(wèn)權(quán)限失效

        訪問(wèn)權(quán)限失效的檢查是在域控制位失效檢查時(shí)進(jìn)行的。這時(shí)如果域訪問(wèn)控制器中對(duì)應(yīng)于該域的控制位為0b01,則要進(jìn)行相應(yīng)的權(quán)限檢查。訪問(wèn)權(quán)限失效有兩種類(lèi)型。一種基于段的存儲(chǔ)訪問(wèn)權(quán)限控制失效,對(duì)于基于段的存儲(chǔ)訪問(wèn),在一級(jí)描述符中包含一個(gè)兩位的訪問(wèn)權(quán)限控制位AP。如果字段AP標(biāo)識(shí)了不允許進(jìn)行相關(guān)存儲(chǔ)訪問(wèn)時(shí),產(chǎn)出基于段的存儲(chǔ)訪問(wèn)權(quán)限控制失效。第二種是基于頁(yè)的存儲(chǔ)訪問(wèn)控制失效。對(duì)于基于頁(yè)的存儲(chǔ)訪問(wèn),在二級(jí)描述符中定義的可能為大頁(yè)、小頁(yè)或者微頁(yè)。當(dāng)二級(jí)描述符中定義的為微頁(yè)時(shí),該二級(jí)描述符中包含一個(gè)對(duì)應(yīng)于該微頁(yè)的訪問(wèn)控制字段AP,如果字段AP標(biāo)識(shí)了不允許進(jìn)行相關(guān)的存儲(chǔ)訪問(wèn),這時(shí)產(chǎn)生基于子頁(yè)的存儲(chǔ)訪問(wèn)權(quán)限控制失效。同樣,當(dāng)二級(jí)頁(yè)表描述符中定義的為小頁(yè)或大頁(yè)時(shí),操作過(guò)程同微頁(yè)。

        (3)外部存儲(chǔ)訪問(wèn)失效

        除處理器內(nèi)部向CPU報(bào)告錯(cuò)誤外,體系結(jié)構(gòu)還定義了一個(gè)外部訪問(wèn)中斷引腳。該引腳可以用于外部存儲(chǔ)器向CPU訪問(wèn)失效異常。但是,并不是所有失效異常都可以通過(guò)這種方式報(bào)告,所以該引腳在連線時(shí)要非常注意。下面列舉了存儲(chǔ)訪問(wèn)操作,可以通過(guò)這種機(jī)制中止和重啟動(dòng)。

        ·讀操作(reads)。

        ·非緩存的寫(xiě)操作(unbufferedwrites)。

        ·一級(jí)描述符預(yù)取(first-leveldescriptorfetch)。

        ·二級(jí)描述符預(yù)取(second-leveldescriptorfetch)。

        ·非緩存的信號(hào)量操作(semaphoresinuncachable/unbufferablememoryareas)。

        在Cache預(yù)取時(shí),可以在任意字時(shí)終止存儲(chǔ)訪問(wèn)過(guò)程。如果存儲(chǔ)訪問(wèn)發(fā)生在存儲(chǔ)器想要獲取的數(shù)據(jù)中,這時(shí)該存儲(chǔ)訪問(wèn)將立即被中止。如果產(chǎn)生中止的數(shù)據(jù)是在Cache預(yù)取時(shí),從存儲(chǔ)器順序讀出的,那么直到這些數(shù)據(jù)被存儲(chǔ)器訪問(wèn)時(shí),該存儲(chǔ)訪問(wèn)才會(huì)被中止。

        帶緩存的寫(xiě)操作不能通過(guò)這種方式向CPU報(bào)告異常。因此,在系統(tǒng)中標(biāo)記為可外部中止的存儲(chǔ)區(qū)域不要進(jìn)行可緩存的寫(xiě)操作。

        15.5.9快速上下文切換擴(kuò)展(FCSE,F(xiàn)astContextSwitchExtension)

        (1)快速上下文切換擴(kuò)展原理

        快速上下文切換擴(kuò)展(FCSE,F(xiàn)astContextSwitchExtension)是MMU中的一個(gè)附加硬件,用于提高嵌入式系統(tǒng)的系統(tǒng)性能。FCSE使得多個(gè)獨(dú)立任務(wù)可以運(yùn)行在一個(gè)固定的重疊存儲(chǔ)空間中,而在上下文切換時(shí),不需要清理(clean)或清除(flush)Cache和TLB。FCSE主要特征就是不需要清除Cache和TLB。

        通常情況下,如果兩個(gè)進(jìn)程占有的虛擬地址空間有重疊,系統(tǒng)在兩個(gè)進(jìn)程之間進(jìn)行切換時(shí),必須進(jìn)行虛擬地址到物理地址的重映射。而虛擬地址到物理地址重映射涉及到重建MMU中頁(yè)表,而且Cache及TLB中的內(nèi)容都必須使無(wú)效。這樣操作將帶來(lái)巨大的系統(tǒng)開(kāi)銷(xiāo),一方面重建MMU和使無(wú)效Cache及TLB的內(nèi)容需要很大的開(kāi)銷(xiāo),另一方面重建Cache和TLB內(nèi)容也需要很大的開(kāi)銷(xiāo)。

        快速上下文切換擴(kuò)展的引入避免了這種開(kāi)銷(xiāo)。它位于CPU和MMU之間,如果兩個(gè)進(jìn)程使用了同樣的虛擬地址空間,則對(duì)CPU而言,兩個(gè)進(jìn)程的空間地址是一樣的。快速上下文切換擴(kuò)展對(duì)各進(jìn)程的虛擬地址進(jìn)行變換,這樣系統(tǒng)中CPU之外的部分看到的是經(jīng)過(guò)快速上下文切換擴(kuò)展變換的虛擬地址。快速上下文切換擴(kuò)展將各進(jìn)程的虛擬空間變換成不同的虛擬空間。這樣在進(jìn)行進(jìn)程間切換時(shí)就不需要進(jìn)行虛擬地址到物理地址的重映射。

        快速上下文切換擴(kuò)展將CPU發(fā)出的每個(gè)虛擬地址按照上述的規(guī)則進(jìn)行變換,然后發(fā)送到系統(tǒng)中的其他部分。變換過(guò)程如圖15.37所示。

        圖15.37快速上下文切換擴(kuò)展變換過(guò)程

        使用快速上下文切換擴(kuò)展,虛擬存儲(chǔ)管理增加了一次地址轉(zhuǎn)換。快速上下文切換擴(kuò)展在虛擬地址到達(dá)Cache和TLB前,使用一個(gè)特殊的、包含進(jìn)程ID值的重定位寄存器來(lái)修改虛地址。把第一次變換前的地址稱(chēng)為虛地址VA(VirtualAddress),把第一次變換后的地址稱(chēng)為修改后虛擬地址MVA(ModifiedvirtualAddress)。

        這樣,任務(wù)間的切換就不用涉及到改變頁(yè)表,只需簡(jiǎn)單地將新任務(wù)的進(jìn)程ID寫(xiě)到位于CP15地FCSE進(jìn)程ID寄存器。正是因?yàn)槿蝿?wù)切換不需要改變頁(yè)表,因而切換后Cache和TLB中的值依然保持有效,不需要清除。

        系統(tǒng)中,4GB的虛擬空間被分為128個(gè)進(jìn)程空間快,每個(gè)進(jìn)程空間塊大小為32MB。每個(gè)進(jìn)程空間塊中可以包含一個(gè)進(jìn)程,該進(jìn)程可以使用虛擬地址空間0x00000000~0x01ffffff,這個(gè)地址范圍也就是CPU看到的進(jìn)程的虛擬空間。系統(tǒng)128個(gè)進(jìn)程空間塊的編號(hào)為0~127,編號(hào)為1的進(jìn)程空間塊中的進(jìn)程實(shí)際使用虛擬地址空間為1×0x02000000~1×0x02000000+0x01ffffff。這個(gè)地址空間是系統(tǒng)中除CPU之外的其他部分看到的該進(jìn)程所占有的虛擬地址空間。

        由地址VA到MVA的變換算法如下所示。

        MVA=VA+(ox02000000×進(jìn)程ID)

        保存在CP15寄存器c13寄存器中的值包含進(jìn)程ID,c13中從bit[31]~bit[25]共7位標(biāo)識(shí)進(jìn)程ID,因此可以有128個(gè)進(jìn)程。寄存器格式如圖15.38。

        圖15.38快速上下文切換寄存器c13

        訪問(wèn)寄存器c13的指令格式如下所示:

        MCRp15,0,Rd>,c13>,c0,0

        MRCp15,0,Rd>,c13>,c0,0

        其中,在讀操作時(shí),結(jié)果中位[31:25]返回PID,其他位的數(shù)值是不可預(yù)知的。寫(xiě)操作將設(shè)置PID的值。

        當(dāng)PID=0時(shí),MVA=VA,相當(dāng)于禁止了FCSE。系統(tǒng)復(fù)位后PID為0。

        當(dāng)正在運(yùn)行的進(jìn)程訪問(wèn)別的進(jìn)程時(shí),被訪問(wèn)的進(jìn)程標(biāo)識(shí)不能為0。這時(shí),CPU發(fā)生的地址VA的高7位不是全0。

        完整的VA到MVA的變換算法如下所示。

        If(VA[31:25]==0b0000000)then

        MVA=VA|(PID<<25=

        Else

        MVA=VA

        存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理




        關(guān)鍵詞: ARM 存儲(chǔ)管理單元 MMU

        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 广南县| 镇平县| 海兴县| 青铜峡市| 正阳县| 尚志市| 襄垣县| 高清| 鄂托克旗| 土默特左旗| 瓮安县| 琼海市| 芮城县| 玉山县| 枣庄市| 轮台县| 谷城县| 乌鲁木齐县| 四平市| 绥江县| 古丈县| 麦盖提县| 樟树市| 华阴市| 延寿县| 远安县| 二连浩特市| 富民县| 库伦旗| 巩义市| 镇坪县| 石家庄市| 黎平县| 泸西县| 绿春县| 巴中市| 湖口县| 宁国市| 新营市| 资阳市| 佳木斯市|