</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);
}
}
}
}
操作系统页面置换fifo lru方式
最新推荐文章于 2022-12-03 23:54:19 发布