版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第十三講ARM存儲(chǔ)機(jī)制河南大學(xué)計(jì)算機(jī)與信息工程學(xué)院授課人:金勇聯(lián)系電話mail:jy@計(jì)算機(jī)專(zhuān)業(yè)核心課程之一ARM存儲(chǔ)系統(tǒng)概述快速上下文切換技術(shù)高速緩沖區(qū)和寫(xiě)緩沖區(qū)ARM存儲(chǔ)器管理單元ARM存儲(chǔ)機(jī)制ARM存儲(chǔ)器訪問(wèn)指令3ARM存儲(chǔ)系統(tǒng)概述與其他中低檔單片機(jī)不同,ARM處理器中一般都包含一個(gè)存儲(chǔ)器管理部件,用于對(duì)存儲(chǔ)器的管理。為了適應(yīng)不同的嵌入式應(yīng)用,ARM存儲(chǔ)系統(tǒng)的體系結(jié)構(gòu)存在很多差別。簡(jiǎn)單的可以使用像單片機(jī)系統(tǒng)中使用的平板式地址映射機(jī)制即可;而一些復(fù)雜的系統(tǒng)中則可能包含多種技術(shù)來(lái)提供功能強(qiáng)大的存儲(chǔ)系統(tǒng)。4系統(tǒng)中可能包含多種類(lèi)型的存儲(chǔ)器件,如FLASH、ROM、SDRAM、SRAM等;而且不同類(lèi)型的存儲(chǔ)器件要求不同的速度、數(shù)據(jù)寬度等;通過(guò)CACHE和WRITEBUFFER技術(shù)縮小處理器和存儲(chǔ)系統(tǒng)速度差別,從而提高系統(tǒng)性能;內(nèi)存管理部件使用內(nèi)存映射技術(shù)實(shí)現(xiàn)虛擬空間到物理空間的映射。引入存儲(chǔ)保護(hù)機(jī)制,增強(qiáng)系統(tǒng)的安全性;引入一些機(jī)制保證I/O操作映射成內(nèi)存操作后,各種I/O操作能夠得到正確的結(jié)果。ARM存儲(chǔ)系統(tǒng)概述5S3C2410X的存儲(chǔ)器管理器提供訪問(wèn)外部存儲(chǔ)器的所有控制信號(hào):27位地址信號(hào)、32位數(shù)據(jù)信號(hào)、8個(gè)片選信號(hào)、以及讀/寫(xiě)控制信號(hào)等。S3C2410X的存儲(chǔ)空間分成8組,最大容量是1GB,bank0bank5為固定128MB,bank6和bank7的容量可編程改變,可以是2、4、8、16、32、64、128MB,并且bank7的開(kāi)始地址與bank6的結(jié)束地址相連接,但是二者的容量必須相等。bank0可以作為引導(dǎo)ROM,其數(shù)據(jù)線寬只能是16位和32位,復(fù)位時(shí)由OM0、OM1引腳確定;其它存儲(chǔ)器的數(shù)據(jù)線寬可以是8位、16位和32位。S3C2410X的存儲(chǔ)器格式,可以編程設(shè)置為大端格式,也可以設(shè)置為小端格式。ARM存儲(chǔ)器管理單元6S3C2410X存儲(chǔ)器組織示意圖ARM存儲(chǔ)器管理單元ARM存儲(chǔ)器管理單元寄存器地址功能操作復(fù)位值BWSCON0x48000000總線寬度和等待控制讀/寫(xiě)0x0BANKCON00x48000004BANK0控制讀/寫(xiě)0x0700BANKCON10x48000008BANK1控制讀/寫(xiě)0x0700BANKCON20x4800000CBANK2控制讀/寫(xiě)0x0700BANKCON30x48000010BANK3控制讀/寫(xiě)0x0700BANKCON40x48000014BANK4控制讀/寫(xiě)0x0700BANKCON50x48000018BANK5控制讀/寫(xiě)0x0700BANKCON60x4800001CBANK6控制讀/寫(xiě)0x18008BANKCON70x48000020BANK7控制讀/寫(xiě)0x18008REFRESH0x48000024SDRAM刷新控制讀/寫(xiě)0xAC0000BANKSIZE0x48000028可變的組大小設(shè)置讀/寫(xiě)0x0MRSRB60x4800002CBANK6模式設(shè)置讀/寫(xiě)xxxMRSRB70x48000030BANK7模式設(shè)置讀/寫(xiě)xxx13個(gè)控制寄存器為訪問(wèn)外部存儲(chǔ)空間提供存儲(chǔ)器控制信號(hào)。8用于存儲(chǔ)管理的系統(tǒng)控制協(xié)處理寄存器CP15在基于ARM的嵌入式系統(tǒng)中,存儲(chǔ)系統(tǒng)通常使用CP15來(lái)完成存儲(chǔ)器的大部分管理工作;除了CP15之外,在具體的存儲(chǔ)機(jī)制中可能還會(huì)用到其他技術(shù)如:頁(yè)表技術(shù)等。CP15可以保護(hù)16個(gè)32位的寄存器,編號(hào)0-15。實(shí)際上對(duì)于某些編號(hào)的寄存器可能對(duì)應(yīng)有多個(gè)物理寄存器,在指令中指定特定的標(biāo)志位來(lái)區(qū)分相應(yīng)的寄存器。ARM存儲(chǔ)器管理單元CP15寄存器列表-1寄存器編號(hào)基本作用在MMU中的作用0ID編碼(只讀)ID碼和Cache類(lèi)型1控制位各種控制位2存儲(chǔ)保護(hù)和控制地址轉(zhuǎn)換表基地址3存儲(chǔ)保護(hù)和控制域訪問(wèn)控制位4存儲(chǔ)保護(hù)和控制保留5存儲(chǔ)保護(hù)和控制內(nèi)存失效狀態(tài)6存儲(chǔ)保護(hù)和控制內(nèi)存失效地址ARM存儲(chǔ)器管理單元CP15寄存器列表-2寄存器編號(hào)基本作用在MMU中的作用7高速緩存和寫(xiě)緩存高速緩存和寫(xiě)緩存控制8存儲(chǔ)保護(hù)和控制TLB控制9高速緩存和寫(xiě)緩存高速緩存鎖定10存儲(chǔ)保護(hù)和控制TLB鎖定11保留
12保留
ARM存儲(chǔ)器管理單元11CP15寄存器列表-3寄存器編號(hào)基本作用在MMU中的作用13進(jìn)程標(biāo)識(shí)符進(jìn)程標(biāo)識(shí)符14保留
15因不同設(shè)計(jì)而異因不同設(shè)計(jì)而異ARM存儲(chǔ)器管理單元12訪問(wèn)CP15寄存器的指令訪問(wèn)CP15寄存器的指令有如下兩條:MCR Register->CoprocessorRegisterMRC CoprocessorRegister->Register【注】這兩條指令只能在系統(tǒng)模式下執(zhí)行;在用戶模式下執(zhí)行該指令將引起異常。ARM存儲(chǔ)器管理單元指令語(yǔ)法
MCR{cond}p15,<op1>,<Rd>,<CRn>,<CRm>{,<op2>}MCR2p15,<op1>,<Rd>,<CRn>,<CRm>{,<op2>}
OP1為協(xié)處理器將執(zhí)行的操作的代碼。對(duì)于CP15來(lái)說(shuō),該值必須為0;Rd為源寄存器,其值將被傳送到協(xié)處理器中;該寄存器不能為PC;CRn是協(xié)處理器的目標(biāo)寄存器,可以是C0-15;CRm是附加的目標(biāo)寄存器或源操作數(shù)寄存器,用于區(qū)分同一編號(hào)的不同物理寄存器,當(dāng)指令中不需要附加信息時(shí)要將C0指定為CRm;OP2也提供附加信息,用于區(qū)分同一編號(hào)的不同物理寄存器,當(dāng)指令中不需要附加信息時(shí),可以省略或者將其置0。ARM存儲(chǔ)器管理單元14MCR訪問(wèn)CP15示例 MCR P15,0,R4,C1,C0,0上述指令從ARM寄存器R4中將數(shù)據(jù)傳送到協(xié)處理器CP15的寄存器C1中。其中R4為ARM寄存器,存放源操作數(shù);C1和C0為協(xié)處理器寄存器,為目標(biāo)寄存器;操作碼1為0,操作碼附加信息也為0。ARM存儲(chǔ)器管理單元15指令語(yǔ)法
MRC{cond}p15,<op1>,<Rd>,<CRn>,<CRm>{,<op2>}MRC2p15,<op1>,<Rd>,<CRn>,<CRm>{,<op2>}
OP1為協(xié)處理器將執(zhí)行的操作的代碼。對(duì)于CP15來(lái)說(shuō),該值必須為0;Rd為目標(biāo)寄存器,指令處理的結(jié)果將存放在該寄存器中;CRn是協(xié)處理器寄存器,存放第一個(gè)源操作數(shù);CRm是附加的源操作數(shù)寄存器,用于區(qū)分同一編號(hào)的不同物理寄存器,當(dāng)指令中不需要附加信息時(shí)要將C0指定為CRm;OP2也提供附加信息,用于區(qū)分同一編號(hào)的不同物理寄存器,當(dāng)指令中不需要附加信息時(shí),可以省略或者將其置0。ARM存儲(chǔ)器管理單元16存儲(chǔ)管理單元MMU的作用實(shí)現(xiàn)虛擬地址空間到物理存儲(chǔ)空間的映射;存儲(chǔ)器訪問(wèn)權(quán)限的控制;設(shè)置虛擬存儲(chǔ)空間的緩沖特性。
頁(yè)表是實(shí)現(xiàn)上述功能的一個(gè)重要手段,它實(shí)際上是位于內(nèi)存中的一個(gè)對(duì)照表。ARM存儲(chǔ)器管理單元17存儲(chǔ)器單元的段頁(yè)式管理為了實(shí)現(xiàn)不同層次的管理,系統(tǒng)提供了基于段或頁(yè)的存儲(chǔ)器訪問(wèn)方式段(section):由1MB的存儲(chǔ)器塊構(gòu)成
大頁(yè)(largepage):由64KB的存儲(chǔ)器塊構(gòu)成
小頁(yè)(smallpage):由4KB的存儲(chǔ)器塊構(gòu)成
微頁(yè)(tinypage):由1KB的存儲(chǔ)器塊構(gòu)成ARM存儲(chǔ)器管理單元18用于存儲(chǔ)管理的頁(yè)表地址變換條目:頁(yè)表的每一行對(duì)應(yīng)與虛擬地址空間的一個(gè)頁(yè),該行同時(shí)保含了該虛擬內(nèi)存頁(yè)對(duì)應(yīng)的物理內(nèi)存頁(yè)的地址、該頁(yè)的訪問(wèn)權(quán)限以及緩沖特性等。我們將頁(yè)表中的一行稱(chēng)為地址變換條目。頁(yè)表存放在內(nèi)存中,系統(tǒng)通常有一個(gè)寄存器來(lái)保存頁(yè)表的基地址。ARM系統(tǒng)中使用的就是CP15的寄存器C2??毂恚簭奶摂M地址到物理地址的轉(zhuǎn)換實(shí)際上就是查詢(xún)頁(yè)表的過(guò)程。由于程序在執(zhí)行過(guò)程中具有局部性,即在一段時(shí)間內(nèi)只是局限在少數(shù)幾個(gè)單元,為了加快頁(yè)表的查詢(xún)速度,在系統(tǒng)中通常使用一個(gè)容量更小、速度更快的存儲(chǔ)器件來(lái)保存當(dāng)前需要訪問(wèn)的地址變換條目,這個(gè)容量小的頁(yè)表又稱(chēng)作快表(TLB)。ARM存儲(chǔ)器管理單元19快表的使用更新:當(dāng)CPU需要訪問(wèn)內(nèi)存時(shí),首先在TLB中查找需要的地址變換條目。若不存在則在內(nèi)存頁(yè)表中查詢(xún),并把查詢(xún)的結(jié)果添加到TLB中。清除:當(dāng)內(nèi)存中頁(yè)表的內(nèi)容改變或者使用新的頁(yè)表時(shí),TLB中的內(nèi)容需要清空。CP15的寄存器8用于完成該功能。鎖定:可以將一個(gè)地址變換條目鎖定在TLB中,以加快訪問(wèn)速度,CP15的寄存器10用于完成該功能。ARM存儲(chǔ)器管理單元20域(domain)管理域是段、大頁(yè)和小頁(yè)的集合。ARM結(jié)構(gòu)支持16個(gè)域。對(duì)域的訪問(wèn)由域訪問(wèn)控制寄存器(CP15的寄存器3)的兩個(gè)位字段控制。因?yàn)槊總€(gè)字段對(duì)訪問(wèn)對(duì)應(yīng)的域的使能非常迅速,所以整個(gè)存儲(chǔ)器區(qū)間能很快地交換進(jìn)出虛擬存儲(chǔ)器。這里支持2種域訪問(wèn)方式客戶:域的用戶(執(zhí)行程序,訪問(wèn)數(shù)據(jù)),被形成這個(gè)域的節(jié)或頁(yè)來(lái)監(jiān)督訪問(wèn)權(quán)限。管理者:控制域的行為(域中的當(dāng)前段和頁(yè),對(duì)域的訪問(wèn)),不被形成這個(gè)域的段或頁(yè)來(lái)監(jiān)督訪問(wèn)權(quán)限。一個(gè)程序可以是一些域的客戶,也是另外一些域的管理者,同時(shí)沒(méi)有對(duì)其它域的訪問(wèn)權(quán)限。這允許對(duì)程序訪問(wèn)不同存儲(chǔ)器資源的非常靈活的存儲(chǔ)器保護(hù)。ARM存儲(chǔ)器管理單元21內(nèi)存訪問(wèn)失效管理當(dāng)存儲(chǔ)器訪問(wèn)失敗時(shí),MMU單元提供了相應(yīng)的機(jī)制用于處理這種情況。CP15的寄存器5和寄存器6用于完成該功能。ARM存儲(chǔ)器管理單元22寄存器1的MMU控制位M(bit[0])使能MMU0=禁止MMU1=允許MMU在沒(méi)有MMU和保護(hù)單元的系統(tǒng)上,這個(gè)位應(yīng)該讀出為0,并忽略寫(xiě)。A(bit[1])使能對(duì)齊錯(cuò)檢查0=禁止1=允許..RRVIZFRSBLDPWCAM..14131211109876543210ARM存儲(chǔ)器管理單元23禁止和使能MMU下面指令使能MMU MRC P15,0,R0,C1,0,0 OR R0,#1 MCR P15,0,R0,C1,0,0下面指令禁止MMU MRC P15,0,R0,C1,0,0 BIC R0,#1 MCR P15,0,R0,C1,0,0ARM存儲(chǔ)器管理單元24地址變換過(guò)程虛擬存儲(chǔ)空間到物理存儲(chǔ)空間的映射是以?xún)?nèi)存塊為單位進(jìn)行的。在MMU中采用兩級(jí)頁(yè)表實(shí)現(xiàn)上述地址映射:一級(jí)頁(yè)表中包含有以段為單位的地址變換條目以及指向二級(jí)頁(yè)表的指針。一級(jí)頁(yè)表實(shí)現(xiàn)的地址映射粒度較大;二級(jí)頁(yè)表中包含以大頁(yè)和小頁(yè)為單位的地址變換條目。其中一種類(lèi)型的二級(jí)表還包含有極小頁(yè)為單位的地址變換條目。ARM存儲(chǔ)器管理單元25基于一級(jí)頁(yè)表的地址變換ARM存儲(chǔ)器管理單元26一級(jí)頁(yè)表描述符可能的格式ARM存儲(chǔ)器管理單元如果bits[1:0]=0b10時(shí),該頁(yè)表項(xiàng)為段描述符(Section
Descriptor),段描述符定義了對(duì)應(yīng)的1MB的虛擬存儲(chǔ)空間的地址映射關(guān)系。
如果bits[1:0]=0b01時(shí),該頁(yè)表項(xiàng)包含了粗二級(jí)頁(yè)表的物理地址。該粗二級(jí)頁(yè)表定義了對(duì)應(yīng)的1MB虛擬存儲(chǔ)空間的地址映射關(guān)系。它可以實(shí)現(xiàn)以大頁(yè)和小頁(yè)為單位的地址映射。
如果bits[1:0]=0b11時(shí),該頁(yè)表項(xiàng)包含了細(xì)二級(jí)頁(yè)表的物理地址。該細(xì)二級(jí)頁(yè)表定義了對(duì)應(yīng)的1MB虛擬存儲(chǔ)空間的地址映射關(guān)系。它可以實(shí)現(xiàn)以大頁(yè)、小頁(yè)和極小頁(yè)為單位的地址映射。
如果bits[1:0]=0b00時(shí),說(shuō)明此頁(yè)表項(xiàng)是一個(gè)錯(cuò)誤頁(yè)表項(xiàng)。它將產(chǎn)生一個(gè)存儲(chǔ)頁(yè)錯(cuò)誤。錯(cuò)誤條件會(huì)導(dǎo)致預(yù)取指令中止或數(shù)據(jù)中止,這取決于具體的存儲(chǔ)器訪問(wèn)類(lèi)型。27基于段地址的映射示意圖ARM存儲(chǔ)器管理單元28處理器主頻較高,通常為幾十兆甚至幾百兆,而一般存儲(chǔ)器(DRAM)的存儲(chǔ)周期為100~200ns。存儲(chǔ)器的速度嚴(yán)重制約著系統(tǒng)的性能。高速緩沖存儲(chǔ)器(cache)是一個(gè)硬件部件,對(duì)我們來(lái)說(shuō)是透明的。Cache與主存儲(chǔ)器間以塊(cacheline)為單位進(jìn)行數(shù)據(jù)交換。Cache的存取速度遠(yuǎn)遠(yuǎn)大于主存儲(chǔ)器的速度,存儲(chǔ)器訪問(wèn)的時(shí)間局部性決定了采用Cache后,系統(tǒng)的整體性能可以得到大大提高。高速緩沖區(qū)和寫(xiě)緩沖區(qū)29Cache的工作原理高速緩沖區(qū)和寫(xiě)緩沖區(qū)30Cache的工作原理在Cache存儲(chǔ)系統(tǒng)中,把Cache和主存劃分為相同大小的塊。主存地址可以使用塊號(hào)(B)和塊內(nèi)地址(W)兩部分組成。同樣Cache的地址也可以使用塊號(hào)(B)和塊內(nèi)地址(W)兩部分組成。命中率:當(dāng)CPU訪問(wèn)存儲(chǔ)器時(shí),通過(guò)存儲(chǔ)器地址變換部件把地址變換成cache的塊號(hào)和塊內(nèi)地址,如果變換成功(稱(chēng)為cache命中),就用得到的cache地址訪問(wèn)cache,從cache中取數(shù);如果變換失敗,則產(chǎn)生cache失效信息,并用主存儲(chǔ)器的地址訪問(wèn)主存儲(chǔ)器,同時(shí)將包含被訪問(wèn)字在內(nèi)的一整塊都從主存儲(chǔ)器讀出來(lái),裝入到cache中,但如果這時(shí)cache已滿,需要采用適當(dāng)?shù)奶鎿Q算法來(lái)更新cache。高速緩沖區(qū)和寫(xiě)緩沖區(qū)31Cache的地址映象和變換方法地址映象指把主存地址空間映象到cache地址空間,具體說(shuō)就是把存放在主存中的程序按照某種規(guī)則裝入到cache中,并建立主存地址到cache地址之間的對(duì)應(yīng)關(guān)系。地址變換是指當(dāng)程序已經(jīng)裝入到cache中后(形成地址映象),在實(shí)際運(yùn)行過(guò)程中,把主存地址如何變換成cache地址。地址映象和變換是密切相關(guān)的,算法需要統(tǒng)一。但所有方法都將主存和cache劃分為同樣大小的存儲(chǔ)單元(稱(chēng)為塊),在進(jìn)行變換時(shí)都是以塊為單位。地址映象和變換方法包括:全相聯(lián)映象、直接映象、組相聯(lián)映象三種方法。高速緩沖區(qū)和寫(xiě)緩沖區(qū)32地址映象和變換方法-全相聯(lián)映象方式主存中任意一塊可以映射到cache中的任意一塊的位置上。如果cache的塊容量為C,主存的塊容量為M,則兩則之間的映象關(guān)系有C*M中,如果采用目錄表來(lái)存放這些映象關(guān)系,目錄表的容量為C。高速緩沖區(qū)和寫(xiě)緩沖區(qū)缺點(diǎn):電路設(shè)計(jì)難以實(shí)現(xiàn)33地址映象和變換方法-直接映象方式這是最簡(jiǎn)單也是最直接的方法。主存中一塊只能映象到cache中的一個(gè)特定的塊中。假設(shè)主存的塊號(hào)為B,cache的塊號(hào)為b,則他們之間的映象關(guān)系可以使用下面的公式表示:
b=BmodeCb
其中Cb為cache的塊容量高速緩沖區(qū)和寫(xiě)緩沖區(qū)34地址映象和變換方法-組相聯(lián)映象方式在這種方式下,把主存和cache按照同樣大小劃分成組,每個(gè)組都由相同的塊數(shù)組成。這樣,主存的組數(shù)要比cache的組數(shù)多;主存的組與cache的組之間采用直接映象的方式;在兩個(gè)對(duì)應(yīng)的組之間采用全相聯(lián)映象方式。高速緩沖區(qū)和寫(xiě)緩沖區(qū)35Cache的分類(lèi)統(tǒng)一/獨(dú)立的數(shù)據(jù)和指令cache
適應(yīng)獨(dú)立的數(shù)據(jù)和指令cache,可以在同一個(gè)時(shí)鐘周期中讀取指令和數(shù)據(jù),而不需要雙端口的cache。但這時(shí)需要保證指令和數(shù)據(jù)的一致性。寫(xiě)回和寫(xiě)通cache
寫(xiě)回cache指執(zhí)行寫(xiě)操作時(shí),被寫(xiě)的數(shù)據(jù)只寫(xiě)入cache,僅當(dāng)cache需要被替換時(shí)才將數(shù)據(jù)寫(xiě)入到實(shí)際的存儲(chǔ)器中; 寫(xiě)通則是在指執(zhí)行寫(xiě)操作時(shí),同時(shí)向cache和存儲(chǔ)器執(zhí)行寫(xiě)操作,從而保證數(shù)據(jù)的一致性。高速緩沖區(qū)和寫(xiě)緩沖區(qū)36Cache替換算法隨機(jī)替換算法和輪轉(zhuǎn)法隨機(jī)替換算法通過(guò)一個(gè)隨機(jī)數(shù)發(fā)生器產(chǎn)生隨機(jī)數(shù),用新塊將編號(hào)為該隨機(jī)數(shù)的塊進(jìn)行替換。輪轉(zhuǎn)法維護(hù)一個(gè)邏輯的計(jì)數(shù)器,利用該計(jì)數(shù)器依次選擇將要被替換出去的cache塊。高速緩沖區(qū)和寫(xiě)緩沖區(qū)37Cache的編程接口與cache和寫(xiě)緩沖區(qū)相關(guān)的寄存器包括CP15中的寄存器C7、寄存器C9以及寄存器C1中的某些位。MCRP15,0,<Rd>,<C1>,<CRm>,<Op2>MCRP15,0,<Rd>,<C7>,<CRm>,<Op2>MCRP15,0,<Rd>,<C9>,c0,<Op2>MRCP15,0,<Rd>,<C1>,<CRm>,<Op2>MRCP15,0,<Rd>,<C7>,<CRm>,<Op2>MRCP15,0,<Rd>,<C9>,c0,<Op2>高速緩沖區(qū)和寫(xiě)緩沖區(qū)38快速上下文切換技術(shù)通過(guò)修改系統(tǒng)中不同進(jìn)程的虛擬地址,避免在進(jìn)行進(jìn)程間切換時(shí)造成的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能??焖偕舷挛那袚Q技術(shù)39快速上下文切換技術(shù)原理(FCSE)如果兩個(gè)進(jìn)程占用的虛擬地址空間有重疊,系統(tǒng)在這兩個(gè)進(jìn)程之間進(jìn)行切換時(shí),必須進(jìn)行虛擬地址到物理地址的重映射,包括重建TLB,清除cache,整個(gè)工作需要帶來(lái)巨大的系統(tǒng)開(kāi)銷(xiāo)。而快速上下文切換技術(shù)的引入避免了這種開(kāi)銷(xiāo)。FCSE位于CPU和MMU之間,他的責(zé)任就是將不同進(jìn)程使用的相同的虛擬地址映射為不同的虛擬空間,使得在上下文切換時(shí)無(wú)需重建TLB等。 如果兩個(gè)進(jìn)程使用了同樣的虛擬地址空間,則對(duì)CPU而言,兩個(gè)進(jìn)程使用了同樣的虛擬地址空間,F(xiàn)CSE機(jī)構(gòu)對(duì)各個(gè)進(jìn)程的虛擬地址進(jìn)行變換,這樣系統(tǒng)中除了CPU之外的部分看到的是經(jīng)過(guò)上下文切換機(jī)構(gòu)變換后的虛擬地址??焖偕舷挛那袚Q技術(shù)40在ARM系統(tǒng)中,4G的虛擬地址空間被分成128個(gè)進(jìn)程空間塊,每個(gè)空間塊中可以包含一個(gè)進(jìn)程,該進(jìn)程可以使用的虛擬地址空間為0~0x01ff’ffff。編號(hào)為I的進(jìn)程空間塊中的進(jìn)程實(shí)際使用的虛擬地址空間為: (I*0x0200’0000)~(I*0x0200’0000+0x01ffffff)快速上下文切換技術(shù)原理(FCSE)快速上下文切換技術(shù)助記符說(shuō)明操作條件碼位置STRRd,addressing存儲(chǔ)字?jǐn)?shù)據(jù)[addressing]←Rd,addressing索引STR{cond}STRBRd,addressing存儲(chǔ)字節(jié)數(shù)據(jù)[addressing]←Rd,addressing索引STR{cond}BSTRTRd,addressing以用戶模式存儲(chǔ)字?jǐn)?shù)據(jù)[addressing]←Rd,
addressing索引STR{cond}TSTRBTRd,addressing以用戶模式存儲(chǔ)字節(jié)數(shù)據(jù)[addressing]←Rd,addressing索引STR{cond}BTSTRHRd,addressing存儲(chǔ)半字?jǐn)?shù)據(jù)[addressing]←Rd,addressing索引STR{cond}HARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)LDR/STR指令用于對(duì)內(nèi)存變量的訪問(wèn)、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問(wèn)、查表、外圍部件的控制操作等。若使用LDR指令加載數(shù)據(jù)到PC寄存器,則實(shí)現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。所有單寄存器加載/存儲(chǔ)指令可分為“字和無(wú)符號(hào)字節(jié)加載存儲(chǔ)指令”和“半字和有符號(hào)字節(jié)加載存儲(chǔ)指令。LDR和STR——字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令
LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中,STR指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)LDR{cond}{T} Rd,<地址>;將指定地址上的字?jǐn)?shù)據(jù)讀入RdSTR{cond}{T} Rd,<地址>;將Rd中的字?jǐn)?shù)據(jù)存入指定地址
LDR{cond}B{T} Rd,<地址>;將指定地址上的字節(jié)數(shù)據(jù)讀入RdSTR{cond}B{T} Rd,<地址>;將Rd中的字節(jié)數(shù)據(jù)存入指定地址
其中,T為可選后綴。若指令有T,那么即使處理器是在特權(quán)模式下,存儲(chǔ)系統(tǒng)也將訪問(wèn)看成是在用戶模式下進(jìn)行的。T在用戶模式下無(wú)效,不能與前索引偏移一起使用T。ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)LDR和STR——字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼I為0時(shí),偏移量為12位立即數(shù),為1時(shí),偏移量為寄存器移位P表示前/后變址U表示加/減B為1表示字節(jié)訪問(wèn),為0表示字訪問(wèn)W表示回寫(xiě)為指令的尋址方式Rd為源/目標(biāo)寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(chǔ)(L為0)ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)LDR和STR——字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令
LDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個(gè)基址寄存器,可以為任一個(gè)通用寄存器;另一部分為一個(gè)地址偏移量。地址偏移量有以下3種格式:立即數(shù)。立即數(shù)可以是一個(gè)無(wú)符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。如:LDRR1,[R0,#0x12]
;R1<-[R0+0x12]寄存器。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。如:LDRR1,[R0,R2]
;
R1<-[R0+R2]
LDRR1,[R0,-R2];R1<-[R0-R2]寄存器及移位常數(shù)。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。如:LDRR1,[R0,R2,LSL#2]
;R1<-[R0+R2*4]
ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)
從尋址方式的地址計(jì)算方法分,加載/存儲(chǔ)指令有以下4種格式:零偏移。 如:LDRRd,[Rn]
前索引偏移。 如:LDRRd,[Rn,#0x04]!程序相對(duì)偏移。 如:LDRRd,labe1
后索引偏移。 如:LDRRd,[Rn],#-0x04注意:必須保證字?jǐn)?shù)據(jù)操作的地址是32位對(duì)齊的。LDR和STR——字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令LDR和STR——半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令
這類(lèi)LDR/STR指令可加載有符號(hào)半字或字節(jié),可加載/存儲(chǔ)無(wú)符號(hào)半字。偏移量格式、尋址方式與加載/存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令相同。ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)LDR{cond}SBRd,<地址>;將指定地址上的有符號(hào)字節(jié)讀入RdLDR{cond}SHRd,<地址>;將指定地址上的有符號(hào)半字讀入RdLDR{cond}HRd,<地址>;將指定地址上的半字?jǐn)?shù)據(jù)讀入RdSTR{cond}HRd,<地址>;將Rd中的半字?jǐn)?shù)據(jù)存入指定地址注意:1.有符號(hào)位半字/字節(jié)加載是指用符號(hào)位加載擴(kuò)展到32位,無(wú)符號(hào)半字加載是指用零擴(kuò)展到32位;2.半字讀寫(xiě)的指定地址必須為偶數(shù),否則將產(chǎn)生不可靠的結(jié)果;ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)LDR和STR——半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼I為0時(shí),偏移量為12位立即數(shù),為1時(shí),偏移量為寄存器移位P表示前/后變址U表示加/減W表示回寫(xiě)為指令的尋址方式Rd為源/目標(biāo)寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(chǔ)(L為0)S為1表示有符號(hào)訪問(wèn),為0表示無(wú)符號(hào)訪問(wèn)H為1表示半字訪問(wèn),為0表示字節(jié)訪問(wèn)LDR和STR指令應(yīng)用示例:1.加載/存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令LDR R2,[R5] ;將R5指向地址的字?jǐn)?shù)據(jù)存入R2STR R1,[R0,#0x04] ;將R1的數(shù)據(jù)存儲(chǔ)到R0+0x04地址LDRB R3,[R2],#-1 ;將R2指向地址的字節(jié)數(shù)據(jù)存入R3,R2=R2-1STRB R0,[R3,-R8ASR#2];R0->[R3-R8/4],存儲(chǔ)R0的最低有效字節(jié)2.加載/存儲(chǔ)半字和有符號(hào)字節(jié)指令LDRSBR1,[R0,R3] ;將R0+R3地址上的字節(jié)數(shù)據(jù)存入R1,
;高24位用符號(hào)擴(kuò)展LDRHR6,[R2],#2 ;將R2指向地址的半字?jǐn)?shù)據(jù)存入R6,高16位用0擴(kuò)展
;讀出后,R2=R2+2STRHR1,[R0,#2]! ;將R1的半字?jǐn)?shù)據(jù)保存到R0+2地址,
;只修改低2字節(jié)數(shù)據(jù),然后R0=R0+2ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)(3)LDR和STR雙字:加載/存儲(chǔ)兩個(gè)相鄰的寄存器,64位雙字。其句法有4種:Op{cond}DRd,[Rn]零偏移Op{cond}DRd,[Rn,offset]{!}前索引偏移Op{cond}DRd,label程序相對(duì)偏移Op{cond}D{T}Rd,[Rn],offset后索引偏移
ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)
其中:
Rd加載/存儲(chǔ)寄存器中的一個(gè),另一個(gè)是R(d+1)。Rd必須是偶數(shù)寄存器,且不是R14。
Rn除非指令為零偏移,或不帶寫(xiě)回的前索引,否則,Rn不允許與Rd和R(d+1)相同。labellabel必須是在當(dāng)前指令的上下252字節(jié)范圍內(nèi)。例如:LDRDR6,[R11];R6←[R11],R7←[R11+4]STRDR4,[R9,#24];R4→[R9+24],R5→[R9+28]ARM存儲(chǔ)器訪問(wèn)指令——單寄存器存儲(chǔ)助記符說(shuō)明操作條件碼位置LDM{mode}Rn{!},reglist多寄存器加載reglist←[Rn...],Rn回寫(xiě)等LDM{cond}{mode}STM{mode}Rn{!},reglist多寄存器存儲(chǔ)[Rn...]←reglist,Rn回寫(xiě)等STM{cond}{mode}ARM存儲(chǔ)器訪問(wèn)指令——多寄存器存取
多寄存器加載/存儲(chǔ)指令可以實(shí)現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個(gè)寄存器;STM為存儲(chǔ)多個(gè)寄存器。允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。它們主要用于現(xiàn)場(chǎng)保護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。ARM存儲(chǔ)器訪問(wèn)指令——多寄存器存取
多寄存器加載/存儲(chǔ)指令格式如下:LDM{cond}<模式>Rn{!},reglist{^}STM{cond}<模式>Rn{!},reglist{^}cond:指令執(zhí)行的條件;模式:控制地址的增長(zhǎng)方式,一共有8種模式;!:表示在操作結(jié)束后,將最后的地址寫(xiě)回Rn中;reglist
:表示寄存器列表,可以包含多個(gè)寄存器,它們使用“,”隔開(kāi),如{R1,R2,R6-R9},寄存器由小到大排列;^:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個(gè)功能:1)若op是LDM且寄存器列表包含R15時(shí),那么除了正常的多寄存器傳送外,還將SPSR也復(fù)制到CPSR中。這用于異常處理返回,僅在異常模式下使用。2)數(shù)據(jù)傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式的寄存器。ARM存儲(chǔ)器訪問(wèn)指令——多寄存器存取LDM和STM——多寄存器加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼S對(duì)應(yīng)于指令中的”^”符號(hào)P表示前/后變址U表示加/減W表示回寫(xiě)寄存器列表Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(chǔ)(L為0)ARM存儲(chǔ)器訪問(wèn)指令——多寄存器存取
多寄存器加載/存儲(chǔ)指令的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。模式說(shuō)明模式說(shuō)明IA每次傳送后地址加4FD滿遞減堆棧IB每次傳送前地址加4ED空遞減堆棧DA每次傳送后地址減4FA滿遞增堆棧DB每次傳送前地址減4EA空遞增堆棧數(shù)據(jù)塊傳送操作堆棧操作
進(jìn)行數(shù)據(jù)復(fù)制時(shí),先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進(jìn)行讀取和存儲(chǔ)。進(jìn)行堆棧操作操作時(shí),要先設(shè)置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實(shí)現(xiàn)堆棧操作。ARM存儲(chǔ)器訪問(wèn)指令——多寄存器存取數(shù)據(jù)塊傳送指令操作過(guò)程如右圖所示,其中R1為指令執(zhí)行前的基址寄存器,R1’則為指令執(zhí)行后的基址寄存器。R5R6R7R1R1’指令STMIAR1!,{R5-R7}4008H4004H4000H4014H4010H400CHR5R6R7R1R1’指令STMDAR1!,{R5-R7}40
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 4年級(jí)上冊(cè)數(shù)學(xué)人教版說(shuō)課稿7篇
- 網(wǎng)頁(yè)制作案例教程HTML5+CSS3課程設(shè)計(jì)
- 《數(shù)理經(jīng)濟(jì)學(xué)》課程教學(xué)大綱
- 復(fù)習(xí)真題卷04 第6-7單元(解析版)
- DBJ51-T 198-2022 四川省既有民用建筑結(jié)構(gòu)安全隱患排查技術(shù)標(biāo)準(zhǔn)
- 2009年高考語(yǔ)文試卷(全國(guó)Ⅱ卷)(解析卷)
- 建筑工程行業(yè)工程測(cè)量培訓(xùn)體會(huì)
- 通信行業(yè)客服工作總結(jié)
- 《色彩的漸變》課件
- 有關(guān)醫(yī)院的實(shí)習(xí)報(bào)告三篇
- 安全生產(chǎn)目標(biāo)考核表
- (高清版)TDT 1042-2013 土地整治工程施工監(jiān)理規(guī)范
- 工程訓(xùn)練(廣東工業(yè)大學(xué))智慧樹(shù)知到期末考試答案2024年
- 2023-2024學(xué)年重慶市九龍坡區(qū)高二(上)期末物理試卷(含解析)
- 初中數(shù)學(xué)九年級(jí)下冊(cè)《位似》(1)教案
- 天全縣儲(chǔ)備林建設(shè)項(xiàng)目施工組織設(shè)計(jì)樣本
- 礦權(quán)收儲(chǔ)方案
- 2022-2023學(xué)年重慶市渝北區(qū)人教PEP版五年級(jí)上冊(cè)期末英語(yǔ)試卷
- 安徽省合肥市廬江縣2022-2023學(xué)年八年級(jí)上學(xué)期期末物理試卷(含答案)
- 造價(jià)年度工作總結(jié)
- 護(hù)理人員應(yīng)急預(yù)案培訓(xùn)課件:居家病人護(hù)理與應(yīng)急服務(wù)
評(píng)論
0/150
提交評(píng)論