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

来源:互联网 发布:网站运营数据分析 编辑:程序博客网 时间:2024/06/07 02:03
</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);}}}}

0 0
原创粉丝点击