知識回顧
練習
習題一
內容:
某頁式虛擬存儲管理系統中,頁面大小爲1KB。給某一進程分配的內存塊數爲3 ,並按下列地址順序引用內存單元:
3635、3632、1140、3584、2892、3640、0040、2148、1700、2145、3209、0000、1102、1100。
如果上述數字均爲十進制數,而內存中尚未裝入任何頁。
(1) 給出使用LRU算法時的缺頁次數。
(2)用流程圖的方式解釋地址變換的過程。(缺頁時只需指出產生缺頁中斷以請求調頁,具體的中斷處理流程不需畫出)
解答
(1)根據題意,頁面的引用次序爲3、3、1、3、2、3、0、2、1、2、3、0、1、1,則根據LRU算法依次訪問各頁,各內存塊中的頁面置換情況爲(加粗頁面表示剛調入內存):
訪問頁面 | 3 | 3 | 1 | 3 | 2 | 3 | 0 | 2 | 1 | 2 | 3 | 0 | 1 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
內存塊1 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 0 | 0 | 0 |
內存塊2 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 3 | 3 | 3 | 3 | ||
內存塊3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 1 | ||||
是否缺頁 | ✔ | ❌ | ✔ | ❌ | ✔ | ❌ | ✔ | ❌ | ✔ | ❌ | ✔ | ✔ | ✔ | ❌ |
故可以看出,LRU算法時的缺頁次數爲8次。
PS:解題過程中需要進行淘汰頁面的選擇時,可以通過逆向檢查此時在內存中的幾個頁面號,在逆向掃描過程中最後一個出現的頁面就是要淘汰的頁面。
例如此時分析到需要頁面0,而此時內存已滿,需要選一個頁面淘汰,進行頁面置換:那此時內存中的頁面是3、1、2,然後逆向掃描之前訪問的頁面,三個頁面當中1是最早訪問的,也是最近最久未使用的頁面,故將頁面1淘汰,將需要的頁面0調入。
頁面置換之後:
其他分析過程類似。
(2)假設沒有快表機構,其地址變換過程爲:
習題二
題目內容:
在一個請求分頁系統中,假定分配給一個進程的物理塊數爲3,並且此進程的頁面走向爲2、3、2、1、5、2、4、5、3、2、5、2。
試用FIFO、LRU和OPT三種算法分別計算出在訪問過程所發生的缺頁次數。
解答:
FIFO算法:優先淘汰最早進入內存的頁面,可以把進入內存的頁面根據調入順序形成一個隊列,需要置換頁面時將隊列頭淘汰
訪問頁面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
內存塊1 | 2 | 3 | 2 | 2 | ||||||||
內存塊2 | 3 | 3 | 3 | |||||||||
內存塊3 | 1 | |||||||||||
是否缺頁 | ✔ | ✔ | ✔ |
所以把2淘汰,頁面5調入:
訪問頁面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
內存塊1 | 2 | 3 | 2 | 2 | 5 | |||||||
內存塊2 | 3 | 3 | 3 | 3 | ||||||||
內存塊3 | 1 | 1 | ||||||||||
是否缺頁 | ✔ | ✔ | ✔ | ✔ |
此時應該淘汰頁面3,調入2:
訪問頁面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
內存塊1 | 2 | 3 | 2 | 2 | 5 | 5 | ||||||
內存塊2 | 3 | 3 | 3 | 3 | 2 | |||||||
內存塊3 | 1 | 1 | 1 | |||||||||
是否缺頁 | ✔ | ✔ | ✔ | ✔ | ✔ |
分析過程就是這樣,所以最後的結果:
訪問頁面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
內存塊1 | 2 | 3 | 2 | 2 | 5 | 5 | 5 | 5 | 3 | 3 | 3 | 3 |
內存塊2 | 3 | 3 | 3 | 3 | 2 | 2 | 2 | 2 | 2 | 5 | 5 | |
內存塊3 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 4 | 2 | |||
是否缺頁 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
故使用FIFO算法在訪問過程中所發生的缺頁次數爲9次。
LRU算法:
訪問頁面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
內存塊1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 |
內存塊2 | 3 | 3 | 3 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | |
內存塊3 | 1 | 1 | 1 | 4 | 4 | 4 | 2 | 2 | 2 | |||
是否缺頁 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
故使用LRU算法在訪問過程中所發生的缺頁次數爲7次。
OPT算法:
訪問頁面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
內存塊1 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 4 | 4 | 2 | 2 | 2 |
內存塊2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | |
內存塊3 | 1 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | |||
是否缺頁 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
(倒數第三列,後面只會用到頁面5,所以既可以用4號,也可以用3號頁面進行替換,置換爲頁面2。)
故可以看出,使用OPT算法在訪問過程中所發生的缺頁次數爲6次。
PS:OPT算法淘汰那些永不使用,或者在最長時間內不再被訪問的頁面(預知未來),所以在選擇淘汰哪個頁面時,和LRU算法剛好相反,可以使用前向掃描方法,在前向掃描過程中最後一個出現的頁面就是要淘汰的頁面。
比如此時內存已滿,存放了2、3、1號頁面,要將5號頁面置換進來,淘汰頁面可以從當前頁面開始前向掃描,發現1是後面不會在訪問的(1號是永不再使用的),所以淘汰1。
替換之後,變爲:
個人理解,有誤請指正~