日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MMU和cache学习

發(fā)布時(shí)間:2025/4/16 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MMU和cache学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.????? MMU

MMUmemory management unit,稱為內(nèi)存管理單元,或者是存儲器管理單元,MMU是硬件設(shè)備,它被保存在主存(main memory)的兩級也表控制,并且是由協(xié)處理器CP15的寄存器1M位來決定是enabled還是disabledMMU的主要作用是負(fù)責(zé)從CPU內(nèi)核發(fā)出的虛擬地址到物理地址的映射,并提供硬件機(jī)制的內(nèi)存訪問權(quán)限檢查。MMU使得每個(gè)用戶進(jìn)程擁有自己的地址空間(對于WINCE5.0,每個(gè)進(jìn)程是32MB;而對于WINCE6.0,每個(gè)進(jìn)程的獨(dú)占的虛擬空間是2GB),并通過內(nèi)存訪問權(quán)限的檢查保護(hù)每個(gè)進(jìn)程所用的內(nèi)存不被其他進(jìn)程破壞。

?

下面是MMU提供的功能和及其特征

?

2.????? VAPA

VAvirtual address稱為虛擬地址,PAphysical address稱為物理地址。CPU通過地址來訪問內(nèi)存中的單元,如果CPU沒有MMU,或者有MMU但沒有啟動,那么CPU內(nèi)核在取指令或者訪問內(nèi)存時(shí)發(fā)出的地址(此時(shí)必須是物理地址,假如是虛擬地址,那么當(dāng)前的動作無效)將直接傳到CPU芯片的外部地址引腳上,直接被內(nèi)存芯片(物理內(nèi)存)接收,這時(shí)候的地址就是物理地址。如果CPU啟用了MMU(一般是在bootloader中的eboot階段的進(jìn)入main()函數(shù)的時(shí)候啟用)CPU內(nèi)核發(fā)出的地址將被MMU截獲,這時(shí)候從CPUMMU的地址稱為虛擬地址,而MMU將這個(gè)VA翻譯成為PA發(fā)到CPU芯片的外部地址引腳上,也就是將VA映射到PA中。MMUVA映射到PA是以頁(page)為單位的,對于32位的CPU,通常一頁為4k,物理內(nèi)存中的一個(gè)物理頁面稱頁為一個(gè)頁框(page frame)。虛擬地址空間劃分成稱為頁(page)的單位,而相應(yīng)的物理地址空間也被進(jìn)行劃分,單位是頁框(frame).頁和頁框的大小必須相同。

?

3.????? VAPA的映射過程

?

首先將CPU內(nèi)核發(fā)送過來的32VA[31:0]分成三段,前兩段VA[31:20]VA[19:12]作為兩次查表的索引,第三段VA[11:0]作為頁內(nèi)的偏移,查表的步驟如下:

從協(xié)處理器CP15的寄存器2(TTB寄存器,translation table base register)中取出保存在其中的第一級頁表(translation table)的基地址,這個(gè)基地址指的是PA,也就是說頁表是直接按照這個(gè)地址保存在物理內(nèi)存中的。

?

TTB中的內(nèi)容為基地址,以VA[31:20]為索引值在一級頁表中查找出一項(xiàng)(2^12=4096項(xiàng)),這個(gè)頁表項(xiàng)(也稱為一個(gè)描述符,descriptor)保存著第二級頁表(coarse page table)的基地址,這同樣是物理地址,也就是說第二級頁表也是直接按這個(gè)地址存儲在物理內(nèi)存中的。

?

VA[19:12]為索引值在第二級頁表中查出一項(xiàng)(2^8=256),這個(gè)表項(xiàng)中就保存著物理頁面的基地址,我們知道虛擬內(nèi)存管理是以頁為單位的,一個(gè)虛擬內(nèi)存的頁映射到一個(gè)物理內(nèi)存的頁框,從這里就可以得到印證,因?yàn)椴楸硎且皂摓閱挝粊聿榈摹?/span>

?

有了物理頁面的基地址之后,加上VA[11:0]這個(gè)偏移量(2^12=4KB)就可以取出相應(yīng)地址上的數(shù)據(jù)了。

?

這個(gè)過程稱為Translation Table WalkWalk這個(gè)詞用得非常形象。從TTB走到一級頁表,又走到二級頁表,又走到物理頁面,一次尋址其實(shí)是三次訪問物理內(nèi)存。注意這個(gè)“走”的過程完全是硬件做的,每次CPU尋址時(shí)MMU就自動完成以上四步,不需要編寫指令指示MMU去做,前提是操作系統(tǒng)要維護(hù)頁表項(xiàng)的正確性,每次分配內(nèi)存時(shí)填寫相應(yīng)的頁表項(xiàng),每次釋放內(nèi)存時(shí)清除相應(yīng)的頁表項(xiàng),在必要的時(shí)候分配或釋放整個(gè)頁表。

?

4.????? CPU訪問內(nèi)存時(shí)的硬件操作順序

?

CPU訪問內(nèi)存時(shí)的硬件操作順序,各步驟在圖中有對應(yīng)的標(biāo)號:

1 CPU內(nèi)核(圖中的ARM)發(fā)出VA請求讀數(shù)據(jù),TLB(translation lookaside buffer)接收到該地址,那為什么是TLB先接收到該地址呢?因?yàn)?/span>TLBMMU中的一塊高速緩存(也是一種cache,是CPU內(nèi)核和物理內(nèi)存之間的cache),它緩存最近查找過的VA對應(yīng)的頁表項(xiàng),如果TLB里緩存了當(dāng)前VA的頁表項(xiàng)就不必做translation table walk了,否則就去物理內(nèi)存中讀出頁表項(xiàng)保存在TLB中,TLB緩存可以減少訪問物理內(nèi)存的次數(shù)。

?

2 頁表項(xiàng)中不僅保存著物理頁面的基地址,還保存著權(quán)限和是否允許cache的標(biāo)志。MMU首先檢查權(quán)限位,如果沒有訪問權(quán)限,就引發(fā)一個(gè)異常給CPU內(nèi)核。然后檢查是否允許cache,如果允許cache就啟動cacheCPU內(nèi)核互操作。

?

3 如果不允許cache,那直接發(fā)出PA從物理內(nèi)存中讀取數(shù)據(jù)到CPU內(nèi)核。

?

4 如果允許cache,則以VA為索引到cache中查找是否緩存了要讀取的數(shù)據(jù)

,如果cache中已經(jīng)緩存了該數(shù)據(jù)(稱為cache hit)則直接返回給CPU內(nèi)核,如果cache中沒有緩存該數(shù)據(jù)(稱為cache miss),則發(fā)出PA從物理內(nèi)存中讀取數(shù)據(jù)并緩存到cache中,同時(shí)返回給CPU內(nèi)核。但是cache并不是只去CPU內(nèi)核所需要的數(shù)據(jù),而是把相鄰的數(shù)據(jù)都去上來緩存,這稱為一個(gè)cache lineARM920Tcache line32個(gè)字節(jié),例如CPU內(nèi)核要讀取地址0x30000134~0x30001374個(gè)字節(jié)數(shù)據(jù),cache會把地址0x30000120~0x3000137(對齊到32字節(jié)地址邊界)32字節(jié)都取上來緩存。

?

5.????? ARM920T支持多種尺寸規(guī)格的頁表

?

ARM體系結(jié)構(gòu)最多使用兩級頁表來進(jìn)行轉(zhuǎn)換,頁表由一個(gè)個(gè)條目組成,每個(gè)條目存儲一段虛擬地址對應(yīng)的物理地址及訪問權(quán)限,或者下一級頁表的地址。S3C2443最多會用到兩級頁表,已段(section,大小為1M)的方式進(jìn)行轉(zhuǎn)換時(shí)只用到一級頁表,以頁(page)的方式進(jìn)行轉(zhuǎn)換時(shí)用到兩級頁表。而頁的大小有3種:大頁(large pages64KB),小頁(small pages4KB)和極小頁(tiny pages1KB)。條目也成為描述符,有段描述符、大頁描述符、小頁描述符和極小頁描述符,分別保存段、大頁、小頁和極小頁的起始物理地址,見下圖

?

?

MMU的查表過程,首先從CP15的寄存器TTB找到一級頁表的基地址,再把VA[31:20]作為索引值從表中找出一項(xiàng),這個(gè)表項(xiàng)稱為一級頁描述符(level one descriptor),一個(gè)這樣的表項(xiàng)占4個(gè)字節(jié),那么一級頁表需要保存的物理內(nèi)存的大小是4*4096=16KB,表項(xiàng)可以是一下四種格式之一:

?

如果描述符的最低位是00,屬于fault格式,表示該范圍的VA沒有映射到PA

?

如果描述符的最低位是10,屬于section格式,這種格式?jīng)]有二級頁表而是直接映射到物理頁面,一個(gè)色彩體哦你是1M的大頁面,描述符中的VA[31:20]就是這個(gè)頁面的基地址,基地址的VA[19:0]低位全為0,對齊到1M地址邊界,描述符中的domainAP位控制訪問權(quán)限,CB兩位控制緩存。

?

如果描述符的最低兩位是0111,則分別對應(yīng)兩種不同規(guī)格的二級頁表。根據(jù)地址對齊的規(guī)律想一下,這兩種頁表分別是多大?從一級描述符中取出二級頁表的基地址,再把VA的一部分作為索引去查二級描述符(level two descriptor),如果是coarse page,則VA[19:12](2^8=256)作為查找二級頁表表項(xiàng)的索引;如果是fine page,則VA[19:10](2^10=024)。二級描述符可以是下面四種格式之一:

?

?

二級描述符最低兩位是00是屬于fault格式,其它三種情況分別對應(yīng)三種不同規(guī)格的物理頁面,分別是large page(64KB)small page(4KB)tiny page(1KB),其中large pagesmall page4AP權(quán)限位,每組兩個(gè)bit,這樣可以為每1/4個(gè)物理頁面分別設(shè)置不同的權(quán)限,也就是說large page可以為每16KB設(shè)置不同的權(quán)限,small page可以為每1KB設(shè)置不同的權(quán)限。

?

ARM920T提供了多種頁表和頁面規(guī)格,但操作系統(tǒng)只采用其中一種,WINCE采用的就是一級描述符是coarse page table格式(也即由VA[19:12]來作為查找二級頁表項(xiàng)的索引),二級描述符是small page格式(也即是VA[11:0]來作為查找物理頁面偏移量的索引),每個(gè)物理頁面大小是4KB

?

根據(jù)上圖我們來分析translation table walk的過程

VA被劃分為三段用于地址映射過程,各段的長度取決于頁描述符的格式。

?

TTB寄存器中只有[31:14]位有效,低14位全為0,因此一級頁表的基地址對齊到16K地址邊界,而一級頁表的大小也是16K

?

一級頁表的基地址加上VA[31:20]左移兩位組成一個(gè)物理地址。想一想為什么VA[31:20]要左移兩位占據(jù)[13:2]的位置,而空出[1:0]兩位呢?應(yīng)該是需要空出最低兩位用于表示當(dāng)前要尋找的一級描述符是coarse page格式,目前不清楚,有待了解。

?

用這個(gè)組裝的物理地址從物理內(nèi)存中讀取一級頁表描述符,這是一個(gè)coarse page table格式的描述符。

?

通過domain權(quán)限檢查后,coarse page table的基地址再加上VA[19:12]左移兩位組裝成一個(gè)物理地址。

?

用這個(gè)組裝的物理地址從物理內(nèi)存中讀取二級頁表描述符,這是一個(gè)small page格式的描述符。

?

通過AP權(quán)限檢查后,small page的基地址再加上VA[11:0]就是最終的物理地址了。

總結(jié)

以上是生活随笔為你收集整理的MMU和cache学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。