一.實驗目的通過模擬實現請求頁式儲存管理的幾種基本頁面置換演算法,了解虛擬儲存技術的特點,掌握虛擬儲存請求頁式儲存管理中幾種基本頁面置換演算法的基本思想和實現過程,並比較它們的效率。
二.實驗內容
設計乙個虛擬儲存區和記憶體工作區,並使用下述演算法計算訪問命中率。
1.最佳淘汰演算法(opt)
2.先進先出的演算法(fifo)
3.最近最久未使用演算法(lru)
code
#include
<
stdio.h
>
#include
<
stdlib.h
>
#include
<
string
.h>
intmemory[4];
//記憶體,存放頁面位置
intseq[
205];
//指令的執行順序
intseq_page[
205];
//用於opt演算法,存放各條指令所在的頁面位置
intp[4];
//用於fifo演算法,儲存裝入主存中的頁面的頁號
intk=0
;//用於fifo演算法,指示當前調入新頁時應淘汰頁在頁號表中的位置
intq[4];
//用於lru演算法,頁面淘汰佇列
inttail;
//用於lru演算法,指示隊尾
ints, f;
void
opt(
intn)
//最佳頁面替換演算法;i
=n+1
;count=0
;//查詢最長時間需要訪問的頁面,longest中儲存最遠頁面在seq_page中的位置
while
(i<
200&&
count
<4)
else
if(seq_page[i]
==memory[1]
&&t[1]
==0)else
if(seq_page[i]
==memory[2]
&&t[2]
==0)else
if(seq_page[i]
==memory[3]
&&t[3]
==0)i
++;}//
頁面置換
if(i
<
200)}}
else
else}}
}return;}
void
fifo(
intn)
//先進先出頁面替換演算法
void
lru(
intn)
//最近最少使用頁面替換演算法q[3
]=t;}
intmain()
//產生指令執行序列i=
0;n1=
rand()
%160
;for(j=
1;j<=2;j
++)}while
(i<
200)}n3
=rand()%(
158-
n2)+
n2;for(j=
1;j<=2;j
++)}}
//opt
for(i=0
;i<
200;i++)
//按順序執行每條指令
for(i=0
;i<
200;i++)
q[tail]=j;
printf(
"no %3d: %3d suc memory: %2d %2d %2d %2d queue: %d %d %d %d\n
", i, seq_page[i], memory[
0], memory[
1], memory[
2], memory[
3], memory[q[
0]], memory[q[
1]], memory[q[
2]], memory[q[
3]]);
break;}
else
if(memory[j]
==-1)}
if(foundpage==0
)}f=
(double)f/
(s+f);printf(
"success %3d, fault %3d, total %3d, page fault rate %.2lf.\n
", s, f, s
+f, f);
return0;
}end
作業系統 頁面置換演算法
1 最佳頁面置換演算法 opt 其所選擇的被淘汰頁面,將是以後永不再用的,或許是在最長 未來 時間內不再被訪問的頁面。最佳置換演算法是一種理想化的演算法,具有最好的效能,但難於實現。先進先出置換演算法最直觀,但可能性能最差,故應用極少。優點 保證獲得最低的缺頁率 缺點 無法預知乙個程序在記憶體的若干...
作業系統 頁面置換演算法
我在很多地方遇到了這個問題,所以想寫來看看,避免在以後換回再次的遇到這個問題,就在今天進行深入的了解下這個問題,我先它會對我以後的生活工作會有很大的幫助的。在位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體中選擇乙個頁面將其移出記憶體,以...
作業系統 頁面置換演算法
作業系統將記憶體按照頁的進行管理,在需要的時候才把程序相應的部分調入記憶體。當產生缺頁中斷時,需要選擇乙個頁面寫入。如果要換出的頁面在記憶體中被修改過,變成了 髒 頁面,那就需要先寫會到磁碟。頁面置換演算法,就是要選出最合適的乙個頁面,使得置換的效率最高。頁面置換演算法有很多,簡單介紹幾個。首先介紹...