TWU
table walk unit:包含從內(nèi)存中讀取translation tables的邏輯
一個完整的頁表翻譯和查找的過程叫作頁表查詢(Translation Table Walk),頁表查詢的過程由硬件自動完成,但是頁表的維護(hù)需要軟件來完成。
頁表查詢是一個相對耗時的過程,理想的狀態(tài)是TLB里緩存有頁表轉(zhuǎn)換的相關(guān)信息。當(dāng)TLB未命中時,才會去查詢頁表,并且開始讀入頁表的內(nèi)容。
page table
page table是每個進(jìn)程獨(dú)有的,是軟件實(shí)現(xiàn)的,是存儲在main memory(比如DDR)中的
Address Translation
因?yàn)樵L問內(nèi)存中的頁表相對耗時,尤其是在現(xiàn)在普遍使用多級頁表的情況下,需要多次的內(nèi)存訪問,為了加快訪問速度,系統(tǒng)設(shè)計人員為page table設(shè)計了一個硬件緩存 - TLB,CPU會首先在TLB中查找,因?yàn)樵赥LB中找起來很快。TLB之所以快,一是因?yàn)樗械膃ntries的數(shù)目較少,二是TLB是集成進(jìn)CPU的,它幾乎可以按照CPU的速度運(yùn)行。
如果在TLB中找到了含有該虛擬地址的entry(TLB hit),則可從該entry中直接獲取對應(yīng)的物理地址,否則就不幸地TLB miss了,就得去查找當(dāng)前進(jìn)程的page table。這個時候,組成MMU的另一個部分table walk unit就被召喚出來了,這里面的table就是page table。
使用table walk unit硬件單元來查找page table的方式被稱為hardware TLB miss handling,通常被CISC架構(gòu)的處理器(比如IA-32)所采用。它要在page table中查找不到,出現(xiàn)page fault的時候才會交由軟件(操作系統(tǒng))處理。
與之相對的通常被RISC架構(gòu)的處理器(比如Alpha)采用的software TLB miss handling,TLB miss后CPU就不再參與了,由操作系統(tǒng)通過軟件的方式來查找page table。使用硬件的方式更快,而使用軟件的方式靈活性更強(qiáng)。IA-64提供了一種混合模式,可以兼顧兩者的優(yōu)點(diǎn)。
如果在page table中找到了該虛擬地址對應(yīng)的entry的p(present)位是1,說明該虛擬地址對應(yīng)的物理頁面當(dāng)前駐留在內(nèi)存中,也就是page table hit。找到了還沒完,接下來還有兩件事要做:
? 既然是因?yàn)樵赥LB里找不到才找到這兒來的,自然要更新TLB。
? 進(jìn)行權(quán)限檢測,包括可讀/可寫/可執(zhí)行權(quán)限,user/supervisor模式權(quán)限等。如果沒有正確的權(quán)限,將觸發(fā)SIGSEGV(Segmantation Fault)。
如果該虛擬地址對應(yīng)的entry的p位是0,就會觸發(fā)page fault,可能有這幾種情況:
? 這個虛擬地址被分配后還從來沒有被access過(比如malloc之后還沒有操作分配到的空間,則不會真正分配物理內(nèi)存)。觸發(fā)page fault后分配物理內(nèi)存,也就是demand paging,有了確定的demand了之后才分,然后將p位置1。
? 對應(yīng)的這個物理頁面的內(nèi)容被換出到外部的disk/flash了,這個時候page table entry里存的是換出頁面在外部swap area里暫存的位置,可以將其換回物理內(nèi)存,再次建立映射,然后將p位置1。
后面再進(jìn)一步就是看看這個TLB中具體是怎么找的,在page table中又是怎么“walk”,這部分就是具體的地址是怎么轉(zhuǎn)換的,翻譯的。
-
處理器
+關(guān)注
關(guān)注
68文章
19432瀏覽量
231255 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3060瀏覽量
74353 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6898瀏覽量
123783 -
MMU
+關(guān)注
關(guān)注
0文章
92瀏覽量
18374
發(fā)布評論請先 登錄
相關(guān)推薦
如何從可編程邏輯訪問處理器內(nèi)存?
CPU怎樣通過控制器將待運(yùn)行的程序從FLASH中讀入內(nèi)存中
CXL內(nèi)存協(xié)議介紹
如何從mifare和/或Felica讀取內(nèi)存內(nèi)容?
GIC ITS的ITS tables和Command Queue訪問簡析
ARMv8 MMU translation stages與相關(guān)寄存器介紹
windows應(yīng)用程序讀取進(jìn)程的內(nèi)存工具免費(fèi)下載
FPGA邏輯中關(guān)于地址映射說明
![FPGA<b class='flag-5'>邏輯</b><b class='flag-5'>中</b>關(guān)于地址映射說明](https://file.elecfans.com/web1/M00/C7/DB/o4YBAF9t95uADlruAAJbqS42WBY854.png)
內(nèi)存是怎么讀取數(shù)據(jù)的
如何有效地從內(nèi)核中訪問設(shè)備的全局內(nèi)存
![如何有效地<b class='flag-5'>從</b>內(nèi)核<b class='flag-5'>中</b>訪問設(shè)備的全局<b class='flag-5'>內(nèi)存</b>](https://file.elecfans.com/web2/M00/3C/5D/poYBAGJTjaGAD7wZAACyAb4TLNM063.png)
ARM SMMU Data structure之Context Descriptors
![ARM SMMU Data structure之Context Descriptors](https://file1.elecfans.com/web2/M00/82/A6/wKgaomRcQOCAeFUUAAAN30sOv_U231.jpg)
評論