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

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

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验8页面置换模拟程序设计C语言实验

实验八页面置换模拟程序设计 一、【实验目的】 加深对请求页式存储管理实现原理的理解,掌握页面置换算法。 二、【实验内容】 ??? 1.假设分给一作业的内存块数为4,每个页面中可存放10条指令。 ??? 2.用C语言设计一个程序,模拟一作业的执行过程。设该作业共有320条指令,即它的地址空间为32页,目前它的所有页面都还未调入内存。在模拟过程中,如果所访问的指令已经在内存,则显示其物理地址,并转下一条指令。如果所访问的指令尚未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块中均已装入该作业的虚页面,则需进行页面置换。最后显示其物理地址,并转下一条指令。在所有320条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。 ? 3.置换算法:请分别考虑OPT、FIFO和LRU算法。 ?? 4.作业中指令的访问次序要求按下述原则生成: ? 50%的指令是顺序执行的。 ? 25%的指令是均匀分布在前地址(即低地址)部分。 ? 25%的指令是均匀分布在后地址(即高地址)部分。 具体的实施办法是: ??? ① 在[0,319]之间随机选取一条起始执行指令,其序号为m; ② 顺序执行下一条指令,即序号为m+1的指令; ③ 通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1; ④ 顺序执行下一条指令,即序号为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]与a[1]中的随机数。 三、【实验指导】 本实验的程序设计基本上按照实验内容进行。即首先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。相关定义如下: 1 数据结构 (1)页面类型 typedef struct{ int pn,pfn,counter,time; }pl-type; 其中pn 为页号,pfn为面号, counter为一个周期内访问该页面的次数, time为访问时间. (2) 页面控制结构 pfc-struct{ int pn,pfn; struct pfc_struct *next; } typedef struct pfc_struct pfc_type; pfc_type pfc_struct[total_vp],*freepf_head,*busypf_head; pfc_type *busypf_tail; 其中pfc[total_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 a[total_instruction]: 指令流数据组. (2)int page[total_instruction]: 每条指令所属的页号. (3)int offset[total_instruction]: 每页装入10条指令后取模运算页号偏移值. (4)int total_pf: 用户进程的内存页面数. (5)int disaffect: 页面失效次数. 4.程序参考源码及结果 程序 #include stdio.h #include stdlib.h #include unistd.h #define TRUE 1 #define FALSE 0 #define INVALID -1 #define NUL 0 #define total_instruction 320 /*指令流长*/ #define total_vp 32 /*虚页长*/ #define clear_period 50 /*清零周期*/ typedef struct{ /*页面结构*/ int p

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档