请求调页存储管理方式的模拟LFU(含源代码)

上传人:ji****72 文档编号:39549487 上传时间:2018-05-17 格式:DOC 页数:20 大小:338.50KB
返回 下载 相关 举报
请求调页存储管理方式的模拟LFU(含源代码)_第1页
第1页 / 共20页
请求调页存储管理方式的模拟LFU(含源代码)_第2页
第2页 / 共20页
请求调页存储管理方式的模拟LFU(含源代码)_第3页
第3页 / 共20页
请求调页存储管理方式的模拟LFU(含源代码)_第4页
第4页 / 共20页
请求调页存储管理方式的模拟LFU(含源代码)_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《请求调页存储管理方式的模拟LFU(含源代码)》由会员分享,可在线阅读,更多相关《请求调页存储管理方式的模拟LFU(含源代码)(20页珍藏版)》请在金锄头文库上搜索。

1、1课课 程程 设设 计计课程设计名称:课程设计名称:请求调页存储管理方式的模拟 4 专专 业业 班班 级级 : 学学 生生 姓姓 名名 : 学学 号号 : 指指 导导 教教 师师 : 课程设计时间:课程设计时间: 2012.12.24-2012.12.28 2计算机科学计算机科学 专业课程设计任务书专业课程设计任务书学生姓名学生姓名专业班级专业班级学号学号题题 目目请求调页存储管理方式的模拟请求调页存储管理方式的模拟 4课题性质课题性质其它其它课题来源课题来源自拟课题自拟课题指导教师指导教师同组姓名同组姓名无无主要内容主要内容1)假设每个页面中可存放 10 条指令,分配给作业的内存块数为 4。

2、 2)用 C 语言模拟一个作业的执行过程,该作业共有 320 条指令,即它的地 址空间为 32 页,目前它的所有页都还未调入内存。在模拟过程中,如果所访 问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令 还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。 如果 4 个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址, 并转下一条指令。 在所有 320 指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。3)置换算法:最少访问(LFU)算法。任务要求任务要求通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系 统的原理和实现过程的理

3、解。参考文献参考文献任满杰等操作系统原理实用教程 电子工业出版社 2006 汤子瀛 计算机操作系统 (修订版)西安电子科技大学出版社 2001 张尧学 史美林计算机操作系统教程实验指导 清华大学出版社 2000 罗宇等 操作系统课程设计机械工业出版社 2005审查意见审查意见指导教师签字:指导教师签字:教研室主任签字:教研室主任签字: 年年 月月 日日 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页3填填 表表 说说 明明1 “课题性质课题性质”一栏:A工程设计;B工程技术研究;C软件工程(如 CAI 课题等) ;D文献型综述;E其它。2 “课题来源课题来源

4、”一栏:A自然科学基金与部、省、市级以上科研课题;B企、事业单位委托课题;C校、院(系、部)级基金课题;D自拟课题。41 需求分析1)假设每个页面中可存放 10 条指令,分配给作业的内存块数为 4。2)用 C 语言模拟一个作业的执行过程,该作业共有 320 条指令,即它的地址空间为 32 页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果 4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。在所有 320 指令执行完毕后,

5、请计算并显示作业运行过程中发生的缺页率。3)置换算法:最少访问(LFU)算法。通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。所有内容均为独立完成。2 概要设计本实验主要分为以下几个重要实现过程:(1) 首先由对应函数按照题目要求产生对应的 320 条随即指令。(2) 当指令到来时,首先查询 4 个物理模块中是否含有当前指令,如果有则直接下一条指令,若没有就进行判定查找物理块中是否还有空闲盘块,有该指令则直接调入,无则要发生页面置换。(3) 按照一定规则(LFU)进行页面置换,知道最后一条指令完成后,显示缺页次数和缺页率。程序中自定义的函数(函数名,参

6、数,以及功能)及结构等如下:#define Bsize 4 定义一个全局的物理块大小 4struct BLOCK 物理块类型的申明int pagenum; /用于存储页号int use; /用于计算最近使用次数;int num=0; /记录指令的序号int n=0; /记录缺页的次数static int temp320; /用来存储 320 条指令5struct BLOCK block4; /大小为 4 的物理块数组int findExist(int curpage);/查找物理块中是否有该页面int findSpace(); /查找是否有空闲物理块int findReplace(); /查找

7、应予置换的页面void display(); /显示置换过程void zhiling(); /产生 320 条指令,显示并存储到 temp320,并调度页号队列void LFU(); /LFU 算法3 运行环境软件:Windows 98 及以上操作系统,Microsoft Visual C+ 6.0 版本硬件: 512M CPU 内存及以上的计算机4 开发工具和编程语言开发工具:Microsoft Visual C+ 6.0编程语言:C 语言5 详细设计(1)产生 320 条指令,显示并存储到 temp320,并调度页号队列320 条随即指令的产生规则如下: 在0,319的指令地址之间随机选取

8、一起点 m; 顺序执行一条指令,即执行地址为 m+1 的指令; 在前地址0,m+1中随机选取一条指令并执行,该指令的地址为 m; 顺序执行一条指令,其地址为 m+1 的指令; 在后地址m+2,319中随机选取一条指令并执行; 重复上述步骤,直到执行 320 次指令。代码如下:void zhiling()int i;srand(int)time(NULL); 产生随机数必须调用printf(“随机产生第一条指令号(0320):“);num=rand()%320; 产生第一条随机指令6printf(“%d“,num);printf(“nnt 按照要求产生 320 个随机数:“);printf(“n

9、*n“);for(i=0;i #include #include #include #define Bsize 4struct BLOCK /声明物理块类型 int pagenum; /页号 int use; /最近使用次数 ; int num=0; /记录指令的序号 int n=0; /记录缺页的次数 static int temp320; /用来存储 320 条指令 struct BLOCK block4; /大小为 4 的物理块数组/* */int findExist(int curpage); /查找物理块中是否有该页面 int findSpace(); /查找是否有空闲物理块 int

10、 findReplace(); /查找应予置换的页面 void display(); /显示置换过程 void zhiling(); /产生 320 条指令,显示并存储到 temp320,并调度页号队列 void LFU(); /LFU 算法/* */int findExist(int curpage)/查找物理块中是否有该页面 int i; for(i=0; iBsize; i+) if(blocki.pagenum = curpage ) return i;/检测到内存中有该页面,返回 block 中的位置 return -1; /* */17int findSpace()/查找是否有空闲

11、物理块 int i; for(i=0; iBsize; i+) if(blocki.pagenum = -1) return i;/找到空闲的 block,返回 block 中的位置 return -1; /* */int findReplace()/查找应予置换的页面 int i,min=0; for(i=0;iBsize;i+) if(blocki.useblockmin.use) min=i;/找到应予置换页面,返回 BLOCK 中位置 return min; /* */void display()/显示置换过程 int i; for(i=0; iBsize; i+) if(blocki

12、.pagenum != -1) printf(“ %02d“,blocki.pagenum); printf(“n“); /* */18void zhiling()/产生 320 条指令,显示并存储到 temp320,并调度页号队列 int i; srand(int)time(NULL); printf(“随机产生第一条指令号(0320):“); num=rand()%320; printf(“%d“,num); printf(“nnt 按照要求产生 320 个随机数:“); printf(“n*n“); for(i=0;i320;i=i+5) tempi=num; tempi+1=num+1; tempi+2=rand()%(num+1); tempi+3=tempi+2+1; tempi+4=tempi+3+1+rand()%(320-tempi+3-1); num=rand()%320; for(i=0;i320;i+) printf(“ %03d“,tempi); if(i+1)%10=0) printf(“n“); printf(“nn 对应的调用页面队列“); printf(“n*

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

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号