预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<iostream> #include<fstream> usingnamespacestd; #defineBlockSize10 #definePageSize100 intpage[PageSize];//页面数组存放页面 intblock[BlockSize];//物理块数组 intresult[PageSize][BlockSize];//存放页面和物理块二维数组 intpSize=0;//用户使用页面数 intbSize=0;//用户使用物理块数 intblockFlag[BlockSize];//用于LRU与最佳置换算法中,辅助判断该换出的页面 intnoPageCount=0;//缺页次数 //输入数据 voidinputData() { cout<<endl<<"请输入物理块数(1<=bSize<="<<BlockSize<<')'<<endl; cin>>bSize; cout<<"请输入页面数(1<=pSize<="<<PageSize<<')'<<endl; cin>>pSize; while(bSize<=0||bSize>BlockSize||pSize<=0||pSize>PageSize){//判断用户输入是否在范围内 cout<<"输入范围错误,请重新输入:"<<endl; cout<<"请输入物理块数(1<=F<="<<BlockSize<<')'; cin>>bSize; cout<<endl<<"请输入页面数(1<=p<="<<PageSize<<')'; cin>>pSize; } cout<<"请输入页面走向"<<endl; for(inti=0;i<pSize;i++) cin>>page[i]; } //初始化page数组 voidinitPage() { for(inti=0;i<PageSize;i++) page[i]=-1; } //初始化block与result数组 voidinitBlockResult() { inti=0; for(i=0;i<BlockSize;i++) block[i]=-1; for(i=0;i<PageSize;i++) for(intj=0;j<BlockSize;j++) result[i][j]=-1; } //查找物理块中是否存在要调用的页面 intExist(inti) { for(intj=0;j<bSize;j++) if(block[j]==i) returnj; return-1; } //显示结果 voiddisplay(intnoPageCount) { for(inti=0;i<pSize;i++) { cout<<""<<page[i]<<""; for(intj=0;j<bSize;j++) { if(result[i][j]==-1)break; elsecout<<'['<<result[i][j]<<']'<<''; } cout<<endl; } cout<<"____________________________________"<<endl; cout<<endl<<"缺页次数:"<<noPageCount<<endl; cout<<"缺页率:"<<((double)noPageCount/pSize)*100<<'%'<<endl; cout<<"===================================="<<endl; } //最佳置换算法OPT voidOPT() { inti=0,j=0; intposition=0,noPageCount=0; intpageFlag=0,resultFlag=0;//页面标记(下标)指向下一个页面,结果标记表示结果的行,即result数组的行标 for(i=0;i<BlockSize;i++) blockFlag[i]=0; while(pageFlag<pSize) { if(Exist(page[pageFlag])!=-1)//判断页面是否已经存在 resultFlag++; else { if(position<bSize)//判断有无空闲物理块 {//若有则将页面放入空闲块 block[position]=page[pageFlag]; position++; noPageCount++; for(i=0;i<position;i++) result[resultFlag][i]=block[i]; resultFlag++; } else{ fo