MMU和cache学习
1.????? MMU
MMU:memory management unit,稱為內存管理單元,或者是存儲器管理單元,MMU是硬件設備,它被保存在主存(main memory)的兩級也表控制,并且是由協處理器CP15的寄存器1的M位來決定是enabled還是disabled。MMU的主要作用是負責從CPU內核發出的虛擬地址到物理地址的映射,并提供硬件機制的內存訪問權限檢查。MMU使得每個用戶進程擁有自己的地址空間(對于WINCE5.0,每個進程是32MB;而對于WINCE6.0,每個進程的獨占的虛擬空間是2GB),并通過內存訪問權限的檢查保護每個進程所用的內存不被其他進程破壞。
?
下面是MMU提供的功能和及其特征
?
2.????? VA和PA
VA:virtual address稱為虛擬地址,PA:physical address稱為物理地址。CPU通過地址來訪問內存中的單元,如果CPU沒有MMU,或者有MMU但沒有啟動,那么CPU內核在取指令或者訪問內存時發出的地址(此時必須是物理地址,假如是虛擬地址,那么當前的動作無效)將直接傳到CPU芯片的外部地址引腳上,直接被內存芯片(物理內存)接收,這時候的地址就是物理地址。如果CPU啟用了MMU(一般是在bootloader中的eboot階段的進入main()函數的時候啟用),CPU內核發出的地址將被MMU截獲,這時候從CPU到MMU的地址稱為虛擬地址,而MMU將這個VA翻譯成為PA發到CPU芯片的外部地址引腳上,也就是將VA映射到PA中。MMU將VA映射到PA是以頁(page)為單位的,對于32位的CPU,通常一頁為4k,物理內存中的一個物理頁面稱頁為一個頁框(page frame)。虛擬地址空間劃分成稱為頁(page)的單位,而相應的物理地址空間也被進行劃分,單位是頁框(frame).頁和頁框的大小必須相同。
?
3.????? VA到PA的映射過程
?
首先將CPU內核發送過來的32位VA[31:0]分成三段,前兩段VA[31:20]和VA[19:12]作為兩次查表的索引,第三段VA[11:0]作為頁內的偏移,查表的步驟如下:
⑴從協處理器CP15的寄存器2(TTB寄存器,translation table base register)中取出保存在其中的第一級頁表(translation table)的基地址,這個基地址指的是PA,也就是說頁表是直接按照這個地址保存在物理內存中的。
?
⑵以TTB中的內容為基地址,以VA[31:20]為索引值在一級頁表中查找出一項(2^12=4096項),這個頁表項(也稱為一個描述符,descriptor)保存著第二級頁表(coarse page table)的基地址,這同樣是物理地址,也就是說第二級頁表也是直接按這個地址存儲在物理內存中的。
?
⑶以VA[19:12]為索引值在第二級頁表中查出一項(2^8=256),這個表項中就保存著物理頁面的基地址,我們知道虛擬內存管理是以頁為單位的,一個虛擬內存的頁映射到一個物理內存的頁框,從這里就可以得到印證,因為查表是以頁為單位來查的。
?
⑷有了物理頁面的基地址之后,加上VA[11:0]這個偏移量(2^12=4KB)就可以取出相應地址上的數據了。
?
這個過程稱為Translation Table Walk,Walk這個詞用得非常形象。從TTB走到一級頁表,又走到二級頁表,又走到物理頁面,一次尋址其實是三次訪問物理內存。注意這個“走”的過程完全是硬件做的,每次CPU尋址時MMU就自動完成以上四步,不需要編寫指令指示MMU去做,前提是操作系統要維護頁表項的正確性,每次分配內存時填寫相應的頁表項,每次釋放內存時清除相應的頁表項,在必要的時候分配或釋放整個頁表。
?
4.????? CPU訪問內存時的硬件操作順序
?
CPU訪問內存時的硬件操作順序,各步驟在圖中有對應的標號:
1 CPU內核(圖中的ARM)發出VA請求讀數據,TLB(translation lookaside buffer)接收到該地址,那為什么是TLB先接收到該地址呢?因為TLB是MMU中的一塊高速緩存(也是一種cache,是CPU內核和物理內存之間的cache),它緩存最近查找過的VA對應的頁表項,如果TLB里緩存了當前VA的頁表項就不必做translation table walk了,否則就去物理內存中讀出頁表項保存在TLB中,TLB緩存可以減少訪問物理內存的次數。
?
2 頁表項中不僅保存著物理頁面的基地址,還保存著權限和是否允許cache的標志。MMU首先檢查權限位,如果沒有訪問權限,就引發一個異常給CPU內核。然后檢查是否允許cache,如果允許cache就啟動cache和CPU內核互操作。
?
3 如果不允許cache,那直接發出PA從物理內存中讀取數據到CPU內核。
?
4 如果允許cache,則以VA為索引到cache中查找是否緩存了要讀取的數據
,如果cache中已經緩存了該數據(稱為cache hit)則直接返回給CPU內核,如果cache中沒有緩存該數據(稱為cache miss),則發出PA從物理內存中讀取數據并緩存到cache中,同時返回給CPU內核。但是cache并不是只去CPU內核所需要的數據,而是把相鄰的數據都去上來緩存,這稱為一個cache line。ARM920T的cache line是32個字節,例如CPU內核要讀取地址0x30000134~0x3000137的4個字節數據,cache會把地址0x30000120~0x3000137(對齊到32字節地址邊界)的32字節都取上來緩存。
?
5.????? ARM920T支持多種尺寸規格的頁表
?
ARM體系結構最多使用兩級頁表來進行轉換,頁表由一個個條目組成,每個條目存儲一段虛擬地址對應的物理地址及訪問權限,或者下一級頁表的地址。S3C2443最多會用到兩級頁表,已段(section,大小為1M)的方式進行轉換時只用到一級頁表,以頁(page)的方式進行轉換時用到兩級頁表。而頁的大小有3種:大頁(large pages,64KB),小頁(small pages,4KB)和極小頁(tiny pages,1KB)。條目也成為描述符,有段描述符、大頁描述符、小頁描述符和極小頁描述符,分別保存段、大頁、小頁和極小頁的起始物理地址,見下圖
?
?
MMU的查表過程,首先從CP15的寄存器TTB找到一級頁表的基地址,再把VA[31:20]作為索引值從表中找出一項,這個表項稱為一級頁描述符(level one descriptor),一個這樣的表項占4個字節,那么一級頁表需要保存的物理內存的大小是4*4096=16KB,表項可以是一下四種格式之一:
?
⑴如果描述符的最低位是00,屬于fault格式,表示該范圍的VA沒有映射到PA。
?
⑵如果描述符的最低位是10,屬于section格式,這種格式沒有二級頁表而是直接映射到物理頁面,一個色彩體哦你是1M的大頁面,描述符中的VA[31:20]就是這個頁面的基地址,基地址的VA[19:0]低位全為0,對齊到1M地址邊界,描述符中的domain和AP位控制訪問權限,C、B兩位控制緩存。
?
⑶如果描述符的最低兩位是01或11,則分別對應兩種不同規格的二級頁表。根據地址對齊的規律想一下,這兩種頁表分別是多大?從一級描述符中取出二級頁表的基地址,再把VA的一部分作為索引去查二級描述符(level two descriptor),如果是coarse page,則VA[19:12](2^8=256)作為查找二級頁表表項的索引;如果是fine page,則VA[19:10](2^10=024)。二級描述符可以是下面四種格式之一:
?
?
二級描述符最低兩位是00是屬于fault格式,其它三種情況分別對應三種不同規格的物理頁面,分別是large page(64KB)、small page(4KB)和tiny page(1KB),其中large page和small page有4組AP權限位,每組兩個bit,這樣可以為每1/4個物理頁面分別設置不同的權限,也就是說large page可以為每16KB設置不同的權限,small page可以為每1KB設置不同的權限。
?
ARM920T提供了多種頁表和頁面規格,但操作系統只采用其中一種,WINCE采用的就是一級描述符是coarse page table格式(也即由VA[19:12]來作為查找二級頁表項的索引),二級描述符是small page格式(也即是VA[11:0]來作為查找物理頁面偏移量的索引),每個物理頁面大小是4KB。
?
根據上圖我們來分析translation table walk的過程
⑴VA被劃分為三段用于地址映射過程,各段的長度取決于頁描述符的格式。
?
⑵TTB寄存器中只有[31:14]位有效,低14位全為0,因此一級頁表的基地址對齊到16K地址邊界,而一級頁表的大小也是16K。
?
⑶一級頁表的基地址加上VA[31:20]左移兩位組成一個物理地址。想一想為什么VA[31:20]要左移兩位占據[13:2]的位置,而空出[1:0]兩位呢?應該是需要空出最低兩位用于表示當前要尋找的一級描述符是coarse page格式,目前不清楚,有待了解。
?
⑷用這個組裝的物理地址從物理內存中讀取一級頁表描述符,這是一個coarse page table格式的描述符。
?
⑸通過domain權限檢查后,coarse page table的基地址再加上VA[19:12]左移兩位組裝成一個物理地址。
?
⑹用這個組裝的物理地址從物理內存中讀取二級頁表描述符,這是一個small page格式的描述符。
?
⑺通過AP權限檢查后,small page的基地址再加上VA[11:0]就是最終的物理地址了。
總結
以上是生活随笔為你收集整理的MMU和cache学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE6.0+S3C2443的启动过
- 下一篇: S3C2443时钟管理