一分钟学会页面置换算法【OPT、FIFO、LRU、NUR】_opt算法

		if(Travel(bc,blockCount,pc[i])==-1){//页面不在内存
			if(i<blockCount) {//欲调页
				bc[i]=pc[i];
				for(int p=0; p<=i; p++){
						bc1[p]++;
				}
			}
			else{
				for(j=0;j<blockCount;j++){  
					bc1[j]++;
				}
				int k=FoundMaxNum(bc1,blockCount);		
				bc[k]=pc[i];
				bc1[k]=1;
			}
			noPage++;
			cout<<"物理块情况:"; 
			Print(bc,blockCount);
		}
		else {                                 //页面在内存
			if(i<blockCount){
				for(j=0; j<=i; j++){
				bc1[j]++;
			}
			for(m=0; m<i;m++){
				if(bc[m]==pc[i]){
					break;
				}
			}
			bc1[m]=1;
			bc[m]=pc[i];
		}
		else{
			for(j=0;j<blockCount;j++){
				bc1[j]++;
			}
			for(m=0;m<blockCount;m++){
				if(bc[m]==pc[i]){
					break;
				}
			}
			bc1[m]=1;
			bc[m]=pc[i];
			}
		}
		cout<<endl;
 }
cout<<"缺页次数为:"<<noPage<<endl;
cout<<"缺页率为:"<<(float)noPage/pageCount<<endl; 
delete bc1;
}

}
void Optiomal(int pc[],int bc[],int pageCount,int blockCount){
cout<<“2:最佳置换算法”<<endl;
if(pageCount<=blockCount){
cout<<“缺页次数为:”<<0<<endl;
cout<<“缺页率为:”<<0<<endl;
}
else{
int noPage=0;
int i,j, k;
for(i=0; i<pageCount;i++){
cout<<“引用页:”<<pc[i]<<endl;
if(Travel(bc,blockCount,pc[i]) -1){
if(i<blockCount){
bc[i]=pc[i];
}
else{
int max=0;
int blockIndex;;
for(j=0;j<blockCount; j++){
for(k=i;k<pageCount; k++){
if(bc[i]=pc[k]){
break;
}
}
if(k>=max){
max=k;
blockIndex=j;
}
}
bc[blockIndex]=pc[i];
}
noPage++;
cout<<“物理块情况:”;
Print(bc, blockCount);
}
cout<<endl;
}
cout<<“缺页次数为:”<<noPage<<endl;
cout<<“缺页率为:”<<(float)noPage/pageCount<<endl;
}
}
void NRU(int pc[], int bc[], int pageCount,int blockCount){
cout<<“3: Clock置换算法”<<endl ;
if(pageCount<=blockCount){
cout<<“缺页次数为”<<0<<endl;
cout<<“缺页率为”<<0<<endl;
}
else{
int noPage=0;
int i,j;
int *bc1=new int[blockCount];
for(i=0;i<blockCount;i++){
bc1[i]=0;
}
int replace=0;
for(i=0;i<pageCount;i++){
cout<<“引用页:”<<pc[i]<<endl;
int index=Travel(bc, blockCount, pc[i]);
if(index -1) {
for(j=0;j<blockCount;j++){
if(bc1[replace]1){
bc1[replace]=0;
replace =(replace+1)%blockCount;
}
else{
break;
}
}
bc[replace]=pc[i];
bc1[replace]=1;
replace=(replace+1)% blockCount;
noPage++;
cout<<“物理块情况:”;
Print(bc,blockCount);
cout<<“标志位情况:”;
Print(bc1,blockCount);
}
else{
bc1[index]=1;
replace=(index+1)% blockCount;
cout<<“物理块情况:”;
Print(bc,blockCount);
cout<<“标志位情况:”;
Print(bc1,blockCount);
}
cout<<endl;
}
cout<<“缺页次数为:”<<noPage<<endl;
cout<<“缺页率为:”<<(float)noPage/pageCount<<endl;
delete bc1;
}
}
int main(){
int pageCount,blockCount,i;
cout<<“输入页面数”<<endl;
cin>>pageCount;
int *pc=new int[pageCount];
cout<<“输入页面走向”<<endl;
for(i=0;i<pageCount;i++){
cin>>pc[i];
}
cout<<“输入物理块数”<<endl;
cin>>blockCount;
cout<<“0:FIFO置换算法”<<endl;
cout<<“1:LRU置换算法”<<endl;
cout<<“2:最佳置换算法”<<endl;
cout<<“3: Clock置换算法”<<endl;
cout<<“按数字选择类别:”<<endl;
int n;
while(cin>>n){
if(n
0){
int *bc=new int[blockCount];
FIFO(pc,bc,pageCount,blockCount);
delete bc;
}
else if(n
1){
int *bc=new int[blockCount];
LRU(pc,bc,pageCount,blockCount);
delete bc;
}
else if(n
2){
int *bc=new int[blockCount];
Optiomal(pc,bc,pageCount,blockCount);
delete bc;
}
else if(n==3){
int *bc=new int[blockCount];
for(i=0; i<blockCount;i++){
bc[i]=-1;
}
NRU(pc,bc,pageCount,blockCount);
delete bc;
}
else break;
}
delete pc;
return 0;
}



> 
> 其实做人最重要的是自信,到哪儿都一样。————《叶问4》
> 
> 
> 


# 完结

Redis**基于内存**,常用作于**缓存**的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

![](https://img-blog.csdnimg.cn/img_convert/ac63e2dfe193a4eb2a92c77aafdb174c.webp?x-oss-process=image/format,png)

作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

[外链图片转存中...(img-Q9iMR5g1-1714541839513)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值