MMU和TLB


MMU和TLB

記得那家芯片公司給我電話面試的時候,別的都還好,可是他問我什么是MMU,我只能干瞪眼。今天在看《Linux內核源碼(陳莉君)》的時候,無意中看到第二章內存地址這一節,學習如下:

在任何一台計算機上,都存在一個程序能產生的內存地址的集合。當程序執行這樣一條指令時:
MOVE REG,ADDR
它把地址為ADDR(假設為10000)的內存單元的內容復制到REG中,地址ADRR可以通過索引、基址寄存器、段寄存器和其它方式產生。在8086的實模式下,把某一段寄存器左移4位,然后與地址ADDR相加后被直接送到內存總線上,這個相加后的地址就是內存單元的物理地址,而程序中的這個地址就叫邏輯地址(或叫虛地址)。在80386的保護模式下,這個邏輯地址不是被直接送到內存總線,而是被送到內存管理單元(MMU)。MMU由一個或一組芯片組成,其功能是把邏輯地址映射為物理地址,即進行地址轉換(看圖片,MMU是CPU的一部分)。

當使用80386時,我們必須區分以下三種不同的地址:
邏輯地址: 機器語言指令仍用這種地址指定一個操作數的地址或一條指令的地址。這種尋址方式在Intel的分段結構中表現得尤為具體,它使MS-DOS或Windows程序員把程序分為若干段。每個邏輯地址都由一個段和偏移量組成。
線性地址:線性地址是一個32位的無符號整數,可以表達高達232(4GB)的地址。通常用16進制表示線性地址,其取值范圍為0x00000000~0xffffffff。
物理地址:也就是內存單元的實際地址,用於芯片級內存單元尋址。物理地址也由32位無符號整數表示。

從圖2.7可以看出,MMU是一種硬件電路,它包含兩個部件,一個是分段部件,一個是分頁部件,在本書中,我們把它們分別叫做分段機制和分頁機制,以利於從邏輯的角度來理解硬件的實現機制。分段機制把一個邏輯地址轉換為線性地址;接着,分頁機制把一個線性地址轉換為物理地址,如圖2.8所示。圖2.8 MMU把邏輯地址轉換為物理地址。

-------------------------------------------------------------------------------------------
翻譯后援存儲器(TLB)(第六章 Linux內存管理)
頁表的實現對虛擬內存系統效率是極為關鍵的。例如把一個寄存器的內容復制到另一個寄存器中的一條指令,在不使用分頁時,只需訪問內存一次取指令,而在使用分頁時需要額外的內存訪問去讀取頁表。而系統的運行速度一般是被cpu從內存中取得指令和數據的速率限制的,如果在每次訪問內存時都要訪問兩次內存會使系統性能降低三分之二。

對這個問題的解決,有人提出了一個解決方案,這個方案基於這樣的觀察:大部分程序傾向於對較少的頁面進行大量的訪問。因此,只有一小部分頁表項經常被用到,其它的很少被使用。采取的解決辦法是為計算機裝備一個不需要經過頁表就能把虛擬地址映射成物理地址的小的硬件設備,這個設備叫做TLB(翻譯后援存儲器,Translation Lookside Buffer), 有時也叫做相聯存儲器(associative memory),如圖6.20所示 。它通常在MMU內部,條目的數量較少,在這個例子中是6個,80386有32個。每一個TLB寄存器的每個條目包含一個頁面的信息:有效位,虛頁面號,修改位,保護碼,和頁面所在的物理頁面號,它們和頁面表中的表項一一對應,如圖6.21所示。

當一個虛地址被送到MMU翻譯時,硬件首先把它和TLB中的所有條目同時(並行地)進行比較,如果它的虛頁號在TLB中,並且訪問沒有違反保護位,它的頁面會直接從TLB中取出而不去訪問頁表,如虛頁面號在TLB但當前指令試圖寫一個只讀的頁面,這時將產生一個缺頁異常,與直接訪問頁表時相同。如MMU發現在TLB中沒有命中,它將隨即進行一次常規的頁表查找,然后從TLB中淘汰一個條目並把它替換為剛剛找到的頁表項。因此如果這個頁面很快再被用到的話,第二次訪問時它就能在TLB中直接找到。在一個TLB 條目被淘汰時,被修改的位被復制回在內存中的頁表項,其它的值則已經在那里了。當TLB從頁表裝入時,所有的域都從內存中取得。必須明確在分頁機制中,TLB中的數據和頁表中的數據的相關性,不是由處理器進行維護,而是必須由操作系統來維護,高速緩存的刷新是通過裝入處理器(80386)中的寄存器CR3來完成的。(見刷新機制flush_tlb())這里要還提到命中率,即一個頁面在TBL中找到的概率。一般來說TLB的尺寸大可增加命中率,但會增加成本和軟件的管理。所以一般都采用8--64個條目的數量。假如命中率是0.85,訪問內存時間是120那秒,訪TLB時間是15那秒。那么訪問時間是:0.85*(15+120)+(1-0.85)*(15+120+120)=153那秒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM