FIFO調度算法和LRU算法


微信公眾號關注我,更多計算機知識告訴你!

一.理論

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

 

 

 

https://www.cnblogs.com/fkissx/p/4712959.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM