- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
先进先出实现分页管理的缺页调度
开始 流程图: N 有进程访问内存块? Y 随机数生成要访问的内存块块号 调用cheat()函数检查页表内是否有空闲块或被访问的内存块块号是否已在页表内 把新进程要访问的内存块块号放入页表的空闲块中 有\在? Y N 调用setfree()函数进行中断处理,完成后运行被中断的进程 把新进程要访问的内存块块号放入页表的空闲块中 Y 有进程访问内存块? N 结束 源程序: #includeiostream #includecstdio #includectime using namespace std; #define K 4 struct PC { int state;//为1表示不为空闲块,为0表示为空闲块 int data;//进程访问的内存块号 }P[K]={{0,0},{0,0},{0,0},{0,0}}; int Q[K] = {0,0,0,0};//记录页表块内进程访问的物理快的时间,值越大,越先访问 int cheat(int num) { int j=0; for(j;jK;j++) { if(P[j].data == num) return 2; else if(P[j].state == 0) return 1; } return 0; } int setfree(int Q[K]) { int j,sum=0,i; for(j=0;jK;j++) { if(sumQ[j]) { sum=Q[j]; } } for(j=0;jK;j++) { if(sum==Q[j]) { i=j; break; } } P[i].state = 0; P[i].data = 0; Q[i] = 0; cout已把最先调入主存块号的页表块i空出!endl; return i; } void main() { int j=0; char ch; cout有进程访问内存块吗?endl; cout请输入Y或N(Y表示有,N表示没有)endl; srand((unsigned)time(NULL)); while((ch = getchar())==Y) { cout新进程访问的内存块号是:endl; int num = rand()%20; coutnumendl; int s = cheat(num);//检查页表块有无空闲快,页表块中有无被新进程访问的主存块 if (s == 2) { for(j=0;jK;j++) { if(P[j].data==num) break; } Q[j]=0; cout被新进程访问的主存块块号已在页表的j块中!endl; cout已把新进程访问的的块号调进页表j块!endl; } else if(s == 1) { cout页表块有空闲快,可以调入新进程访问的块号!endl; for(j=0;jK;j++) { if(P[j].state==0) break; } P[j].data=num; P[j].state=1; cout已把新进程访问的的块号调进页表j块!endl; } else { cout页表块无空闲快,进行中断处理!endl; j = setfree(Q);//淘汰页表最先进入的进程块号 cout中断处理完成,以恢复中断现场,执行被中断的进程!endl; //for(j=0;jK;j++) //{ ///if(P[j].state==0) //break; //} P[j].data=num; P[j].state=1; cout把新进程访问的块号调进页表j块!endl; } for(j=0;jK;j++) { if(P[j].state==1) Q[j]++; } cout************************************endl; cout还有进程访问内存块吗?endl; ch = getchar(); } } 运行结果:
文档评论(0)