资源描述:
《动态页式存储管理的模拟实现c语言》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、在内存划出一块区域,并进行页面划分;设计请求页表;模拟页面分配;分别模拟“先进先出页面淘汰算法FIFO”、“最近最少使用页面淘汰算法LRU”和“理想型淘汰算法OPT”本程序随机产生请求序列,分别模拟FIFO,LRU,OPT三种算法。将结果保存在FIFO.txt,LRU.txt,OPT.txt三个文件中。程序代码:#include#include#include#defineN20#defineP3structDuLNode{intdata;structDuL
2、Node*prior;structDuLNode*next;};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=(re
3、ar+1)%(T+1);return0;}intremove_item(int*item,intqueue[],intT){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(mem
4、count<=P){a[memcount]=b;memcount++;}elsea[n]=b;}voidinitpage(intpage[]){inttemp,i;srand((unsigned)time(0));for(i=1;i<=N;i++){temp=rand()%10;page[i]=temp;}}voidaddtoLink(structDuLNode*p,inte){structDuLNode*add;add=malloc(sizeof(structDuLNode));add->data=e;add
5、->prior=p->prior;p->prior->next=add;add->next=p;p->prior=add;}intgetI(structDuLNode*p,inte){inti;structDuLNode*cd=p;for(i=1;;i++){cd=cd->next;if(cd->data==e)returni;if(cd==p)return-1;}}voiddeleLink(structDuLNode*p,inti,int*e){intn;structDuLNode*cd=p;for(n=1;
6、n<=i;n++)cd=cd->next;*e=cd->data;cd->prior->next=cd->next;cd->next->prior=cd->prior;free(cd);}voidremovebottom(structDuLNode*p,int*e){structDuLNode*cd=p->next;*e=cd->data;cd->next->prior=p;p->next=cd->next;free(cd);}intgetcount(inta[],intb,intn,intT){inti;fo
7、r(i=n;i<=T;i++){if(a[i]==b)return(i-n);}return-1;}voidgetreplacepage(inta[],intb[],inti,int*e){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){temp=c[1];T=b
8、[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]