頁表儲存的是虛擬頁號和物理頁號之間的對映關係,其實也就是乙個函式關係,將
24位的
vsid和16
位的頁索引作為引數,通過某種函式關係對映,結果就是實際的物理記憶體中,由於這種對映關係一般通過雜湊函式實現,因此頁表也稱作雜湊表。頁索引為
16位,而頁大小
4k,由此也可見段的大小為
256m
(2^28)。
頁表的設計必須注意
2個問題: 1.
頁表大小設計; 2.
頁表位址轉換速度。
頁表大小與邏輯位址位寬和實際的物理記憶體大小有關係。而頁表轉換速度可以通過使用快表
tlb等來提高速度。 如果
tlb沒有命中,處理器必須在
os建立的頁表搜尋
pte,雜湊函式就是根據虛擬位址位來訪問頁表。因此
pte必須均勻的分布在頁表中,來提高頁表的命中率。這兒有個比較費解的問題,位址轉換,需要使用頁表,而頁表位址本身就不能再次轉換,否則就是個雞與蛋的問題了,因此位址轉換,訪問頁表時,最好應在實位址模式下。
雜湊頁表(
hash page table)為可變大小資料結構,定義了虛擬頁號與物理頁號的對映關係。頁大小為2的n次方,起始位址也應能為頁大小的整數倍,雜湊表儲存位置記憶體wimg屬性必須為0b0010
,也就是快取和記憶體一致。
頁表中由
pte組(page table entry group)組成。乙個pteg包含8個pte,而每個pte為8位元組,因此乙個pteg共64位元組。pteg位址也就是表搜尋操作的入口點,雜湊函式的最終功能就是根據虛擬頁號,生成pteg位址,在主輔pteg中找到對應的pte。
給定乙個
pte,可能存在於2個可能的pteg中,乙個是主pteg,而另外乙個是輔pteg,而且可能存在於pteg中的任何乙個pte內,因此乙個pte儲存在頁表中的16個可能的位址。表搜尋操作開始時,對虛擬位址執行主雜湊函式,結構和sdr1暫存器中的位一起建立主pteg的實體地址。然後對命中pteg的每個pte進行檢查,檢視是否匹配,如果都不匹配,則執行第二個雜湊函式,生成新的pteg實體地址,重新匹配pte。如果主pteg和輔pteg中都找不到該pte,則產生缺頁故障(page fault)。
sdr1暫存器:sdr1包含了頁表結構的控制資訊,包括頁表實體地址的高位,以及頁表大小。
htaborg:頁表物理基位址
頁表大小為
2^n位元組,16 <= n <= 25,也就是 64k < size < 32m,因此頁表索引必須為10 <= index <= 19,因此htabmask為9位,剛好對應於頁大小對應,末尾的幾個1bit加上10與雜湊函式結果相與,htabmask低位1bit數目正好與htaborg
低位的0bit數相等。 比如
1m頁表大小,2^14 * 64則:
htaborg = 0b***x ***x ***x 0000
htabmask = 0b0 0000 1111
頁大小影響頁表命中率,也就影響系統效能。
32位系統,頁表大小範圍見sdr1暫存器定義。推薦頁表大小,包含的pteg數目至少應超過對映的物理頁數目一半大小,比如256m(2^28)記憶體,包含2^16個4k的頁,因此頁表包含的pteg也至少需要一半即2^15,因此頁表大小至少為2^15 * 64 = 2m。
mmu的理解(一)
對於想理解mmu的軟硬體所有機制的人來說,理解mmu很蛋疼,就和理解網絡卡工作一樣疼!一點點來吧。首先,頁 是實際物理記憶體管理的基本單位,頁 的大小和體系結構相關,大多數32位機器支援4kb大小的頁,1g記憶體就被分成262144個頁,64位的一般支援8kb大小的頁。ucos不支援mmu,linu...
mmu的理解(二)
實際cpu在執行某程式時,不會在載入記憶體的程式段中全段隨機亂飛亂跳,而是會在某段時間內集中在程式的某段 中執行。這樣就有mmu換入換出的意義了,mmu將 執行集中段 載入記憶體,而在需要別的段時再載入,而不會出現我以前認為的程式段將頻繁的換入換出反而造成執行緩慢。此外,可執行程式在載入記憶體後,t...
PPC的MMU實現簡介
mmu就是記憶體管理單元,ppc上有兩種方式來實現mmu,block方式和segment方式。兩種方式在乙個嵌入式系統中可以並存,但block方式優先於segment方式。利用block方式,ppc需要利用到bat,可以稱之為block暫存器 是一種spr 在ppc750中一共有16個bat,分成2...