⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opt.java

📁 模拟实现以下页面置换算法
💻 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 + -