OS 李治軍 L22 多級頁表與快表

2022-07-10 01:27:08 字數 1218 閱讀 5139

分頁會有問題,為了提高利用率,頁應該小吧,但這樣頁表項就會增加==,到後面就會膨脹得很厲害。例如,4k的頁,4g的物理,那麼就會有4g/4k=4m個頁表項!。不僅如此,每個程序的pcb都要儲存乙份頁表。。。

但實際上大部分邏輯位址根本不會用到,能不能把頁表壓縮?

第一種嘗試:只存放用到的頁,用到的邏輯頁才有頁表項。

但如果頁號不連續了,那麼就需要採用查詢演算法。

假設使用了4m的記憶體,有1k個頁表項,即使採用二分演算法也要10次查詢,速度減小了很多。

第一種嘗試失敗。

第二種嘗試:多級頁表

書有章目錄,也有節目錄,要找某一節,先找章,再找節。如果我們只要第5章的內容,那麼其他章的內容就不需要放到記憶體當中,只要記住章標題就行了。

實際中:邏輯位址被分成了頁目錄號+頁號+offset,程式需要儲存乙個頁目錄表,表中項是連續的,但是卻不用為每一項都儲存具體的頁表,只需要儲存使用了的頁表,這樣就能大大減小空間的使用,在查詢上也不會如第一種嘗試那樣花那麼多的時間。

如上所顯示的,頁目錄有4k大小(10bit),具體使用的頁表有3項,佔據空間12k(3個10bit),總計有16k的空間。而儲存乙個完整的頁表是需要4m的空間的。

所以多級頁表既大大減小了所用記憶體大小,又保證了頁表項的連續。

不過時間上也會引入一些代價,每多增加一層頁表,就要多訪問記憶體一次。

為了加快速度,又引入了快表(tlb),可以快速查詢到cpu最近使用的表項,這是基於硬體電路實現的。

不過就是命中了,效率會很高,未命中時效率會降低,算個期望:

一定要提高tlb的命中率~。

tlb越大越好,命中率越高,但是這樣查詢效率就更低,一般設定為64-1024之間,這是基於程式的區域性性原理。

OS 李治軍 L25 記憶體換出

有換入就應該有換出!等價交換!必須要選擇乙個頁換出,選擇哪一頁淘汰emm?下面介紹淘汰演算法。一 fifo 先來的先走。二 min 記憶體當中,將來最久沒有使用過的page滾蛋。效果很好,但是我們做不到,我們不知道將來會有什麼東西過來。三 lru 用過去的歷史 我來,選最近最長一段時間沒有使用過的頁...

OS 李治軍 L23 段頁結合的實際記憶體管理

底層希望段管理,使用者希望頁管理.如何結合呢?這就引出了虛擬記憶體的概念。我們設定一種位址空間,稱之為虛擬記憶體,向上,可以為使用者提供段 向下,將段對映到物理幀上。對使用者來說,是段的使用,對物理記憶體來說,是頁的使用。定址 使用者給出cs ip,先查段表,訪問某個段內的東西,得到乙個虛擬位址 然...

L2 2 鍊錶去重

l2 2.鍊錶去重 時間限制 300 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者陳越 給定乙個帶整數鍵值的單鏈表l,本題要求你編寫程式,刪除那些鍵值的絕對值有重複的結點。即對任意鍵值k,只有鍵值或其絕對值等於k的第乙個結點可以被保留。同時,所有被刪除...