當(dāng)發(fā)生 TLB缺失時,MMU硬件只負(fù)責(zé)生成TLB缺失故障,接下來由操作系統(tǒng)負(fù)責(zé)查找缺失的頁,從TLB中移除一個記錄,輸入新的記錄,重啟發(fā)生故障的指令。
注意,在發(fā)生TLB缺失時,操作系統(tǒng)的處理必須在一小撮指令內(nèi)完成,因為TLB缺失發(fā)生的頻率要比頁面缺失發(fā)生的頻率高。
如何提升效率?
硬件方面:設(shè)置更大的TLB
如果TLB的大小適中,比如有64條,則通過軟件來管理TLB所帶來的效率提升是明顯的。因為TLB越大,意味著MMU的結(jié)構(gòu)越簡單,可以騰出更多的空間來放置緩存,從而提升效率。
軟件層面:
方法一:操作系統(tǒng)使用直覺來預(yù)判下一個將要被引用的頁,并提前將其放入TLB
方法二:在固定位置添加一個TLB條目的緩存
當(dāng)使用軟件來管理TLB時,需要理解幾個概念
- 軟缺失:虛擬頁不在TLB中,但是在內(nèi)存中
執(zhí)行操作就是更新TLB,不需要硬盤I/O
修復(fù)軟缺失需要執(zhí)行10-20個指令,可以在10-20ns內(nèi)完成; - 硬缺失
指令引用的虛擬地址頁既不在內(nèi)存頁中,也不在TLB中
執(zhí)行的操作是一次硬盤訪問操作+遍歷頁表
硬缺失比軟缺失要慢100萬倍