頁表管理及多級頁表

2021-09-25 19:21:10 字數 3741 閱讀 8124

頁表說需空間大小計算:

1、32 位位址空間、4kb 的頁大小、頁表的每項大小為 4byte。

2、64 位位址空間、4kb 的頁大小、頁表的每項大小為 4b。

多級分頁:

32 位執行模式情形2級分頁:

對 4kb 的頁大小

因為每頁pgd 的pt項為4kb/4b= 2^10條(實際4g=2^32/2^12/2^10 = 2^10條),故需要虛擬位址va[31:22]10位 用來索引 頁全域性目錄pgd項。

1頁pgd(2^10條pt項×4byte=4kb)

~ 2^10條pt項×4m=4g

因為每頁pt 的頁表項為4kb/4b= 2^10條,故虛擬位址va[21:12] 10位用來索引pt項。

1頁pt(2^10條表項×4byte=4kb)

~2^10條表項*4kb=4m

4kb=2^12需要用12位即可索引到乙個物理頁的實際範圍。故用虛擬位址va[11:0]12位 為頁內偏移。它與實體地址是一致的。

1表項(4byte)

~ 4kb

對 16kb 的頁大小

每頁pgd 最大可包含16kb/4b=2^12項pt(實際4g=2^32/2^14/2^12 = 2^6條) 故需要虛擬位址va[31:26]6位 用來索引頁全域性目錄pgd項。

1頁pgd(2^12項pt×4byte=16kb)

~ 2^12條pt項×64m=256g

(實際可訪問大小為2^6條pt項×64m=4g)

因為每頁pt 的頁表項為16kb/4b= 2^12條,故虛擬位址va[25:14] 12位用來索引pt項。

1頁pt(2^12條表項×4byte=16kb)

~2^12條表項*16kb=64m

因16kb=2^14需要用14位即可索引到乙個物理頁的實際範圍。故用虛擬位址va[13:0]14位 為頁內偏移。它與實體地址是一致的。

1表項(4byte)

~ 16kb

對於 32 位的核心執行在使用大於 32 位實體地址的硬體上的情形(核心選項 config_64bit_phy_addr ,主要是 mips32 的實現使用大於 32 位的實體地址 ;還有就是 mips64 的實現其使用超過 32 位的實體地址,且其相容執行於 mips32 模式下)為了支援大於 32 位的實體地址,頁表的每項占用大小要由4位元組擴充套件到 8 位元組,則每張頁表可容納的項數為:page_size/8 。擴充套件的目的旨在容納大於 32 位的實體地址,其虛擬位址的位數仍然是 32 ,則所用容納虛擬位址的項的大小無需變化,即 pgd 的項大小仍然是 4 位元組。在此情形下頁表的容量減為原來的一半,但 pgd 的容量卻是原來的 2 倍,則其依然能對映 4gb 的虛擬位址空間大小。

對 4kb 的頁大小

因為每頁pgd 的pt項最大為4kb/4b= 2^10條,故需要虛擬位址va[31:21]11位 用來索引 頁全域性目錄pgd項。

1頁pgd(2^10條pt項×4byte=4kb)

~ 2^10條pt項×4m=4g

(實際可訪問大小為2^11條pt項×2m=4g )

因為每頁pt 的頁表項為4kb/8b= 2^9條,故虛擬位址va[20:12] 9位用來索引pt項。

1頁pt(2^9條表項×4byte=2kb)

~2^9條表項*4kb=2m

4kb=2^12需要用12位即可索引到乙個物理頁的實際範圍。故用虛擬位址va[11:0]12位 為頁內偏移。它與實體地址是一致的。

1表項(8byte)

~ 4kb

對 16kb 的頁大小

每頁pgd 最大可包含16kb/4b=2^12項pt,故需要虛擬位址va[31:25]7位 用來索引頁全域性目錄pgd項。

1頁pgd(2^12項pt×4byte=16kb)

~ 2^12條pt項×32m=128g

(實際可訪問大小為2^7條pt項×32m=4g )

因為每頁pt 的頁表項為16kb/8b= 2^11條,故虛擬位址va[24:14] 11位用來索引pt項。

1頁pt(2^11條表項×4byte=8kb)

~2^11條表項*16kb=32m

因16kb=2^14需要用14位即可索引到乙個物理頁的實際範圍。故用虛擬位址va[13:0]14位 為頁內偏移。它與實體地址是一致的。

1表項(8byte)

~ 16kb

64位執行模式情形2級分頁:

對 4kb 的頁大小

因為每頁pgd 的pmd項為4kb/8b= 2^9條(實際2^40/2^12/2^9/2^9 = 2^10條),故需要虛擬位址va[39:30] 10位 用來索引 頁全域性目錄pgd。

1頁pgd(2^9項pmd×8byte=4kb)

~ 2^10項項pmd×1g=1t

因為每頁pmd 的頁表項pt為4kb/8b= 2^9條,故虛擬位址va[29:21] 9位用來索引 頁表pmd。

1頁pmd(2^9項pt×8byte=4kb)

~2^9項pt*2m=1g

因為每頁pt 的頁表項為4kb/8b= 2^9條,故虛擬位址va[20:12] 9位用來索引 頁表pt。

1頁pt(2^9條表項×8byte=4kb)

~2^9條表項*4kb=2m

因用12位即可索引到乙個物理頁的實際範圍4kb=2^12。故用虛擬位址va[11:0]12位 為頁內偏移。它與實體地址是一致的。

1表項(8byte)

~ 4kb

對 8kb 的頁大小

因為每頁pgd 有8kb/8b=2^10項pmd(實際2^43/2^13/2^10/2^10= 2^10條) 故需要虛擬位址va[42:33]10位 用來索引頁全域性目錄pgd表項。

1頁pgd(2^10項pmd×8byte=8kb)

~ 2^10項pmd×8g=8t

因為每頁pmd表 有為8kb/8b= 2^10項pt,故虛擬位址va[32:23] 10位用來索引pmd表項。

1頁pmd(2^10項pt×8byte=8kb)

~2^10項pt*8m=8g

因為每頁pt 的頁表項為8kb/8b= 2^10條,故虛擬位址va[22:13] 10位用來索引pt表項。

1頁pt(2^10條表項×8byte=8kb)

~2^10條表項*8kb=8m

因用13位即可索引到乙個物理頁的實際範圍8kb=2^13。故用虛擬位址va[12:0]13位 為頁內偏移。它與實體地址是一致的。

1表項(8byte)

~ 8kb

對 16kb 的頁大小

因為每頁pgd 有16kb/8b=2^11項pmd(實際2^47/2^14/2^11/2^11= 2^11條) 故需要虛擬位址va[46:36]11位 用來索引頁全域性目錄pgd表項。

1頁pgd(2^11項pmd×8byte=16kb)

~ 2^11項pmd×64g=128t

因為每頁pmd表 有為16kb/8b= 2^11項pt,故虛擬位址va[35:25] 11位用來索引pmd表項。

1頁pmd(2^11項pt×8byte=16kb)

~2^11項pt*32m=64g

因為每頁pt 的頁表項為16kb/8b= 2^11條,故虛擬位址va[24:14] 11位用來索引pt表項。

1頁pt(2^11條表項×8byte=16kb)

~2^11條表項*16kb=32m

因用14位即可索引到乙個物理頁的實際範圍16kb=2^14。故用虛擬位址va[13:0]14位 為頁內偏移。它與實體地址是一致的。

1表項(8byte)

~ 16kb

頁式管理 多級頁表

作業分成若干個相等的 頁 記憶體分成相等的 塊 使 頁 的大小等於 塊 以 頁 為單位,將作業的 頁 裝入記憶體的 塊 中。特點 1.可以不連續地使用記憶體 2.實現內外存統一管理 靜態頁面管理的思想 作業 程序開始執行前,把作業 程序的程式和資料全部裝入記憶體的 塊 中 通過位址變換機構實現虛位址...

記憶體管理 頁表

include asm x86 64 page.h typedef struct pte t typedef struct pmd t typedef struct pud t typedef struct pgd t 虛擬位址分為幾個部分,用作各個頁表的索引。核心使用32或64位型別來表示表項,這...

多級頁表的優點和缺點

多級頁表是基於虛擬位址的分段來劃分等級的,最低等級的頁表上儲存了最終的虛擬頁號和物理頁號的對應關係。例如拿32位的虛擬位址來說,如果頁面的大小為4k,也就是12位,那麼位址空間內將有20位,也就是1m的頁表專案,每個專案對應乙個虛擬頁面。那麼對於位址空間中用於表示頁號的20位位址再次分級,分成10位...