收藏 分销(赏)

动态页式存储管理的模拟实现C语言.doc

上传人:可**** 文档编号:11398012 上传时间:2025-07-21 格式:DOC 页数:7 大小:25.04KB 下载积分:8 金币
下载 相关
动态页式存储管理的模拟实现C语言.doc_第1页
第1页 / 共7页
动态页式存储管理的模拟实现C语言.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
在内存划出一块区域,并进行页面划分;设计请求页表;模拟页面分配;分别模拟“先进先出页面淘汰算法FIFO”、“最近最少使用页面淘汰算法LRU”和“理想型淘汰算法OPT” 本程序随机产生请求序列,分别模拟FIFO,LRU,OPT三种算法。将结果保存在FIFO.txt,LRU.txt,OPT.txt三个文件中。 程序代码: #include<stdio.h> #include<stdlib.h> #include<time.h> #define N 20 #define P 3 struct DuLNode{ ﻩint data; struct DuLNode *prior; ﻩstruct DuLNode *next; }; int pageFIFO[N+1]; int front=0,rear=0; int pageing[N+1],pmem[P+1]; int memcount=1; void init(int a[],int T) { ﻩint i; ﻩfor(i=0;i<=T;i++) ﻩ a[i]=-2; } int insert_item(int item,int queue[],int T) {ﻩ ﻩif((rear+1)%(T+1)==front) ﻩﻩreturn 1; ﻩqueue[rear]=item; ﻩrear=(rear+1)%(T+1); ﻩreturn 0; } int remove_item(int *item,int queue[],int T) { ﻩif(front == rear) ﻩreturn 1; ﻩ*item=queue[front]; ﻩfront=(front+1) % (T+1); ﻩreturn 0; } int findif(int a[],int b,int T) { ﻩint i; ﻩfor(i=1;i<=T;i++) ﻩ{ ﻩﻩif(a[i]==b) ﻩﻩﻩreturn i; ﻩ} ﻩreturn -1; } void insertintomem(int a[],int b,int n) { ﻩif(memcount<=P) ﻩ{ ﻩ a[memcount]=b; ﻩﻩmemcount++; ﻩ} ﻩelse ﻩﻩa[n]=b; } void initpage(int page[]) { ﻩint temp,i; ﻩsrand((unsigned)time(0)); ﻩfor(i=1;i<=N;i++) ﻩ{ ﻩﻩtemp=rand()%10; ﻩﻩpage[i]=temp; ﻩ} } void addtoLink(struct DuLNode *p,int e) { ﻩstruct DuLNode *add; ﻩadd=malloc(sizeof(struct DuLNode)); ﻩadd->data=e; ﻩadd->prior=p->prior; ﻩp->prior->next=add; ﻩadd->next=p; ﻩp->prior=add; } int getI(struct DuLNode *p,int e) { ﻩint i; ﻩstruct DuLNode *cd=p; ﻩfor(i=1;;i++) ﻩ{ ﻩﻩcd=cd->next; ﻩﻩif(cd->data==e) ﻩﻩﻩreturn i; ﻩﻩif(cd==p) ﻩﻩﻩreturn -1; } } void deleLink(struct DuLNode *p,int i,int *e) { ﻩint n; ﻩstruct DuLNode *cd=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); } void removebottom(struct DuLNode *p,int *e) { ﻩstruct DuLNode *cd=p->next; ﻩ*e=cd->data; ﻩcd->next->prior=p; ﻩp->next=cd->next; ﻩfree(cd); } int getcount(int a[],int b,int n,int T) { ﻩint i; ﻩfor(i=n;i<=T;i++) ﻩ{ ﻩﻩif(a[i]==b) ﻩﻩreturn (i-n); ﻩ} ﻩreturn -1; } void getreplacepage(int a[],int b[],int i,int *e) { ﻩint t,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[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]<temp) ﻩﻩﻩ{ﻩ ﻩﻩﻩﻩtemp=c[t]; ﻩﻩﻩﻩT=error[t]; ﻩﻩﻩ} ﻩﻩ} ﻩ *e=T; ﻩ} } void main() { ﻩint i,temp,temp1,error=0,ErrorC[P]; ﻩFILE *fp1,*fp2,*fp3; ﻩstruct DuLNode *p; ﻩp=(struct DuLNode *)malloc(sizeof(struct DuLNode)); ﻩp->prior=p->next=p; ﻩinitpage(pageing); ﻩinit(pmem,P); ﻩif((fp1=fopen("FIFO.txt","a"))==NULL) ﻩ{ ﻩﻩprintf("不能打开文件!\n"); ﻩﻩexit(1); ﻩ} ﻩfor(i=1;i<=N;i++) ﻩ{ ﻩﻩfprintf(fp1," %d ",pageing[i]); ﻩ} ﻩfprintf(fp1,"\n"); ﻩfor(i=1;i<=N;i++) ﻩ{ ﻩﻩif(memcount>P&&findif(pmem,pageing[i],P)==-1) ﻩﻩ{ ﻩﻩ remove_item(&temp,pageFIFO,N); ﻩﻩﻩinsertintomem(pmem,pageing[i],findif(pmem,temp,P)); ﻩﻩﻩinsert_item(pageing[i],pageFIFO,N); ﻩﻩﻩfprintf(fp1,"%d被引用,%d被替换->出现第 %d 次错误!\n",pageing[i],temp,++error); ﻩﻩ} ﻩﻩelse ﻩ{ ﻩﻩﻩif(memcount<=P&&findif(pmem,pageing[i],P)==-1) ﻩﻩﻩ{ ﻩﻩﻩﻩinsertintomem(pmem,pageing[i],memcount); ﻩﻩﻩﻩinsert_item(pageing[i],pageFIFO,N); ﻩﻩﻩﻩfprintf(fp1,"页中未满。%d被引用->出现第 %d 次错误!\n",pageing[i],++error); ﻩﻩﻩ} ﻩﻩ else ﻩﻩﻩﻩfprintf(fp1,"%d已在页中->未出现错误。\n",pageing[i]); ﻩ}ﻩ ﻩ} ﻩfclose(fp1); ﻩErrorC[0]=error; ﻩmemcount=1; ﻩerror=0; init(pmem,P); ﻩif((fp2=fopen("LRU.txt","a"))==NULL) ﻩ{ ﻩﻩprintf("不能打开文件!\n"); ﻩﻩexit(1); ﻩ} ﻩfor(i=1;i<=N;i++) ﻩ{ ﻩﻩfprintf(fp2," %d ",pageing[i]); ﻩ} fprintf(fp2,"\n"); ﻩfor(i=1;i<=N;i++) ﻩ{ ﻩﻩif(memcount>P&&findif(pmem,pageing[i],P)==-1) ﻩﻩ{ ﻩ ﻩremovebottom(p,&temp); ﻩﻩﻩinsertintomem(pmem,pageing[i],findif(pmem,temp,P)); ﻩﻩﻩif(getI(p,pageing[i])!=-1) ﻩﻩﻩ{ ﻩﻩﻩﻩdeleLink(p,getI(p,pageing[i]),&temp1); ﻩﻩﻩ} ﻩ ﻩ addtoLink(p,pageing[i]); ﻩ ﻩfprintf(fp2,"%d被引用,%d被替换->出现第 %d 次错误!\n",pageing[i],temp,++error); ﻩ} ﻩﻩelse ﻩﻩ{ ﻩﻩif(memcount<=P&&findif(pmem,pageing[i],P)==-1) ﻩﻩﻩ{ ﻩﻩﻩinsertintomem(pmem,pageing[i],memcount); ﻩﻩﻩﻩaddtoLink(p,pageing[i]); ﻩﻩ ﻩfprintf(fp2,"页中未满。%d被引用->出现第 %d 次错误!\n",p->prior->data,++error); ﻩﻩﻩ} ﻩ ﻩelse ﻩﻩﻩ{ ﻩﻩﻩﻩdeleLink(p,getI(p,pageing[i]),&temp1); ﻩﻩ addtoLink(p,pageing[i]); ﻩﻩﻩﻩfprintf(fp2,"%d已在页中->未出现错误。\n",pageing[i]); ﻩﻩﻩ} ﻩﻩ}ﻩ ﻩ} ﻩfclose(fp2); ﻩErrorC[1]=error; ﻩmemcount=1; ﻩerror=0; ﻩinit(pmem,P); ﻩif((fp3=fopen("OPT.txt","a"))==NULL) ﻩ{ ﻩﻩprintf("不能打开文件!\n"); ﻩﻩexit(1); ﻩ} ﻩfor(i=1;i<=N;i++) ﻩ{ ﻩﻩfprintf(fp3," %d ",pageing[i]); ﻩ} ﻩfprintf(fp3,"\n"); ﻩfor(i=1;i<=N;i++) ﻩ{ ﻩﻩif(memcount>P&&findif(pmem,pageing[i],P)==-1) ﻩﻩ{ ﻩﻩﻩgetreplacepage(pageing,pmem,i,&temp); ﻩﻩﻩinsertintomem(pmem,pageing[i],findif(pmem,temp,P)); ﻩﻩﻩfprintf(fp3,"%d被引用,%d被替换->出现第 %d 次错误!\n",pageing[i],temp,++error); ﻩﻩ} ﻩelse ﻩﻩ{ ﻩﻩif(memcount<=P&&findif(pmem,pageing[i],P)==-1) ﻩﻩﻩ{ ﻩﻩinsertintomem(pmem,pageing[i],memcount); ﻩﻩﻩﻩfprintf(fp3,"页中未满。%d被引用->出现第 %d 次错误!\n",pageing[i],++error); ﻩﻩ} ﻩﻩﻩelse ﻩﻩﻩﻩfprintf(fp3,"%d已在页中->未出现错误。\n",pageing[i]); ﻩﻩ}ﻩ ﻩ} ﻩErrorC[2]=error; ﻩprintf("对于引用串序列:"); ﻩfor(i=1;i<=N;i++) ﻩ{ ﻩﻩprintf(" %d ",pageing[i]); ﻩ} ﻩprintf("\nFIFO算法出现 %d 次错误。\n",ErrorC[0]); ﻩprintf("LRU算法出现 %d 次错误。\n",ErrorC[1]); ﻩprintf("OPT算法出现 %d 次错误。\n",ErrorC[2]); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服