资源描述:
《动态页式存储管理模拟实现C语言.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、作者:ZHANGJIAN仅供个人学习,勿做商业用途在内存划出一块区域,并进行页面划分;设计请求页表;模拟页面分配;分别模拟“先进先出页面淘汰算法FIFO”、“最近最少使用页面淘汰算法LRU”和“理想型淘汰算法OPT”本程序随机产生请求序列,分别模拟FIFO,LRU,OPT三种算法。将结果保存在FIFO.txt,LRU.txt,OPT.txt三个文件中。程序代码:#include#include#include#defineN20#defineP3structDuLNode{intdata;structDuLNodeprior;structD
2、uLNodenext;};intpageFIFO[N+1];intfront=0,rear=0;intpageing[N+1],pmem[P+1];intmemcount=1;voidinit(inta[],intT){inti;for(i=0;i<=T;i++)a[i]=-2;}intinsert_item(intitem,intqueue[],intT){if((rear+1)%(T+1)==front)return1;queue[rear]=item;rear=(rear+1)%(T+1);return0;}intremove_item(intitem,intqueue[],intT){
3、if(front==rear)return1;item=queue[front];front=(front+1)%(T+1);return0;}intfindif(inta[],intb,intT){inti;for(i=1;i<=T;i++){if(a[i]==b)returni;}return-1;}voidinsertintomem(inta[],intb,intn){if(memcount<=P){a[memcount]=b;memcount++;}elsea[n]=b;}voidinitpage(intpage[]){inttemp,i;srand((unsigned)time(0)
4、);for(i=1;i<=N;i++){temp=rand()%10;page[i]=temp;}}voidaddtoLink(structDuLNodep,inte){structDuLNodeadd;add=malloc(sizeof(structDuLNode));add->data=e;add->prior=p->prior;p->prior->next=add;add->next=p;p->prior=add;}intgetI(structDuLNodep,inte){inti;structDuLNodecd=p;for(i=1;;i++){cd=cd->next;if(cd->da
5、ta==e)returni;if(cd==p)return-1;}}voiddeleLink(structDuLNodep,inti,inte){intn;structDuLNodecd=p;for(n=1;n<=i;n++)cd=cd->next;e=cd->data;cd->prior->next=cd->next;cd->next->prior=cd->prior;free(cd);}voidremovebottom(structDuLNodep,inte){structDuLNodecd=p->next;e=cd->data;cd->next->prior=p;p->next=cd->
6、next;free(cd);}intgetcount(inta[],intb,intn,intT){inti;for(i=n;i<=T;i++){if(a[i]==b)return(i-n);}return-1;}voidgetreplacepage(inta[],intb[],inti,inte){intt,c[P+1],temp,T,count=0,error[P+1];for(t=1;t<=P;t++){if(getcount(a,b[t],i,N)!=-1)c[t]=getcount(a,b[t],i,N);else{error[++count]=b[t];}}if(count==0)
7、{temp=c[1];T=b[1];for(t=1;t<=P;t++){if(c[t]>temp){temp=c[t];T=b[t];}}e=T;}else{for(t=1;t<=count;t++){c[t]=findif(a,error[t],N);}temp=c[1];T=error[1];for(t=1;t<=count;t++){if(c[t]