实验八页面置换模拟程序设计C语言实验.docx

上传人:老** 文档编号:84657745 上传时间:2023-04-06 格式:DOCX 页数:7 大小:13.90KB
返回 下载 相关 举报
实验八页面置换模拟程序设计C语言实验.docx_第1页
第1页 / 共7页
实验八页面置换模拟程序设计C语言实验.docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《实验八页面置换模拟程序设计C语言实验.docx》由会员分享,可在线阅读,更多相关《实验八页面置换模拟程序设计C语言实验.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、试验八页面置换模拟程序设计一、【试验目的】加深对恳求页式存储治理实现原理的理解,把握页面置换算法。二、【试验内容】1. 假设分给一作业的内存块数为 4,每个页面中可存放 10 条指令。2. 用 C 语言设计一个程序,模拟一作业的执行过程。设该作业共有 320 条指令,即它的地址空间为 32 页,目前它的全部页面都还未调入内存。在模拟过程中, 假设所访问的指令已经在内存,则显示其物理地址,并转下一条指令。假设所访问的指令尚未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。假设 4 个内存块中均已装入该作业的虚页面,则需进展页面置换。最终显示其物理地址,并转下一条指令。在全部 32

2、0 条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。3. 置换算法:请分别考虑 OPT、FIFO 和 LRU 算法。4. 作业中指令的访问次序要求按下述原则生成:50%的指令是挨次执行的。25%的指令是均匀分布在前地址即低地址局部。25%的指令是均匀分布在后地址即高地址局部。具体的实施方法是: 在0,319之间随机选取一条起始执行指令,其序号为 m; 挨次执行下一条指令,即序号为 m+1 的指令; 通过随机数,跳转到前地址局部0,m-1中的某条指令处,其序号为 m1; 挨次执行下一条指令,即序号为 m1+1 的指令; 通过随机数,跳转到后地址局部m1+2,319中的某条指令处,其序号

3、为 m2; 挨次执行下一条指令,即序号为 m2+1 的指令; 重复“跳转到前地址局部、挨次执行、跳转到后地址局部、挨次执行”的过程,直至执行完全部 320 条指令。5. 随机数产生方法,Linux或UNIX系统供给函数strand和rand,分别进展初始化和产生随机数。例如: strand ; 语句可初始化一个随机数; a0=10*rand/65535*319+1; a1=10*rand/65535*a0; 语句可用来产生a0 与a1中的随机数。三、【试验指导】本试验的程序设计根本上依据试验内容进展。即首先用srand和rand函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对

4、不同的算法计算出相应的命中率。相关定义如下:1 数据构造(1)页面类型typedef structint pn,pfn,counter,time;pl-type;其中pn 为页号,pfn为面号, counter为一个周期内访问该页面的次数, time为访问时间.(2) 页面掌握构造pfc-structint pn,pfn;struct pfc_struct *next;typedef struct pfc_struct pfc_type;pfc_type pfc_structtotal_vp,*freepf_head,*busypf_head; pfc_type *busypf_tail;其中

5、pfctotal_vp定义用户进程虚页掌握构造,*freepf_head为空页面头的指针,*busypf_head为忙页面头的指针,*busypf_tail为忙页面尾的指针.2. 函数定义(1) Void initialize( ):初始化函数,给每个相关的页面赋值.(2) Void FIFO( ):计算使用FIFO算法时的命中率.(3) Void LRU( ):计算使用LRU算法时的命中率.(4) Void OPT( ):计算使用OPT算法时的命中率.3. 变量定义 (1)int atotal_instruction: 指令流数据组. (2)int total_instruction: 每条

6、指令所属的页号.(3) int offsettotal_instruction: 每页装入10条指令后取模运算页号偏移值. (4)int total_pf: 用户进程的内存页面数.(5)int disaffect: 页面失效次数.4. 程序参考源码及结果 #include #include #include #define TRUE 1#define FALSE 0#define INVALID -1#define NUL 0#define total_instruction 320 /*指令流长*/ #define total_vp 32 /*虚页长*/#define clear_perio

7、d 50 /*清零周期*/ typedef struct /*页面构造*/int pn,pfn,counter,time;pl_type;pl_type pltotal_vp; /*页面构造数组*/ struct pfc_struct /*页面掌握构造*/ int pn,pfn; struct pfc_struct *next; ;typedef struct pfc_struct pfc_type; pfc_type pfctotal_vp,*freepf_head,*busypf_head,*busypf_tail; int diseffect,atotal_instruction;int

8、 total_instruction, offsettotal_instruction; int main int S,i; srand(int)getpid);S=(int)rand%390; for(i=0;itotal_instruction;i+=1) /*产生指令队列*/ ai=S; /*任选一指令访问点*/ ai+1=ai+1; /*挨次执行一条指令*/ai+2=(int)rand%390; /*执行前地址指令m*/ ai+3=ai+2+1; /*执行后地址指令*/ S=(int)rand%390; for(i=0;itotal_instruction;i+) /*将指令序列变换成

9、页地址流*/ i=ai/10; offseti=ai%10; for(i=4;i=32;i+) /*用户内存工作区从4个页面到32个页面*/ printf(“%2d frames“,i);FIFO(i); LRU(i); OPT(i); printf(“n“); return 0; void FIFO(total_pf) /*FIFO(First in First out)ALGORITHM*/ int total_pf; /*用户进程的内存页面数*/ int i; pfc_type *p, *t; initialize(total_pf); /*初始化相关页面掌握用数据构造*/busypf_

10、head=busypf_tail=NUL; /*忙页面队列头,对列尾链接*/for(i=0;inext;plbusypf_head-pn.pfn=INVALID; /*释放忙页面队列中的第一个页面*/ freepf_head=busypf_head;freepf_head-next=NUL; busypf_head=p;p=freepf_head-next; /*按方式调页面入内存页面*/ freepf_head-next=NUL;freepf_head-pn=i; pli.pfn=freepf_head-pfn; if(busypf_tail=NUL) busypf_head=busypf_

11、tail=freepf_head; elsebusypf_tail-next=freepf_head; busypf_tail=freepf_head;freepf_head=p;printf(“FIFO:%6.4F“,1-(float)diseffect/320);void LRU(total_pf) int total_pf;int min,minj,i,j,present_time; initialize(total_pf);present_time=0; for(i=0;itotal_instruction;i+)if(pli.pfn=INVALID) /*页面失效*/diseffec

12、t+;if(freepf_head=NUL) /*无空闲页面*/min=32767; for(j=0;jplj.time&plj.pfn!=INVALID)min=plj.time; minj=j;freepf_head=&pfcplminj.pfn; plminj.pfn=INVALID; plminj.time=-1;freepf_head-next=NUL;pli.pfn=freepf_head-pfn; pli.time=present_time; freepf_head=freepf_head-next;else pli.time=present_time; present_time

13、+;printf(“LRU:%6.4f“,1-(float)diseffect/320);void OPT(total_pf) /*OPT(Optimal Replacement)ALGORITHM*/ int total_pf; int i,j,max,max,d,disttotal_vp; pfc_type *t;initialize(total_pf); for(i=0;itotal_instruction;i+) if(pli.pfn=INVALID) diseffect+; if(freepf_head=NUL) for(j=0;jtotal_vp;j+)if(plj.pfn!=IN

14、VALID) distj=32767; else distj=0; d=1; for(j=i+1;jtotal_instruction;j+) if(plj.pfn!=INVALID) distj=d; d+; max=-1;for(j=0;jtotal_vp;j+) if(maxnext=NUL; plmax.pfn=INVALID; pli.pfn=freepf_head-pfn; freepf_head=freepf_head-next; printf(“OPT:%6.4f“,1-(float)diseffect/320); void initialize(total_pf) /*初始化

15、相关数据构造*/ int total_pf; /*用户进程的内存页面数*/ int i; diseffect=0; for(i=0;itotal_vp;i+) pli.pn=i;pli.pfn=INVALID; /*置页面掌握构造中的页号,页面为空*/ pli.counter=0;pli.time=-1; /*页面掌握构造中的访问次数为0,时间为-1*/ for(i=1;itotal_pf;i+) pfci-1.next=&pfci;pfci-1.pfn=i-1;/*建立pfci-1和pfci之间的连接*/ pfctotal_pf-1.next=NUL;pfctotal_pf-1.pfn=total_pf-1; freepf_head=&pfc0; /*页面队列的头指针为pfc0*/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁