TLB(Translation Lookaside Buffer,翻譯旁路緩衝區)是一種用於快速Virtual address到Physical address轉換的高速緩存。在計算機系統中,虛擬記憶體被分割為固定大小的頁面,而實際的物理記憶體則被分割為更小的頁框。當處理器需要訪問記憶體時,它會使用Virtual address,而TLB則將這些Virtual address轉換為對應的Physical address。 TLB的工作方式類似於快取(Cache),但其存儲的是Virtual address到Physical address的映射。TLB通常位於處理器的記憶管理單元(MMU)中。當處理器需要訪問記憶體時,它會首先檢查TLB。如果TLB中存在Virtual address的映射,則稱為TLB Hit,可以直接從TLB中獲取Physical address,從而節省了額外的查找時間。 轉換旁路緩衝區(TLB)是典型的RISC處理器中的記憶管理單元(MMU)組件。它的主要功能是通過存儲最近訪問的頁表項目(PTE)來加快將虛擬記憶體地址轉換為物理記憶體地址的過程。 TLB可以以不同的方式組織,包括完全關聯,集合關聯或直接映射的配置。 TLB通常具有有限的大小,範圍從16到512個PTE。 存取TLB以進行 Hit通常需要0.5到1個周期,而 Miss 可能需要更長的時間,範圍從10到100個周期不等。 TLB通常表現出0.01%到1%的 Miss 率。 TLB中的 Miss 可以由硬件或軟件機制處理,具體取決於處理器架構和設計。 ## TLB Hit 當處理器在執行指令時,它會先檢查TLB,看看是否已經有了對應的Virtual address到Physical address的轉換。如果有,就稱為TLB Hit。 在讀取(取得數據)時的TLB Hit意味著處理器能夠直接使用TLB中的轉換信息,從而快速地從記憶體中讀取所需的數據。 在寫入(寫入數據)時的TLB Hit,除了標記TLB中的對應轉換信息外,還會切換“髒位”(dirty bit),這個位用於指示該頁面的內容已被修改,需要在替換該頁面的TLB項目時將其寫回到相應的頁表中。 ## TLB Miss 當處理器在TLB中找不到所需的Virtual address到Physical address的轉換時,就會發生TLB Miss。 如果所需的頁面在主存中,但TLB Miss,則會從主存中加載相應的頁表項目(PTE),並再次嘗試轉換。這可以在硬件層面進行,但對於更複雜的頁表結構,可能會變得較為複雜,也可以通過軟件進行處理。 如果所需的頁面不在主存中,則會發生頁面錯誤(page fault)。在這種情況下,操作系統將處理頁面錯誤,從磁盤或其他存儲設備中加載頁面,同時更新相應的頁表。完成這些操作後,將重新啟動導致錯誤的指令,使其能夠成功執行。 ## TLB Miss Handler: TLB Miss處理程序負責處理TLB Miss的情況。 處理程序首先需要識別TLB Miss。在進行Virtual address到Physical address轉換之前,必須在目的地寄存器被覆蓋之前發現TLB Miss,否則將導致不正確的結果。如果發現TLB Miss,將引發特殊的異常,通知處理器發生了TLB Miss。 TLB Miss處理程序將從主存中讀取相應的頁表項目(PTE),然後將其複製到TLB中。完成此操作後,重新啟動導致TLB Miss的指令,以便能夠正確執行。如果發現所需的頁面不在主存中,則將發生頁面錯誤,這也將由操作系統的處理程序進行處理。 頁面錯誤處理程序: * 使用錯誤的Virtual address來查找頁表項目(PTE)。 * 在磁盤上找到頁面。 * 選擇要替換的頁面: * 如果主存中沒有足夠的空間來容納新頁面,那麼需要選擇一個現有的頁面來替換。通常,操作系統會根據一定的替換算法來選擇要替換的頁面。如果所選頁面已經被修改(即存在“髒位”),則必須將其寫回到磁盤中。 * 如果頁面已被修改(dirty),則首先將其寫入磁盤。 * 讀取頁面到內存中並更新頁表。 * 使進程再次可執行。 * 從發生錯誤的指令重新啟動。 * 完成頁面錯誤處理後,操作系統將重新啟動導致錯誤的指令,使進程能夠繼續執行。這將允許進程訪問所需的頁面,並且不再引發頁面錯誤。 ![image](https://hackmd.io/_uploads/H14_vZzpa.png)