c++操作系统虚拟操作系统实验FIFO,LRU以及OPT算法实现
#include#include #include const int MAXSIZE=1000;//定义页访问流的最大长度 const int MAXQUEUE=3;//定义可用页面数 typedef struct node { int loaded; int hit; }page; page pages[MAXQUEUE],pl[MAXQUEUE]; //定义页面表 int queue[MAXSIZE]; int quantity; //初始化结构函数 void initial() { int i; for(i=0;i pages[i].loaded=-1; pages[i].hit=0; pl[i].loaded=-1; pl[i].hit=0;} for(i=0;i queue[i]=-1; } quantity=0; } //初始化页面函数 void init() { int i; for(i=0;i pages[i].loaded=-1; pages[i].hit=0; pl[i].loaded=-1; pl[i].hit=0; } } //读入页访问流 void readData() { FILE *fp; char fname[20]; int i; cout<<"请输入页面流文件名:"; cin>>fname; if((fp=fopen(fname,"r"))==NULL) { cout<<"错误,文件打不开,请检查文件名"; } else { while(!feof(fp)) { fscanf(fp,"%d ",&queue[quantity]); quantity++; } } cout<<"读入的页访问流:"; for(i=0;i cout< int i,j,p,flag; int absence=0; p=0; cout< flag=0; for(j=0;j if(pages[j].loaded==queue[i]) { flag=1; } } if(flag==0) { if(absence>=MAXQUEUE) { cout< int absence=0; int i,j; int flag; cout< flag=-1; for(j=0;j if(queue[i]==pages[j].loaded) { flag=j; } } if(flag==-1) { //缺页处理 if(absence>=MAXQUEUE) {cout< pages[j]=pages[j+1]; } pages[MAXQUEUE-1].loaded=queue[i]; absence++; } else { //页面已载入 page temp=pages[flag]; for(j=flag;j pages[j]=pages[j+1]; } pages[MAXQUEUE-1]=temp; } } cout< int absence=0; int i,j,max,k,m,n=MAXQUEUE; int flag; cout< flag=-1; for(j=0; j if(pages[j].loaded==queue[i]) { flag=j; } } //缺页 if(flag==-1) { max=0; m=0; if(absence>=MAXQUEUE) { for(j=0; j pl[j].hit=0; pl[j].loaded=pages[j].loaded; for(k=i+1; k<=quantity; k++) { if(pl[j].loaded==queue[k]) { break; } else{ pl[j].hit++; } } if(max max=pl[j].hit; m=j; } } // cout<<"页面一:"< pages[n-MAXQUEUE].loaded=queue[i]; n++; } // cout<<"缺页A:"< // cout<<"未缺页A:"< cout<<" "< version(); initial(); readData(); FIFO(); init(); LRU(); init(); OPT(); }



