程序頁表的基本結構僅適合於小程序位址空間,在大位址空間下,該結構發生了變化。
大虛址空間下的記憶體程序頁表結構採用頁表頁和頁目錄。
32位意味著虛址空間可達4gb
虛址空間計算方法:
32位的編址為232,232=210*210*210*22=4gb
1k=1024b
1m=1024k
1g=1024m
若虛址空間為2gb,在頁長4kb時共有
2g=1024k*1024k*2
(2*1024*1024kb/4kb)= 219頁
若每頁的物理頁號用4b表示,則該程序頁表本身佔
219*4b = 210*29*22b = 210*210*2b = 2mb
該程序頁表占用的空間為
(219*4b)/4kb =(219*4b)/(4*210b)= 512頁
1)算一算: 32位計算機程序頁表多大?
2)由於程序頁表大但是空,故對程序頁表採取動態分配、動態伸縮的策略
即:程序建立時並不馬上分配完整的程序頁表空間,當用到某頁時(缺頁中斷或分配頁時)才將該頁的物理頁號放入頁表。顯然頁表中的邏輯頁號不連續,頁表中每行同時要存放物理頁號和邏輯頁號。
頁表頁:頁表本身的空間分配也是以頁為單位。
乙個程序頁表的不同頁表頁之間不一定連續。
3)由於頁表所佔的巨大記憶體空間和其大部分內容在大部分時間內未使用,故程序頁表也被列入頁淘汰的範圍。
即:程序頁表的某些頁可能被淘汰到盤交換區中。
4)頁目錄:由於程序頁表的多個頁之間不再連續,因此頁表頁本身也需要位址索引,這種位址索引稱為頁目錄。
頁目錄中存放著程序頁表的所有頁表頁的位址。
採用由頁表頁和頁目錄共同構成的二級頁表機制來實現程序頁表,intel cpu對二級頁表提供了硬體支援。
5)二級頁表結構及其位址對映
每個虛址分為三個部分
頁目錄號+虛頁號+頁內位移
6)多級頁表結構
對於更大的虛址空間,採用二級程序頁表結構可能不夠,需要**甚至更多級頁表結構,圖3.27給出了**頁表結構及位址對映過程。
7)多級表頁結構本質
由於頁表的不連續存放,導致對物理頁進行位址索引,這就是程序頁表,而程序頁表又是不連續導致對程序頁表頁進行位址索引,這就是頁目錄。
頁目錄是頁表頁的索引,頁表頁是程序物理空間本身的索引
3 1 9 兩級頁表
單級頁表的幾個問題 1 因為頁表的特性,需要連續存放,當程序需要很多個頁面,就需要很大的頁表,就需要很大一塊連續的區域去存放頁表 2 根據區域性性原理,沒必要讓頁表常駐記憶體 因為頁表太大,需要連續一大片記憶體的解決方法是 重新建立起對一級頁表的頁表,頁目錄表 將邏輯位址程序拆分成一級頁號和二級頁號...
核心頁表和程序頁表
初學核心時,經常被 核心頁表 和 程序頁表 搞暈,不知道這到底是個啥東東,跟我們平時理解的頁表有和關係 核心頁表 程序頁表 每個程序自己的頁表,放在程序自身的頁目錄task struct.pgd中。在保護模式下,從硬體角度看,其執行的基本物件為 程序 或執行緒 而定址則依賴於 程序頁表 在程序排程而...
關於使用者程序頁表和核心頁表
普通使用者程序的頁表也是存在核心空間的。這很容易理解,畢竟頁表沒有vma來對應。在應用程序建立的時候,task struct m struct描述記憶體資訊,mm gpd指定頁表基位址。頁表的分配是通過呼叫核心夥伴演算法介面分配到物理記憶體,核心在啟動階段已經建立了核心頁表,使用者程序的頁表可以分為...