www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > Linux閱碼場(chǎng)
[導(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



本站聲明: 本文章由作者或相關(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

Linux閱碼場(chǎng)

174 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉