📄 fifo.java
字号:
package myprojects.os;
import java.io.*;
//FIFO页面置换算法实现及其命中率计算
class FIFO{
public FIFO(){} //缺省构造方法
int[] page = new int[400]; //定义数组,用以接收页面数组的内容
public float Fshootpercent(int p)throws IOException{ //有参Fshootpercent(int p)
GetRandom random =new GetRandom(); //方法,由测试类传入内存页面数,并用此
page=random.getPage(); //参数计算其对应的FIFO的命中率及返回该命中率;
float percent,sum=0; //设置两个float型变量,其中percent用于存放命中率,sum则用于记录命中次数
int[] Fpage= new int[p]; //Fpage[]数组,作内存使用,用于存放当前输入的指令
int n=0,s=0; //对应的页地址,数组长度由传入参数决定
int i,j,t;
for(i=0;i<400;i++){
if(n==0){ //内存为空
Fpage[0]=page[i];// 把当前页面值存入内存
n++; //记录当前内存空间
}
else
if(n<p-1){//内存不为空且内存未满
s=0;
for(j=0;j<=n-1;j++) //与内存存放的内容比较,相等则读入下一条
if(Fpage[j]==page[i]){ //指令
sum++; //命中次数加1
s=1; //标记比较结果,有相等则s=1
break;
}
if(s==0){ //当前指令所对应的页面值与内存所有内容比较不相等
Fpage[n]=page[i]; //则将当前页面值添加入内存
n++; //记录当前内存空间
}
}
else{ //内存已满
s=0;
for(j=0;j<p;j++) //与内存存放的内容比较,相等则读入下一条
if(Fpage[j]==page[i]){
sum++; //指令命中次数加1
s=1;
break;
}
if(s==0){//当前指令所对应的页面值与内存所有内容比较不相等
for(j=0;j<p-1;j++)
Fpage[j]=Fpage[j+1]; //将最先进入内存的页面替换出去
Fpage[j]=page[i]; //并将当前页面值添加入内存(数组末端)
}
}
}
percent=sum/400; //计算命中率
return percent; //返回该值
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -