操作系统之存储管理——FIFO算法和LRU算法
操作系統(tǒng)之進(jìn)程調(diào)度——優(yōu)先權(quán)法和輪轉(zhuǎn)法(附上樣例講解)
操作系統(tǒng)之銀行家算法—詳解流程及案例數(shù)據(jù)
操作系統(tǒng)之多線程編程—讀者優(yōu)先/寫(xiě)者優(yōu)先詳解
操作系統(tǒng)之存儲(chǔ)管理——FIFO算法和LRU算法
操作系統(tǒng)之磁盤(pán)調(diào)度——SCAN實(shí)例講解
要求
一、實(shí)驗(yàn)?zāi)康?br /> 存儲(chǔ)管理的主要功能之一是合理地分配空間。請(qǐng)求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。
本實(shí)驗(yàn)的目的是通過(guò)請(qǐng)求頁(yè)式管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法。
二、實(shí)驗(yàn)內(nèi)容
(1)通過(guò)計(jì)算不同算法的命中率比較算法的優(yōu)劣。同時(shí)也考慮了用戶內(nèi)存容量對(duì)命中率的影響。
頁(yè)面失效次數(shù)為每次訪問(wèn)相應(yīng)指令時(shí),該指令所對(duì)應(yīng)的頁(yè)不在內(nèi)存中的次數(shù)。
在本實(shí)驗(yàn)中,假定頁(yè)面大小為1k,用戶虛存容量為32k,用戶內(nèi)存容量為4頁(yè)到32頁(yè)。
(2)produce_addstream通過(guò)隨機(jī)數(shù)產(chǎn)生一個(gè)指令序列,共320條指令。
A、指令的地址按下述原則生成:
1)50%的指令是順序執(zhí)行的
2)25%的指令是均勻分布在前地址部分
3)25%的指令是均勻分布在后地址部分
B、具體的實(shí)施方法是:
1)在[0,319]的指令地址之間隨機(jī)選取一起點(diǎn)m;
2)順序執(zhí)行一條指令,即執(zhí)行地址為m 1的指令;
3)在前地址[0,m 1]中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為m’;
4)順序執(zhí)行一條指令,地址為m’ 1的指令
5)在后地址[m’ 2,319]中隨機(jī)選取一條指令并執(zhí)行;
6)重復(fù)上述步驟1)~5),直到執(zhí)行320次指令
C、將指令序列變換稱(chēng)為頁(yè)地址流
在用戶虛存中,按每k存放10條指令排列虛存地址,即320條指令在虛存中的存放方式為:
第0條~第9條指令為第0頁(yè)(對(duì)應(yīng)虛存地址為[0,9]);
第10條~第19條指令為第1頁(yè)(對(duì)應(yīng)虛存地址為[10,19]);
。。。。。。
第310條~第319條指令為第31頁(yè)(對(duì)應(yīng)虛存地址為[310,319]);
按以上方式,用戶指令可組成32頁(yè)。
(3)計(jì)算并輸出下屬算法在不同內(nèi)存容量下的命中率。
1)先進(jìn)先出的算法(FIFO);
2)最近最少使用算法(LRU);
3)最佳淘汰算法(OPT);
4)最少訪問(wèn)頁(yè)面算法(LFR);
其中3)和4)為選擇內(nèi)容
三、系統(tǒng)框圖
一、運(yùn)行結(jié)果
a、運(yùn)行程序:終端先顯示:
Start memory management.
Producing address flow, wait for while, please.
b、地址流、地址頁(yè)號(hào)流生成后,終端顯示:
There are algorithms in the program
1、Optimization algorithm
2、Least recently used algorithm
3、First in first out algorithm
4、Least frequently used algorithm
Select an algorithm number, please.
用戶輸入適當(dāng)淘汰算法的號(hào)碼,并按回車(chē),若是第一次選擇,輸出相應(yīng)的地址頁(yè)號(hào)流。然后輸出該算法分別計(jì)算的用戶內(nèi)存從2k ~ 32k時(shí)的命中率,若輸入的號(hào)碼不再1~4中,則顯示:
there is not the algorithm in the program,并重復(fù)b。
c、輸出結(jié)果后,終端顯示 “do you try again with anther algorithm(y/n)”。若鍵入y則重復(fù)b,否則結(jié)束。(一般講四種算法都用過(guò)后結(jié)束,以便比較)。
二、運(yùn)行結(jié)果討論
1、比較各種算法的命中率
2、分析當(dāng)用戶內(nèi)存容量增加是對(duì)命中率的影響
分析
上面就是實(shí)驗(yàn)要求,因?yàn)闀r(shí)間關(guān)系,只寫(xiě)了fifo和lru兩種,但是這兩個(gè)會(huì)了,剩下的了解算法原理就很容易實(shí)現(xiàn)。
對(duì)于兩種算法的理解和實(shí)現(xiàn)為:
先進(jìn)先出算法算法(Fifo):
這個(gè)算法原理沒(méi)有算法,就是先進(jìn)先出。對(duì)于這個(gè)結(jié)構(gòu)最好采用的就算隊(duì)列了,對(duì)于java而言,我用的是list集合,每次添加數(shù)據(jù)的時(shí)候添加到第0位置,而如果移除的時(shí)候移除末尾的頁(yè)數(shù)。在這個(gè)過(guò)程中,每執(zhí)行一條指令的時(shí)候,如果這個(gè)指令對(duì)應(yīng)的地址(指令/10)在list中,那么就命中,否則就是缺頁(yè),需要移除尾,在0位置添加元素。
舉個(gè)例子,頁(yè)面內(nèi)存為3,(只能存三頁(yè)),要執(zhí)行指令地址頁(yè)面對(duì)應(yīng)為:4 2 3 4 1 2 1 5 6 3
那么流程順序?yàn)?#xff1a;(4)缺頁(yè)—>(2,4)缺頁(yè)—>(3,2,4)缺頁(yè)—>4命中—>(1,3,2)缺頁(yè)4被置換—>2命中—>1命中—>(5,1,3)缺頁(yè)2被替換—>(6,5,1)缺頁(yè)2被替換—>(3,6,5)缺頁(yè)1被替換。
最近最少使用算法(LRU):
這個(gè)算法跟fifo其實(shí)還是挺像的,但是有一點(diǎn)區(qū)別,最近最少使用。也就是說(shuō)在一個(gè)正常序列的時(shí)候如果命中的化,就會(huì)把這個(gè)地址的頁(yè)號(hào)移動(dòng)到首位(或者鏈表首位)。而如果缺頁(yè)的時(shí)候,要把這個(gè)鏈表的末尾位置移除,因?yàn)槟┪驳脑厥亲罱玫淖钌俚?#xff08;很久前才有的)。對(duì)于數(shù)據(jù)結(jié)構(gòu),我依然選擇Arraylist。每次遇到指令地址的時(shí)候我只需要特殊判斷下就可以了。我只為了實(shí)驗(yàn)的目的,沒(méi)有考慮性能,因?yàn)闄z查是否存在地址的時(shí)候我用了list.contains()方法,這是線性查詢復(fù)雜度O(n),如果數(shù)據(jù)量大可以list map組合使用,將查詢降低到O(logn).還可以開(kāi)一個(gè)boolean數(shù)組標(biāo)記讓查詢復(fù)雜度降低到O(1),(但是這樣的化增大空間),還好數(shù)據(jù)量不大,影響不大。
如果頁(yè)面內(nèi)存為3,(只能存三頁(yè)),要執(zhí)行指令地址頁(yè)面對(duì)應(yīng)為:4 2 3 4 1 2 1 5 6 3
那么流程順序?yàn)?#xff08;4)—>(2,4)—>(3,2,4)—>(4,3,2)命中—>(1,4,3)缺頁(yè)2被替換—>(2,1,4)缺頁(yè)—>(1,2,4)命中—>(5,1,2)缺頁(yè)—>(6,5,1)缺頁(yè)—>(3,6,5)缺頁(yè)
代碼
大致流程就是這樣,有一點(diǎn)區(qū)別。
下面附上我的ac代碼。有的解釋會(huì)在注釋中:
執(zhí)行結(jié)果
fifo
lur
可以看得出成功了。并且最后都是0.9因?yàn)楣潭ㄈ表?yè)數(shù)(首次命中)達(dá)到0.1.
如果對(duì)后端、爬蟲(chóng)、數(shù)據(jù)結(jié)構(gòu)算法等感性趣歡迎關(guān)注我的個(gè)人公眾號(hào)交流:bigsai
總結(jié)
以上是生活随笔為你收集整理的操作系统之存储管理——FIFO算法和LRU算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 操作系统之多线程编程—读者优先/写者优先
- 下一篇: 操作系统之磁盘调度——SCAN实例讲解