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

		cout<<endl;
	}
	cout<<"缺页次数为:"<<noPage<<endl;
	cout<<" 缺页率为:"<<(float)noPage/pageCount<<endl;
}

}
int FoundMaxNum(int a[],int n){
int k,j;
k=a[0];
j=0;
for(int i=0; i<n;i++){
if(a[i]>=k){
k=a[i];
j=i;
}
}
return j;
}
void LRU(int pc[],int bc[], int pageCount, int blockCount) {
cout<<“1:LRU 置换算法”<<endl;
if(pageCount<=blockCount){
cout<<“缺页次数为:”<<0<<endl;
cout<<“缺页率为:”<<0<<endl;
}
else{
int noPage=0;
int i, j, m;
int*bc1=new int[blockCount];
for(i=0;i<blockCount;i++){
bc1[i]=0;
}
for(i=0; i<pageCount;i++){
cout<<“引用页:”<<pc[i]<<endl;
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;

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


ageCount,blockCount);
delete bc;

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料

[外链图片转存中…(img-66uLuxkq-1714541809688)]
[外链图片转存中…(img-oCLsVnyy-1714541809688)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值