《实验四 分页式存储管理》由会员分享,可在线阅读,更多相关《实验四 分页式存储管理(7页珍藏版)》请在金锄头文库上搜索。
1、实验四 分页式存储管理自动化1203 张千伟 31、 实验目的1. 熟悉分页式存储管理2. 掌握最久未使用算法以及FIFO算法2、 实验内容1. 实验代码#include #include#include#include#define bsize 4 /物理块大小#define psize 16 /进程大小typedef struct page int num; /*记录页面号*/ int time; /*记录调入内存时间*/ Page; /* 页面逻辑结构,结构为方便算法实现设计*/ Page bbsize; /*内存单元数*/ int cbsizepsize; /*暂保存内存当前的状态:缓
2、冲区*/ int queue100; /*记录调入队列*/ int K; /*调入队列计数变量*/ int phbbsize=0; /物理块标号int propsize=0; /进程序列号int flagbsize = 0; /进程等待次数(存放最久未被使用的进程标志)int i = 0, j = 0,k = 0; /i表示进程序列号,j表示物理块号int m = -1, n = -1; /物理块空闲和进程是否相同判断标志int max = -1,maxflag = 0; /标记替换物理块进程下标int count = 0; /统计页面缺页次数/*/随机产生序列号函数int* build()p
3、rintf(随机产生一个进程序列号为:n);int i = 0; for(i=0; ipsize; i+) proi = 10*rand()/(RAND_MAX+1)+1; printf(%d ,proi); printf(n); return(pro);/查找空闲物理块int searchpb()for(j=0; jbsize; j+) if(phbj = 0) m = j; return m; break; return -1;int searchpro()/查找相同进程for(j = 0; j bsize; j+) if(phbj = proi) n = j; return j; ret
4、urn -1;void empty()/初始化内存for(i=0;ibsize;i+)phbi=0; count=0; /计数器置零void FIFO()/先进先出页面置换算法 for(i = 0; ipsize; i+) m=searchpb(); n=searchpro();/找flag值最大的 for(j = 0; j maxflag) maxflag = flagj; max = j; if(n = -1) /不存在相同进程 if(m != -1) /存在空闲物理块 phbm = proi; /进程号填入该空闲物理块 count+; flagm = 0; for(j = 0;j = m
5、; j+) flagj+; m = -1; else /不存在空闲物理块 phbmax = proi; flagmax = 0; for(j = 0;j bsize; j+) flagj+; max = -1; maxflag = 0; count+; else /存在相同的进程 phbn = proi; for(j = 0;j bsize; j+) flagj+; n = -1; for(j = 0 ;j bsize; j+) printf(%d ,phbj); printf(n); printf(缺页次数为:%dn,count);printf(n);void Init(Page *b,in
6、t cbsizepsize) /*初始化内存单元、缓冲区*/ int i,j; for(i=0;ipsize;i+) bi.num=-1; bi.time=psize-i-1; for(i=0;ibsize;i+) for(j=0;jpsize;j+) cij=-1; int GetMax(Page *b) /*取得在内存中停留最久的页面,默认状态下为最早调入的页面*/ int i; int max=-1; int tag=0; for(i=0;imax) max=bi.time; tag=i; return tag; int Equation(int fold,Page *b) /*判断页面
7、是否已在内存中*/ int i; for(i=0;i=0) bval.time=0; for(i=0;ibsize;i+) if (i!=val) bi.time+; else queue+K=fold;/*记录调入页面*/ val=GetMax(b); bval.num=fold; bval.time=0; for(i=0;ibsize;i+) if (i!=val) bi.time+; void LRU() int i,j; K=-1; Init(b, c); for(i=0;ipsize;i+) Lruu(proi,b); c0i=proi; /*记录当前的内存单元中的页面*/ for(j=0;jbsize;j+) cji=bj.num; /*结果输出*/ printf(内存状态为:n); printf(|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|n); for(j=0;jpsize;j+) printf(|%2d ,proj); printf(|n); printf(|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|n); for(i=0;ibsize;i+)