[導(dǎo)讀]作者簡(jiǎn)介甄建勇,高級(jí)架構(gòu)師(某國(guó)際大廠),十年以上半導(dǎo)體從業(yè)經(jīng)驗(yàn)。主要研究領(lǐng)域:CPU/GPU/NPU架構(gòu)與微架構(gòu)設(shè)計(jì)。感興趣領(lǐng)域:經(jīng)濟(jì)學(xué)、心理學(xué)、哲學(xué)。概?述愛因斯坦在他的相對(duì)論中告訴我們,沒有絕對(duì)的時(shí)間和空間,在一定條件下時(shí)間和空間是可以相互轉(zhuǎn)化的,是否我們的世界有一天能夠把...
作者簡(jiǎn)介
甄建勇,高級(jí)架構(gòu)師(某國(guó)際大廠),十年以上半導(dǎo)體從業(yè)經(jīng)驗(yàn)。主要研究領(lǐng)域:CPU/GPU/NPU架構(gòu)與微架構(gòu)設(shè)計(jì)。感興趣領(lǐng)域:經(jīng)濟(jì)學(xué)、心理學(xué)、哲學(xué)。
概 述
愛因斯坦在他的相對(duì)論中告訴我們,沒有絕對(duì)的時(shí)間和空間,在一定條件下時(shí)間和空間是可以相互轉(zhuǎn)化的,是否我們的世界有一天能夠把空間與時(shí)間轉(zhuǎn)化回到歷史的時(shí)期?
唐代詩(shī)仙李白也曾有云:“夫天地者,萬物之逆旅;光陰者,百代之過客”。是對(duì)空間和時(shí)間的另外一種表述。在人們一般的印象中,空間,不會(huì)隨著之間的變化而變大或變??;時(shí)間,也不會(huì)因?yàn)榭臻g的變化而變慢或變快。時(shí)間和空間,看似毫不相關(guān)的兩個(gè)事物,卻又時(shí)時(shí)刻刻聯(lián)系在一起。其實(shí)在計(jì)算機(jī)領(lǐng)域的很多方面都可以體現(xiàn)時(shí)間和空間的關(guān)系,比如,芯片面積和處理速度的置換就是其中之一,此外還有CPU中的存儲(chǔ)器組織的設(shè)計(jì)時(shí)運(yùn)用的時(shí)間局部性和空間局部性原理,也可以認(rèn)為是時(shí)空互換的經(jīng)典應(yīng)用。馮諾依曼結(jié)構(gòu)與他之前的結(jié)構(gòu)的最大不同就在于在計(jì)算機(jī)中引入了存儲(chǔ)部件,也正是這個(gè)存儲(chǔ)部件是計(jì)算機(jī)的設(shè)計(jì)進(jìn)入了一個(gè)全新時(shí)代。也正是由于存儲(chǔ)部件在計(jì)算機(jī)體系結(jié)構(gòu)中的重要地位,無論是過去還是現(xiàn)在,無論是體系結(jié)構(gòu)設(shè)計(jì)中,還是在操作系統(tǒng)設(shè)計(jì)中,存儲(chǔ)組織的設(shè)計(jì)與管理一直是研究熱點(diǎn)。在前面介紹了CPU的數(shù)據(jù)通路和控制通路之后,本章,我們將介紹舉足輕重的存儲(chǔ)器組織。
TLB與cache簡(jiǎn)介
對(duì)于computerarchitecture,除了流水線(pipelining)之外,存儲(chǔ)器層次組織(memoryhierarchy)是另外一個(gè)重要的部分。軟件方面,對(duì)linuxkernel的研究中,MMU是篇幅最多,也是最復(fù)雜的一部分。硬件方面,TLB和cache這兩個(gè)詞就比較常見了。這一小節(jié)就回憶一下這兩個(gè)概念吧。首先,為什么要有memeryhierarchy?(1)填補(bǔ)core和mainmemory之間的速度鴻溝。(2)填補(bǔ)SDRAM和mainmemory之間的cost鴻溝。(3)為了實(shí)現(xiàn)VirtualMemory其次,為什么實(shí)現(xiàn)Virtual Memory?歷史上,有兩個(gè)原因:其一,實(shí)現(xiàn)多個(gè)程序間高效的共享使用內(nèi)存, 其二,避免對(duì)小內(nèi)存系統(tǒng)編寫程序的難度?,F(xiàn)在主要是第一個(gè)原因。最后是memory hierarchy內(nèi)在原理,是局部性原理(principleof locality)這包括時(shí)間局部性(Temporallocality (locality in time))和空間局部性(Spatiallocality (locality in space))。 在介紹TLB 和 cache之前首先要明確幾點(diǎn):(1)匯編完的程序里用到的內(nèi)存地址是虛擬地址。也就是說core執(zhí)行的load/stor指令中的內(nèi)存地址是虛擬地址。(2)對(duì)于多進(jìn)程(線程)代碼,編譯時(shí),操作系統(tǒng)會(huì)給每個(gè)進(jìn)程分配不同的虛擬地址空間。(3)內(nèi)存是按頁(yè)(page)來管理和使用的,典型值是4K bytes。根據(jù)馮諾依曼體系結(jié)構(gòu),一切數(shù)據(jù)都來自內(nèi)存。所以就需要訪存(memoryaccess)。訪問內(nèi)存需要幾步?大體上需要兩步:(1)將虛擬地址轉(zhuǎn)換成物理地址。(2)讀/寫這個(gè)物理地址的內(nèi)容。詳細(xì)步驟:將虛擬地址轉(zhuǎn)換成物理地址,就需要虛擬地址到物理地址的一個(gè)映射表(具體映射方法有直接映射,組相聯(lián),全相聯(lián))。這個(gè)表,就是頁(yè)表(pagetable),頁(yè)表由很多項(xiàng)組成,每一項(xiàng)叫一個(gè)頁(yè)表項(xiàng),由操作系統(tǒng)維護(hù)。創(chuàng)建進(jìn)程的時(shí)候生成這個(gè)進(jìn)程執(zhí)行過程中用到的所有的頁(yè)表項(xiàng),其中一部分加載到內(nèi)存中,另外一部分放在硬盤上,即,交換區(qū)(swapspace)。由于訪存動(dòng)作很多,所以虛擬地址到物理地址的轉(zhuǎn)換動(dòng)作就很多,也就是訪問頁(yè)表的次數(shù)很多,所以根據(jù)局部性原理,就把一部分頁(yè)表項(xiàng)放到一個(gè)地方,這個(gè)地方就是TLB(translation-lookasidebuffer)。現(xiàn)在,物理地址知道了,那就可以讀/寫內(nèi)存對(duì)應(yīng)的這個(gè)地址了。由于訪存操作很多,所以根據(jù)局部性原理,就把經(jīng)常訪問的地址的數(shù)據(jù)放到一個(gè)地方,這樣就不用每次都訪問內(nèi)存了,可以直接訪問這個(gè)地方。這個(gè)地方,就是cache。由于TLB里面只有一部分頁(yè)表項(xiàng),所以有的就虛擬地址就在TLB里找不到對(duì)應(yīng)的物理地址,這時(shí),對(duì)于MIPS來說,會(huì)產(chǎn)生一個(gè)TLB miss的異常,然后由操作系統(tǒng)從內(nèi)存中找到對(duì)應(yīng)的頁(yè)表項(xiàng),然后將這個(gè)頁(yè)表項(xiàng)放到TLB里面(注意,更新算法),然后讓產(chǎn)生TLBmiss異常的那條指令重新執(zhí)行一遍,這時(shí)TLB里已經(jīng)有那一項(xiàng)了,也就能完成虛擬地址到物理地址的轉(zhuǎn)換了。如果,操作系統(tǒng)點(diǎn)兒背,內(nèi)存里也沒有對(duì)應(yīng)的頁(yè)表項(xiàng),那就只能從硬盤上的swapspace里找了(交換區(qū)里肯定有),然后把它放到TLB里,然后讓產(chǎn)生TLB miss異常的那條指令重新執(zhí)行一遍,這時(shí)TLB里已經(jīng)有那一項(xiàng)了,也就能完成虛擬地址到物理地址的轉(zhuǎn)換了。對(duì)于cache,有讀,寫之分。先說讀,如果cache里面有,直接把cache里面的數(shù)據(jù)返回,即,讀操作完成了。由于cache里面只有內(nèi)存數(shù)據(jù)的一部分,所以有的數(shù)據(jù)cache里面沒有,這時(shí)就只能產(chǎn)生讀內(nèi)存的地址信號(hào),然后從數(shù)據(jù)線上取數(shù)據(jù)。然后更新cache(注意,更新算法)。再說寫,如果cache里面有,有兩種方式:通寫(write-through),寫返回(write-back)。由于cache里面只有內(nèi)存數(shù)據(jù)的一部分,所以有的數(shù)據(jù)cache里面沒有,這時(shí)就只能產(chǎn)生寫內(nèi)存的地址信號(hào),然后把數(shù)據(jù)放到數(shù)據(jù)線上。然后更新cache。 數(shù)據(jù),可分為指令和普通數(shù)據(jù)。如果取指令和取普通數(shù)據(jù)各自使用一套memoryhierarchy,就有了ITLB,DTLB,icache,dcache。這就有點(diǎn)哈佛體系結(jié)構(gòu)的意思了。即core內(nèi)部采用哈佛體系結(jié)構(gòu),core外部采用馮-諾依曼體系結(jié)構(gòu)。下面是整體的流程。
圖1 TLB與cache的整體流程TLBMMU(memorymanagement unit),無論對(duì)于computerarchitecture designer還是OSdesigner,都是至關(guān)重要的部分,設(shè)計(jì)和使用的好壞,對(duì)性能影響比較大。MMU,是硬件和軟件配合最密切的部分之一,對(duì)于RISCCPU而言,更是這樣。前面,我們對(duì)or1200的整體memoryhierarchy做了簡(jiǎn)單分析,了解了cache的映射方式,替換策略,寫策略,以及cache的優(yōu)化等等背景知識(shí),并對(duì)or1200的具體實(shí)現(xiàn)做了分析。在現(xiàn)實(shí)中,cache往往和MMU緊密合作,完成CPU的訪存操作。本小節(jié)就來分析一下or1200的MMU模塊。研究一個(gè)東西,首先要了解其來龍去脈,MMU也不例外,我們?cè)诜治鯩MU的工作機(jī)制之前先介紹一下MMU的產(chǎn)生原因。當(dāng)時(shí),主要由兩方面的因素導(dǎo)致了MMU的產(chǎn)生:(1)從安全角度出發(fā),確保多進(jìn)程程序在執(zhí)行時(shí)相互不影響。(2)從程序員的角度出發(fā),采用MMU可以讓程序員在編程時(shí)少受內(nèi)容容量的限制。現(xiàn)在而言,第一個(gè)原因占主要。在分析or1200的MMU實(shí)現(xiàn)之前,我們有必要先了解MMU的工作機(jī)制。為了更清晰的了解MMU的工作過程,我假設(shè)了一個(gè)具體的例子,通過這個(gè)例子來說明其詳細(xì)的工作步驟。比如,我們編寫了一個(gè)簡(jiǎn)單的應(yīng)用層程序: 代碼清單 1
一個(gè)簡(jiǎn)單的應(yīng)用層程序
1. /*demo process, base on OS*/ 2. int main() 3. { 4. int test; 5. test = 0x12345678; 6. } (1)假設(shè)其進(jìn)程名稱為demo。(2)假設(shè)片外SDRAM(內(nèi)存)大小為32MB。其中內(nèi)核空間16MB,用戶空間16MB。(3)假設(shè)OS的內(nèi)存管理方式是單級(jí)頁(yè)式管理(還可能是段式,或頁(yè)段式),虛擬地址和物理地址均為32-bit。既然ps是8KB,也就是說最多需要的PTE的數(shù)量是:pte_num=32MB/8KB=4K。假設(shè)每個(gè)PTE是4Bytes,那么存放這些PTE一共需要的內(nèi)存大小是:4Bytes X4K=16KB。(4)假設(shè)OS在執(zhí)行進(jìn)程demo之前,給她分配的地址空間大小為6頁(yè)(page size= 8KB),也就是48K。這48KB是連續(xù)的,其起始物理地址第0x801頁(yè),也就是{19'h801,13'h01}。所以其地址空間是0x801頁(yè),0x802頁(yè),0x803頁(yè),0x804頁(yè),0x805頁(yè),0x806頁(yè),共6頁(yè)。既然其進(jìn)程空間是48KB,每頁(yè)是8K,也就是說OS需要給demo進(jìn)程生成6個(gè)PTE(pagetable entry,頁(yè)表項(xiàng))。(5)假設(shè)這6個(gè)PTE存放在kernel空間的第0x600個(gè)頁(yè),即進(jìn)程demo的PTE存放開始物理地址是0x600000,虛擬地址假設(shè)是0x12345000。 (6)假設(shè)這進(jìn)程這6頁(yè)的地址空間的分配方式是:代碼段,1頁(yè);bss段,1頁(yè);棧,1頁(yè);堆,1頁(yè);數(shù)據(jù)段,2頁(yè)。 (7)假設(shè)進(jìn)程demo中的變量test的地址在棧段,并且其頁(yè)內(nèi)偏移為0x1。(8)假設(shè)OS給進(jìn)程demo中變量test分配的虛擬地址為0x2001,物理地址為:0x1006001。(9)假設(shè)TLB的cacheentry數(shù)量是64,映射方式是直接映射,也就是說通過VPN進(jìn)行模運(yùn)算就可以得到TLB的索引地址。有了上面的假設(shè),那么MMU是如何工作的呢?MMU的功能主要是虛實(shí)地址轉(zhuǎn)換,PTE的cache(也就是TLB)。其具體過程,如下圖所示:圖 2 MMU工作的具體過程 其工作過程如下:為了實(shí)現(xiàn)虛實(shí)地址轉(zhuǎn)換,OS為每頁(yè)創(chuàng)建了一個(gè)頁(yè)表項(xiàng)(PTE,pagetable entry,由PPN域和管理域組成),每個(gè)虛擬地址也分成了兩部分,分別是VPN和INDEX,通過VPN的低6位(因?yàn)門LBcache是64 entry)定位到TLB的偏移量。如果相應(yīng)的偏移量處TLB hit,那么就可以直接得到對(duì)應(yīng)的PTE,有了PTE,我們就可以得到PTE中的PPN,PPN和INDEX組合在一起,就是物理地址。如果相應(yīng)的偏移量處TLB miss或者頁(yè)面異常,那么MMU產(chǎn)生一個(gè)TLB miss或者page fault異常,交給OS完成異常的處理(TLB的更新,和其它操作)。對(duì)于本演示例子來說,變量test的虛擬地址是0x2001,可見其TLB entry偏移量是0x2,頁(yè)內(nèi)偏移量是0x1;VPN是0x2。那么,MMU是如何將這個(gè)虛擬地址換換成物理地址的呢?首先,OS會(huì)根據(jù)進(jìn)程demo的進(jìn)程號(hào)(PID,OR也有CID(contextID)保存,DTLBWMR中的CID域),和DMMUCR(DMMU 控制寄存器)中的PTBP(pagetable base pointer),得到進(jìn)程demo的頁(yè)表的存放的開始地址(0x600000),然后得到對(duì)應(yīng)的PTE的地址(0x600008)根據(jù)TLB的偏移0x2,查看對(duì)應(yīng)的TLB的第2個(gè)cacheline,如果匹配,則進(jìn)一步和MR(machregister)中的VPN比較,如果也匹配,好,恭喜你,TLB hit,并將對(duì)應(yīng)的PTE(pte_2)的PPN(0x803)和INDEX(13'b0_0000_0000_0001)組合成物理地址(0x1006001),傳給qmem模塊,sb模塊,biu模塊,經(jīng)dbus_arbiter,memorycontroller,最終實(shí)現(xiàn)讀寫SDRAM的對(duì)應(yīng)地址。如果TLB miss(對(duì)應(yīng)的pte_2),那么OS查看異常寄存器,得到具體的異常信息,并最終將pte_2更新到TLB中,重新執(zhí)行MMU操作,則TLB hit,完成轉(zhuǎn)換過程。上面的過程,如果用一幅圖來展示的話,如下所示:圖 3 虛實(shí)地址轉(zhuǎn)換 上面介紹的OS的頁(yè)表是單級(jí)的,這樣的話,在搜索對(duì)應(yīng)的PTE時(shí)需要依次遍歷所有的PTE表項(xiàng),顯然比較慢,為了加快搜索速度,linux采用了兩級(jí)PTE頁(yè)表。其基本思想是將所有的PTE進(jìn)行分組,每一組由一個(gè)PTD(PT directory,我自己給起的名字),每個(gè)PTD項(xiàng)對(duì)應(yīng)一組PT。這樣,在搜索時(shí),先確定其所在的頁(yè)表目錄,然后只需要遍歷本目錄中的PTE就可以了。其操作過程和單級(jí)頁(yè)表相似,如下圖所示:圖4 兩級(jí)頁(yè)表的虛實(shí)地址轉(zhuǎn)換 上面通過一個(gè)例子,說明了MMU的工作機(jī)制,大體可概括如下:(1)根據(jù)進(jìn)程ID寄存器(這個(gè)寄存器的值是OS在進(jìn)行進(jìn)程切換時(shí)填進(jìn)去的)和VPN得到存放對(duì)應(yīng)頁(yè)表項(xiàng)的PTE的地址,主要使用CID和PTBP得到頁(yè)表目錄或頁(yè)表的存放的開始地址。并根據(jù)VPN得到具體頁(yè)表項(xiàng)的地址,從而獲得對(duì)應(yīng)的頁(yè)表項(xiàng)(PTE)。(2)從PTE中得到PPN(3)PPN與INDEX組合,得到物理地址(4)從上面的分析,可以看出,CPU對(duì)PTE的訪問是非常頻繁的,為了加快速度,將部分PTE放到cache里面,這個(gè)cache就是TLB。TLB 這個(gè)cache的映射方式一般采用directmapped,而不是fullyassociative,和setassociative。因?yàn)門LB一般都很小,前面章節(jié)我們提到如果cache很小的時(shí)候才用直接映射,延遲小,電路簡(jiǎn)單。(5)上面描述的過程是一帆風(fēng)順的情況,實(shí)際可不如此,如果出現(xiàn)TLBmiss,如何處理呢?硬件提供OS事先設(shè)置的當(dāng)前進(jìn)程的頁(yè)表存放的起始地址,頁(yè)表項(xiàng)的偏移地址,OS利用這些信息找到對(duì)應(yīng)的PTE,并將PTE中的信息取出來分別存放到匹配寄存器和轉(zhuǎn)換寄存器的對(duì)應(yīng)位置,完成TLB的更新。從中可以看出,整個(gè)處理過程,需要軟件硬件的巧妙的,天衣無縫的配合才行,那么具體是怎么處理的呢?我們通過查CPU的手冊(cè)可知,比如DTLB miss的異常入口地址是0x900,那么基于某個(gè)CPU的linux是如何實(shí)現(xiàn)的呢?參考head.S中相關(guān)代碼(soc-design\linux\arch\openrisc\kernel)。說到這里,你可能有一個(gè)疑問,“你一直說,如果出現(xiàn)TLB miss,OS計(jì)算出對(duì)應(yīng)的PTE的地址,然后取出內(nèi)容,更新TLB”,既然TLB miss之后需要訪問內(nèi)存獲得對(duì)應(yīng)的PTE,那么訪問這個(gè)PTE時(shí),PTE的地址也不在TLB中怎么辦呢?!這個(gè)你不用擔(dān)心,原因就是所有的頁(yè)表項(xiàng)都存放在內(nèi)存的kseg0段,而這段內(nèi)存的訪問是是不用MMU的。kseg0段除了放這些PTE外,也是存放異常處理程序的地方,你想啊,如果產(chǎn)生了一個(gè)異常,假設(shè)這個(gè)異常的處理入口地址是0x900,這個(gè)0x900肯定是物理地址,是不需要MMU的,如果這個(gè)0x900也經(jīng)過MMU處理就亂套了,物理地址轉(zhuǎn)虛擬地址,虛擬地址轉(zhuǎn)物理地址,是一個(gè)相向的過程,系統(tǒng)要想正常運(yùn)行,必須要有一個(gè)起源,而物理地址就是起源,虛擬地址只不過是為了達(dá)到某種效果而引進(jìn)的一種手段而已。其實(shí),對(duì)于一些內(nèi)存地址空間,是不能用MMU的,比如kernel使用的存放PTE的地方,還有就是異常/中斷處理程序的入口,這些是不能使用MMU的。原因是如下:如果PTE的存放地址也使用MMU的話,一但出現(xiàn)TLB miss,kernel需要訪問這些PTE,而這些PTE的地址也是經(jīng)過MMU的,就有可能再次產(chǎn)生TLB miss,這就出現(xiàn)了異常的嵌套,而且嵌套深度是無法確定的。如果存放異常向量的地址使用MMU,那么一旦出現(xiàn)一個(gè)異常之后,PC需要從這個(gè)地址取值,但是這個(gè)地址經(jīng)過MMU時(shí),也可能出現(xiàn)TLB miss,也會(huì)有異常嵌套的問題。所以,我們平時(shí)所說的某個(gè)異常入口地址是0x200,這個(gè)‘0x200’是物理地址,是不需要虛實(shí)轉(zhuǎn)換的。MMU,cache確實(shí)有它的好處,其重要性也是有目共睹,但并不是適用于所有方面,上面所說的內(nèi)核空間的kseg0段是禁止MMU的,除此之外,kseg1段,MMU和cache都是禁止的。從這個(gè)角度來看,無論是什么事情,都要‘有所為有所不為’,不要跟風(fēng),不要認(rèn)為是好東西就可以隨便用,要取其長(zhǎng),補(bǔ)己短,該出手時(shí)才出手。
代碼清單 2 DTLB miss
異常入口
1. /* ---[ 0x900: DTLB miss exception ]------------------------------------- */2. .org 0x900 3. l.j boot_dtlb_miss_handler 4. l.nop 代碼清單 3 DTLB miss
異常處理
1. /* ---[ boot dtlb miss handler ]----------------------------------------- */2. 3. boot_dtlb_miss_handler: 4. 5. /* mask for DTLB_MR register: - (0) sets V (valid) bit, 6. * - (31-12) sets bits belonging to VPN (31-12) 7. */ 8. #define DTLB_MR_MASK 0xfffff001 9. 10./* mask for DTLB_TR register: - (2) sets CI (cache inhibit) bit, 11. * - (4) sets A (access) bit, 12. * - (5) sets D (dirty) bit, 13. * - (8) sets SRE (superuser read) bit 14. * - (9) sets SWE (superuser write) bit 15. * - (31-12) sets bits belonging to VPN (31-12) 16. */ 17.#define DTLB_TR_MASK 0xfffff332 18. 19./* These are for masking out the VPN/PPN value from the MR/TR registers... 20. * it's not the same as the PFN */ 21.#define VPN_MASK 0xfffff000 22.#define PPN_MASK 0xfffff000 23. 24. 25. EXCEPTION_STORE_GPR6 26. 27.#if 0 28. l.mfspr r6,r0,SPR_ESR_BASE // 29. l.andi r6,r6,SPR_SR_SM // are we in kernel mode ? 30. l.sfeqi r6,0 // r6 == 0x1 --> SM 31. l.bf exit_with_no_dtranslation // 32. l.nop 33.#endif 34. 35. /* this could be optimized by moving storing of 36. * non r6 registers here, and jumping r6 restore 37. * if not in supervisor mode 38. */ 39. 40. EXCEPTION_STORE_GPR2 41. EXCEPTION_STORE_GPR3 42. EXCEPTION_STORE_GPR4 43. EXCEPTION_STORE_GPR5 44. 45. l.mfspr r4,r0,SPR_EEAR_BASE // get the offending EA 46. 47.immediate_translation: 48. CLEAR_GPR(r6) 49. 50. l.srli r3,r4,0xd // r3 <- r4 / 8192 (sets are relative to page size (8Kb) NOT VPN size (4Kb) 51. 52. l.mfspr r6, r0, SPR_DMMUCFGR 53. l.andi r6, r6, SPR_DMMUCFGR_NTS 54. l.srli r6, r6, SPR_DMMUCFGR_NTS_OFF 55. l.ori r5, r0, 0x1 56. l.sll r5, r5, r6 // r5 = number DMMU sets 57. l.addi r6, r5, -1 // r6 = nsets mask 58. l.and r2, r3, r6 // r2 <- r3 % NSETS_MASK 59. 60. l.or r6,r6,r4 // r6 <- r4 61. l.ori r6,r6,~(VPN_MASK) // r6 <- VPN :VPN .xfff - clear up lo(r6) to 0x**** *fff 62. l.movhi r5,hi(DTLB_MR_MASK) // r5 <- ffff:0000.x000 63. l.ori r5,r5,lo(DTLB_MR_MASK) // r5 <- ffff:1111.x001 - apply DTLB_MR_MASK 64. l.and r5,r5,r6 // r5 <- VPN :VPN .x001 - we have DTLBMR entry 65. l.mtspr r2,r5,SPR_DTLBMR_BASE(0) // set DTLBMR 66. 67. /* set up DTLB with no translation for EA <= 0xbfffffff */ 68. LOAD_SYMBOL_2_GPR(r6,0xbfffffff) 69. l.sfgeu r6,r4 // flag if r6 >= r4 (if 0xbfffffff >= EA) 70. l.bf 1f // goto out 71. l.and r3,r4,r4 // delay slot :: 24 <- r4 (if flag==1) 72. 73. tophys(r3,r4) // r3 <- PA 74.1: 75. l.ori r3,r3,~(PPN_MASK) // r3 <- PPN :PPN .xfff - clear up lo(r6) to 0x**** *fff 76. l.movhi r5,hi(DTLB_TR_MASK) // r5 <- ffff:0000.x000 77. l.ori r5,r5,lo(DTLB_TR_MASK) // r5 <- ffff:1111.x330 - apply DTLB_MR_MASK 78. l.and r5,r5,r3 // r5 <- PPN :PPN .x330 - we have DTLBTR entry 79. l.mtspr r2,r5,SPR_DTLBTR_BASE(0) // set DTLBTR 80. 81. EXCEPTION_LOAD_GPR6 82. EXCEPTION_LOAD_GPR5 83. EXCEPTION_LOAD_GPR4 84. EXCEPTION_LOAD_GPR3 85. EXCEPTION_LOAD_GPR2 86. 87. l.rfe // SR <- ESR, PC <- EPC 88. 89.exit_with_no_dtranslation: 90. /* EA out of memory or not in supervisor mode */ 91. EXCEPTION_LOAD_GPR6 92. EXCEPTION_LOAD_GPR4 93. l.j _di
欲知詳情,請(qǐng)下載word文檔
下載文檔
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
休斯頓2022年6月30日 /美通社/ -- 行業(yè)領(lǐng)先的集成數(shù)字解決方案提供商Lummus Digital宣布與Lotte Chemical USA Corpora...
關(guān)鍵字:
MMU
AC
DIGITAL
AN
關(guān)注、星標(biāo)嵌入式客棧,干貨及時(shí)送達(dá) [導(dǎo)讀] 本文從內(nèi)存管理的發(fā)展歷程角度層層遞進(jìn),介紹 MMU 的誕生背景,工作機(jī)制。而忽略了具體處理器的具體實(shí)現(xiàn)細(xì)節(jié),將 MMU 的工作原理從概念上比較清晰的梳理了一遍。 MMU 誕生...
關(guān)鍵字:
MMU
一、S3C2440存儲(chǔ)控制器如果大家寫過S3C2440的ARM裸機(jī)程序都應(yīng)該知道通常SDRAM的起始地址是0X30000000,但是大家有沒有想過為什么呢?下面我將給大家做一個(gè)簡(jiǎn)要的介紹。查S3C
關(guān)鍵字:
MMU
S3C2440
存儲(chǔ)控制器
CPU
【導(dǎo)讀】騰博(R)今日公布了一項(xiàng)融合通信網(wǎng)關(guān) (Unified Communications Gateway) 技術(shù),并演示了與微軟 Office Communicator R2 之間的高清視頻互操作性,從而進(jìn)一步鞏固了...
關(guān)鍵字:
COM
MMU
OFFICE
微軟
Ammunition工作室負(fù)責(zé)的Beats耳機(jī)外觀設(shè)計(jì)工作,將在未來幾個(gè)月內(nèi)過渡到新東家蘋果公司接管。Ammunition的創(chuàng)始人,前蘋果首席設(shè)計(jì)師羅伯特·布倫納在博客中表示,他對(duì)蘋果與BeatsElectronics和...
關(guān)鍵字:
蘋果
BEATS
MMU
TI
4月22日晚間消息(岳明)物聯(lián)網(wǎng)、社交媒體、大數(shù)據(jù)分析、云服務(wù)、OTT和跨平臺(tái)播放被視為2014年最值得關(guān)注的一些重大趨勢(shì),與之相應(yīng)的是移動(dòng)設(shè)備應(yīng)用的蓬勃發(fā)展。數(shù)據(jù)顯示,亞太地區(qū)的移動(dòng)設(shè)備應(yīng)用流量將在2017年超越
關(guān)鍵字:
ASIA
COM
MMU
新加坡
近年來,過渡金屬催化的C-H鍵官能化反應(yīng)因其具有很好的原子經(jīng)濟(jì)性受到科學(xué)家的廣泛關(guān)注。與傳統(tǒng)的方法相比,這類反應(yīng)具有底物不需要預(yù)活化、底物適應(yīng)性廣泛、合成路線短、產(chǎn)生的廢棄物少等多種突出優(yōu)點(diǎn),在有機(jī)合成特
關(guān)鍵字:
金屬
COM
MMU
AN
LED半導(dǎo)體照明網(wǎng)訊:在Gadget Show Live 2014上,一款名為Commuter X4 的可穿戴式背掛LED車尾燈和肩帶組合被評(píng)為英國(guó)發(fā)明家獎(jiǎng)項(xiàng)(British Inventors Proj...
關(guān)鍵字:
LED
COM
MMU
TE
在Gadget Show Live 2014上,一款名為Commuter X4 的可穿戴式背掛LED車尾燈和肩帶組合被評(píng)為英國(guó)發(fā)明家獎(jiǎng)項(xiàng)(British Inventors Project)的第二名。
對(duì)于喜歡在夜間騎...
關(guān)鍵字:
LED
COM
MMU
TE
金屬-有機(jī)框架化合物(MOFs)具有較高的比表面積、可控的孔道大小和可修飾的孔表面,在吸附、分離、催化、熒光和質(zhì)子傳輸?shù)阮I(lǐng)域展現(xiàn)出了廣泛應(yīng)用前景。利用柔性的配體(形如氨基酸、多肽、蛋白質(zhì)等)與金屬離子自組裝
關(guān)鍵字:
金屬
COM
MMU
SoC
移動(dòng)金融服務(wù)繼續(xù)拓展,13項(xiàng)服務(wù)現(xiàn)各擁有100多萬活躍帳戶香港2014年2月25日 GSMA 的無銀行帳戶人群移動(dòng)金融 (MMU) 計(jì)劃今天發(fā)布了第三份年度《產(chǎn)業(yè)移動(dòng)金融服務(wù)現(xiàn)狀報(bào)告》(Mobile Financial...
關(guān)鍵字:
移動(dòng)
GSMA
MMU
IP
CommunicAsia2014/EnterpriseIT2014展覽會(huì)定于2014年6 月17日至20日重返新加坡濱海灣金沙,將聚光燈再次投向整個(gè)通信生態(tài)系統(tǒng)中涌現(xiàn)的創(chuàng)新技術(shù)。作為亞洲地區(qū)的頂級(jí)ICT資訊科技產(chǎn)業(yè)盛會(huì)...
關(guān)鍵字:
ASIA
COM
MMU
NI
8月28日午間消息,據(jù)北京郵電大學(xué)官方網(wǎng)站信息顯示,原中國(guó)礦業(yè)大學(xué)(北京)校長(zhǎng)喬建永已出任北京郵電大學(xué)校長(zhǎng)。此前,6月28日的北京郵電大學(xué)2013屆本科生畢業(yè)典禮上,原北京郵電大學(xué)校長(zhǎng)方濱興在講話中透露,已經(jīng)向主
關(guān)鍵字:
北京郵電大學(xué)
CHINA
COM
MMU
GSMA(移動(dòng)通信發(fā)展協(xié)會(huì))近日發(fā)布的一份報(bào)告指出,肯尼亞使用移動(dòng)支付服務(wù)的人數(shù)已超過2300萬。移動(dòng)支付服務(wù),是無銀行賬戶人群移動(dòng)金融(MMU)計(jì)劃的一部分。該計(jì)劃旨在鼓勵(lì)移動(dòng)運(yùn)營(yíng)商與金融業(yè)之協(xié)作,以確保向無銀行賬
關(guān)鍵字:
移動(dòng)
MMU
移動(dòng)通信
GSMA
21ic訊 國(guó)際通訊與資訊科技展覽及研討會(huì)(CommunicAsia)、國(guó)際企業(yè)信息技術(shù)展覽會(huì)(EnterpriseIT)和亞洲廣播展(BroadcastAsia)——三大亞洲規(guī)模最大、最具聲望的...
關(guān)鍵字:
ASIA
COM
MMU
NI
CommunicAsia2013、EnterpriseIT2013和BroadcastAsia2013將為業(yè)界知名和新興企業(yè)提供獨(dú)一無二的展示平臺(tái)
關(guān)鍵字:
ASIA
COM
MMU
NI
中國(guó)上海,2012年10月22日訊 —— 恩智浦半導(dǎo)體 (NXP Semiconductors N.V.)(納斯達(dá)克代碼:NXPI)今日宣布德國(guó)工業(yè)及M2M通信系統(tǒng)的領(lǐng)先供應(yīng)商- Dr. Neuhaus Telekomm...
關(guān)鍵字:
恩智浦
智能識(shí)別
MMU
智能電網(wǎng)
我們?cè)?MWC 預(yù)覽過的 Nokia Drive 3.0 with Commute 已經(jīng)正式推出了。在這個(gè)正式版上,介面的配色有些微變動(dòng),在功能上,它會(huì)學(xué)習(xí)用戶的使用習(xí)慣。例如它懂得在用戶早上上班之前取得上班路線的交通...
關(guān)鍵字:
COM
MMU
NOKIA
TE
夏天來了,炎炎夏日是時(shí)候出去旅行了,不過你的手機(jī)和平板電腦的電量可不會(huì)像太陽那樣源源不斷;Timbuk2 考慮到了消費(fèi)者這方面的要求,和 Joey Energy 合作推出了兩款帶充電器的旅行包。它們是 Power Co...
關(guān)鍵字:
充電器
POWER
COM
MMU