请求调页存储管理方式的模拟LFU含源代码Word文件下载.docx
- 文档编号:19173563
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:23
- 大小:100.96KB
请求调页存储管理方式的模拟LFU含源代码Word文件下载.docx
《请求调页存储管理方式的模拟LFU含源代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《请求调页存储管理方式的模拟LFU含源代码Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
任务要求
通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
参考文献
任满杰等《操作系统原理实用教程》电子工业出版社2006
汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社2001
张尧学史美林《计算机操作系统教程》实验指导清华大学出版社2000
罗宇等《操作系统课程设计》机械工业出版社2005
审查意见
指导教师签字:
教研室主任签字:
年月日
说明:
本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页
填表说明
1.“课题性质”一栏:
A.工程设计;
B.工程技术研究;
C.软件工程(如CAI课题等);
D.文献型综述;
E.其它。
2.“课题来源”一栏:
A.自然科学基金与部、省、市级以上科研课题;
B.企、事业单位委托课题;
C.校、院(系、部)级基金课题;
D.自拟课题。
1需求分析
所有内容均为独立完成。
2概要设计
本实验主要分为以下几个重要实现过程:
(1)首先由对应函数按照题目要求产生对应的320条随即指令。
(2)当指令到来时,首先查询4个物理模块中是否含有当前指令,如果有则直接下一条指令,若没有就进行判定查找物理块中是否还有空闲盘块,有该指令则直接调入,无则要发生页面置换。
(3)按照一定规则(LFU)进行页面置换,知道最后一条指令完成后,显示缺页次数和缺页率。
程序中自定义的函数(函数名,参数,以及功能)及结构等如下:
#defineBsize4定义一个全局的物理块大小4
structBLOCK{物理块类型的申明
intpagenum;
//用于存储页号
intuse;
//用于计算最近使用次数
};
intnum=0;
//记录指令的序号
intn=0;
//记录缺页的次数
staticinttemp[320];
//用来存储320条指令
structBLOCKblock[4];
//大小为4的物理块数组
intfindExist(intcurpage);
//查找物理块中是否有该页面
intfindSpace();
//查找是否有空闲物理块
intfindReplace();
//查找应予置换的页面
voiddisplay();
//显示置换过程
voidzhiling();
//产生320条指令,显示并存储到temp[320],并调度页号队列
voidLFU();
//LFU算法
3运行环境
软件:
Windows98及以上操作系统,MicrosoftVisualC++6.0版本
硬件:
512MCPU内存及以上的计算机
4开发工具和编程语言
开发工具:
MicrosoftVisualC++6.0
编程语言:
C语言
5详细设计
(1)产生320条指令,显示并存储到temp[320],并调度页号队列
320条随即指令的产生规则如下:
①在[0,319]的指令地址之间随机选取一起点m;
②顺序执行一条指令,即执行地址为m+1的指令;
③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′;
④顺序执行一条指令,其地址为m′+1的指令;
⑤在后地址[m′+2,319]中随机选取一条指令并执行;
⑥重复上述步骤①~⑤,直到执行320次指令。
代码如下:
voidzhiling(){
inti;
srand((int)time(NULL));
产生随机数必须调用
printf("
随机产生第一条指令号(0~320):
"
);
num=rand()%320;
产生第一条随机指令
%d"
num);
\n\n\t按照要求产生320个随机数:
\n*****************************************\n"
for(i=0;
i<
320;
i=i+5){按产生规则产生
temp[i]=num;
temp[i+1]=num+1;
temp[i+2]=rand()%(num+1);
temp[i+3]=temp[i+2]+1;
temp[i+4]=temp[i+3]+1+rand()%(320-temp[i+3]-1);
num=rand()%320;
}
i++){输出产生的320条指令
printf("
%03d"
temp[i]);
if((i+1)%10==0)
printf("
\n"
\n\n对应的调用页面队列"
\n*******************************\n"
i++){输出对应值指令的调用页面
%02d"
temp[i]/10);
}
(2)查找物理块中是否有该页面
当指令页curpage到达时与当前物理块中存放的页面block[i].pagenum比较。
intfindExist(intcurpage){
i<
Bsize;
i++){
if(block[i].pagenum==curpage)
returni;
//检测到内存中有该页面,返回block中的位置
return-1;
(3)查找是否有空闲物理块
在页面中没有该指令的页号时查找物理块中是否还有空闲块。
intfindSpace(){
if(block[i].pagenum==-1)
//找到空闲的block,返回block中的位置
(4)查找应予置换的页面
当新的指令到达且物理块已无空闲时,将LFU算法传递过来的每个页面的使用计数进行比较,找出最小的min作为将被置换的页面。
intfindReplace(){
inti,min=0;
i++){
if(block[i].use<
block[min].use)
min=i;
//找到应予置换页面,返回BLOCK中位置
returnmin;
(5)显示置换过程
按要求将物理块中所发生的所有变动(即空块进入和满块置换)的过程予以输出显示。
voiddisplay(){
if(block[i].pagenum!
=-1){
block[i].pagenum);
}
(6)LFU算法
LFU算法部分为整个实验的核心,主要实现页面置换的过程。
voidLFU(){
intexist,space,position;
intpage,i,j,k;
doublepr;
i++){
num=temp[i];
//指令记录号
page=num/10;
//页号
exist=findExist(page);
//是否有记录
if(exist==-1){//没有
space=findSpace();
//判断是否为空的标记
if(space!
=-1){//有空盘块
block[space].pagenum=page;
display();
n=n+1;
//计算缺页次数
}else{//没有空盘块
for(k=0;
k<
k++){
for(j=i;
j<
i+64;
j++){//自行设定的访问时间段
if(block[k].pagenum==temp[j]/10){//有使用记录
block[k].use++;
//记录使用次数
}
else{//最近未使用
;
}
}
position=findReplace();
block[position].pagenum=page;
n++;
//计算缺页次数
}
pr=n/320.0;
缺页次数:
%d\n"
n);
缺页率:
%.3lf\n"
pr);
命中率:
1-pr);
(7)main函数
voidmain(){
i++){//物理块中变量的初始化
block[i].pagenum=-1;
//初始没有赋值
block[i].use=0;
//页面使用次数
zhiling();
\n\n最少使用算法LFU实现:
********************\n"
LFU();
6调试分析
本程序为一次性简易模式,不需要用户键入其他任何指令只需点击执行,程序便输出全部过程及结果。
点击执行后程序首先自动产生第一条随机指令,然后依照要求产生后续4条,以此循环知道产生共计320条完整指令,并以每10条指令为一页的规则显示输出对应页面队列。
经调试没有任何问题。
在进行LFU算法的实现上很曲折。
该算法选择在最近使用最少的页面作为淘汰页,由于存储器具有较高的访问速度,每毫秒可能对某个页面连续访问成千上万次,所以通常难以采用计数器,因为这样会访问量过大,每次都要进行比较,会影响执行速度。
书上建议采用移位寄存器,但是由于在每一时间间隔内,只是用移位寄存器的一位来记录页的使用情况,访问一次和10000次是等效的。
因此,LFU算法并不能真正反映页面的使用情况。
考虑到这样的客观因素我询问了老师,老师也说这个事有争议的,我可以选择使用LRU实现。
在综合考虑过过后,还是决定采用计数的方式完成。
7测试结果
图1随机指令1图2随机指令2
图3页面队列1图4页面队列2
图5结果图1图6结果图2图7结果图3图8结果图4
图9结果图5图10结果图6图11结果图7
[1]任满杰等,操作系统原理实用教程,电子工业出版社,2006
[2]汤子瀛,计算机操作系统(修订版),西安电子科技大学出版社,2001
[3]张尧学,计算机操作系统教程实验指导,清华大学出版社,2000
[4]罗宇等,操作系统课程设,计机械工业出版社,2005
[5]何钦铭,C语言程序设计,高等教出版社,2008
心得体会
一周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我独立去准备、去做成一件事的能力。
在这次设计过程中,体现出了自己单独设计模拟算法的能力以及综合运用知识的能力,让我切身体会到了学以致用、突出自己劳动成果的喜悦心情,从中也发现自己平时学习中的不足之处和薄弱环节,同时也印证了一个道理“高山起微尘,千里始足下”。
在此要感谢我们的于俊伟老师,虽说接触不多,但老师严谨细致、一丝不苟的作风深深影响了我;
这次课程设计的最重要环节LFU,也离不开老师您的引导,正因为老师宽容的态度和不拘一格的教导,我才能够很顺利的完成了这次课程设计。
另外也要特别感谢对我帮助过的同学们,谢谢你们对我的帮助和支持。
由于本人的设计能力有限,在设计过程中难免会有瑕疵,恳请老师们多多指教,我十分乐意接受你们的批评与指正,因为这将会提升自我完善自我。
信息科学与工程学院课程设计成绩评价表
课程名称:
操作系统原理
设计题目:
请求调页存储管理方式的模拟4(LFU)
专业:
计算机科学与技术班级:
姓名:
学号:
序号
评审项目
分数
满分标准说明
1
内容
思路清晰,语言表达准确,概念清楚,论点正确;
设计方法科学,分析归纳合理;
结论严谨,设计有应用价值。
任务饱满,工作量适中
2
创新
内容新颖,设计能反映新技术,对前人工作有改进或突破,或有独特见解
3
完整性、实用性
整体构思后合理,理论依据充分,设计完整,实用性强
4
数据准确、可靠
数据准确,算法设计合理
5
规范性
设计格式、绘图、实验数据、标准的运用等符合有关标准和规定
6
纪律性
遵守课程设计纪律,听从指导教师安排,设计过程态度认真
7
答辩
准备充分,思路清晰、论点正确、对设计方案理解深入,问题回答有理有据,简明正确
总分
综
合
意
见
在实验中思路清晰,语言表达准确,概念清楚,论点正确;
课程设计设计方法科学,分析归纳合理;
结论严谨。
整体任务饱满,工作量适中。
内容较为新颖,设计能反映新技术。
整体构思前后后合理,理论依据充分,设计完整。
数据准确,算法设计合理。
设计格式、实验数据、标准的运用等符合有关标准和规定。
遵守课程设计纪律,听从指导教师安排,设计过程态度认真。
准备充分,思路清晰、论点正确、对设计方案理解深入,问题回答有理有据,简明正确。
指导教师2013年1月5日
附:
源代码
#include<
iostream.h>
stdlib.h>
stdio.h>
time.h>
#defineBsize4
structBLOCK//声明物理块类型
{
//最近使用次数
/*****************************************************************************************/
//查找物理块中是否有该页面
//查找是否有空闲物理块
//查找应予置换的页面
//显示置换过程
//LFU算法
intfindExist(intcurpage)//查找物理块中是否有该页面
i++)
{
intfindSpace()//查找是否有空闲物理块
intfindReplace()//查找应予置换的页面
voiddisplay()//显示置换过程
=-1)
{
voidzhiling()//产生320条指令,显示并存储到temp[320],并调度页号队列
i=i+5)
{
i++)
//printf("
发生缺页\n"
j++){//自行设定的访问时间段
//display();
//printf("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 请求 存储 管理 方式 模拟 LFU 源代码