頁表說需空間大小計算:
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位...