计算机操作系统实验4页面置换算法_实验4页面置换算法
计算机操作系统实验4页面置换算法由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验4页面置换算法”。
实验4 页面置换算法(2学时)
一、实验目的通过实验加强对虚拟存储管理中页面置换算法的理解和掌握。
二、实验内容
编写程序实现虚拟存储管理中OPT,FIFO,LRU页面置换算法。
三、实验要求
1、任意给出一组页面访问顺序(如页面走向是1、2、5、7、5、7、1、4、3、5、6、4、3、2、1、5、2)。
2、分配给该作业一定的物理块(如3块、4块等)。
3、利用OPT,FIFO,LRU页面置换算法模拟页面置换过程并计算其缺页率。
4、每访问一个页面均需给出内存中的内容(内存中的页面号),若有淘汰还需给出淘汰的页面号。
5、通过给出特殊的页面访问顺序,分配不同的物理块,利用FIFO算法计算其缺页率,进一步理解Belady现象。
6、(附加)实现CLOCK置换算法,修改位可在确定页面号时直接任意给出。
程序代码(java)
package wcm4;
import java.util.LinkedList;import java.util.Scanner;
public cla Test {
/**
* @param args
*/ LinkedList ll=new LinkedList();int a;int leng;int[] all={1,2,5,7,5,7,1,4,3,5,6,4,3,2,1,5,2};//int[] free=new int[all.length];
Object o=new Integer(a);public static void main(String[] args){
public void begin(){ System.out.println(“请选择测试类型:”);System.out.println(“1 OPT;2 FiFO;3 LRU;4 CLOCK;5退出”);
} public void need(){ System.out.println(“请输入分配给该作业的物理块数:”);Scanner sc=new Scanner(System.in);leng=sc.nextInt();Scanner sc=new Scanner(System.in);int choose=sc.nextInt();while(choose!=5){
} switch(choose){ case 1:this.opt();break;case 2:this.fifo();break;case 3:this.lru();break;case 4:this.clock();break;} System.out.println(“请选择测试类型:”);System.out.println(“1 OPT;2 FiFO;3 LRU;4 CLOCK;5退出”);sc=new Scanner(System.in);choose=sc.nextInt();// TODO Auto-generated method stub Test t=new Test();t.begin();
}
}
public void fifo(){ ll=new LinkedList();this.need();
int a=0;for(int i=0;i
o=all[i];if(!ll.contains(o)){
} if(ll.size()
} ll.add(o);o=ll.poll();a++;else{ o=null;} this.print();} System.out.println(“FIFO的缺页率为:”);System.out.println(a);System.out.println(“——”);System.out.println(all.length);
} public void opt(){//最佳置换算法
//leng=0;ll=new LinkedList();this.need();int a=0;//int temp=0;//int[] b=new int[leng];
for(int i=0;i
int[] b=new int[leng];o=all[i];if(!ll.contains(o)){ if(ll.size()
ll.add(o);
}
o=null;} else{ for(int j=i;j
Object o1=new Integer(all[j]);
}
for(int k=0;k
}
if(ll.get(k).equals(o1)){
}
if(b[k]==0){
b[k]=j;//待替换的页在以后第一次出现的位置
} } if(b[leng-1]==0){
o=ll.set(leng-1, o);a++;} else{ int temp=0;
}
for(int m=0;m
if(b[m]==0){ temp=m;break;}
else if(b[m]>b[temp]){ }
temp=m;
}
o=ll.set(temp, o);//替换以后离得最远的 a++;} else{ } o=null;this.print();} System.out.println(“OPT的缺页率为:”);System.out.println(a);System.out.println(“——”);System.out.println(all.length);
public void lru(){//最近最久未使用
}
public void clock(){//简单clock
ll=new LinkedList();this.need();int a=0;int[] b=new int[leng];for(int i=0;i
o=all[i];if(!ll.contains(o)){
if(ll.size()
o=all[i];if(!ll.contains(o)){
if(ll.size()
} ll.add(o);o=ll.poll();a++;} else{ ll.add(o);ll.remove(o);o=null;} this.print();} System.out.println(“OPT的缺页率为:”);System.out.println(a);System.out.println(“——”);System.out.println(all.length);
}
} else{
for(int j=0;j
if(b[j%ll.size()]==0){
}
}
}
else{ int temp1=j%ll.size();
}
o=ll.set(temp1, o);
b[temp1]=0;//改变该位的标记位 break;
b[j%ll.size()]=1;a++;} else{ int temp=ll.indexOf(o);//找到该位
b[temp]=0;o=null;} this.print();System.out.println(“标记位为:”);for(int k=0;k
public void print(){ Object[] op=ll.toArray();for(int i=0;i
");System.out.println(o);//System.out.println();System.out.print(op[i]);} }