1、四:实验类型模拟实验五:主要仪器计算机六:结果OPT:LRU:FIFO:七:程序# includestdlib.hconio.h# define blocknum 4/页面尺寸大小int m; /程序计数器,用来记录按次序执行的指令对应的页号static int num320; /用来存储320条指令typedef struct BLOCK /声明一种新类型-物理块类型 int pagenum; /页号int accessed; /访问量,其值表示多久未被访问BLOCK; BLOCK blockblocknum; /定义一大小为8的物理块数组void init() /程序初始化函数,对bloc
2、k初始化for(int i=0;iblocknum;i+) blocki.pagenum=-1;blocki.accessed=0;m=0;int pageExist(int curpage)/查找物理块中页面是否存在,寻找该页面curpage是否在内存块block中,假如在,返回块号 i blockpos.accessed)pos = i; /找到应该置换页面,返回BLOCK中位置 return pos;void display()/显示物理块中的页面号if(blocki.pagenum != -1)printf( %02d ,blocki.pagenum);%p |,&blocki.pag
3、enum);n);void randam()/产生320条随机数,显示并存储到num320int flag=0;请为一进程输入起始执行指令的序号(0320):scanf(%dm);/用户决定的起始执行指令*进程中指令访问次序如下:(由随机数产生)*n320;/进程中的320条指令访问次序的生成numi=m;/当前执行的指令数,if(flag%2=0) m=+m%320;/顺序执行下一条指令if(flag=1) m=rand()%(m-1);/通过随机数,跳转到低地址局部0,m-1的一条指令处,设其序号为m1if(flag=3) m=m+1+(rand()%(320-(m+1);/通过随机数,跳
4、转到高地址局部m1+2,319的一条指令处,设其序号为m2flag=+flag%4; %03d,numi);/输出格式:3位数if(i+1)%10=0) /控制换行,每个页面可以存放10条指令,共32个页面void pagestring() /显示调用的页面序列,求出此进程按次序执行的各指令所在的页面号并显示输出 %02d,numi/10);2位数if(i+1)%10=0)/控制换行,每个页面可以存放10条指令,共32个页面void OPT() /最优替换算法int n=0;/记录缺页次数int exist,space,position;int curpage;/当前指令的页面号m=numi;
5、curpage=m/10;exist=pageExist(curpage);if(exist=-1) /当前指令的页面号不在物理块中space=findSpace();if(space ! /当前存在空闲的物理块blockspace.pagenum = curpage; /将此页面调入内存display();/显示物理块中的页面号n+;/缺页次数+1else /当前不存在空闲的物理块,需要进展页面置换for(int k=0;kk+)for(int j=i;jj+)/找到在最长未来时间内不再被访问的页面if(blockk.pagenum!= numj/10)blockk.accessed = 1
6、000; /将来不会被访问,设置为一个很大数 /将来会被访问,访问量设为jblockk.accessed = j;break;position = findReplace();/找到被置换的页面 ,淘汰blockposition.pagenum = curpage;/ 将新页面调入 /缺页次数+1缺页次数:%dn,n);缺页率:%f%n,(n/320.0)*100);void LRU() /最近最久未使用算法int exist,space,position ;exist = pageExist(curpage);space = findSpace();else blockexist.acces
7、sed = -1;/恢复存在的并刚访问过的BLOCK中页面accessed为-1for(int j=0; j j+)/其余的accessed+blockj.accessed+;void FIFO() int n=0; int exist,space,position ; int curpage; int blockpointer=-1; for(int i=0; m=numi; curpage=m/10; exist = pageExist(curpage); if(exist=-1) /当前指令的页面号不在物理块中 space = findSpace(); if(space ! /当前存在空
8、闲的物理块 blockpointer+; blockspace.pagenum=curpage; n+; display(); else / 没有空闲物理块,进展置换 position = (+blockpointer)%4; blockposition.pagenum = curpage; printf(void main()int choice;*请求分页存储管理模拟系统*nrandam();*此进程的页面调用序列如下*npagestring();while(choice != 4)*1:OPT 2:LRU 3:FIFO 4:退出*n请选择一种页面置换算法:choice);init();switch(choice)case 1:最优置换算法OPT:页面号 物理地址 页面号 物理地址 页面号 物理地址 页面号 物理地址nOPT();case 2:最近最久未使用置换算法LRU:LRU();case 3:先进先出置换算法FIFO:FIFO();