一.理論
fifo:先進先出排程演算法
lru:最近最久未使用排程演算法
兩者都是快取排程演算法,經常用作記憶體的頁面置換演算法。
打乙個比方,幫助你理解。你有很多的書,比如說10000本。由於你的書實在太多了,你只能放在地下室裡面。你看書的時候不會在地下室看書,而是在書房看書。每次,你想看書都必須跑到地下室去找出來你想看的書,然後抱回來放到書桌上,之後才開始看。還有就是,有一些書你會反覆的看,今天看了也許過幾天又要看。總之,你自己是不知道你哪天會需要看哪本書的。你的老師每天下課的時候會給你布置乙個書單,讓你晚上回去去看哪本書。(假設你老師讓你看的書在你的地下室裡面都有)跑地下室當然是非常麻煩的,所以你希望你的經常看的那些書最好放在書桌上。但是你的書房的書桌同時只能擺放10本書(這個是假設的啊)。那麼,問題來了。到底把哪些說留在書桌上最好呢?這裡說的最好,就是說你盡量少的跑地下室去找書。為了解決這個問題,人們發明了很多的演算法。
其中,比較常見的就是上面這兩種:fifo演算法和lru演算法。
fifo演算法:
很簡單,我把書桌上的10本書按照放置時間先後堆放成一堆。這裡的放置時間,就是說這本書在我的書桌上放了幾天了。每次要看書的時候,我先在書桌上找,找到就直接可以讀了。讀完之後放回原來的位置就可以,不打亂順序。如果書桌上面沒有我要讀的書,就去地下室找。找來之後,我就把書桌上放的時間最長的那本(也就是書堆裡面最下面的那本書)放回地下室。然後把我今天需要看的這本書放在書堆的最上面。
lru演算法:
也不難,我把書桌上的10本書按照閱讀時間先後堆放成一堆。這裡的閱讀時間,就是說我最近一次讀這本書是幾天之前。每次要看書的時候,我先在書桌上找,找到就直接可以讀了。讀完之後放在書堆的最上面。如果書桌上面沒有我要讀的書,就去地下室找。找來之後,我就把書桌上最久沒有閱讀的那本(也就是書堆裡面最下面的那本書)放回地下室。然後把我今天需要看的這本書放在書堆的最上面。上面這個比方,相信你可以看明白吧。這裡的地下室對應記憶體,書桌對應快取,書對應頁面。
二.缺頁次數
在乙個採用頁式虛擬儲存管理的系統中,有一使用者作業,它依次要訪問的頁面序列是1,2,3,4,1,2,5,1,2,3,4,5.假定分配給該作業的頁數為3且作業初始時未裝載頁面,那麼採用fifo排程演算法產生的缺頁中斷數為多少,採用lru排程演算法產生的缺頁中斷數為多少?
fifo演算法:(first in first out),先進先出,一般看到這類思想,首先想到的資料結構應當是佇列,但是我們這裡最好是用vector,因為調頁過程中需要遍歷佇列檢查該頁是否已存在,當演算法的儲存結構是佇列或棧,但實現過程中需要經常遍歷全佇列或全棧的內容時,最好用vector,這是《劍指offer》面試題25給我的啟發。給出乙個訪問序列的模擬演算法到此應該非常簡單了,為了節省時間,下面僅給出題目計算步驟,**今後再補。
訪問序列:1,2,3,4,1,2,5,1,2,3,4,5
1,2,3先調入記憶體,記憶體結構:3 2 1 缺頁次數:3
4調入記憶體,1調出, 記憶體結構:4 3 2 缺頁次數:4
1調入記憶體,2調出, 記憶體結構:1 4 3 缺頁次數:5
2調入記憶體,3調出, 記憶體結構:2 1 4 缺頁次數:6
5調入記憶體,4調出, 記憶體結構:5 2 1 缺頁次數:7
1存在,記憶體結構不改變
2存在,記憶體結構不改變
3調入記憶體,1調出, 記憶體結構:3 5 2 缺頁次數:8
4調入記憶體,2調出, 記憶體結構:4 3 5 缺頁次數:9
5存在,記憶體結構不改變
共缺頁9次,缺頁中斷率 = 缺頁中斷次數 / 總訪問頁數 = 9 / 12
lru演算法:最近最少使用(least recently used),先看一下調頁過程
訪問序列:1,2,3,4,1,2,5,1,2,3,4,5
1,2,3先調入記憶體,記憶體結構:3 2 1 缺頁次數:3
4調入記憶體,1調出, 記憶體結構:4 3 2 缺頁次數:4
1調入記憶體,2調出, 記憶體結構:1 4 3 缺頁次數:5
2調入記憶體,3調出, 記憶體結構:2 1 4 缺頁次數:6
5調入記憶體,4調出, 記憶體結構:5 2 1 缺頁次數:7
到這一步其實和fifo並沒有區別
1調入記憶體,由於記憶體中存在1,故沒有缺頁中斷,但由於1最近被訪問過,所以要將其位置調換,
使它最後乙個被淘汰,記憶體結構:1 5 2
2調入記憶體,沒有缺頁中斷,但記憶體位置要變化,記憶體結構:2 1 5
3調入記憶體,5調出, 記憶體結構:3 2 1 缺頁次數:8
4調入記憶體,1調出, 記憶體結構:4 3 2 缺頁次數:9
5調入記憶體,2調出, 記憶體結構:5 4 3 缺頁次數:10
共缺頁10次,缺頁中斷率:10/12
FIFO排程演算法和LRU演算法
fifo 先進先出排程演算法 lru 最近最久未使用排程演算法 兩者都是快取排程演算法,經常用作記憶體的頁面置換演算法。打乙個比方,幫助你理解。你有很多的書,比如說10000本。由於你的書實在太多了,你只能放在地下室裡面。你看書的時候不會在地下室看書,而是在書房看書。每次,你想看書都必須跑到地下室去...
LRU頁面排程演算法的實現
頁面排程演算法 lru,即按照最近最早使用的原則來調頁。下面的例子是頁塊數為3,頁面訪問序列為20的lru,返回的是缺頁率。原理 先把頁塊分別標記為0,1,2,其中0表示最近最早使用的。每進行一次調頁時,首先遍歷頁塊,如果命中,那麼就把頁塊標記大於命中頁塊標記的頁標記 並當前頁塊標記為2,表示這是最...
非搶占式優先排程演算法例題 Linux 程序排程
linux公平排程cfs completely fair schedule 基於linux版本2.6.34。看原始碼所感 而世之奇偉 瑰怪,非常之觀,常在於險遠,而人之所罕至焉,故非有志者不能至也。排程程式即 scheduler 決定了多個程式執行策略,排程程式的最大原則在於能夠最大限度的利用計算資...