頁表項數如何計算 作業系統基礎34 頁表結構

2021-10-13 15:54:00 字數 2698 閱讀 1519

下面將**組織頁表的一些最常用技術,包括分層分頁雜湊頁表倒置頁表

大多數現代計算機系統支援大邏輯位址空間(2^32〜2^64)。在這種情況下,頁表本身可以非常大。例如,假設具有 32 位邏輯位址空間的乙個計算機系統。如果系統的頁大小為4kb(2^12),那麼頁表可以多達 100萬的條目(2^32/2^12)。假設每個條目有4位元組,那麼每個程序需要4mb 實體地址空間來儲存頁表本身。顯然,我們並不想在記憶體中連續地分配這個頁表。這個問題的乙個簡單解決方法是將頁表劃分為更小的塊。完成這種劃分有多個方法。

一種方法是使用兩層分頁演算法,就是將頁表再分頁(如上圖 )。例如,再次假設乙個系統,具有32 位邏輯位址空間和4k大小的頁。乙個邏輯位址被分為20位的頁碼和12位的頁偏移。因為要對頁表進行再分頁,所以該頁碼可分為10位的頁碼和10位的頁偏移。這樣,乙個邏輯位址就分為如下形式:

其中 p1 是用來訪問外部頁表的索引,而 p2 是內部頁表的頁偏移。採用這種結構的位址轉換方法如下圖所示。

由於位址轉換由外向內,這種方案也稱為向前對映頁表

為了轉換每個邏輯位址,64 位系統將需要多個級別的分頁,太多的級別記憶體訪問是不可取的,所以分層頁表通常被認為對於64位的架構是不適當的。

處理大於32位位址空間的常用方法是使用雜湊頁表,採用虛擬頁碼作為雜湊值。雜湊頁表的每乙個條目都包括乙個鍊錶,該鍊錶的元素雜湊到同一位置(該鍊錶用來解決處理碰撞)。每個元素由三個字段組成:虛擬頁碼,對映的幀碼,指向鍊錶內下乙個元素的指標。

該演算法工作如下,虛擬位址的虛擬頁碼雜湊到雜湊表,用虛擬頁碼與鍊錶內的第乙個元素的第乙個欄位相比較,如果匹配,那麼相應的幀碼(第二個字段)就用來形成實體地址;反之,如果不匹配,那麼與鍊錶內的後續節點的第乙個字段進行比較,以查詢匹配的頁碼。

該方案如下圖所示

已提出用於64位位址空間的這個方案的乙個變體。此變體採用聚簇頁表,類似於雜湊頁表;不過,雜湊表內的每個條目引用多個頁(例如16)不是單個頁。因此,單個頁表條目可以對映到多個物理幀。聚簇頁表對於稀疏位址空間特別有用,這裡的引用是不連續的並且散布在整個位址空間中。

通常,每個程序都有乙個關聯的頁表。該程序所使用的每個頁都在頁表中有一項(或者每個虛擬頁都有一項,不管後者是否有效)。這種表示方式比較自然,因為程序是通過虛擬位址來引用頁的。作業系統應將這種引用轉換成物理記憶體的位址。

由於頁表是按虛擬位址排序的,作業系統可計算出所對應條目在頁表中的位置,可以直接使用該值。這種方法的缺點之一是,每個頁表可能包含數以百萬計的條目。這些表可能需要大量的物理記憶體,以跟蹤其他物理記憶體是如何使用的。

為了解決這個問題,我們可以使用倒置頁表。對於每個真正的記憶體頁或幀,倒置頁表才有乙個條目。每個條目包含儲存在真正記憶體位置上的頁的虛擬位址,以及擁有該頁程序的資訊。因此,整個系統只有乙個頁表,並且每個物理記憶體的頁只有一條相應的條目。

上圖顯示了倒置頁表的工作原理,由於乙個倒置頁表通常包含多個不同的對映物理記憶體的位址空間,通常要求它的每個條目儲存乙個位址空間識別符號。位址空間識別符號的儲存確保了,具體程序的每個邏輯頁可對映到相應的物理幀。

ibm 是最早採用倒置頁表的大公司:從 ibm system 38、rs/6000,到現代的 ibm power cpu。對 ibm rt,系統內的每個虛擬位址為乙個三元組:〈程序id,頁碼,偏移〉
每個倒置頁表條目為二元組〈程序 id,頁碼〉,這裡程序id用來作為位址空間的識別符號。當發生記憶體引用時,由〈程序 id,頁碼〉組成的虛擬位址被提交到記憶體子系統。然後,搜尋倒置頁表來尋找匹配。如果找到匹配條目,如條目 i,則生成實體地址〈i,偏移〉。如果找不到匹配,則為非法位址訪問。

雖然這種方案減少了儲存每個頁表所需的記憶體空間,但是它增加了由於引用頁而查詢頁表所需的時間。由於倒置頁表是按實體地址來排序的,而查詢是根據虛擬位址的,因此查詢匹配可能需要搜尋整個表。這種搜尋需要很長時間。

為了解決這個問題,可以使用乙個雜湊表,以將搜尋限制在乙個或最多數個頁表條目。當然,每次訪問雜湊表也增加了一次記憶體引用,因此每次虛擬位址的引用至少需要兩個記憶體讀:乙個用於雜湊表條目,另乙個用於頁表。(在搜尋雜湊表之前,先搜尋轉換表緩衝區(tlb),這可改善效能。)

採用倒置頁表的系統在實現共享記憶體時會有困難。共享記憶體的通常實現為,將多個虛擬位址(共享記憶體的每個程序都有乙個虛擬位址)對映到乙個實體地址。這種標準的方法不能用於倒置頁表,因為每個物理頁只有乙個虛擬頁條目,乙個物理頁不可能有兩個(或多個)共享的虛擬位址。

解決這個問題的乙個簡單技術是,只允許頁表包含乙個虛擬位址到共享實體地址的對映。這意味著,對未對映的虛擬位址的引用會導致頁錯誤。

參考:《作業系統概念》

作業系統 頁式儲存方式,頁,頁表,頁表項

作業系統和計算機組成原理裡都講到記憶體管理的頁式管理,但是本人以及很多初次學習分頁的時候,都會迷茫頁表大小和頁表項大小之間的關係,本人仔細分析了後寫了這篇blog,僅當學習交流,個人理解之用,如果有錯或者分析不夠嚴謹,歡迎指正。按字 圖結合起來分析,相信還是比較容易看懂。頁 將程序劃分的塊,對應的大...

操作系統頁表項長度問題的記錄

學習分頁儲存管理的過程中,對於每個頁表項大小的下限如何確定這個問題不是很理解,經過一番周折終於弄懂,特此記錄。問題描述 以32位邏輯位址空間 位元組編址單位 一頁4kb為例,位址空間有232b 4 kb 1m頁,需要log21m 20位才能保證範圍容納所有頁面,而又因為以位元組作為編址單位,即頁表項...

王道作業系統中頁表相關計算

以位元組為編址單位 頁面大小 4kb,頁表項大小 4b 則 乙個程序有 2 32b 2 12b 2 20頁 2 20頁則至少需要20位才能表示完所有的頁面 1頁能裝下4kb 4b 2 10個頁表項 2 20頁共需要2 20個頁表項 每一頁都需要乙個頁表項 頁表需要佔2 20 2 10 2 10頁 頁...