頁(yè)表的實(shí)現(xiàn)對(duì)虛擬內(nèi)存系統(tǒng)效率是極為關(guān)鍵的。例如把一個(gè)寄存器的內(nèi)容復(fù)制到另一個(gè)寄存器中的一條指令,在不使用分頁(yè)時(shí),只需訪問(wèn)內(nèi)存一次取指令,而在使用分頁(yè)時(shí)需要額外的內(nèi)存訪問(wèn)去讀取頁(yè)表。而系統(tǒng)的運(yùn)行速度一般是被cpu從內(nèi)存中取得指令和數(shù)據(jù)的速率限制的,如果在每次訪問(wèn)內(nèi)存時(shí)都要訪問(wèn)兩次內(nèi)存會(huì)使系統(tǒng)性能降低三分之二。 對(duì)這個(gè)問(wèn)題的解決,有人提出了一個(gè)解決方案,這個(gè)方案基于這樣的觀察:大部分程序傾向于對(duì)較少的頁(yè)面進(jìn)行大量的訪問(wèn)。因此,只有一小部分頁(yè)表項(xiàng)經(jīng)常被用到,其它的很少被使用。
采取的解決辦法是為計(jì)算機(jī)裝備一個(gè)不需要經(jīng)過(guò)頁(yè)表就能把虛擬地址映射成物理地址的小的硬件設(shè)備,這個(gè)設(shè)備叫做TLB(翻譯后援存儲(chǔ)器,Translation Lookside Buffer), 有時(shí)也叫做相聯(lián)存儲(chǔ)器(associative memory),如圖6.20所示 。它通常在MMU內(nèi)部,條目的數(shù)量較少,在這個(gè)例子中是6個(gè),80386有32個(gè)。 每一個(gè)TLB寄存器的每個(gè)條目包含一個(gè)頁(yè)面的信息:有效位,虛頁(yè)面號(hào),修改位,保護(hù)碼,和頁(yè)面所在的物理頁(yè)面號(hào),它們和頁(yè)面表中的表項(xiàng)一一對(duì)應(yīng),如圖6.21所示。
圖6.21用于加速分頁(yè)面操作的TLB 當(dāng)一個(gè)虛地址被送到MMU翻譯時(shí),硬件首先把它和TLB中的所有條目同時(shí)(并行地)進(jìn)行比較,如果它的虛頁(yè)號(hào)在TLB中,并且訪問(wèn)沒(méi)有違反保護(hù)位,它的頁(yè)面會(huì)直接從TLB中取出而不去訪問(wèn)頁(yè)表,如虛頁(yè)面號(hào)在TLB但當(dāng)前指令試圖寫(xiě)一個(gè)只讀的頁(yè)面,這時(shí)將產(chǎn)生一個(gè)缺頁(yè)異常,與直接訪問(wèn)頁(yè)表時(shí)相同。 如MMU發(fā)現(xiàn)在TLB中沒(méi)有命中,它將隨即進(jìn)行一次常規(guī)的頁(yè)表查找,然后從TLB中淘汰一個(gè)條目并把它替換為剛剛找到的頁(yè)表項(xiàng)。因此如果這個(gè)頁(yè)面很快再被用到的話,第二次訪問(wèn)時(shí)它就能在TLB中直接找到。在一個(gè)TLB 條目被淘汰時(shí),被修改的位被復(fù)制回在內(nèi)存中的頁(yè)表項(xiàng),其它的值則已經(jīng)在那里了。當(dāng)TLB從頁(yè)表裝入時(shí),所有的域都從內(nèi)存中取得。 必須明確在分頁(yè)機(jī)制中,TLB中的數(shù)據(jù)和頁(yè)表中的數(shù)據(jù)的相關(guān)性,不是由處理器進(jìn)行維護(hù),而是必須由操作系統(tǒng)來(lái)維護(hù),高速緩存的刷新是通過(guò)裝入處理器(80386)中的寄存器CR3來(lái)完成的。(見(jiàn)刷新機(jī)制flush_tlb()) 這里要還提到命中率,即一個(gè)頁(yè)面在TBL中找到的概率。一般來(lái)說(shuō)TLB的尺寸大可增加命中率,但會(huì)增加成本和軟件的管理。所以一般都采用8--64個(gè)條目的數(shù)量。 假如命中率是0.85,訪問(wèn)內(nèi)存時(shí)間是120那秒,訪TLB時(shí)間是15那秒。那么訪問(wèn)時(shí)間是:0.85*(15+120)+(1-0.85)*(15+120+120)=153那秒。 頁(yè)式地址=頁(yè)面起始地址+頁(yè)內(nèi)偏移地址; 對(duì)應(yīng)于虛擬地址:叫page(頁(yè)面);對(duì)應(yīng)于物理地址:叫frame(頁(yè)框); X86體系的系統(tǒng)內(nèi)存里存放了兩級(jí)頁(yè)表,第一級(jí)頁(yè)表稱為頁(yè)目錄,第二級(jí)稱為頁(yè)表。 TLB和CPU里的一級(jí)、二級(jí)緩存之間不存在本質(zhì)的區(qū)別,只不過(guò)前者緩存頁(yè)表數(shù)據(jù),而后兩個(gè)緩存實(shí)際數(shù)據(jù)。 |
|
來(lái)自: WUCANADA > 《hardware》