操作系统课程设计报告书设计一个虚拟存储区和内存工作区.docx
- 文档编号:14674951
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:15
- 大小:274.88KB
操作系统课程设计报告书设计一个虚拟存储区和内存工作区.docx
《操作系统课程设计报告书设计一个虚拟存储区和内存工作区.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告书设计一个虚拟存储区和内存工作区.docx(15页珍藏版)》请在冰点文库上搜索。
操作系统课程设计报告书设计一个虚拟存储区和内存工作区
课程设计任务书
学生姓名:
专业班级:
计网2093班
指导教师:
工作单位:
信息工程系
设计题目:
设计一个虚拟存储区和内存工作区
初始条件:
Linux操作系统,GCC编译环境
要求完成的主要任务
主要任务:
通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。
1、最佳淘汰算法(OPT)
2、先进先出的算法(FIFO)
3、最近最久未使用算法(LRU)
设计程序时先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。
设计报告撰写格式要求:
1设计题目与要求2设计思想
3系统结构4数据结构的说明和模块的算法流程图
5使用说明书(即用户手册):
内容包含如何登录、退出、读、写等操作说明
6运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)
7自我评价与总结
8附录:
程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;
时间安排
6月20日布置课程设计任务;分配题目后,查阅资料、准备程序;
6月21~6月23日上机调试程序、书写课程设计报告;
6月24日提交课程设计报告及相关文档。
指导教师签名:
2011年6月18日
系主任签名:
2011年6月19日
课程设计报告书
一.设计题目:
设计一个虚拟存储区和内存工作区
二.设计要求:
1、设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。
最佳淘汰算法(OPT)
先进先出的算法(FIFO)
最近最久未使用算法(LRU)
设计程序时先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。
2、所编辑的程序能够在Linux系统中GCC环境下正常运行。
三.设计思想:
先建立三种算法的基本结构,再在主程序中调用,并实现其功能。
1、最近最久未使用(LRU)置换算法的思路
最近最久未使用置换算法的实质是当需要置换一页时,选择最长时间未被使用的那一页淘汰。
为了能检测出那一页长时间未被使用我们可以设置一个计数器oldest2(),把每一次放入固定内存内的序列数做一个统计,通过选择将计数最少的数淘汰出去。
2、最佳淘汰(OPT)置换算法的思路
最佳算法是当调入一新页而必须先淘汰一旧页,所淘汰的那一页应是以后不再使用的,或者是在最长时间段之后才会用到的页。
这就需要我们先要知道所要放入页的内容,然后逐一判断那些页应该在放入内存后可以被淘汰。
这个我用oldest()这个函数实现这一筛选功能,先用两个循环对内存中的数与随机序列对比,看有没有相等的数,然后利用计数器oldest2()返回未来最长时间不使用的页面位置。
3、先进先出(FIFO)置换算法的思路
先进先出算法实际上是选择在主存中居留最久的一页淘汰,即先进入主存的页。
可以利用一个查询函数IsInBuf()来判断所要置换的页面与内存中的页面是否有重复,重复不置换,不重复就利用一个赋值语句将旧页置换出来,这里最重要的是页号的操作,可以利用一个控制语句old=(old+1)%(int)B来进行页面的转换。
四.系统结构:
五.数据结构的说明和模块的算法流程图
1.数据结构的说明
作业的页面走向(执行过程中对页面的访问顺序)用数组,页面走向的长度控制以-1为终结符。
页框(作业分得的物理块)在不同置换算法执行之前长度由不同的置换算法其数据结构不同但原则式尽可能使程序的时间复杂度最低。
FIFO,采用队列,对于LRU堆栈。
2.模块的算法流程图
2.1FIFO算法的流程
图
2.2LRU算法的流程图
2.3 OPT算法的流程图
六.使用说明:
1.登录Linux系统的终端使用一下指令
1.1cd目录名(进入你存程序的文件夹)
1.2gedit文件名&(打开Linux系统内置的编译器并把文件导入文本区)
1.3回到终端输入gcc文件名(编译源程序)
1.4再次输入./a.out(运行源程序并得出结果)
1.5得出结果键入exit(退出所有操作)
2.使用MicrosoftVisualC++6.0编译运行
2.1直接将编好的文件导入到编译器中
2.2如图按钮执行编译运行操作
2.3退出直接关闭编译器即可
七.运行结果及分析
1运行结果
1.1FIFO算法与LRU算法命中率一样的情况
1.2FIFO算法命中率最低的情况
1.3FIFO算法比LRU算法命中率高的情况
2.运行结果分析
三种结果告诉我们OPT算法的命中率最高,淘汰页面最少,而FIFO算法和LRU算法在不同的情况下略有不同,但是淘汰的页面却有很大不同。
在理论上来说,LRU算法优于FIFO算法。
八.自我评价与总结
通过这次课程设计,不仅让我了解了页面置换算法,而且使我对操作系统这门课程有了更进一步的认识和了解,要想学好它要重在实践。
在有充分的理论基础的情况下要通过不断的上级操作才能更好地学习它。
在编好程序后,我一开始就一味的进行调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没有成功,我仔细的分析题目,分析材料,在原有基础上我进行了改正,经过了一番努力,最后还是调试成功了。
同时在编程阶段,我发现自己在逻辑思维的设计上还存在一定的缺陷,一些C语言的基础知识还未掌握到位,对于函数的形参与实参之间的转化还不是很清楚。
虽然在学习课本知识的时候感觉老师讲起来很好懂,但是一旦要运用到实际当中却不知道怎么转换,出现了对知识结构的空洞状态。
三种置换算法,特别是在FIFO算法与LRU算法的设计上出现了混乱状态,通过对运行结果的一次又一次的检查还有在老师的帮助下我才慢慢的洞察到自己到底哪里出现了问题,在设置置换标志与判断是否置换的条件设计上出现了考虑不周全的情况。
在找空闲物理块的时候,起初我比较物理块是否等于0,若为0,则直接把页面放入,后来发现不论什么时候都是把0替换出去,才恍然大悟,既然页面序列数有0就不能用0来表示空闲物理块,后来换成-1问题就解决了。
总而言之,虽然程序不是很完美,但是付出了汗水,也收获了结果,今后对于此类问题的设计可以有一个很好的借鉴意义。
希望能有下一次的实践机会,争取在程序设计的界面和逻辑上更加美观、自然。
附录:
程序清单
#include
#include
#include
#defineN39/*随即数列的长度*/
#defineB4/*内存的页面数*/
/*-----------------------------------------------------------------------------
函数名:
IsInBuf()
功能:
返回某个数X有没有在缓冲区Buf[]中,若在,返回其位置;若不在,则返回-1
-------------------------------------------------------------------------------*/
intIsInBuf(intbuf[],intx)
{
inti,j=-1;
for(i=0;i
{
if(buf[i]==x){j=i;break;}
elseif(buf[i]==-1){buf[i]=x;j=i;break;}
}
returnj;
}
/*-----------------------------------------------------------------------------
函数名:
oldest()
功能:
返回最近最久未使用的页面的位置
-----------------------------------------------------------------------------*/
intoldest(intlist[],intbuf[],intf[],intstart)
{
inti,j;
for(i=0;i
{
for(j=start;j { if(buf[i]==list[j])break; } f[i]=j; } returnoldest2(f); } /*----------------------------------------------------------------------------- 函数名: oldest2() 功能: 返回未来最长时间不使用的页面的位置 ------------------------------------------------------------------------------*/ intoldest2(intf[]) { inti,j=0,max=-1; for(i=0;i { if(f[i]>max){max=f[i];j=i;} f[i]++; } returnj; } /*---------------------------------------------------------------------------- 函数名: main() 功能: -----------------------------------------------------------------------------*/ main() { intlist[N]; intbuf[B],f[B],i,j,k,max,min; intold=0; intchange=0; printf("本程序假设内存为程序分配的内存块数是4! \n"); /*生成一系列随机数并初始化环境*/ srand((int)time(NULL)); for(i=0;i printf("\n产生的随机数列为: \n"); for(i=0;i { list[i]=(int)rand()%10;//产生随机数列 printf("%2d",list[i]); } printf("\n"); /*显示OPT淘汰页面的序列*/ printf("\nOPT淘汰页面的序列为: \n"); change=0; for(i=0;i for(i=0;i { j=IsInBuf(buf,list[i]); if(j==-1) { old=oldest(list,buf,f,i); printf("%2d",buf[old]); buf[old]=list[i]; f[old]=0; change++; } else { printf(""); } } /*输出OPT算法的命中率*/ printf("\nOPT算法的命中率为: %f\n",1-(float)change/39); /*显示FIFO淘汰页面的序列*/ printf("\nFIFO淘汰页面的序列为: \n"); change=0; for(i=0;i for(i=0;i { j=IsInBuf(buf,list[i]); if(j==-1) { if(buf[old]==-1)printf(""); elseprintf("%2d",buf[old]); buf[old]=list[i]; old=(old+1)%(int)B; change++; } else printf(""); } /*输出FIFO算法的命中率*/ printf("\nFIFO算法的命中率为: %f\n",1-(float)change/39); /*显示LRU淘汰页面的序列*/ printf("\nLRU淘汰页面的序列为: \n"); change=0; for(i=0;i for(i=0;i { j=IsInBuf(buf,list[i]); old=oldest2(f); if(j==-1) { printf("%2d",buf[old]); buf[old]=list[i]; f[old]=0; change++; } else { f[j]=0; printf(""); } } /*输出LRU算法的命中率*/ printf("\nLRU算法的命中率为: %f\n",1-(float)change/39); } 设计过程中质疑(或答辩)记载: 1.页面置换算法最主要的有哪几种? 答: 主要有最佳算法(OPT算法)、先进先出算法(FIFO算法)、最久未使用算法(LRU算法)、最不经常使用算法(LFU算法)等等。 2.什么是LRU置换算法? 答: LRU是LeastRecentlyUsed的缩写,实际上是选择在主存中居留最久的一页淘汰,即先进入主存的页,是为虚拟页式存储管理服务的。 3.虚拟存储技术的特点是什么? 答: 可以为使用者提供大容量、高数据传输性能的存储系统。 4.使用置换算法解决的是什么问题? 答: 解决的是如何选择当请求调页程序要调进一个页面、而此时该作业所分得的主存块已全部用完,则必须淘汰该作业已在主存中的一个页的问题。 指导教师评语: 签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告书 设计 一个 虚拟 存储 内存 工作