2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第5章 ARM的存儲系統(tǒng),與其他的中、低檔單片機不同,ARM處理器中可以包含一個存儲管理部件。本章介紹ARM體系中兩種典型的存儲管理實現(xiàn)機制。并在最后給出一個實例。,2,5.1 ARM存儲系統(tǒng)概述,ARM存儲系統(tǒng)的體系結(jié)構(gòu)可以適應(yīng)多種不同的嵌入式應(yīng)用系統(tǒng)。最簡單的存儲系統(tǒng)使用普通的地址映射機制,就像在一些簡單的單片機系統(tǒng)中一樣,地址空間的分配方式是固定的,系統(tǒng)中各部分都使用物理地址。而一些復(fù)雜的系統(tǒng)可能包括一種或者多種下面的技術(shù),從

2、而可以提供功能更為強大的存儲系統(tǒng):系統(tǒng)中可能包含多種類型的存儲器件通過使用Cache及Write Buffer技術(shù),可以縮小處理器和存儲系統(tǒng)的速度差別,從而提高系統(tǒng)的整體性能。內(nèi)存管理部件使用內(nèi)存映射技術(shù)實現(xiàn)虛擬空間到物理空間的映射引入存儲保護機制,增強系統(tǒng)的安全性。引入一些機制,保證將I/O操作映射成內(nèi)存操作后,各種I/O操作能夠得到正確的結(jié)果。,3,5.1 ARM存儲系統(tǒng)概述,本章中主要介紹以下內(nèi)容。在介紹相關(guān)內(nèi)容時,將

3、以LinkUp公司的通用ARM芯片L7205作為例子。ARM中用于存儲管理的系統(tǒng)控制協(xié)處理器CP15。ARM中的存儲管理部件MMU(Memory Management Unit)。ARM中的Cache及Write Buffer技術(shù)??焖龠M程上下文切換技術(shù)。,4,5.2 ARM中用于存儲管理的系統(tǒng)控制協(xié)處理器CP15,CP15可以包含16個32位的寄存器,其編號為0~15。實際上,對于某些編號的寄存器,可能對應(yīng)有多個物理寄存器,

4、在指令中可指定特定的標志位來區(qū)分這些物理寄存器。這種機制有些類似于ARM中的寄存器,當處于不同的處理器模式時,某些ARM寄存器可能是不同的物理寄存器,比如對于寄存器SPSR,每一種處理器模式下都對應(yīng)一個獨立的物理寄存器(用戶模式和系統(tǒng)模式對應(yīng)同樣的物理寄存器,這是一個例外)。CP15中的寄存器可能是只讀的,也可能是只寫的,還有一些是可以讀寫的。對于每一種寄存器,將會詳細介紹:寄存器的訪問類型(只讀/只寫/讀寫)。各種訪問操作對于寄

5、存器的作用。寄存器是否對應(yīng)有多個物理寄存器。寄存器的具體作用。,5,5.2.1 訪問CP15寄存器的指令,訪問CP15寄存器的指令有下面兩種。MCR:ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令。MRC:協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳送指令。MCR指令和MRC指令只能在處理器模式是系統(tǒng)模式時執(zhí)行,在用戶模式下執(zhí)行MCR指令和MRC指令將會觸發(fā)未定義指令的異常中斷。,6,5.2.2 CP15中的寄存器,1. &

6、#160;CP15中的寄存器C0(1)標識符寄存器①ARM7之后的處理器②ARM7處理器③ARM7之前的處理器(2)Cache類型標識符寄存器2.  CP15中的寄存器C1CP15中的寄存器C1是一個控制寄存器,它包括以下控制功能:禁止/使能MMU以及其他的與存儲系統(tǒng)相關(guān)的功能。配置存儲系統(tǒng)以及ARM處理器中的相關(guān)部分的工作方式。,7,5.3 存儲器管理單元MMU,5.3.1 存儲器管

7、理單元MMU概述在ARM系統(tǒng)中,存儲器管理單元MMU主要完成以下工作:虛擬存儲空間到物理存儲空間的映射。在ARM中采用了頁式虛擬存儲管理。它把虛擬地址空間分成一個個固定大小的塊,每一塊稱為一頁,把物理內(nèi)存的地址空間也分成同樣大小的頁。頁的大小可以分為粗粒度和細粒度兩種。MMU就要實現(xiàn)從虛擬地址到物理地址的轉(zhuǎn)換。存儲器訪問權(quán)限的控制。設(shè)置虛擬存儲空間的緩沖的特性。,8,5.3.1 存儲器管理單元MMU概述,頁表(Translat

8、e Table)是實現(xiàn)上述這些功能的重要手段,它是一個位于內(nèi)存中的表。頁表存放在內(nèi)存中,系統(tǒng)通常用一個寄存器來保存頁表的基地址。在ARM中,系統(tǒng)控制協(xié)處理器CP15的寄存器C2用來保存頁表的基地址。當CPU需要訪問內(nèi)存時,先在TLB中查找需要的地址變換條目。如果該條目不存在,CPU從位于內(nèi)存中的頁表中查詢,并把相應(yīng)的結(jié)果添加到TLB中。這樣,當CPU下一次又需要該地址變換條目時,就可以從TLB中直接得到了,從而使地址變換的速度大大加

9、快。,9,5.3.1 存儲器管理單元MMU概述,當內(nèi)存中的頁表內(nèi)容改變,或者通過修改系統(tǒng)控制協(xié)處理器CP15的寄存器C2使用新的頁表時,TLB中的內(nèi)容需要全部清除。MMU提供了相關(guān)的硬件支持這種操作。系統(tǒng)控制協(xié)處理器CP15的寄存器C8用來控制清除TLB內(nèi)容的相關(guān)操作。MMU可以將某些地址變換條目鎖定(Locked Down)在TLB中,從而使得進行與該地址變換條目相關(guān)的地址變換速度保持很快。在MMU中,寄存器C10用于控制TBL內(nèi)

10、容的鎖定。MMU可以將整個存儲空間分為最多16個域(Domain)。每個域?qū)?yīng)一定的內(nèi)存區(qū)域,該區(qū)域具有相同的訪問控制屬性。MMU中,寄存器C3用于控制與域相關(guān)的屬性的配置。當存儲訪問失效時,MMU提供了相應(yīng)的機制用于處理這種情況。在MMU中,寄存器C5和寄存器C6用于支持這些機制。,10,5.3.2 禁止/使能MMU,CP15的寄存器C1的位[0]用于控制禁止/使能MMU。當CP15的寄存器C1的位[0]設(shè)置成0時,禁止MMU;

11、當CP15的寄存器C1的位[0]設(shè)置成1時,使能MMU。下面的指令使能MMU: MRC P15,0,R0,C1,0, 0ORR R0,#01MCR P15,0,R0,C1,0,01. 使能MMU時存儲訪問過程2. 禁止MMU時存儲訪問過程3. 禁止/使能MMU時應(yīng)注意的問題,11,5.3.3 MMU中的地址變換過程,ARM支持的存儲塊大小有以下幾種。段(section):是大小為1MB的存儲塊。大頁(Larg

12、e Pages):是大小為64KB的存儲塊。小頁(Small Pages):是大小為4KB的存儲塊。極小頁(Tiny Pages):是大小為1KB的存儲塊。在MMU中采用下面兩級頁表實現(xiàn)上述地址映射:一級頁表中包含有以段為單位的地址變換條目以及指向二級頁表的指針。一級頁表實現(xiàn)的地址映射粒度較大。二級頁表中包含以大頁和小頁為單位的地址變換條目。其中,一種類型的二級頁表還包含有以極小頁為單位的地址變換條目。,12,5.3.3 M

13、MU中的地址變換過程,1. 基于一級頁表的地址變換過程(1)基于一級頁表的地址變換過程(2)段描述符及其地址變換過程(3)粗粒度頁表描述符(4)細粒度頁表描述符,13,,5.3.3 MMU中的地址變換過程,2. 基于二級頁表的地址變換過程二級頁表有兩種:粗粒度的二級頁表和細粒度的二級頁表。(1)大頁描述符以及相關(guān)的地址變換(2)小頁描述符以及相關(guān)的地址變換(3)極小頁描述符以及相關(guān)的地址變換,14,5.

14、3.4 MMU中的存儲訪問權(quán)限控制,在MMU中,寄存器C1的R、S控制位和頁表中地址轉(zhuǎn)換條目中的訪問權(quán)限控制位聯(lián)合作用,控制存儲訪問的權(quán)限。具體規(guī)則如表5.20所示。,15,5.3.5 MMU中的域,MMU中的域指的是一些段、大頁或者小頁的集合。ARM支持最多16個域,每個域的訪問控制特性由CP15中的寄存器C3中的兩位來控制。這樣就能很方便地將某個域的地址空間包含在虛擬存儲空間中,或者排除在虛擬存儲空間之外。CP15中的寄存器C

15、3的格式如下所示。,16,5.3.6 關(guān)于快表的操作,1. 使無效(Invalidate)快表的內(nèi)容2. 鎖定快表的內(nèi)容(1)寄存器C10(2)鎖定TLB,17,5.3.7 ARM中的存儲訪問失效,在ARM中有下面兩種機制可以檢測存儲訪問失效,并進而中止CPU的執(zhí)行:當MMU檢測到存儲訪問失效時,它可以向CPU報告該情況,并將存儲訪問失效的相關(guān)信息保存到寄存器中。這種機制稱為MMU失效(MMU Fault)。外部存儲系

16、統(tǒng)也可以向CPU報告存儲訪問失效。這種機制稱為外部存儲訪問中止(External Abort)。上述兩種情況統(tǒng)稱為存儲訪問中止(Abort)。這時稱造成存儲訪問中止的存儲訪問被中止(Aborted)。如果存儲訪問中止發(fā)生在數(shù)據(jù)訪問周期,CPU將產(chǎn)生數(shù)據(jù)訪問中止異常中斷。如果存儲訪問中止發(fā)生在指令預(yù)取周期,當該指令執(zhí)行時,CPU產(chǎn)生指令預(yù)取異常中斷。,18,5.3.7 ARM中的存儲訪問失效,1.  MMU失效(

17、1)MMU中與存儲訪問失效相關(guān)的寄存器(2)MMU存儲訪問失效的類型2. 外部存儲訪問失效讀操作。非緩沖的寫操作。一級描述符的獲取。二級描述符的獲取。非緩沖的存儲區(qū)域中的信號量操作。,19,5.4 高速緩沖存儲器和寫緩沖區(qū),通常ARM處理器的主頻為幾十MHz,有的已經(jīng)達到200MHz。而一般的主存儲器使用動態(tài)存儲器(DRAM),其存儲周期僅為100ns~200ns。這樣,如果指令和數(shù)據(jù)都存放在主存儲器中,主存儲器的速

18、度將會嚴重制約整個系統(tǒng)的性能。高速緩沖存儲器(Cache)和寫緩沖區(qū)(Write Buffers)位于主存儲器和CPU之間,主要用來提高存儲系統(tǒng)的性能。本節(jié)主要介紹與這兩種技術(shù)相關(guān)的基本概念。1993年著名的ARM7誕生,之后的ARM9、ARM11風靡世界。隨后出現(xiàn)了Cortex系列。實際上,Cortex就是ARM12。在“全國第七屆嵌入式系統(tǒng)與單片機學術(shù)交流暨Cortex有兩大分支:高性能的A8系列,主頻可達到1GHz;低成本、計

19、劃與8/16位MCU競爭的M3系列,20,5.4.1 基本概念,高速緩沖存儲器是全部用硬件來實現(xiàn)的,因此,它不僅對應(yīng)用程序員是透明的,而且對系統(tǒng)程序員也是透明的。Cache與主存儲器之間以塊(Cache Line)為單位進行數(shù)據(jù)交換。不同系統(tǒng)中,Cache的塊大小也是不同的。通常Cache的塊大小為幾個字。寫緩沖區(qū)是由一些高速的存儲器構(gòu)成的。它主要用來優(yōu)化向主存儲器中的寫入操作。當CPU進行向主存儲器中的寫入操作時,它先將數(shù)據(jù)寫入

20、到寫緩沖區(qū)中,由于寫緩沖區(qū)的訪問速度很高,這種寫入操作的速度將很高。然后CPU就可以進行下面的操作。寫緩沖區(qū)在適當?shù)臅r候以較低的速度將數(shù)據(jù)寫入到主存儲器中相應(yīng)的位置。通過引入Cache和寫緩沖區(qū),存儲系統(tǒng)的性能得到了很大的提高,但同時也帶來了一些問題。比如,由于數(shù)據(jù)將存在于系統(tǒng)中不同的物理位置,可能造成數(shù)據(jù)的不一致性;由于寫緩沖區(qū)的優(yōu)化作用,可能有些寫操作的執(zhí)行順序不是用戶期望的順序,從而造成操作錯誤。,21,5.4.2 Cache

21、的工作原理和地址映像方法,1.  Cache的工作原理2.  Cache地址映像和變換方法(1)全相聯(lián)映像方式(2)直接映像方式(3)組相聯(lián)映像方式,22,5.4.3 Cache的分類,1. 統(tǒng)一/獨立的數(shù)據(jù)Cache和指令Cache2. 寫通(Write-through)Cache和寫回(Write-back)Cache可靠性與主存的通信量控制的復(fù)雜性硬件實現(xiàn)的代價3

22、. 讀操作分配Cache和寫操作分配Cache,23,5.4.4 Cache的替換算法,在把主存地址變換成Cache地址的過程中,如果發(fā)現(xiàn)Cache塊失效,則需要從主存中調(diào)入一個新塊到Cache中。而來自主存中的這個新塊往往可以裝入到Cache的多個塊中。當可以裝入這個新塊的幾個Cache塊都已經(jīng)裝滿時,就要使用cache替換算法,從那些塊中找出一個不常用的塊,把它調(diào)回到主存中原來存放它的那個地方,騰出一個塊存放從主存中調(diào)來的新塊。

23、在ARM中常用的替換算法有兩種:隨機替換算法和輪轉(zhuǎn)法。(1)隨機替換算法通過一個偽隨機數(shù)發(fā)生器產(chǎn)生一個偽隨機數(shù),用新塊將編號為該偽隨機數(shù)的Cache塊替換掉。這種算法很簡單,易于實現(xiàn)。但是它沒有考慮程序的局部性特點,也沒有利用歷史上的塊地址流的分布情況,因而效果較差。同時這種算法不易預(yù)測最壞情況下Cache的性能。(2)輪轉(zhuǎn)法維護一個邏輯的計數(shù)器,利用該計數(shù)器依次選擇將要被替換出去的Cache塊。這種算法容易預(yù)測最壞情況下Cac

24、he的性能。但它有一個明顯的缺點,在程序發(fā)生很小的變化時,可能造成Cache平均性能急劇的變化。,24,5.4.5 緩沖技術(shù)的使用注意事項,通常使用Cache和寫緩沖可以提高系統(tǒng)的性能,但是由于Cache和寫緩沖區(qū)的使用可能改變訪問主存的數(shù)量、類型和時間,這些技術(shù)對于有些類型的存儲訪問是不適合的。本小節(jié)介紹使用這些技術(shù)時的一些限制。Cache通常需要存儲器件具有下面的特性:讀取操作將返回最后一次寫入的內(nèi)容,而且沒有其他的副作用。

25、寫操作除了影響目標單元的內(nèi)容外,沒有其他的副作用。對同一目標單元的兩次連續(xù)讀取操作將得到相同的結(jié)果。對同一目標單元的兩次連續(xù)寫取操作將會把第2次寫操作的值寫入目標單元,第1次寫操作將沒有意義。將存儲區(qū)域設(shè)置成unbuffered是為了防止延遲存儲訪問操作的執(zhí)行時間。對于寫回Cache如果設(shè)置cached,必然造成存儲訪問操作執(zhí)行的延遲,因而寫回類型的Cache不能設(shè)置成cached/buffered。在C語言中,是通過使用關(guān)鍵詞

26、volatile聲明存儲器映射的I/O空間,來防止編譯器在優(yōu)化時刪掉有用的存儲訪問操作的。,25,5.4.6 存儲系統(tǒng)的一致性問題,1. 地址映射關(guān)系變化造成的數(shù)據(jù)不一致2. 指令Cache的數(shù)據(jù)一致性問題3.  DMA造成的數(shù)據(jù)不一致問題將DMA訪問的存儲區(qū)域設(shè)置成非緩沖的(uncachable及unbufferable)。將DMA訪問的存儲區(qū)域所涉及的數(shù)據(jù)Cache塊設(shè)置成無效,或者清空數(shù)據(jù)Cache。

27、清空寫緩沖區(qū)(執(zhí)行寫緩沖區(qū)中延遲的所有寫操作)。在DMA操作期間限制處理器訪問DMA所訪問的存儲區(qū)域。,26,5.4.7 Cache內(nèi)容鎖定,這里所說的N鎖定塊被鎖定,是指編號為0~N-1的鎖定塊被鎖定在Cache中,編號為N~ASSOCIATIVITY-1的鎖定塊可用于正常的cache替換操作。實現(xiàn)N鎖定塊被鎖定的操作序列如下。(1)確保在整個鎖定過程中不會發(fā)生異常中斷。否則,必須保證與該異常中斷相關(guān)的代碼和數(shù)據(jù)必須位于非

28、緩沖(uncachable)的存儲區(qū)域。(2)如果鎖定的是指令Cache或者統(tǒng)一的Cache,必須保證鎖定過程所執(zhí)行的代碼位于非緩沖的存儲區(qū)域。(3)如果鎖定的是數(shù)據(jù)Cache或者統(tǒng)一的Cache,必須保證鎖定過程所涉及的數(shù)據(jù)位于非緩沖的存儲區(qū)域。,27,5.4.7 Cache內(nèi)容鎖定,(4)確保將要被鎖定的代碼和數(shù)據(jù)位于緩沖(cacheable)的存儲區(qū)域。(5)確保將要被鎖定的代碼和數(shù)據(jù)尚未在Cache中,可以通過使

29、無效相應(yīng)的cache中的塊達到這一目的。(6)對于I=0到N-1,重復(fù)執(zhí)行下面的操作:index=I寫入寄存器C9,當使用B格式的鎖定寄存器時,令L=1。對于鎖定塊I中的各Cache塊內(nèi)容從主存中預(yù)取到Cache中。對于數(shù)據(jù)Cache和統(tǒng)一Cache可以使用LDR指令讀取一個位于該塊中的數(shù)據(jù),將該塊預(yù)取到Cache中;對于指令Cache,通過操作寄存器C7,將相應(yīng)的塊預(yù)取到指令Cache中。(7)將index=N寫入寄存器C

30、9,當使用B格式的鎖定寄存器時,令L=0。解除N鎖定塊的鎖定只需執(zhí)行下面的操作:將index=0寫入寄存器C9。當使用B格式的鎖定寄存器時,令L=0。,28,5.4.8 與Cache和寫緩沖區(qū)相關(guān)的編程接口,1. 寄存器C1中的相關(guān)位2. 寄存器C73. 寄存器C9(1)寄存器C9的格式(2)訪問寄存器C9的指令,29,5.5 快速上下文切換技術(shù),快速上下文切換技術(shù)(Fast Context Switch Extens

31、ion,F(xiàn)CSE)通過修改系統(tǒng)中不同進程的虛擬地址,避免在進行進程間切換時造成的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能。本節(jié)介紹快速上下文切換技術(shù)的原理及其編程接口。,30,5.5.1 快速上下文切換技術(shù)原理,快速上下文切換技術(shù)(FCSE)的引入避免了這種開銷。它位于CPU和MMU之間,如果兩個進程使用了同樣的虛擬地址空間,則對CPU而言,兩個進程使用了同樣的虛擬地址空間;快速上下文切換機構(gòu)對各進程的虛擬地址進行變換,這樣,系

32、統(tǒng)中除了CPU之外的部分看到的是經(jīng)過快速上下文切換機制變換的虛擬地址??焖偕舷挛那袚Q機制將各進程的虛擬空間變換成不同的虛擬空間。這樣,在進行進程間切換時,就不需要進行虛擬地址到物理地址的重映射了??焖偕舷挛那袚Q機構(gòu)將CPU發(fā)出的每個虛擬地址按照上述的規(guī)則進行變換,然后發(fā)送到系統(tǒng)中的其他部分。變換過程如圖5.12所示。,31,5.5.2 快速上下文切換技術(shù)編程接口,CP15中的寄存器C13用于快速上下文切換。其編碼格式如下所示。31

33、 25 24 0訪問寄存器C13的指令格式如下所示:MCR p15, 0, , , c0, 0MRC p15, 0, , , c0, 0當PID的值為0時,MVA=VA,相當于禁止了FCSE。系統(tǒng)復(fù)位后PID即為0。當PID的值不為0時,相當于使能了FCSE。,32,5.6 與存儲系統(tǒng)相關(guān)的程序設(shè)計指南,本

34、節(jié)主要介紹與ARM存儲系統(tǒng)相關(guān)的程序設(shè)計用到的一些概念。如果說前面的幾章介紹了ARM存儲系統(tǒng)內(nèi)部的結(jié)構(gòu),本節(jié)是從外部來看ARM的存儲系統(tǒng),即ARM存儲系統(tǒng)提供的對外接口。當用戶通過這些接口來訪問ARM存儲系統(tǒng)時,需要遵守一定的規(guī)則,本節(jié)將介紹這些規(guī)則。,33,5.6.1 地址空間,ARM體系使用單一的普通地址空間。該地址空間的大小為232個8位字節(jié)。這些字節(jié)單元的地址是一個無符號的32位數(shù)值,其取值范圍為0~232-1。ARM的地址

35、空間也可以看作是230個32位的字單元。這些字單元的地址可以被4整除,也就是說,該地址的低兩位為0b00。地址為A的字數(shù)據(jù)包括地址為A、A+1、A+2、A+3四個字節(jié)單元的內(nèi)容。在ARM版本4及以上的版本中,ARM的地址空間也可以看作是231個16位的半字單元。這些半字單元的地址可以被2整除,也就是說,該地址的最低位為 0b0。地址為A的半字數(shù)據(jù)包括地址為A、A+1兩個字節(jié)單元的內(nèi)容。,34,5.6.1 地址空間,各存儲單元的地址作

36、為32位的無符號數(shù),可以進行常規(guī)的整數(shù)運算。這些運算的結(jié)果進行232取模。即運算結(jié)果發(fā)生上溢出和下溢出時,地址將會發(fā)生卷繞。比如,如果運算結(jié)果為(0xffffffff+0x80),實際上地址值為0x80。為了使程序便于和將來版本兼容,在程序中盡量使地址運算的結(jié)果在0~0xffffffff之間。如果程序中跳轉(zhuǎn)指令的目標地址依賴于地址值卷繞,則指令執(zhí)行的結(jié)果將不可預(yù)知。所以在程序中應(yīng)該保證向前跳轉(zhuǎn)不超過0xffffffff,向后跳轉(zhuǎn)不超過0

37、x0。在程序的正常執(zhí)行時,每執(zhí)行一條ARM指令,當前指令計數(shù)器值加4個字節(jié);每執(zhí)行一條Thumb指令,當前指令計數(shù)器值加2個字節(jié)。但是,當發(fā)生地址值上溢出時,執(zhí)行的結(jié)果將是不可預(yù)知的。LDC、LDM、STC及STM指令可能訪問一段連續(xù)的存儲單元。每執(zhí)行一次讀取/寫入操作,目標單元的地址值加4個字節(jié)。如果這種地址更新造成地址值上溢出,則指令執(zhí)行的結(jié)果將是不可預(yù)知的。,35,5.6.2 存儲器的格式,在ARM中,如果地址A是字對齊的,

38、有下面幾種:地址為A的字單元包括字節(jié)單元A、A+1、A+2及A+3。地址為A的半字單元包括字節(jié)單元A、A+1。地址為A+2的半字單元包括字節(jié)單元A+2、A+3。地址為A的字單元包括半字單元A、A+2。這樣,每個字單元中包含4個字節(jié)單元或者兩個半字單元;一個半字單元中包含兩個字節(jié)單元。但是在字單元中,4個字節(jié)哪一個是高位字節(jié),哪一個是低位字節(jié)則有兩種不同的格式:Big-endian格式和Little-endian格式。,36,5

39、.6.3 非對齊的存儲訪問操作,1. 非對齊的指令預(yù)取操作2. 非對齊的數(shù)據(jù)訪問操作執(zhí)行的結(jié)果不可預(yù)知。忽略字單元地址的低兩位的值,即訪問地址為(Address AND 0XFFFFFFC)的字單元;忽略半字單元地址的最低位的值,即訪問地址為(Address AND 0XFFFFFFE)的半字單元。忽略字單元地址值中的低兩位的值;忽略半字單元地址的最低位的值。由存儲系統(tǒng)實現(xiàn)這種“忽略”。也就是說,這時該地址值原封不動地送到存儲

40、系統(tǒng)。,37,5.6.4 指令預(yù)取和自修改代碼,在ARM中允許指令預(yù)取。在CPU執(zhí)行當前指令的同時,可以從存儲器中預(yù)取其后的若干條指令,具體預(yù)取多少條指令,不同的ARM實現(xiàn)中有不同的數(shù)值。當用戶讀取PC寄存器的值時,返回的是當前指令下面第2條指令的地址。預(yù)取的指令并不一定能夠得到執(zhí)行。正如在不同的ARM實現(xiàn)中,預(yù)取的指令條數(shù)可能不同,當發(fā)生程序跳轉(zhuǎn)時,不同的ARM實現(xiàn)中采用的跳轉(zhuǎn)預(yù)測算法也可能不同。自修改代碼指的是代碼在執(zhí)行過

41、程中可能修改自身。對于支持指令預(yù)取的ARM系統(tǒng),自修改代碼可能帶來潛在的問題。當指令被預(yù)取后,在該指令被執(zhí)行前,如果有數(shù)據(jù)訪問指令修改了位于主存中的該指令,這時被預(yù)取的指令和主存中對應(yīng)的指令不同,從而可能使執(zhí)行的結(jié)果發(fā)生錯誤。,38,5.6.5 IMB,IMB是一段特定的代碼序列,對于每種不同的ARM實現(xiàn),對應(yīng)有不同的IMB。IMB在新的指令被保存到主存中后,在該指令被實際執(zhí)行之前執(zhí)行,使得可自修改代碼在ARM體系中能夠可靠地執(zhí)行。

42、在很多ARM系統(tǒng)中,IMB中需要的很多指令(如使無效Cache等操作)只能運行在系統(tǒng)模式下。對于包含24位立即數(shù)的SWI指令,通常使用下面的SWI功能調(diào)用提供IMB功能: SWI 0XF00000,39,5.6.5 IMB,同樣,在其他的一些場合也需要在適當?shù)臅r候運行適當?shù)腎MB。下面介紹這些IMB的應(yīng)用場合。(1)對于采用了虛擬地址到物理地址映射的系統(tǒng),如果在指令預(yù)取之后和該指令得到實際執(zhí)行之前,虛擬地址到物理

43、地址的映射關(guān)系發(fā)生了改變,這時也需要運行適當?shù)腎MB。(2)如果在指令預(yù)取之后和該指令得到實際執(zhí)行之前,該指令所涉及到的存儲區(qū)域的訪問權(quán)限發(fā)生了改變(由允許訪問變成了不允許訪問,或者由不允許訪問變成了允許訪問),這時也需要運行適當?shù)腎MB。這種情況下的IMB中,一般不需要使無效Cache中相關(guān)的內(nèi)容,運行代價相對較低。,40,5.6.6 存儲器映射的I/O空間,在ARM中,I/O操作通常被映射成存儲器操作。I/O的輸出操作可以通過

44、存儲器寫入操作實現(xiàn);I/O的輸入操作可以通過存儲器讀取操作實現(xiàn)。這樣I/O空間就被映射成了存儲空間。這些存儲器映射的I/O空間不滿足Cache所要求的上述特性。由于寫緩沖技術(shù)可能推遲寫操作,它同樣不適合對于存儲器映射的I/O空間的操作。比如當CPU向中斷控制器的I/O端口寫ACK,清除當前中斷請求標志位,并重新使能中斷請求。如果使用了寫緩沖技術(shù),CPU的寫操作將被先寫入高速的緩沖區(qū)。高速的緩沖區(qū)可能在以后某個時間再將結(jié)果寫到I/O端口

45、,這樣就造成一種假象,似乎外設(shè)又發(fā)出了中斷請求。,41,5.6.6 存儲器映射的I/O空間,將存儲區(qū)域設(shè)置成unbuffered是為了防止延遲存儲訪問操作的執(zhí)行時間。對于寫回Cache如果設(shè)置cached必然造成存儲訪問操作執(zhí)行的延遲,因而寫回類型的Cache不能設(shè)置成cached/buffered。將存儲器映射的I/O空間設(shè)置成uncached是為了有效地防止硬件系統(tǒng)優(yōu)化時刪掉有用的存儲訪問操作。如果在高級語言中訪問存儲器映射的I

46、/O空間時,僅僅將存儲器映射的I/O空間設(shè)置成uncached,是不夠的。還必須告訴編譯器不要在優(yōu)化時刪掉有用的存儲訪問操作。在C語言中是通過使用關(guān)鍵詞volatile聲明存儲器映射的I/O空間來防止編譯器在優(yōu)化時刪掉有用的存儲訪問操作。,42,5.7 ARM存儲系統(tǒng)的實例,LinkUp公司生產(chǎn)的L7205芯片是一款A(yù)RM720T微處理器。它內(nèi)部包含了功能強大的MMU??梢赃B接多種存儲設(shè)備,包括512字節(jié)的芯片內(nèi)ROM,5KB的芯片內(nèi)

47、SRAM,可以在芯片外擴充SRAM/Flash,可以在芯片外擴充SDRAM。其存儲器可以被CPU、DMA以及LCD部分訪問。L7205SDB是LinkUp設(shè)計的基于L7205芯片的評價板,該評價板包含一個L7205芯片、32MB的SDRAM、兩個SRAM/Flash擴展槽。系統(tǒng)有兩種啟動方式,可以通過控制面板上的跳線進行選擇。本章將比較詳細地描述L7205SDB存儲系統(tǒng)及其配置方法,也可以作為設(shè)計其他基于ARM的嵌入系統(tǒng)存儲系統(tǒng)的參考

48、。,43,5.7.1 L7205的存儲系統(tǒng)概述,L7205芯片是一款A(yù)RM720T的微處理器。ARM720T微處理器中集成了ARM7TDMI微處理器內(nèi)核、8KB的Cache、寫緩沖區(qū)以及存儲器管理單元MMU。ARM7TDMI微處理器內(nèi)核是ARM7處理器系列成員之一。它與ARM體系的指令系統(tǒng)是兼容的。L7205的存儲系統(tǒng)包含了512字節(jié)的芯片內(nèi)ROM、5KB的芯片內(nèi)SRAM,存儲器映射的I/O空間,可以在芯片外擴充SRAM/Flash

49、,可以在芯片外擴充SDRAM。其地址空間映射如圖5.15所示。,44,,5.7.2 L7205中的SDRAM,L7205中可以擴展兩個SDRAM槽。SDRAM的存儲空間為0XF000 0000 ~ XFFFF FFFF。為能使SDRAM占據(jù)連續(xù)的存儲空間,將兩個槽的SDRAM都向地址0XF0FF FFFF靠攏,即槽1中的最高地址為0XF0FF FFFF,槽2中的最低地址為0XF100 0000。比如,當每個槽中DR

50、AM大小為8MB時,SDRAM的地址空間如圖5.16所示。當每個槽中SDRAM大小為16 MB時,SDRAM的地址空間如圖5.17所示。,45,5.7.2 L7205中的SDRAM,1.  L7205中DRAM的編程接口2. 自動識別L7205SDB上DRAM器件的大小,46,5.7.3 L7205中的MMU,L7205的MMU中包括兩級的頁表。在程序5.3中實現(xiàn)了一級表,這里的討論也主要集中在一級頁表。一級

51、頁表的粒度為1MB,頁表的大小為16KB。L7205中將一級頁表放置在SDRAM地址空間最高端的16KB區(qū)域。在L7205SDB中,每個SDRAM擴展槽中的存儲器大小為16MB,這樣,一級頁表就放置在(0xf2000000-16KB=0xf1ffc000)開始的16KB的區(qū)域內(nèi)。由于一級頁表粒度為1MB,實際上一級頁表放置在基地址為0xf1f0 0000的存儲頁中。存儲單元0Xf1ffbff4中保存了一級頁表的物理地址,任何時候都可以通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論