📄 opt.java
字号:
package myprojects.os;
//OPT最优置换算法实现及其命中率计算
class OPT{
public OPT(){} //缺省构造方法
public float getOpt(int p){ //有参getOpt(int p)方法由测试类传入内存页面数,并用此
int[] Opage = new int[p]; //参数计算其对应的OPT的命中率及返回该命中率;
int[] dis = new int[p]; //dis[]数组,用于记录对应当前内存页面到下一次再次读入此页面的时间间隔
int[] page= new int[400];
GetRandom random = new GetRandom();
page=random.getPage(); //定义一数组,用以接收页面数组的内容
int s,a,k,n=0;
int i,j;
float sum=0,Opercent; //设置两个float型变量,其中Opercent用于存放命中率,sum则用于记录命中次数
for(i=0;i<400;i++){
if(n==0){ //内存为空
Opage[0]=page[i];// 把当前页面值存入内存
n++; //记录当前内存空间
}
else{
if(n<p-1){ //内存不为空且内存未满
s=0;
for(j=0;j<n;j++) //与内存存放的内容比较,相等则读入下一条
if(Opage[j]==page[i]){ //指令
sum++; //命中次数加1
s=1; //标记比较结果,有相等则s=1
break;
}
if(s==0){//当前指令所对应的页面值与内存所有内容比较不相等
Opage[n]=page[i];//则将当前页面值添加入内存
n++; //记录当前内存空间
}
}
else{ //内存已满
s=0;
for(j=0;j<p;j++){ //与内存存放的内容比较,相等则读入下一条
if(Opage[j]==page[i]){ //指令
sum++; //命中次数加1
s=1; //标记比较结果,有相等则s=1
break;
}
}
if(s==0){ //当前指令所对应的页面值与内存所有内容比较不相等
for(j=0;j<p;j++)
for(k=i+1;k<400;k++){ //让内存内所有页面从当前读入指令的下一条指令对应
if(Opage[j]==page[k]){//的页面值起与之随后的指令逐一相比较,直到相
dis[j]=k-i; //等时记录下两者间的间距
break;
}
else
dis[j]=500; // 比较不相等则间距记为最大值500
}
a=0;
for(j=0;j<p-1;j++) //比较当前内存所有与之页面对应的间距,
if(dis[j]>dis[j+1]) //找出间距最大者,
dis[j+1]=dis[j];
else
a=j+1;
Opage[a]=page[i]; //用当前读入指令的页面值替换最大者
}
}
}
}
Opercent=sum/400; //计算命中率
return Opercent; //返回该值
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -