本文來自TOMORROW 星辰博客。
原文鏈接:深入理解操作系統之——分頁式存儲管理
頁式存儲器管理是操作系統中十分重要的內容,這也正是虛擬存儲關鍵技術之一。如果沒有理解頁式管理、段式管理和段頁式管理,那么對操作系統中的虛擬內存理解也只有十之一二,因為操作系統中的各個概念都是密不可分的,你中有我,我中有你。本文將講述內容包括一級頁表、快表、二級頁表和多級頁表。
頁
相對物理塊來說,頁是邏輯地址空間(虛擬內存空間)的划分,是邏輯地址空間順序等分而成的一段邏輯空間,並依次連續編號。頁的大小一般為 512B~8KB。
例如:一個 32 位的操作系統,頁的大小設為 2^12=4Kb,那么就有頁號從 0 編到 2^20 的那么多頁邏輯空間。
物理塊
物理塊則是相對於虛擬內存對物理內存按順序等大小的划分。物理塊的大小需要與頁的大小一致。
例如:2^31=2Gb 的物理內存,按照 4Kb/頁的大小划分,可以划分成物理塊號從 0 到 2^19 的那么多塊的物理內存空間。
邏輯地址結構
頁式存儲管理中,邏輯地址可以解讀成頁號+地址偏移量(頁內地址)。如下圖所示:

這是一個 32 位的邏輯地址,頁大小設為 2^12=4Kb。高 20 位則是頁號,低 12 位則是頁內地址。邏輯地址為 A,頁面大小為 L,則頁號 P 和頁內地址 d 計算公式如下:

頁表
頁表是記錄邏輯空間(虛擬內存)中每一頁在內存中對應的物理塊號。但並非每一頁邏輯空間都會實際對應着一個物理塊,只有實際駐留在物理內存空間中的頁才會對應着物理塊。
頁表是需要一直駐留在物理內存中的(多級頁表除外),另外頁表的起址和長度存放在 PCB(Process Control Block)進程控制結構體中。

邏輯地址到物理地址的變換過程
1、進程訪問某個邏輯地址時,分頁地址機構自動將邏輯地址分為頁號和頁內地址
2、頁號大於頁表長度,越界錯誤
3、頁表項的地址 p = 頁表起始地址 F + 頁號 P * 表項大小 S,從而得到對應的物理塊號 B
4、頁和物理塊的大小是一致的,所以 頁內地址=塊內地址
5、然后 物理地址 = 物理塊號 B * 頁大小 L + 頁內地址
6、根據物理地址讀取數據
例:某系統采用分頁式存儲管理,頁大小為 2KB。已知進程 A 的邏輯地址空間為 4 個頁,內存分配如下頁表所示,求邏輯地址 4832 的物理地址。(所有數據都是十進制)
解:
2KB=2048B
頁號 P=邏輯地址/頁大小=4832/2048=2
頁內地址 F=邏輯地址%頁大小=4832%2048=736
根據頁表查得 2 號頁對應着 25 號物理塊
物理地址 A=物理塊號*頁大小 + 頁內地址=25*2048+736=51936
快表(TLB,Translation Look aside Buffer)
快表是為了加快虛擬地址到物理地址這個轉換過程而存在的。頁式存儲管理的快表一般存放在 CPU 內部的高速緩沖存儲器 Cache。快表與頁表的功能類似,其實就是將一部分頁表存到 CPU 內部的高速緩沖存儲器 Cache。CPU 尋址時先到快表查詢相應的頁表項形成物理地址,如果查詢不到,則到內存中查詢,並將對應頁表項調入到快表中。但,如果快表的存儲空間已滿,則需要通過算法找到一個暫時不再需要的頁表項,將它換出內存。因為高速緩沖存儲器的訪問速度要比內存的訪問速度快很多,因此使用可以大大加快虛擬地址轉換成物理地址。根據統計,快表的命中率可以達到 90%以上。
一級頁表的缺陷
由於頁表必須連續存放,並且需要常駐物理內存,當邏輯地址空間很大時,導致頁表占用內存空間很大。
例如,地址長度 32 位,可以得到最大空間為 4GB,頁大小 4KB,最多包含 4G/4K=1M 個頁。若每個頁表項占用 4 個字節,則頁表最大長度為 4MB,即要求內存划分出連續 4MB 的空間來裝載頁表;若地址程度為 64 位時,就需要恐怖的 4*2^52Byte 空間來存儲頁表了。而且頁表采用的是連續分配,不是分頁分配。
采用離散分配方式的管理頁表,將當前需要的部分頁表項調入內存,其余的頁表項仍駐留在磁盤上,需要時再調入。
二級頁表
二級頁表即是對頁表本身采用分頁式管理,對頁表本身增加了一層頁表管理。頁的大小就是一個頁表的大小,一個頁表只能裝在一個頁中。
地址換算:
從上圖而知,在二級頁表管理中,邏輯地址分成了三部分:頂級頁號、次級頁號和頁內地址。根據頂級頁表起始地址和頂級頁號從頂級頁表中查到次級頁表對應的物理塊號,接着由該次級頁表的物理塊號結合次級頁號得到對應頁的物理塊號,結合頁內地址求得最終的物理地址。
多級頁表
多級頁表和二級頁表類似。多級頁表和二級頁表是為了節省物理內存空間。使得頁表可以在內存中離散存儲。(單級頁表為了隨機訪問必須連續存儲,如果虛擬內存空間很大,就需要很多頁表項,就需要很大的連續內存空間,但是多級頁表不需要。)
本文來自TOMORROW 星辰博客。
原文鏈接:深入理解操作系統之——分頁式存儲管理
