os模拟页面置换算法_第1页
os模拟页面置换算法_第2页
os模拟页面置换算法_第3页
os模拟页面置换算法_第4页
os模拟页面置换算法_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

os模拟页面置换算法.txt爱情是艺术,结婚是技术,离婚是算术。这年头女孩们都在争做小“腰”精,谁还稀罕小“腹”婆呀?高职不如高薪,高薪不如高寿,高寿不如高兴。用C语言或C++语言对页面置换算法进行模拟LFUNUR要求:从文件中输入进程的n个访问序列,以及分配给进程的物理页面数m,输出该访问序列的缺页率q。//*****LRU*********************:#include<stdio.h>#include<stdlib.h>#definemSIZE3//分配三个内存页块#definepSIZE12//总共12个进程structmem{intnum;intcount;}memery[3]={0,-1,0,-1,0,-1};staticintprocess[pSIZE]={1,2,3,4,1,2,5,1,2,3,4,5};//页面访问序列voidLRU();voidget();intmain(){get();printf("\n(LRU)\treplace\n");LRU();system("PAUSE");return0;}voidget(){intw[12]={1,2,3,4,1,2,5,1,2,3,4,5};inti,n;for(i=0;i<12;i++){printf("%d",w[i]);}}voidLRU(){inti=0,j=0,k=0,x,y;intreplace;for(i=0;i<pSIZE;i++)//对输入序列进行循环{x=0;y=0;//置x,y初值为0for(j=0;j<mSIZE;j++)//对三个内存块进行循环,先查找有没有与即将访问页号相同的if(memery[j].num==process[i]){x=1;//有相同的则置x为1replace=process[i];memery[j].count=0;//置此块count为0for(k=0;k<3;k++)if(k!=j&&memery[k].num!=0)memery[k].count++;//其他不为0页count++break;//跳出此次内存块循环}if(x==0)//没有与即将访问页号相同的内存块{for(j=0;j<mSIZE;j++)//对内存块循环,查找有没有空内存块if(memery[j].num==0){y=1;//有则置y为1replace=0;memery[j].num=process[i];//置此内存块为访问页号memery[j].count=0;//置此块count为0for(k=0;k<3;k++)if(k!=j&&memery[k].num!=0)memery[k].count++;//其他不为0页count++break;//跳出此次内存块循环}}if(x==0&&y==0)//既没有与即将访问页号相同的内存块也没有空内存块{intm=memery[0].count;for(j=0;j<mSIZE;j++){if(memery[j].count>m)m=memery[j].count;}//查找出count最大的内存块mfor(j=0;j<mSIZE;j++)//对内存块循环,count=m的内存块{if(memery[j].count==m){replace=memery[j].num;memery[j].num=process[i];//置此内存块为访问页号块memery[j].count=0;//置此块count为0}elsememery[j].count++;//其他块count++}}for(j=0;j<mSIZE;j++)//打印每次访问后的情况printf("%d",memery[j].num);printf("\t%d\n",replace);}}//*******nur********************#include"stdio.h"#include"stdlib.h"#defineap4#defineCLEAR_PERIOD4#definemax100structzhan//处理页数顺序的栈{ inti; intj;//状态项,用于最近没有使用页面的替换选择 zhan*next;}*ap_top,*ap_tail;zhan*mem_zhan[ap];//数组表示内存页实现处理的页栈voidshuru()//输入函数实现,实现页面数和执行顺序的存取{intm=1; intap_num;//页面数量 zhan*t; printf("pleaseinputtheap'snumberofstorage:"); scanf("%i",&ap_num); ap_tail=(zhan*)malloc(sizeof(zhan)); printf("pleaseinputtheturnoftheap:(endby'0')\n");do{if(m==1) ap_top=ap_tail; scanf("%d",&ap_tail->i); if(ap_tail->i==0) {ap_tail->next=NULL;break; } if(ap_tail->i<0||ap_tail->i>ap_num)//输入判错处理 do{ printf("yourinputioniswrong!continue~~\n"); scanf("%d",&ap_tail->i); if(ap_tail->i==0) {ap_tail->next=NULL; break;} }while(ap_tail->i<0||ap_tail->i>ap_num);t=(zhan*)malloc(sizeof(zhan)); ap_tail->next=t;//建立链表 ap_tail=t; m++; }while(ap_tail->i!=0);}voidshuchu()//出数内存页面的图表表示{zhan*p;intm=0;intn;while(m<ap){p=mem_zhan[m];m++;n=1;do{if(n==1)printf("内存页%d号**%d",m,p->i);elseprintf("*%d",p->i);n++;p=p->next;}while(p->next!=NULL);printf("\n");}};//====================算法实现的公共函数部分============================intmingzhong(zhan*p[ap],zhan*jt)//命中函数{ intm; for(m=0;m<ap;m++) if(p[m]->i==jt->i) {p[m]->j=max; return1; break; } return0;}//=====================最近没有使用页面淘汰算法NUR实现===============voidsuanfa1(){intn;intm;intl;zhan*p;zhan*top[ap],*tail[ap];p=ap_top;for(m=0;m<ap;m++)//指针初始化{mem_zhan[m]=(zhan*)malloc(sizeof(zhan));mem_zhan[m]->i=0;mem_zhan[m]->j=0;tail[m]=top[m]=mem_zhan[m];}do{for(n=1;n<=CLEAR_PERIOD;n++)//周期循环{//命中处理if(mingzhong(&tail[ap],p)==1){ for(m=0;m<ap;m++)//分配空间并建立链表 { tail[m]=(zhan*)malloc(sizeof(zhan));tail[m]->i=top[m]->i; tail[m]->j=top[m]->j; top[m]->next=tail[m]; top[m]=tail[m]; if(m==ap-1) if(top[m]->j==max) for(m=0;m<ap;m++)top[m]->j=0; if(top[m]->i==p->i) top[m]->j=max; }}//不中处理else{ for(m=0;m<ap;m++) { if(top[m]->i==0) { l=1; break; } else l=0; } if(l==1) for(m=0;m<ap;m++) { if(top[m]->i==0) { top[m]->i=p->i; top[m]->j=max; break; } } else for(m=0;m<ap;m++)//选择最小替换对象 { if(top[m]->j==0) { top[m]->i=p->i; top[m]->j=max; break; } } for(m=0;m<ap;m++)//分配空间并建立链表 { tail[m]=(zhan*)malloc(sizeof(zhan));tail[m]->i=top[m]->i; tail[m]->j=top[m]->j; top[m]->next=tail[m]; top[m]=tail[m]; if(m==ap-1) if(top[m]->j==max) for(m=0;m<ap;m++)top[m]->j=0; }}if(n==CLEAR_PERIOD)//周期结束重新初始化{ for(m=0;m<ap;m++)top[m]->j=0;}p=p->next;if(p->next==NULL)//最后加个链表收尾{ for(m=0;m<ap;m++)top[m]->next=NULL; break;}}}while(p->next!=NULL);}//=====================理想型淘汰算法OPT实现=========================//一些其中用到的函数intpanduan(zhan*p[ap])//判断是否检验完毕,都找到检验项{ intm,h=0; for(m=0;m<ap;m++) if(p[m]->j==max) {h=1;break;} returnh; }intzuiyuan(zhan*p[ap])//最远页数查找,要替换的页数{ intn,m; zhan*t1,*t2; t1=p[0]; for(m=1;m<ap;m++) { t2=p[m];if(t1->j<t2->j)//大于和等于不交换 { t1=t2; n=m; } }returnn;}//============理想型淘汰算法OPT实现主题函数============voidsuanfa2(){intm;intn=1;intk,h;zhan*p1,*p2;zhan*t1,*t2;zhan*top[ap],*tail[ap];p1=ap_top;for(m=0;m<ap;m++)//初始化首项{ top[m]=mem_zhan[m];top[m]->i=0; top[m]->j=max; tail[m]=top[m];}do{ p2=p1->next; //if(mingzhong(&top[ap],&p1)==1)//命中的情况处理 for(m=0;m<ap;m++) { if(top[m]->i==p1->i) {h=1;break;} else h=0; } if(h==1)//命中的情况处理 { for(m=0;m<ap;m++) { tail[m]=tail[m]->next; tail[m]->i=top[m]->i; tail[m]->j=max; top[m]=tail[m]; } }else//非命中情况处理 { do{for(m=0;m<ap;m++)//寻找内存各页面数的距离 { if(top[m]->i==p2->i) if(top[m]->j==max) top[m]->j=n; } for(m=0;m<ap;m++) { h=0; if(top[m]->j==max) {h=1;break;} } if(h==0)//判断是否寻找完全 break; n++; if(p2->next==NULL) break;p2=p2->next; }while(p2->next!=NULL);//k=zuiyuan(&top[ap]);//寻找最远距离内存页数,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论