操作系统页面置换fifo lru方式

</pre><pre name="code" class="java">import javax.swing.JOptionPane;
public class yemian {
	 private static final int job_size=240800;
	 private static int psy_size[];
	 private static int psy_rep;
	 private static int kuai_ge=0;
	 private static int psy_wei[];
	 public yemian(){
		 psy_size=new int[3];
		 psy_wei=new int[3];
		 psy_rep=0;
		 for(int i=0;i<3;i++)
			 psy_size[i]=-1;
		 for(int i=0;i<3;i++)
			 psy_wei[i]=0;
	 }
	 public void menuA(){
		 System.out.println("物理块的使用情况");
		 System.out.println("物理块号 , 页面号");
		 for(int i=0;i<psy_size.length;i++){
			 System.out.println("  "+i+"       "+psy_size[i]);
		 } 
	 }
	 public void menuB(){
		 System.out.println("物理块的使用情况");
		 System.out.println("物理块号 , 页面号, 最近访问次数");
		 for(int i=0;i<psy_size.length;i++){
			 System.out.println("  "+i+"      "+psy_size[i]+"     "+psy_wei[i]);
		 } 
	 }
	 public void fifo(){
		 while(true){
			 int i;
			 int kuai_pos = 0;
			 String log=JOptionPane.showInputDialog("请输入逻辑地址(-1 exit)");
			 int log_add=Integer.parseInt(log);
			 if(log_add >= job_size){
				 System.out.println("逻辑地址访问越界!");
			 }
			 else if(log_add == -1){
				break; 
			 }
			 else{
				 int page_pos=log_add/1024;          //页面位置
				 int page_psy=log_add%1024;
		         for(i=0;i<psy_size.length;i++){
		        	 if(psy_size[i]==page_pos){
		        		 kuai_pos=i;                 //查找物理块中是否存在该页面
		        		 break;
		        	 }
		         }
		         if(i==3){
		        	 System.out.println("page "+page_pos+" 不存在物理块中 已经调入 ");
		        	 psy_size[kuai_ge]=page_pos;
		        	 kuai_pos=kuai_ge;               //kuai_pos位置
		        	 kuai_ge++;
		        	 kuai_ge%=3;  	                 //fifo记录位置
		         }
		         else{
		        	 System.out.println("page "+page_pos+" 存在物理块中");
		         }  
			 }
			 menuA();
			 System.out.println("块号  "+kuai_pos+" 物理地址"+(kuai_pos*1024+log_add%1024));
			 
		 }
	 }
	 public void lru(){
		 while(true){
			 int i;
			 int kuai_pos=0;
			 int pos=0;
			 int kuai_ge=Integer.MAX_VALUE;
			 String log=JOptionPane.showInputDialog("请输入逻辑地址(-1 exit)");
			 int log_add=Integer.parseInt(log);
			 if(log_add >= job_size){
				 System.out.println("逻辑地址访问越界!");
			 }
			 else if(log_add == -1){
				break; 
			 }
			 else{
				 int page_pos=log_add/1024;          //页面位置
				 int page_psy=log_add%1024;
				 for(i=0;i<psy_size.length;i++){
		        	 if(psy_size[i]==page_pos){
		        		 kuai_pos=i;                 //查找物理块中是否存在该页面
		        		 break;
		        	 }
		         }
				 if(i==3){
		        	 System.out.println("page "+page_pos+" 不存在物理块中 已经调入 ");		        	 
		        	 for(int j=0;j<psy_wei.length;j++){
		        		 if(kuai_ge > psy_wei[j] ){         //找到最小值
		        			 pos=j;
		        			 kuai_ge=psy_wei[j];
		        		 }
		        	 }
		        	 psy_size[pos]=page_pos;
		        	 psy_wei[pos]=1;
		        	 kuai_pos=pos;
				 }
		         else{
			        	System.out.println("page "+page_pos+" 存在物理块中");
			        	psy_wei[i]++;
			        	kuai_pos=i;
			      }	 
		        }
			 menuB();
			 System.out.println("块号  "+pos+" 物理地址"+(kuai_pos*1024+log_add%1024));  
			 } 
		 } 

	 
	 public static void main(String[] args) {
		yemian tmp=new yemian();
		System.out.println("物理块大小1kb 作业大小20kb");
		System.out.println("物理块共有三块");
		while(true){
			String str2=JOptionPane.showInputDialog("1FIFO算法\n2LRU算法\3退出\n");
			int s=Integer.parseInt(str2);
			if(s==1){
				tmp.fifo();		
			}
			else if(s==2){
				tmp.lru();
			}
			else{
				System.exit(0);
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值