操作系統面試—虛擬內存

本文是對操作系統概念(第七版)——虛擬內存的學習總結,不足之處,歡迎批評指正。


1、虛擬內存的理解:

先將部分程序導入內存,執行完成後導入下一部分程序,給我們的感覺是內存變大了,實際上物理內存的大小並未發生變化。

虛擬內存的優點:

(1)將邏輯內存和物理內存分開。

(2)虛擬內存允許文件和內存通過共享頁而爲兩個或多個進程所共享。


2、按需調頁

按需調頁:顧名思義,在需要時才調入相應的頁。

支持按需調頁的硬件:

(1)頁表:該表能夠通過有效-無效爲或保護位的特定值,將條目設爲無效。

(2)次級存儲器(交換空間,通常爲快速磁盤)


3、寫時複製

這種技術允許父進程與子進程開始時共享共享同一個頁面,這些頁面被標記爲爲寫時複製頁,即如果任何一個進程需要對頁進行寫操作,那麼就創建一個共享頁的副本。


4、頁面置換(重要)

頁置換採用如下方法:如果沒有空閒幀,那麼就查找當前沒有使用的幀,將其釋放。

(1)查找所需頁在磁盤上的位置

(2)查找一個空閒幀

a,如果有空閒幀,那麼就使用它,

b,如果沒有,使用頁置換算法選擇一個犧牲幀

c,將犧牲幀的內容寫到磁盤上,改變頁表和幀表

(3)將所需頁讀入空閒幀,改變頁表和幀表

(4)重新啓動程序。

常見的頁置換算法

(I)FIFO頁置換

最先進入的頁被置換。

需要注意的是FIFO頁置換會有一種特殊現象——Belady異常:對有的頁置換算法,頁錯誤率可能隨着所分配的幀數的增加而增加。FIFO可能就出現這種現象。

(II)最優頁置換opt

置換最長時間不會使用的頁,即能預知將來的情況。但是將來的情況我們無法預知,因此這種算法難以實現。

(III)LRU頁置換(最近最少使用算法least-recently-used algorithm)

FIFO使用的是頁調入內存的時間,OPT使用的是將來的時間。

LRU置換爲每個頁關聯上上一次使用的時間,當必須置換一頁時,LRU選擇最長時間沒有使用的頁。

最優置換和LRU置換都沒有Belady算法(證明略)

(IIII)近似LRU頁置換

頁表中的每一項都關聯一個引用位,每當引用一個頁時,相應的位就被置位。因此我們雖然不知道引用順序,但是我們知道哪些頁被引用,哪些未被引用。近似LRU算法又有一下三種方法:

(a)附加引用位算法

通過在規定時間間隔裏記錄引用位。

0000000,11111111,上述兩個字節分別表示在8個週期內從未被引用和一直被引用的情況。因此值最小,就是應該置換的頁。

(b)二次機會算法

這種算法只有引用位本身,沒有歷史位,因此只有一位。當要選擇一個頁時,檢查引用位,如爲0,直接置換,如爲1,則給該頁二次機會,同時清0,尋找下一個0位置,所以而二次機會算法的基本算法是FIFO算法。

(c)增強型二次機會算法

通過將引用爲和修改位作爲一對有序位來考慮。

(0,0)——最近未使用且未修改過

(0,1)——最近未使用但修改過

(1,0)——最近使用但爲修改過

(1,1)——使用且修改過

(IIIII)基於計數器的頁置換

爲每一個頁保留一個用於記錄其引用次數的計數器,因而可以形成以下兩種方案:

最不經常使用頁置換算法(LFU)——置換出引用次數最小的頁

最常使用頁置換算法(MFU)——認爲最小次數的頁可能剛剛調入,且還沒有使用。

(IIIIII)頁緩衝算法

系統保留一個空閒幀緩衝池,當出現頁錯誤時,會選擇犧牲幀,但是犧牲幀寫出之前,所需要的頁就從緩衝池中讀到空閒內存。這樣加速了重啓。


5、幀分配

研究問題:如何在各個進程之間分配一定的空閒內存?

由於性能原因,必須有足夠的幀來容納所有單個指令所引用的頁,因此有一個幀的最小數量的限制。幀的最小數量是有計算機體系結構決定的,而最大數量是由物理內存決定的。

(1)分配算法

平均分配,比例分配(比例可以根據進程大小或者優先級等來計算)

(2)全局分配和局部分配

全局分配:允許一個進程從所有幀集合中選擇一個置換幀

局部分配:每個進程只能從自己的分配幀中選擇置換。


6、系統顛簸

頻繁的頁調度操作

原因:當多道程序的程度增加到一定時,會引起顛簸


7.內核內存的分配

內核內存分配的特殊性:

(1)內核需要爲不同大小的數據結構分配內存,因此必須謹慎分配內存。

(2)有的硬件需要直接和物理內存打交道,因此需要內存常駐在連續的物理頁中。

以上兩個特殊性是的內核內存的分配通常是從空閒池中獲取,,而不是從內存鏈表中獲取。

常見的內核內存分配有兩種方法:

(i)Buddy系統分配

內存按2的冪的大小進行分配,如果請求大小大於當前2的冪內存,那麼調整到下一個2的冪。

(II)slab分配

slab是由一個或多個物理上連續的頁組成。高速緩衝cache含有一個或者多個slab,每個內核數據結構都含有一個cache,每個cache含有內核數據結構的對象實例。

優點:

(1)沒有因碎片引起的內存浪費。因爲每個數據結構都有一個cache,每個cache都有若干個slab組成,而每個slab又分爲若干個和對象大小相同的部分。

(2)內存請求可以快速滿足。




發佈了65 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章