<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è) > 嵌入式系統 > 設計應用 > ARM存儲器之:存儲管理單元MMU

ARM存儲器之:存儲管理單元MMU

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

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

⑤域控制位失效

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

⑥訪(fǎng)問(wèn)權限失效

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

(3)外部存儲訪(fǎng)問(wèn)失效

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

·讀操作(reads)。

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

·一級描述符預?。╢irst-leveldescriptorfetch)。

·二級描述符預?。╯econd-leveldescriptorfetch)。

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

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

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

15.5.9快速上下文切換擴展(FCSE,FastContextSwitchExtension)

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

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

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

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

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

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

使用快速上下文切換擴展,虛擬存儲管理增加了一次地址轉換??焖偕舷挛那袚Q擴展在虛擬地址到達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寄存器。正是因為任務(wù)切換不需要改變頁(yè)表,因而切換后Cache和TLB中的值依然保持有效,不需要清除。

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

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

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

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

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

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

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

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

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

當PID=0時(shí),MVA=VA,相當于禁止了FCSE。系統復位后PID為0。

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

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

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

MVA=VA|(PID<<25=

Else

MVA=VA

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




關(guān)鍵詞: ARM 存儲管理單元 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>