- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
虚拟存储中页面置换算法的模拟实现
实验报告课程名称操作系统原理 ?实验名称页面置换算法的模拟实现指导教师?师晓晔? ?学生姓名汤勇学号? 实验时间 2015.11.27指导单位?通达学院?一.实验目的存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法。二.实验要求(1)设计实现下面算法,并输出下述各种算法的命中率。①先进先出的算法(FIFO);②最近最少使用算法(LRU);③最佳淘汰算法(OPT)先淘汰最不常用的页地址。(2)多次反复运行改进后的程序,观察并记录运行结果,并分析原因。。三.实验环境(实验设备)Windows 10 +vc6.0四.实验内容4.1程序:#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 //清周期typedefstruct //页面结构{intpn,pfn,counter,time;}pl_type;pl_typepl[total_vp]; //页面结构数组structpfc_struct{ //页面控制结构intpn, pfn;structpfc_struct *next;};typedefstructpfc_structpfc_type; //主存区页面控制结构别名pfc_typepfc[total_vp], //主存区页面控制结构数组*freepf_head, //主存区页面控制结构的空闲页面头指针*busypf_head, //主存区页面控制结构的忙页面头指针*busypf_tail; //主存区页面控制结构的忙页面尾指针intdiseffect; //页错误计数器,初次把页面载入主存时也当做页错误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 main( ){int s;//随机数inti;srand(10*getpid()); /*每次运行时进程号不同,用来作为初始化随机数队列的种子*/ s = (int)((float)(total_instruction-1)*(rand()/(RAND_MAX+1.0)));printf(\n随机产生指令流\n); for (i=0; itotal_instruction; i+=4) //产生指令队列 { a[i]=s; //任选一指令访问点m a[i+1]=a[i]+1; //顺序执行一条指令 a[i+2]=(int)((float)a[i]*(rand()/(RAND_MAX+1.0))); //执行前地址指令m a[i+3]=a[i+2]+1; //顺序执行一条指令printf(%6d%6d%6d%6d\n, a[i],a[i+1],a[i+2],a[i+3]);s = (int)((float)((total_instruction-2)-a[i+3])*(rand()/(RAND_MAX+1.0))) + a[i+3] + 1; }printf(\n);for (i=0;itotal_instruction;i++) //将指令序列变换成页地址流 {page[i]=a[i]/10;offset[i]=a[i]%10; }printf(\n--不同页面工作
文档评论(0)