MMU、TLB、TWU深度剖析:打破砂鍋問(wèn)到底
在計(jì)算機(jī)的世界里,內(nèi)存管理就像是一場(chǎng)精密的舞蹈,每一個(gè)環(huán)節(jié)都至關(guān)重要。而其中,地址轉(zhuǎn)換則是這場(chǎng)舞蹈的核心舞步,它負(fù)責(zé)將程序中使用的虛擬地址精準(zhǔn)地轉(zhuǎn)換為物理內(nèi)存地址。這一過(guò)程對(duì)于實(shí)現(xiàn)內(nèi)存隔離、共享和保護(hù)起著決定性的作用。要是沒(méi)有地址轉(zhuǎn)換,每個(gè)進(jìn)程就得直接操作物理地址,編程難度會(huì)大幅增加,系統(tǒng)也無(wú)法同時(shí)運(yùn)行多個(gè)程序,還缺乏內(nèi)存保護(hù),一個(gè)程序出錯(cuò)就可能導(dǎo)致整個(gè)系統(tǒng)崩潰。
而在地址轉(zhuǎn)換這個(gè)關(guān)鍵環(huán)節(jié)中,MMU(內(nèi)存管理單元)、TLB(旁路轉(zhuǎn)換緩沖)和 TWU(可能是特定場(chǎng)景下與內(nèi)存管理相關(guān)的概念,這里先按下不表,后續(xù)詳細(xì)展開(kāi))就像是三位緊密合作的舞者,各自發(fā)揮著獨(dú)特而關(guān)鍵的作用,共同保障著內(nèi)存管理的高效運(yùn)行。它們的協(xié)同工作,不僅提升了系統(tǒng)的性能和穩(wěn)定性,還為多任務(wù)處理、內(nèi)存保護(hù)等重要功能奠定了堅(jiān)實(shí)基礎(chǔ)。接下來(lái),就讓我們一同深入探索 MMU、TLB 和 TWU 的神秘世界,揭開(kāi)它們?cè)谟?jì)算機(jī)內(nèi)存管理中那令人驚嘆的運(yùn)作機(jī)制。
Part1.MMU:內(nèi)存管理的幕后大管家
1.1MMU概述
MMU是Memory Management Unit的縮寫(xiě),中文名是內(nèi)存管理單元,有時(shí)稱(chēng)作分頁(yè)內(nèi)存管理單元(英語(yǔ):paged memory management unit,縮寫(xiě)為PMMU)。它是一種負(fù)責(zé)處理中央處理器(CPU)的內(nèi)存訪問(wèn)請(qǐng)求的計(jì)算機(jī)硬件。它的功能包括虛擬地址到物理地址的轉(zhuǎn)換(即虛擬內(nèi)存管理)、內(nèi)存保護(hù)、中央處理器高速緩存的控制,在較為簡(jiǎn)單的計(jì)算機(jī)體系結(jié)構(gòu)中,負(fù)責(zé)總線的仲裁以及存儲(chǔ)體切換(bank switching,尤其是在8位的系統(tǒng)上)。
內(nèi)存管理單元(MMU)的一個(gè)重要功能是使系統(tǒng)能夠運(yùn)行多個(gè)任務(wù),作為獨(dú)立程序在自己的私有虛擬內(nèi)存空間中運(yùn)行。它們不需要了解系統(tǒng)的物理內(nèi)存映射,即硬件實(shí)際使用的地址,也不需要了解可能同時(shí)執(zhí)行的其他程序。
圖片
打個(gè)比方,我們可以把計(jì)算機(jī)的內(nèi)存想象成一個(gè)大型的倉(cāng)庫(kù),里面存放著各種各樣的物資(數(shù)據(jù)和程序)。而運(yùn)行在計(jì)算機(jī)上的眾多程序,就如同一個(gè)個(gè)前來(lái)領(lǐng)取物資的客戶(hù)。如果沒(méi)有一個(gè)有效的管理機(jī)制,這些客戶(hù)可能會(huì)在倉(cāng)庫(kù)里隨意翻找,不僅效率低下,還可能會(huì)出現(xiàn)混亂,導(dǎo)致物資的損壞或丟失。
而 MMU 就像是這個(gè)倉(cāng)庫(kù)的大管家,它制定了一套嚴(yán)格而有序的管理規(guī)則。每個(gè)客戶(hù)(程序)在訪問(wèn)倉(cāng)庫(kù)(內(nèi)存)時(shí),都需要通過(guò) MMU 這個(gè)大管家進(jìn)行 “登記” 和 “授權(quán)”,然后由大管家將客戶(hù)的 “需求指令”(虛擬地址)準(zhǔn)確無(wú)誤地轉(zhuǎn)換為倉(cāng)庫(kù)中實(shí)際的 “物資存放位置”(物理地址),這樣客戶(hù)就能順利地獲取到自己需要的物資,同時(shí)也保證了倉(cāng)庫(kù)的秩序和物資的安全。
從專(zhuān)業(yè)的角度來(lái)說(shuō),MMU 是一種負(fù)責(zé)處理中央處理器(CPU)的內(nèi)存訪問(wèn)請(qǐng)求的計(jì)算機(jī)硬件。它的出現(xiàn),讓計(jì)算機(jī)系統(tǒng)能夠更加高效、穩(wěn)定地運(yùn)行多個(gè)任務(wù),仿佛為每個(gè)任務(wù)都打造了一個(gè)屬于它們自己的獨(dú)立小世界,互不干擾,各自精彩。
1.2MMU起源
在計(jì)算機(jī)發(fā)展的早期階段,硬件資源十分有限,就像是一個(gè)狹小的倉(cāng)庫(kù),內(nèi)存空間非常小,而且程序?qū)?nèi)存的訪問(wèn)是直接而簡(jiǎn)單粗暴的,就如同在一個(gè)小房間里隨意堆放物品,沒(méi)有任何管理規(guī)則。程序員需要手動(dòng)分配和釋放內(nèi)存,這就要求他們對(duì)內(nèi)存的使用有深入的了解,稍有不慎就可能出現(xiàn)內(nèi)存泄漏或其他錯(cuò)誤,就像在小房間里找東西時(shí),不小心把東西放錯(cuò)地方或者弄丟了一樣。那個(gè)時(shí)候,程序直接訪問(wèn)物理內(nèi)存,操作系統(tǒng)也只是簡(jiǎn)單地 “加載”“運(yùn)行” 或 “卸載” 應(yīng)用程序。
隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展和軟件的不斷膨脹,計(jì)算機(jī)需要處理的任務(wù)越來(lái)越復(fù)雜,內(nèi)存需求也越來(lái)越大。就好比一個(gè)小倉(cāng)庫(kù)要容納越來(lái)越多的物資,單任務(wù)批處理的模式已經(jīng)無(wú)法滿(mǎn)足需求,多任務(wù)處理的需求應(yīng)運(yùn)而生。同時(shí),應(yīng)用程序所需的內(nèi)存量也不斷增加,甚至超過(guò)了物理內(nèi)存的大小。這就像小倉(cāng)庫(kù)已經(jīng)裝不下所有的物資了,怎么辦呢?
為了解決這些問(wèn)題,聰明的計(jì)算機(jī)科學(xué)家們提出了虛擬內(nèi)存的思想。虛擬內(nèi)存就像是給計(jì)算機(jī)內(nèi)存這個(gè)小倉(cāng)庫(kù)加了一個(gè) “虛擬擴(kuò)展空間”,程序所需的內(nèi)存可以遠(yuǎn)超物理內(nèi)存的大小,操作系統(tǒng)會(huì)把當(dāng)前需要執(zhí)行的部分留在內(nèi)存中,而不需要執(zhí)行的部分留在磁盤(pán)中,就像把暫時(shí)不用的物資存放到倉(cāng)庫(kù)外面的臨時(shí)存儲(chǔ)區(qū)。這樣,就可以滿(mǎn)足多個(gè)應(yīng)用程序同時(shí)駐留內(nèi)存并并發(fā)執(zhí)行,就好像在小倉(cāng)庫(kù)有限的空間里,通過(guò)合理調(diào)配物資,讓多個(gè)客戶(hù)都能順利拿到自己需要的東西。
在這樣的背景下,MMU 應(yīng)運(yùn)而生,它就像是專(zhuān)門(mén)為管理這個(gè)復(fù)雜的內(nèi)存 “倉(cāng)庫(kù)” 而聘請(qǐng)的高級(jí)大管家。MMU 接替了操作系統(tǒng)內(nèi)存管理中比較復(fù)雜的部分,比如地址翻譯,將虛擬地址翻譯成物理地址,就像大管家能夠準(zhǔn)確地把客戶(hù)的 “虛擬需求位置” 轉(zhuǎn)換為實(shí)際的 “物資存放位置”。同時(shí),內(nèi)存訪問(wèn)效率則交給了 cache(高速緩存)去做,或者通過(guò)提高內(nèi)存總線的帶寬來(lái)實(shí)現(xiàn),就像給倉(cāng)庫(kù)配備了快速通道,讓物資的搬運(yùn)更加高效。
1.3MMU 架構(gòu)探秘
MMU 的架構(gòu)設(shè)計(jì)精妙絕倫,它主要由幾個(gè)關(guān)鍵部分組成,其中虛擬地址空間和物理地址空間是理解 MMU 工作原理的核心概念。虛擬地址空間是程序運(yùn)行時(shí)所看到的地址范圍,它為程序員提供了一個(gè)連續(xù)、獨(dú)立且方便編程的地址環(huán)境。而物理地址空間則是實(shí)際內(nèi)存芯片上的地址范圍,它反映了內(nèi)存的真實(shí)物理布局。
以 32 位操作系統(tǒng)為例,虛擬地址空間通常為 4GB(2 的 32 次方),而物理地址空間則取決于實(shí)際安裝的物理內(nèi)存大小,可能小于 4GB,比如常見(jiàn)的 2GB、4GB 等。這兩者之間存在著一種映射關(guān)系,就像一個(gè)城市的地圖,虛擬地址空間是游客手中的旅游地圖,上面標(biāo)注的景點(diǎn)位置(虛擬地址)方便游客規(guī)劃行程,而物理地址空間則是城市的實(shí)際地理布局,景點(diǎn)的真實(shí)位置(物理地址)需要通過(guò)一定的轉(zhuǎn)換才能對(duì)應(yīng)上旅游地圖上的標(biāo)注。
當(dāng)程序訪問(wèn)內(nèi)存時(shí),MMU 會(huì)執(zhí)行虛實(shí)地址轉(zhuǎn)化過(guò)程。具體來(lái)說(shuō),MMU 會(huì)通過(guò)查詢(xún)頁(yè)表(一種存儲(chǔ)虛擬地址到物理地址映射關(guān)系的數(shù)據(jù)結(jié)構(gòu))來(lái)完成地址轉(zhuǎn)換。假設(shè)虛擬地址為 VA,MMU 首先會(huì)根據(jù) VA 中的頁(yè)號(hào)部分,在頁(yè)表中查找對(duì)應(yīng)的頁(yè)表項(xiàng)(PTE),每個(gè)頁(yè)表項(xiàng)記錄了該虛擬頁(yè)對(duì)應(yīng)的物理頁(yè)框號(hào)以及一些訪問(wèn)權(quán)限等控制信息。
找到對(duì)應(yīng)的頁(yè)表項(xiàng)后,MMU 會(huì)將物理頁(yè)框號(hào)與虛擬地址中的頁(yè)內(nèi)偏移部分組合起來(lái),從而得到最終的物理地址 PA,這樣就完成了從虛擬地址到物理地址的轉(zhuǎn)換,就像通過(guò)旅游地圖上的景點(diǎn)編號(hào)(頁(yè)號(hào))在城市地理信息系統(tǒng)(頁(yè)表)中找到對(duì)應(yīng)的實(shí)際地理位置(物理頁(yè)框號(hào)),再結(jié)合景點(diǎn)內(nèi)部的具體位置信息(頁(yè)內(nèi)偏移),最終確定游客要去的準(zhǔn)確地點(diǎn)(物理地址)。
1.4MMU的核心功能
在計(jì)算機(jī)的內(nèi)存世界里,存在著兩種重要的地址概念:虛擬地址和物理地址。虛擬地址是程序在運(yùn)行時(shí)所使用的地址,就像是我們?cè)诘貓D上規(guī)劃的一條虛擬路線,它并不直接對(duì)應(yīng)實(shí)際的物理內(nèi)存位置。而物理地址則是內(nèi)存芯片上實(shí)實(shí)在在的地址,是數(shù)據(jù)真正存儲(chǔ)的地方,就如同地圖上的實(shí)際地點(diǎn)。
那么,MMU 是如何將虛擬地址轉(zhuǎn)換為物理地址的呢?這就要借助頁(yè)表這個(gè)神奇的工具了。頁(yè)表就像是一本詳細(xì)的地址翻譯字典,記錄著虛擬地址和物理地址之間的映射關(guān)系。當(dāng) CPU 發(fā)出一個(gè)虛擬地址請(qǐng)求時(shí),MMU 就會(huì)像查字典一樣,在頁(yè)表中查找對(duì)應(yīng)的物理地址。
具體來(lái)說(shuō),虛擬地址會(huì)被劃分成頁(yè)號(hào)和頁(yè)內(nèi)偏移兩部分。頁(yè)號(hào)就像是字典的索引,通過(guò)它可以快速定位到頁(yè)表中對(duì)應(yīng)的條目,而這個(gè)條目里就存儲(chǔ)著對(duì)應(yīng)的物理頁(yè)號(hào)。然后,將物理頁(yè)號(hào)和頁(yè)內(nèi)偏移組合起來(lái),就得到了最終的物理地址,從而能夠準(zhǔn)確地訪問(wèn)到內(nèi)存中的數(shù)據(jù)。
舉個(gè)例子,假設(shè)我們有一個(gè)程序要訪問(wèn)虛擬地址 0x12345678。MMU 首先會(huì)提取出頁(yè)號(hào),比如是 0x1234,然后在頁(yè)表中查找這個(gè)頁(yè)號(hào)對(duì)應(yīng)的條目。假設(shè)找到的條目顯示對(duì)應(yīng)的物理頁(yè)號(hào)是 0x5678,而頁(yè)內(nèi)偏移是 0x9ABC,那么最終的物理地址就是 0x56789ABC。通過(guò)這樣的轉(zhuǎn)換,程序就能夠順利地訪問(wèn)到它所需要的數(shù)據(jù),就好像我們通過(guò)地圖上的路線規(guī)劃找到了實(shí)際的目的地一樣。
mmu開(kāi)啟以后會(huì)有以下特點(diǎn):
- 多個(gè)程序獨(dú)立運(yùn)行
- 虛擬地址是連續(xù)的(物理內(nèi)存可以有碎片)
- 允許操作系統(tǒng)管理內(nèi)存
下圖顯示的系統(tǒng)說(shuō)明了內(nèi)存的虛擬和物理視圖。單個(gè)系統(tǒng)中的不同處理器和設(shè)備可能具有不同的虛擬地址映射和物理地址映射。操作系統(tǒng)編寫(xiě)程序,使MMU在這兩個(gè)內(nèi)存視圖之間進(jìn)行轉(zhuǎn)換:
圖片
要做到這一點(diǎn),虛擬內(nèi)存系統(tǒng)中的硬件必須提供地址轉(zhuǎn)換,即將處理器發(fā)出的虛擬地址轉(zhuǎn)換為主內(nèi)存中的物理地址。MMU使用虛擬地址中最重要的位來(lái)索引轉(zhuǎn)換表中的條目,并確定正在訪問(wèn)哪個(gè)塊。MMU將代碼和數(shù)據(jù)的虛擬地址轉(zhuǎn)換為實(shí)際系統(tǒng)中的物理地址。該轉(zhuǎn)換將在硬件中自動(dòng)執(zhí)行,并且對(duì)應(yīng)用程序是透明的。除了地址轉(zhuǎn)換之外,MMU還可以控制每個(gè)內(nèi)存區(qū)域的內(nèi)存訪問(wèn)權(quán)限、內(nèi)存順序和緩存策略。
MMU對(duì)執(zhí)行的任務(wù)或應(yīng)用程序可以不了解系統(tǒng)的物理內(nèi)存映射,也可以不了解同時(shí)運(yùn)行的其他程序。每個(gè)程序可以使用相同的虛擬內(nèi)存地址空間。即使物理內(nèi)存是碎片化的,還可以使用一個(gè)連續(xù)的虛擬內(nèi)存映射。此虛擬地址空間與系統(tǒng)中內(nèi)存的實(shí)際物理映射分開(kāi)的。應(yīng)用程序被編寫(xiě)、編譯和鏈接,以在虛擬內(nèi)存空間中運(yùn)行。
圖片
如上圖所示,TLB是MMU中最近訪問(wèn)的頁(yè)面翻譯的緩存。對(duì)于處理器執(zhí)行的每個(gè)內(nèi)存訪問(wèn),MMU將檢查轉(zhuǎn)換是否緩存在TLB中。如果所請(qǐng)求的地址轉(zhuǎn)換在TLB中導(dǎo)致命中,則該地址的翻譯立即可用。TLB本質(zhì)是一塊高速緩存。數(shù)據(jù)cache緩存地址(虛擬地址或者物理地址)和數(shù)據(jù)。TLB緩存虛擬地址和其映射的物理地址。TLB根據(jù)虛擬地址查找cache,它沒(méi)得選,只能根據(jù)虛擬地址查找。所以TLB是一個(gè)虛擬高速緩存。
每個(gè)TLB entry通常不僅包含物理地址和虛擬地址,還包含諸如內(nèi)存類(lèi)型、緩存策略、訪問(wèn)權(quán)限、地址空間ID(ASID)和虛擬機(jī)ID(VMID)等屬性。如果TLB不包含處理器發(fā)出的虛擬地址的有效轉(zhuǎn)換,稱(chēng)為T(mén)LB Miss,則將執(zhí)行外部轉(zhuǎn)換頁(yè)表查找。MMU內(nèi)的專(zhuān)用硬件使它能夠讀取內(nèi)存中的轉(zhuǎn)換表。
然后,如果翻譯頁(yè)表沒(méi)有導(dǎo)致頁(yè)面故障,則可以將新加載的翻譯緩存在TLB中,以便進(jìn)行后續(xù)的重用。簡(jiǎn)單概括一下就是:硬件存在TLB后,虛擬地址到物理地址的轉(zhuǎn)換過(guò)程發(fā)生了變化。虛擬地址首先發(fā)往TLB確認(rèn)是否命中cache,如果cache hit直接可以得到物理地址。否則,一級(jí)一級(jí)查找頁(yè)表獲取物理地址。并將虛擬地址和物理地址的映射關(guān)系緩存到TLB中。
如果操作系統(tǒng)修改了可能已經(jīng)緩存在TLB中的轉(zhuǎn)換的entry,那么操作系統(tǒng)就有責(zé)任使這些未更新的TLB entry invaild。當(dāng)執(zhí)行A64代碼時(shí),有一個(gè)TLBI,它是一個(gè)TLB無(wú)效的指令:
TLBI <type><level>{IS} {, <Xt>}TLB可以保存固定數(shù)量的entry??梢酝ㄟ^(guò)由轉(zhuǎn)換頁(yè)表遍歷引起的外部?jī)?nèi)存訪問(wèn)次數(shù)和獲得高TLB命中率來(lái)獲得最佳性能。ARMv8-A體系結(jié)構(gòu)提供了一個(gè)被稱(chēng)為連續(xù)塊entry的特性,以有效地利用TLB空間。轉(zhuǎn)換表每個(gè)entry都包含一個(gè)連續(xù)的位。當(dāng)設(shè)置時(shí),這個(gè)位向TLB發(fā)出信號(hào),表明它可以緩存一個(gè)覆蓋多個(gè)塊轉(zhuǎn)換的單個(gè)entry。查找可以索引到連續(xù)塊所覆蓋的地址范圍中的任何位置。因此,TLB可以為已定義的地址范圍緩存一個(gè)entry從而可以在TLB中存儲(chǔ)更大范圍的虛擬地址。
Part2.TLB:加速地址轉(zhuǎn)換的高速緩存
2.1 TLB 是什么
TLB,即 Translation Lookaside Buffer,通常被譯為地址轉(zhuǎn)換后備緩沖器 ,它是 MMU 中一個(gè)至關(guān)重要的高速緩存組件。簡(jiǎn)單來(lái)說(shuō),TLB 就像是頁(yè)表的 “快捷緩存”,專(zhuān)門(mén)用于存儲(chǔ)虛擬地址到物理地址的映射關(guān)系。在虛擬內(nèi)存機(jī)制下,程序運(yùn)行時(shí)產(chǎn)生的虛擬地址需要轉(zhuǎn)換為物理地址才能訪問(wèn)實(shí)際內(nèi)存,而頁(yè)表正是存儲(chǔ)這種映射關(guān)系的數(shù)據(jù)結(jié)構(gòu)。然而,頁(yè)表通常存放在內(nèi)存中,內(nèi)存訪問(wèn)速度相對(duì)較慢,如果每次地址轉(zhuǎn)換都要訪問(wèn)內(nèi)存中的頁(yè)表,系統(tǒng)性能將會(huì)受到極大影響。
為了理解 TLB 的作用,我們可以把計(jì)算機(jī)系統(tǒng)想象成一個(gè)龐大的圖書(shū)館,頁(yè)表就像是圖書(shū)館的藏書(shū)索引總表,存放在圖書(shū)館的檔案室(內(nèi)存)里。而 TLB 則像是每個(gè)閱覽室里的快速檢索小目錄,它緩存了總索引表中近期最常被查詢(xún)的部分書(shū)籍索引(虛擬地址到物理地址的映射關(guān)系)。當(dāng)讀者(CPU)想要查找某本書(shū)(訪問(wèn)內(nèi)存)時(shí),會(huì)先查看所在閱覽室的快速檢索小目錄(TLB),如果能在小目錄中找到對(duì)應(yīng)的索引(TLB 命中),就能快速得知書(shū)籍的實(shí)際位置(物理地址),無(wú)需再跑到檔案室去查閱總索引表(訪問(wèn)內(nèi)存中的頁(yè)表),大大提高了查找效率(地址轉(zhuǎn)換速度) 。
2.2 TLB工作機(jī)制剖析
TLB 的工作機(jī)制精巧而高效。它通常采用組相連或全相連的緩存組織方式 ,以實(shí)現(xiàn)快速的地址查找。當(dāng) CPU 發(fā)出一個(gè)虛擬地址訪問(wèn)請(qǐng)求時(shí),TLB 的工作流程如下:首先,TLB 會(huì)接收這個(gè)虛擬地址,并根據(jù)其內(nèi)部的緩存組織方式,快速定位到可能存儲(chǔ)該虛擬地址映射關(guān)系的緩存條目。在這個(gè)過(guò)程中,如果采用組相連方式,TLB 會(huì)根據(jù)虛擬地址的部分位(通常是索引位)確定它屬于哪個(gè)緩存組,然后在該組內(nèi)通過(guò)比較虛擬地址的其他位(通常是標(biāo)記位)來(lái)查找是否存在匹配的映射條目;如果是全相連方式,則會(huì)直接將虛擬地址與 TLB 中的所有緩存條目進(jìn)行比較。
一旦 TLB 中存在與該虛擬地址匹配的緩存條目,即發(fā)生 TLB 命中(TLB Hit),TLB 會(huì)迅速將緩存條目中對(duì)應(yīng)的物理頁(yè)號(hào)取出,并與虛擬地址中的頁(yè)內(nèi)偏移部分組合,生成最終的物理地址,然后將這個(gè)物理地址返回給 CPU,CPU 就可以使用這個(gè)物理地址直接訪問(wèn)內(nèi)存,整個(gè)地址轉(zhuǎn)換過(guò)程在極短的時(shí)間內(nèi)完成,極大地提高了內(nèi)存訪問(wèn)效率,就像在閱覽室的快速檢索小目錄中快速找到了書(shū)籍的位置,直接去書(shū)架取書(shū)即可。
若 TLB 中沒(méi)有找到與該虛擬地址匹配的緩存條目,即發(fā)生 TLB 未命中(TLB Miss),此時(shí)就需要通過(guò)訪問(wèn)內(nèi)存中的頁(yè)表來(lái)完成地址轉(zhuǎn)換。這個(gè)過(guò)程相對(duì)復(fù)雜,需要 MMU 按照前面介紹的查詢(xún)頁(yè)表的方式,逐級(jí)查找虛擬地址對(duì)應(yīng)的物理地址。在找到物理地址后,MMU 會(huì)將這個(gè)新的映射關(guān)系緩存到 TLB 中,以便后續(xù)對(duì)相同虛擬地址的訪問(wèn)能夠直接從 TLB 中獲取物理地址,提高未來(lái)的地址轉(zhuǎn)換效率,就像在快速檢索小目錄中沒(méi)找到書(shū)籍索引,只能去檔案室查閱總索引表,找到后為了方便下次查找,將這個(gè)索引記錄到快速檢索小目錄中 。
TLB的原理如下:
- 當(dāng)CPU訪問(wèn)一個(gè)虛擬地址時(shí),首先檢查T(mén)LB中是否有對(duì)應(yīng)的頁(yè)表項(xiàng)。
- 如果TLB中有對(duì)應(yīng)的頁(yè)表項(xiàng)(即命中),則直接從TLB獲取物理地址。
- 如果TLB中沒(méi)有對(duì)應(yīng)的頁(yè)表項(xiàng)(即未命中),則需要訪問(wèn)內(nèi)存來(lái)獲取正確的頁(yè)表項(xiàng)。
- 在未命中情況下,操作系統(tǒng)會(huì)進(jìn)行相應(yīng)處理,從主存中獲取正確的頁(yè)表項(xiàng),并將其加載到TLB中以供后續(xù)使用。
- 一旦正確的頁(yè)表項(xiàng)加載到TLB中,CPU再次訪問(wèn)相同虛擬地址時(shí)就可以直接在TLB中找到映射關(guān)系,提高了轉(zhuǎn)換效率。
TLB具有快速查找和高效緩存機(jī)制,能夠極大地減少查詢(xún)頁(yè)表所需的時(shí)間。然而,由于TLB是有限容量的,在大型程序或多任務(wù)環(huán)境下可能無(wú)法完全覆蓋所有需要轉(zhuǎn)換的頁(yè)面。當(dāng)發(fā)生TLB未命中時(shí),則會(huì)導(dǎo)致額外的內(nèi)存訪問(wèn)開(kāi)銷(xiāo);操作系統(tǒng)會(huì)負(fù)責(zé)管理和維護(hù)TLB,包括緩存策略、TLB的刷新機(jī)制等。常見(jiàn)的緩存策略有全相聯(lián)、組相聯(lián)和直接映射等。
2.3 TLB 的類(lèi)型與特性
在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,TLB 通常分為不同的類(lèi)型,以滿(mǎn)足不同的性能和功能需求。其中,L1 TLB 和 L2 TLB 是較為常見(jiàn)的分類(lèi)。L1 TLB 位于 CPU 內(nèi)部,是距離 CPU 核心最近的一級(jí) TLB,它的訪問(wèn)速度極快,幾乎與 CPU 的處理速度相當(dāng),但容量相對(duì)較小,一般只能緩存幾十到幾百個(gè)頁(yè)表?xiàng)l目。L1 TLB 又進(jìn)一步細(xì)分為指令 TLB(ITLB)和數(shù)據(jù) TLB(DTLB) ,指令 TLB 專(zhuān)門(mén)用于緩存指令相關(guān)的虛擬地址到物理地址的映射關(guān)系,數(shù)據(jù) TLB 則專(zhuān)注于數(shù)據(jù)訪問(wèn)的地址映射緩存。
這種細(xì)分方式可以讓 CPU 在同時(shí)進(jìn)行指令讀取和數(shù)據(jù)訪問(wèn)時(shí),能夠更高效地進(jìn)行地址轉(zhuǎn)換,避免了指令和數(shù)據(jù)在地址轉(zhuǎn)換過(guò)程中的沖突,就像圖書(shū)館設(shè)置了不同類(lèi)型的快速檢索小目錄,分別用于查找不同類(lèi)別的書(shū)籍,提高了檢索效率。
L2 TLB 則位于 L1 TLB 和主存之間,它的容量比 L1 TLB 大,可以緩存更多的頁(yè)表?xiàng)l目,但訪問(wèn)速度相對(duì) L1 TLB 略慢。L2 TLB 起到了一個(gè)補(bǔ)充和緩沖的作用,當(dāng) L1 TLB 未命中時(shí),L2 TLB 可以提供額外的緩存查找機(jī)會(huì),減少對(duì)內(nèi)存頁(yè)表的訪問(wèn)次數(shù),從而提高整體的地址轉(zhuǎn)換性能。
除了分級(jí)結(jié)構(gòu),TLB 還具有一些獨(dú)特的特性。例如,每個(gè) CPU 核心通常都擁有自己獨(dú)立的 TLB,這使得每個(gè)核心在進(jìn)行地址轉(zhuǎn)換時(shí)都能獨(dú)立快速地進(jìn)行,避免了多 CPU 核心之間對(duì) TLB 的競(jìng)爭(zhēng),提高了系統(tǒng)的并行處理能力,就像每個(gè)閱覽室都有自己獨(dú)立的快速檢索小目錄,讀者在各自的閱覽室查找書(shū)籍時(shí)互不干擾。同時(shí),TLB 還采用了一系列優(yōu)化策略,如合理的替換算法(如隨機(jī)替換算法、近似 LRU 算法等),以確保在有限的緩存空間內(nèi),始終緩存著最常用的頁(yè)表?xiàng)l目,提高 TLB 的命中率,充分發(fā)揮其加速地址轉(zhuǎn)換的作用 。
Part3.TWU:頁(yè)表查詢(xún)的硬件先鋒
3.1 TWU是什么?
TWU,即 Table Walk Unit ,可譯為頁(yè)表遍歷單元,是 MMU 中一個(gè)至關(guān)重要的子模塊,主要負(fù)責(zé)硬件級(jí)的頁(yè)表查找工作。在虛擬內(nèi)存系統(tǒng)中,頁(yè)表存儲(chǔ)在物理內(nèi)存里,當(dāng) TLB 未命中時(shí),就需要查詢(xún)頁(yè)表來(lái)完成虛擬地址到物理地址的轉(zhuǎn)換。而 TWU 的作用就是承擔(dān)起這一關(guān)鍵的頁(yè)表查詢(xún)?nèi)蝿?wù),它能夠按照一定的規(guī)則和流程,高效地在內(nèi)存中遍歷頁(yè)表,找到虛擬地址對(duì)應(yīng)的物理地址。
打個(gè)比方,我們繼續(xù)以圖書(shū)館為例,當(dāng)讀者在閱覽室的快速檢索小目錄(TLB)中找不到書(shū)籍索引時(shí),就需要一個(gè)專(zhuān)門(mén)的工作人員(TWU)去檔案室的總索引表(頁(yè)表)中查找。這個(gè)工作人員熟悉檔案室的布局和索引表的查找規(guī)則,能夠快速準(zhǔn)確地在總索引表中找到書(shū)籍的實(shí)際位置信息,然后將其反饋給讀者,就像 TWU 將查找到的物理地址返回給 MMU,以便完成地址轉(zhuǎn)換 。通過(guò) TWU 進(jìn)行頁(yè)表查詢(xún),大大減少了 CPU 直接參與頁(yè)表遍歷的工作,降低了 CPU 資源的消耗,提高了系統(tǒng)的整體性能和效率。
3.2 TWU工作流程詳述
TWU 的工作流程嚴(yán)謹(jǐn)而有序。以常見(jiàn)的 x86 架構(gòu)為例,當(dāng) CPU 發(fā)出一個(gè)虛擬地址訪問(wèn)請(qǐng)求且 TLB 未命中時(shí),TWU 便開(kāi)始工作。首先,TWU 會(huì)從 CR3 寄存器(在 x86 架構(gòu)中,CR3 寄存器存儲(chǔ)著頁(yè)目錄表的物理基地址)中獲取頁(yè)目錄表的物理基地址 。然后,根據(jù)虛擬地址的特定位(通常是高幾位)作為索引,在頁(yè)目錄表中查找對(duì)應(yīng)的頁(yè)目錄項(xiàng)(PDE)。每個(gè)頁(yè)目錄項(xiàng)記錄了下一級(jí)頁(yè)表(可能是頁(yè)上級(jí)目錄表,對(duì)于多級(jí)頁(yè)表結(jié)構(gòu)而言)的物理地址等信息。
找到對(duì)應(yīng)的頁(yè)目錄項(xiàng)后,TWU 會(huì)根據(jù)該項(xiàng)中的地址信息,訪問(wèn)下一級(jí)頁(yè)表。接著,再依據(jù)虛擬地址的其他位作為索引,在這一級(jí)頁(yè)表中查找對(duì)應(yīng)的頁(yè)表項(xiàng),如此逐級(jí)進(jìn)行,直到找到最終的頁(yè)表項(xiàng),該頁(yè)表項(xiàng)中存儲(chǔ)著虛擬地址對(duì)應(yīng)的物理頁(yè)框號(hào)。最后,TWU 將這個(gè)物理頁(yè)框號(hào)與虛擬地址中的頁(yè)內(nèi)偏移部分組合起來(lái),生成完整的物理地址,返回給 MMU,完成虛擬地址到物理地址的轉(zhuǎn)換。
在這個(gè)過(guò)程中,如果 TWU 在查詢(xún)頁(yè)表時(shí)發(fā)現(xiàn)所需的頁(yè)表項(xiàng)不存在,即發(fā)生缺頁(yè)情況,就會(huì)觸發(fā)缺頁(yè)中斷。缺頁(yè)中斷是一個(gè)重要的機(jī)制,它會(huì)通知操作系統(tǒng)進(jìn)行處理。操作系統(tǒng)會(huì)暫停當(dāng)前進(jìn)程的執(zhí)行,然后根據(jù)具體的情況,從磁盤(pán)等外存中讀取缺失的頁(yè)面到內(nèi)存中,并更新頁(yè)表,建立虛擬地址到物理地址的映射關(guān)系。完成這些操作后,操作系統(tǒng)會(huì)恢復(fù)被中斷的進(jìn)程的執(zhí)行,讓其繼續(xù)訪問(wèn)內(nèi)存 。整個(gè) TWU 的工作流程以及缺頁(yè)中斷的處理過(guò)程,確保了虛擬內(nèi)存系統(tǒng)中地址轉(zhuǎn)換的準(zhǔn)確性和高效性,是計(jì)算機(jī)內(nèi)存管理中不可或缺的環(huán)節(jié)。
Part4.MMU、TLB、TWU協(xié)同工作
4.1協(xié)同機(jī)制總覽
MMU、TLB 和 TWU 在計(jì)算機(jī)內(nèi)存管理系統(tǒng)中,就像是一個(gè)緊密協(xié)作的團(tuán)隊(duì),各自承擔(dān)著獨(dú)特而關(guān)鍵的職責(zé),共同保障虛擬地址到物理地址的轉(zhuǎn)換過(guò)程高效、準(zhǔn)確地進(jìn)行。其中,MMU 是整個(gè)內(nèi)存管理的核心樞紐,全面負(fù)責(zé)虛擬地址到物理地址的轉(zhuǎn)換工作,同時(shí)兼顧內(nèi)存訪問(wèn)權(quán)限的精細(xì)控制、內(nèi)存訪問(wèn)順序的合理安排以及緩存策略的有效制定 。
TLB 則像是 MMU 的 “高速助手”,通過(guò)緩存最近使用的虛擬地址到物理地址的映射關(guān)系,大大加快了地址轉(zhuǎn)換的速度,顯著減少了 MMU 查詢(xún)頁(yè)表的次數(shù),提高了系統(tǒng)性能。而 TWU 在這個(gè)團(tuán)隊(duì)中扮演著 “頁(yè)表探索者” 的角色,當(dāng) TLB 無(wú)法命中所需的地址轉(zhuǎn)換信息時(shí),TWU 便迅速行動(dòng)起來(lái),按照既定的規(guī)則和流程,在內(nèi)存中有條不紊地遍歷頁(yè)表,準(zhǔn)確找到虛擬地址對(duì)應(yīng)的物理地址,為 MMU 提供關(guān)鍵支持 。
4.2工作流程深度解析
當(dāng) CPU 發(fā)出一個(gè)虛擬地址訪問(wèn)請(qǐng)求時(shí),一場(chǎng)緊張而有序的地址轉(zhuǎn)換之旅便正式開(kāi)啟。首先,TLB 會(huì)迅速對(duì)這個(gè)虛擬地址進(jìn)行查找 。如果 TLB 中緩存了該虛擬地址對(duì)應(yīng)的映射條目,即發(fā)生 TLB 命中,那么 TLB 會(huì)在極短的時(shí)間內(nèi)將對(duì)應(yīng)的物理頁(yè)號(hào)取出,并與虛擬地址中的頁(yè)內(nèi)偏移部分精準(zhǔn)組合,快速生成最終的物理地址,然后將這個(gè)物理地址直接返回給 CPU,CPU 就可以使用這個(gè)物理地址直接訪問(wèn)內(nèi)存,整個(gè)過(guò)程如同在便捷的高速通道上行駛,快速而高效。
若 TLB 中沒(méi)有找到與該虛擬地址匹配的映射條目,即發(fā)生 TLB 未命中,此時(shí) TWU 就會(huì) “閃亮登場(chǎng)” 。TWU 會(huì)依據(jù)虛擬地址的相關(guān)信息,從特定寄存器(如 x86 架構(gòu)中的 CR3 寄存器,存儲(chǔ)著頁(yè)目錄表的物理基地址)中獲取頁(yè)表的起始地址,然后按照多級(jí)頁(yè)表的查找規(guī)則,逐級(jí)在內(nèi)存中查找對(duì)應(yīng)的頁(yè)表項(xiàng)。在這個(gè)過(guò)程中,TWU 就像一位經(jīng)驗(yàn)豐富的探險(xiǎn)家,在復(fù)雜的頁(yè)表 “迷宮” 中準(zhǔn)確找到目標(biāo)頁(yè)表項(xiàng),從中提取出虛擬地址對(duì)應(yīng)的物理頁(yè)框號(hào)。找到物理頁(yè)框號(hào)后,TWU 將其與虛擬地址中的頁(yè)內(nèi)偏移部分巧妙組合,生成完整的物理地址,并將這個(gè)物理地址返回給 MMU 。
MMU 在收到物理地址后,還會(huì)對(duì)內(nèi)存訪問(wèn)權(quán)限進(jìn)行嚴(yán)格檢查 。它會(huì)查看頁(yè)表項(xiàng)中的訪問(wèn)權(quán)限位,判斷當(dāng)前進(jìn)程對(duì)該物理地址所指向的內(nèi)存區(qū)域是否具有相應(yīng)的訪問(wèn)權(quán)限,如可讀、可寫(xiě)、可執(zhí)行等。只有當(dāng)訪問(wèn)權(quán)限合法時(shí),MMU 才會(huì)允許 CPU 對(duì)該內(nèi)存區(qū)域進(jìn)行訪問(wèn);若發(fā)現(xiàn)訪問(wèn)權(quán)限違規(guī),MMU 會(huì)立即觸發(fā)一個(gè)內(nèi)存訪問(wèn)異常,通知操作系統(tǒng)進(jìn)行處理,就像嚴(yán)格的安保人員,堅(jiān)決守護(hù)內(nèi)存的安全訪問(wèn)。
在地址轉(zhuǎn)換完成后,CPU 會(huì)根據(jù)得到的物理地址訪問(wèn)內(nèi)存中的數(shù)據(jù) 。此時(shí),數(shù)據(jù)緩存(Cache)也會(huì)參與到這個(gè)過(guò)程中。如果數(shù)據(jù)已經(jīng)被緩存到 Cache 中,即發(fā)生 Cache 命中,CPU 可以直接從 Cache 中快速讀取數(shù)據(jù),大大提高了數(shù)據(jù)訪問(wèn)速度;若 Cache 中沒(méi)有緩存該數(shù)據(jù),即發(fā)生 Cache 未命中,CPU 則需要從主存中讀取數(shù)據(jù),并將讀取到的數(shù)據(jù)同時(shí)存儲(chǔ)到 Cache 中,以便后續(xù)對(duì)相同數(shù)據(jù)的訪問(wèn)能夠直接從 Cache 中獲取,提高未來(lái)的數(shù)據(jù)訪問(wèn)效率 。
整個(gè) MMU、TLB 和 TWU 協(xié)同工作的過(guò)程,以及與 Cache 的交互過(guò)程,緊密配合、環(huán)環(huán)相扣,確保了計(jì)算機(jī)內(nèi)存管理系統(tǒng)的高效運(yùn)行,為計(jì)算機(jī)的穩(wěn)定運(yùn)行和高性能表現(xiàn)提供了堅(jiān)實(shí)的基礎(chǔ)。

























