亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

1. 前言

操作系統的核心管理邏輯可以簡化為進程管理、內存管理、文件管理。之前的小節已經介紹了進程的基本概念,每個進程都有獨立的地址空間,這些地址空間被分為大小相同的塊,定義為頁(Page)。然而物理機的內存硬件空間是有限的,舉例來說,我們裝配最常見的 4G 內存條,但是很多進程例如單機游戲,運行時都需要占用幾個 G 的內存空間,所以就需要用到虛擬內存。

2. 頁面置換算法

面試官提問: 操作系統的頁面置換算法是什么?常用算法有哪些?

題目解析:

首先要明確頁面置換算法是針對內存管理的算法。

頁面置換算法是虛擬內存的運行機制核心,內存被分頁之后,每個頁都是一段連續的地址,每個進程擁有的都是一段虛擬地址,需要經過內存管理單元(Memory Management Unit,也就是 MMU)將虛擬地址轉換為物理地址。

操作系統的 CPU 和內存都是稀缺資源,所以資源比較緊張,內存具有非常高的 I/O 速度,但是空間很小。硬盤具有很大的存儲空間,但是 I/O 能力一般。所以操作系統綜合了兩者的特性,將硬盤作為內存的緩存,虛擬內存就是硬盤空間的一部分。進程運行時,操作系統訪問內存空間,如果訪問的頁面在內存中不存在則從硬盤中將其調入,如果內存沒有空閑空間,則將內存中的一段數據調出到硬盤空間。

我們介紹三種最常見的內存管理算法:LRU、FIFO、OPT 算法。

2.1 LRU 算法

LRU(Least Recently Used)即最近最少使用算法,算法的核心思想是如果在過去一段時間沒有訪問過的頁面,在未來最近一段時間也不會訪問。

算法的實現是給每個頁面設置一個時間戳,記錄最近一次訪問的時間,如果發生缺頁錯誤,則從所有頁面中淘汰時間戳最久遠的一個。

LRU 算法案例示例:

訪問頁面序號 5 0 2 8 0 4 8
物理塊 1 5 5 5 8 8 8 8
物理塊 2 0 0 0 0 0 0
物理塊 3 2 2 2 4 4
是否發生缺頁

對于第 4 次訪問頁面時,因為所有物理塊都有頁面,所以發生缺頁錯誤,需要替換出最近最少訪問的頁面,也就是序號為 5 的頁面,即物理塊 1 的內容被置換。

2.2 FIFO 算法

FIFO(First In First Out)即先進先出算法,也就是常見數據結構的隊列模型。當物理塊存儲空間不夠時,優先淘汰在最先進入物理塊的頁面,也就是駐留時間最久的頁面。

FIFO 算法雖然相對簡單,但是不符合操作系統的實際運行情況,因為駐留時間最久的頁面,大多數情況是經常訪問的頁面,FIFO 算法會增加缺頁錯誤的概率。

FIFO 算法案例示例:

訪問頁面序號 5 0 2 8 0 4 8
物理塊 1 5 5 5 8 8 8 8
物理塊 2 0 0 0 0 4 0
物理塊 3 2 2 2 2 4
是否發生缺頁

FIFO 算法相對于 LRU 的區別在于,只考慮頁面的駐留時間,在第 6 次訪問頁面時,不會因為上次是序號 0 的頁面剛進行了訪問就不進行替換,因為序號 0 的頁面是最早進入物理塊的,所以替換為了序號為 4 的頁面。

2.3 OPT 算法

OPT(Optiomal)最優頁面置換算法,算法的核心思想是置換最長時間不會使用的頁面,這需要預判未來的頁面置換順序,目前的操作系統無法做到對于進程未來需要使用的頁面進行預測,所以算法也沒有實際落地的實現。主要作用是對于已經給定的頁面順序,作為最優置換算法的比較標桿,比如對于給定的頁面順序 5 0 2 8 0 4 8 可以對比 FIFO 算法以及 OPT 算法的頁面置換效率,判斷 FIFO 算法是否足夠高效。

訪問頁面序號 5 0 2 8 0 4 8 0
物理塊 1 5 5 5 8 8 8 8 8
物理塊 2 0 0 0 0 0 0 0
物理塊 3 2 2 2 4 4 4
是否發生缺頁

對于訪問頁面序號是 4 時,因為可以看到未來會有頁面序號 8 和 0 的訪問,不會有序號 2 的訪問,所以置換物理塊 3 中的頁面序號 2。

3. 小結

頁面調度的目的是盡可能少的發生缺頁錯誤,因為發生缺頁錯誤時需要從硬盤置換空間,所以會降低進程的執行效率。常見的頁面置換算法除了本文介紹的 FIFO、LRU、OPT,還有時鐘置換算法,候選人可以自行了解。