实验四、LRU算法模拟
实验原理:
其基本原理为:如果某一个页面被访问了,它很可能还要被访问;相反,如果它长时间不被访问,再最近未来是不大可能被访问的。
程序源代码:
#define MAXSIZE 20 #include <iostream.h> void main() { int input=0; //用于输入作业号 int worknum=0; //输入的作业个数 int storesize=0; //系统分配的存储区块数 int interrupt=0; //缺页中断次数 int stack[MAXSIZE]; //栈,LRU算法的主要数据结构 int workstep[MAXSIZE]; //记录作业走向 /*初始化*/ for(int i=0;i<MAXSIZE;i++) { stack[i]=0; workstep[i]=0; } cout<<"请输入存储区块数:"; cin>>storesize; cout<<"请输入作业的页面走向(输入0结束):\n"; for(int j=0;j<MAXSIZE;j++) { cout<<"页面号 "<<j+1; cin>>input; workstep[j]=input; if(input==0) { cout<<"输入结束!\n"; break; } worknum++; } if(workstep[0]==0) { cout<<"未输入任何作业,系统将退出!\n"; return; } cout<<"置换情况如下:\n"; for(int k=0;k<worknum;k++) { /*在栈中找相等的页号或空位置*/ for(int l=0;l<storesize;l++) { /*是否有相等的页号*/ if(stack[l]==workstep[k]) { cout<<"内存中有"<<workstep[k]<<"号页面,无须中断!\n"; goto step1; } /*找栈中是否有空位置*/ if(stack[l]==0) { stack[l]=workstep[k]; cout<<"发生中断,但内存中有空闲区,"<<workstep[k]<<"号页面直接调入!\n"; interrupt++; goto step1; } } /*上述情况都不成立则调出栈顶,将调入页面插入栈顶*/ cout<<"发生中断,将"<<stack[0]<<"号页面调出,"<<workstep[k]<<"号装入!\n"; interrupt++; /*新掉入的页面放栈顶*/ step1: for(int m=0;m<storesize;m++) { stack[m]=stack[m+1]; } stack[storesize-1]=workstep[k]; } cout<<"作业"<<worknum<<"个,"<<"中断"<<interrupt<<"次,"<<"缺页率:"<<float(interrupt)/float(worknum)*100<<"%\n"; }
程序调试:
调试一:
请输入存储区块数:3
请输入作业走向(输入0结束):
页面号1:4
页面号2:3
页面号3:2
页面号4:1
页面号5:4
页面号6:3
页面号7:5
页面号8:4
页面号9:3
页面号10:2
页面号11:1
页面号12:5
页面号13:0
输入结束!
置换情况如下:
发生中断,但内存中有空闲区,4号页面直接调入!
发生中断,但内存中有空闲区,3号页面直接调入!
发生中断,但内存中有空闲区,2号页面直接调入!
发生中断,将4号页面调出,1号装入!
发生中断,将3号页面调出,4号装入!
发生中断,将2号页面调出,3号装入!
发生中断,将1号页面调出,5号装入!
内存中有4号页面,无须中断!
内存中有3号页面,无须中断!
发生中断,将5号页面调出,2号装入!
发生中断,将4号页面调出,1号装入!
发生中断,将3号页面调出,5号装入!
作业12个,中断10次,缺页率:83.3333%
Press any key to continue
调试二:
请输入存储区块数:4
请输入作业走向(输入0结束):
页面号1:4
页面号2:3
页面号3:2
页面号4:1
页面号5:4
页面号6:3
页面号7:5
页面号8:4
页面号9:3
页面号10:2
页面号11:1
页面号12:5
页面号13:0
输入结束!
置换情况如下:
发生中断,但内存中有空闲区,4号页面直接调入!
发生中断,但内存中有空闲区,3号页面直接调入!
发生中断,但内存中有空闲区,2号页面直接调入!
发生中断,但内存中有空闲区,1号页面直接调入!
内存中有4号页面,无须中断!
内存中有3号页面,无须中断!
发生中断,将2号页面调出,5号装入!
内存中有4号页面,无须中断!
内存中有3号页面,无须中断!
发生中断,将3号页面调出,2号装入!
发生中断,将5号页面调出,1号装入!
发生中断,将4号页面调出,5号装入!
作业12个,中断8次,缺页率:66.6667%