作業系統 x86中的頁表結構

2022-08-31 23:57:18 字數 1817 閱讀 5231

最近看了一些頁表的知識,包括 x86中的頁表結構以及二級頁表的思想,對於多級頁表能夠節約記憶體這塊思考了好久,看了好多部落格終於明白了一些,現在把個人理解記錄下來。

一.頁表結構

分頁轉換功能由駐留在記憶體中的表來描述,該錶稱為頁表(page table),存放在實體地址空間中。把物理記憶體分成一塊一塊的大小,其中每一塊稱為乙個頁,那麼頁表可以看作是這些頁的目錄,它可以定位到物理記憶體上某一塊的某乙個儲存單位(1位元組大小)

單頁表結構中將線性位址分為高低兩部分;高位部分用於索引頁表項,由於每乙個頁表項對應物理記憶體的乙個頁,所以高位部分的位數決定了頁的個數;頁表項裡儲存的內容即為它對應頁面的物理(基)位址。低位部分用於檢索對應位址在頁中的偏移量,加上頁面的基位址(高位部分確定)最終形成對應的實體地址。

以x86為例,32位的位址中,如果使用單頁表結構,高位址部分有20位,低位址部分有12位,那麼頁表項就有220個,即對應物理記憶體中的220個頁;同時每個頁的大小為212個儲存單位(1位元組大小),每乙個儲存單位可由12位偏移量確定。所以此時每個頁的大小為212×1位元組=4kb。物理記憶體中的220個頁共有220個×4kb=4gb,即32位的最大記憶體。

頁表中每個頁表項的大小為32位。由於只需要其中的20位來存放頁面的物理基位址,而剩下12位由剛才我們所說的偏移確定,因此剩下的12位可用於存放諸如頁面是否存在等的屬性資訊。這時需要注意的是我們的頁表也要占用一定的儲存空間,而頁表項一共220個,所以共占用空間220個×4位元組=4mb。由於頁表占用空間較大,這才引出了多級頁表的概念。

二.二級頁表

二級頁表的結果如下圖所示:

32位線性位址被分為了3部分,高位的兩部分對應生成了頁目錄和頁表。其實這二者分別對應一級頁表和二級頁表,一級頁表(頁目錄)用於索引二級頁表(頁表);二級頁表再來索引頁。低位的偏移部分不變,還是用於檢索對應位址在頁中的偏移量,加上頁面的基位址(高位部分確定)最終形成對應的實體地址。

以x86為例,32位的位址中,如果使用二級頁表結構,低中高分別佔12/10/10位,那麼對應於一級頁表裡的頁表項有210個,每個頁表項對應乙個二級頁表,即二級頁表有210個。同理32位位址的12~21這10位對應於每個二級頁表裡的210個頁表項,每個頁表項對應物理記憶體裡的每個頁的基位址。由於每個頁的大小仍為212×1位元組=4kb,每個二級頁表對應210個頁,即210×4kb=4mb物理記憶體。注意現在一共有210個二級頁表,所以全部可以索引的物理記憶體為210×4mb=4gb。和一級頁表是一樣的。

再來看看頁表所佔記憶體。不管是一級頁表的頁表項還是二級頁表的頁表項,都是32位的,所以計算方式為:210個二級頁表×210個二級頁表項×4位元組=4mb,別忘了,還有乙個一級頁表呢!210個一級頁表項×4位元組=4kb。最後比單頁表結構還多了4kb。說好的多級頁表能夠節約記憶體呢?明明多了一塊空間來放置目錄頁啊!

三.為什麼多級頁表可以節約空間

實際上,二級表結構允許頁表被分散在記憶體各個頁面中,而不需要儲存在連續的4mb記憶體塊中。在單頁表結構裡,頁表只有乙個,佔4mb連續記憶體,不管線性位址空間有沒有使用到這麼多頁表項,這個4mb的頁表都是存在的。多級頁表則不同。以二級頁表為例,不需要為不存在的或線性位址空間未使用部分分配二級頁表。雖然目錄表頁面必須總是存在於物理記憶體中,但是二級頁表可以在需要時再分配。例如我們所需要的物理記憶體只有8mb,由上述計算可知,每個二級頁表對應210個頁,即210×4kb=4mb物理記憶體,所以兩個二級頁表就夠了,共占有2×210個二級頁表項×4位元組=8kb,當然了,一級頁表肯定存在,佔210×4位元組=4kb,一共需要12kb。但是單頁表結構裡只有一級頁表,相當於二級頁表結構裡面的目錄頁表,不管需要多少物理記憶體,這個頁表都是佔4mb的,顯然二級頁表結構節約了很大的空間。

作業系統的i386 和x86的區別

x86 包含 i386 i386 僅僅是 x86 的一部分。x86 這裡的 x 本來就是乙個未知數性質的,他可以是 3 4 5 6 7 x86 是 intel 建立起來的 cpu 架構。他的 8086 8088 80286 80386 80486 pentium pentium pro pentiu...

x86中的分頁機制

分頁單元 page unit 把線性位址轉化成實體地址.為了效率,線性位址分成固定長度的組,該單元成為頁,頁內部連續的線性位址被對映到連續的實體地址.頁框 分頁單元把ram分成固定長度的頁框,頁框是乙個儲存區域,與頁長度相同 頁是資料塊,頁框是儲存區域,所以頁可以放到頁框和磁碟中.線性位址到實體地址...

X86中的RDTSC指令

intel 的x86 中的rdtsc 即read time stamp counter 讀取時間計數器的指令。這個指令讀取 cpu時間計數器,返回乙個無符號的 64位整數。它通過 edx eax 暫存器返回 cpu被引導後,時鐘所走的圈數。這意味著,你可以用它來計算時間間隔了多久。但是,由於這個指令...