网站大量收购独家精品文档,联系QQ:2885784924

实验三内存管理.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三 内存管理 实验目的 理解内存页面调度的机理。 掌握几种理论页面值换算法的实现方法 通过实验比较各种调度算法的优劣。 实验内容 随机给出一个页面执行序列,如:1,5,3,4,2,1,3,4,5,7,9,……。要求计算以下几种置换算法的缺页数、缺页率和命中率。 最佳置换算法OPT(Optimal) 先进先出算法FIFO(First In First Out) 最近最少使用算法LRU(Least Recently Used) 实验环境 PC + Linux Red Hat操作系统 + GCC 或 Windows xp + VC 实验中遇到的主要问题及其解决方式 这次实验其实不一定要在linux操作系统下做,在windows操作系统一样可以实现,只要把头文件稍作修改即可。 一开始做这个实验时,首先是看书,先把书上的替换算法知识点弄明白,要明白各种算法的优缺点和相互之间衍生互补关系。这四个算法中,难以实现的是LRU算法,因为它涉及到访问时间的计算,而且它的开销也比较大。OPT算法次难,它需要计算最近访问时间,并替换最近访问时间最大的页。而FIFO和CLOCK实现起来比较容易,FIFO算法的实现和CLOCK算法的实现很相似,FIFO可视为CLOCK的退化版。我先写了CLOCK算法,再删去一些约束条件就退化为FIFO算法。这就是两者的相同之处。理论上,CLOCK算法需要维持一个循环的主存缓冲区,需要一个循环队列去实现,并且,FIFO算法保持先进先出,因此需要一个先进先出队列。 源代码 #include stdio.h #include stdlib.h #include unistd.h //在window操作系统下要屏蔽此条指令 #include string.h #ifndef _UNISTD_H #define _UNISTD_H #include IO.H #include PROCESS.H #endif #define TRUE 1 #define FALSE 0 #define INVALID -1 #define total_instruction 320 //指令流长 #define total_vp 32 //虚页长 #define clear_period 50 //清周期 typedef struct //页面结构 { int pn, //页面序号 pfn, //页面所在内存区的帧号 counter, //单位时间内访问次数 time; //上次访问的时间 }pl_type; pl_type pl[total_vp]; //页面结构数组 struct pfc_struct{ //页面控制结构 int pn, //页面号 pfn; //内存区页面的帧号 struct pfc_struct *next; //页面指针,用于维护内存缓冲区的链式结构 }; typedef struct pfc_struct pfc_type; //主存区页面控制结构别名 pfc_type pfc[total_vp], //主存区页面控制结构数组 *freepf_head, //主存区页面控制结构的空闲页面头指针 *busypf_head, //主存区页面控制结构的忙页面头指针 *busypf_tail; //主存区页面控制结构的忙页面尾指针 int diseffect; //页错误计数器,初次把页面载入主存时也当做页错误 int a[total_instruction]; //随即指令流数组 int page[total_instruction]; //指令对应的页面号 int offset[total_instruction]; //指令所在页面中的偏移量 int initialize(int); //初始化页面结构数组和页面控制结构数组 int FIFO(int); //先进先出算法 int LRU(int); //最近最久未使用算法 int OPT(int); //最佳置换算法 int CLOCK(int); //简单时钟(钟表)算法 int main( ) { int s; //随机数 int i; srand(10*getpid()); /*每次运行时进程号不同,用来作为初始化随机数队列

文档评论(0)

guocuilv2018 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档