资源描述:
《实验八页面置换模拟程序设计C语言实验.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验八页面置换模拟程序设计一、【实验目的】加深对请求页式存储管理实现原理的理解,掌握页面置换算法。二、【实验内容】 1.假设分给一作业的内存块数为4,每个页面中可存放10条指令。 2.用C语言设计一个程序,模拟一作业的执行过程。设该作业共有320条指令,即它的地址空间为32页,目前它的所有页面都还未调入内存。在模拟过程中,如果所访问的指令已经在内存,则显示其物理地址,并转下一条指令。如果所访问的指令尚未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块中均已装入该作业的虚页面,则需进行页面置换。最后显示其
2、物理地址,并转下一条指令。在所有320条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。 3.置换算法:请分别考虑OPT、FIFO和LRU算法。 4.作业中指令的访问次序要求按下述原则生成:l50%的指令是顺序执行的。l25%的指令是均匀分布在前地址(即低地址)部分。l25%的指令是均匀分布在后地址(即高地址)部分。具体的实施办法是: ①在[0,319]之间随机选取一条起始执行指令,其序号为m;②顺序执行下一条指令,即序号为m+1的指令;③通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1;④顺序执行下一条
3、指令,即序号为m1+1的指令;⑤通过随机数,跳转到后地址部分[m1+2,319]中的某条指令处,其序号为m2;⑥顺序执行下一条指令,即序号为m2+1的指令;⑦重复“跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行”的过程,直至执行完全部320条指令。5.随机数产生办法,Linux或UNIX系统提供函数strand()和rand(),分别进行初始化和产生随机数。例如:strand();语句可初始化一个随机数;a[0]=10*rand()/65535*319+1;a[1]=10*rand()/65535*a[0];语句可用来产生a[0]与
4、a[1]中的随机数。三、【实验指导】本实验的程序设计基本上按照实验内容进行。即首先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。相关定义如下:1数据结构(1)页面类型typedefstruct{intpn,pfn,counter,time;}pl-type;其中pn为页号,pfn为面号,counter为一个周期内访问该页面的次数,time为访问时间.(2)页面控制结构pfc-struct{intpn,pfn;structpfc_struct*next;}type
5、defstructpfc_structpfc_type;pfc_typepfc_struct[total_vp],*freepf_head,*busypf_head;pfc_type*busypf_tail;其中pfc[total_vp]定义用户进程虚页控制结构,*freepf_head为空页面头的指针,*busypf_head为忙页面头的指针,*busypf_tail为忙页面尾的指针.2.函数定义(1)Voidinitialize():初始化函数,给每个相关的页面赋值.(2)VoidFIFO():计算使用FIFO算法时的命中率.(3)Vo
6、idLRU():计算使用LRU算法时的命中率.(4)VoidOPT():计算使用OPT算法时的命中率.3.变量定义(1)inta[total_instruction]:指令流数据组.(2)intpage[total_instruction]:每条指令所属的页号.(3)intoffset[total_instruction]:每页装入10条指令后取模运算页号偏移值.(4)inttotal_pf:用户进程的内存页面数.(5)intdisaffect:页面失效次数.4.程序参考源码及结果<程序>#include#include<
7、stdlib.h>#include#defineTRUE1#defineFALSE0#defineINVALID-1#defineNUL0#definetotal_instruction320/*指令流长*/#definetotal_vp32/*虚页长*/#defineclear_period50/*清零周期*/typedefstruct{/*页面结构*/intpn,pfn,counter,time;}pl_type;pl_typepl[total_vp];/*页面结构数组*/structpfc_struct{/*页面控
8、制结构*/intpn,pfn;structpfc_struct*next;};typedefstructpfc_structpfc_type;pfc_typepfc[total_