2121014塔娜操作系统课设报告.docx
- 文档编号:14703642
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:21
- 大小:192.21KB
2121014塔娜操作系统课设报告.docx
《2121014塔娜操作系统课设报告.docx》由会员分享,可在线阅读,更多相关《2121014塔娜操作系统课设报告.docx(21页珍藏版)》请在冰点文库上搜索。
2121014塔娜操作系统课设报告
实习题目
指导教师
职称
学生姓名
学号
日期
实习题目
指导教师
职称
学生姓名
学号
日期
内蒙古师范大学计算机与信息工程学院
《操作系统》课程设计报告
实习题目
指导教师
职称
学生姓名
学号
日期
设计题目
课题三设计一个虚拟存储区和内存工作区,编程序演示下述置换算法的具体实现过程,并计算访问命中率:
指导教师
职称
姓名
学号
日期
2010-10-22
1设计任务
设计一个虚拟存储区和内存工作区,编程序演示下述置换算法的具体实现过程,并计算访问命中率。
2设计的功能目标
要求从主界面选择某算法,且以下算法都要实现:
1、先进先出算法(FIFO)
2、最近最久未使用算法(LRU)
3、随机淘汰算法(RAND)
3设计的思想、方法和技术(含数据结构、算法)
3.1设计的思想
通过键盘选择后实现三种页面置换算法(包括:
先进先出算法,最近最久未使用和随机选择算法):
1.输入进程划分的页数,给进程分配的页面数和访问串的长度
2.通过随机产生访问串序列(或者可以由试验者手动输入自己想要测试的访问串序列)
3.选择要演示的置换算法
(1)最近最少使用算法(LRU)
(2)随机置换算法
(3)进先出的算法(FIFO)
4.显示三种置换算法的置换流程
5.将访问串序列转换成为进入内存页面的页号流输出。
6.计算输出各种置换算法的缺页次数,缺页率和命中率
7.显示要调出内存的页号
8.选择重新输入还是继续演示
3.2数据结构
3.2.1页状态结构
structpage
{
intpage_num;//页号
intmemory_num;//页面号
intflag;//页状态
};
其中page_num表示页号(处于0~页数之间)
memory_num表示页面号(处于0~页面数之间)
flag表示页号为page_num的页是否在内存中(0无1有)
pagepage_table[100];//实验中固定的定义了100个page形数据
3.2.2定义的数据(全局变量)
intpage_size,memory_size,page_s;//表示访问串的长度,分配的页面数和进程分为的页数
int*page_array,*memory;//访问串数组的头指针和存放页面内容的头指针
3.2.3一些特殊的局部变量
LackTime//表示缺页次数
Page//计算调出的页数
Is_full//计算页面数
Save[]//存放要换出的页号(在随机置换算法和先进先出算法中)
Change_page//存放要换出的页号(在最近最久未使用置换算法中)
Weight[]//在最近最久未使用算法中求最近最久未使用的页
3.2.4定义的函数
voiddisplay();//显示输出函数,用于在调用三种算法来输出页面内容
voiderror();//返回出错信息
voidFIFO();//先进先出算法实现函数
voidsuiji();//随机淘汰算法实现函数
voidlru()//最近最久未使用算法实现函数
voidadvance()//对页状态的初始化
3.3流程图
3.3.1总体流程图
图3.1总程序的流程图
3.3.2先进先出算法流程图
图3.2FIFO算法流程
3.3.3随即淘汰算法流程图
图3.3随机淘汰算法图
3.3.4最近最久未使用算法流程图
图3.4LRU算法流程
4设计的主要代码及注释
4.1先进先出算法主要代码
for(inti=0;i { in=0;//初始化,做标志位 if(page_table[page_array[i]].flag==1)//查看i号页的状态位判断是否在内存中 { cout<<"【"< 所以内存中页面内容为: "< in=1;//并置有关状态位 } if(in==0&&memory[memory_size-1]! =-1)//内存中没有将要调用的页且没有空闲的内存页面 { lackTime++;//缺页次数加一 for(intj=0;j { if(page_table[j].memory_num==n) { cout<<"【"< save[page++]=j;//将要调出的页号记录 page_table[j].memory_num=-1;//将调出的页的相关状态还原 page_table[j].flag=0; break; } } memory[n]=page_array[i];//将新页号调入内存页面数组中储存并更改对应页的状态 page_table[page_array[i]].flag=1; page_table[page_array[i]].memory_num=n; ++n; if(n==memory_size)n=0;//当n的值等于页面数时,置零后开始下一组页的调入 } if(in==0&&memory[memory_size-1]==-1)//当内存中无对应的页且内存中有空闲页面时 { cout<<"【"< "< lackTime++; memory[is_full]=page_array[i];修改相应的页状态和页面内容,用于显示输出 page_table[page_array[i]].flag=1; page_table[page_array[i]].memory_num=is_full; is_full++; } for(intq=0;q cout< cout< } 4.2随机淘汰算法主要代码: for(inti=0;i { in=0;//初始化,做标志位 if(page_table[page_array[i]].flag==1)//查看i号页的状态位判断是否在内存中 { cout<<"【"< 所以内存中页面内容为: "< in=1;//并置有关状态位 } if(in==0&&memory[memory_size-1]! =-1)//内存中没有将要调用的页且没有空闲的内存页面 { lackTime++;//缺页次数加一 replace=rand()%memory_size;//通过随机函数产生0~memory_size之间的随机数 for(intj=0;j { if(page_table[j].memory_num==replace) { cout<<"【"< save[page++]=j;//将要调出的页号记录 page_table[j].memory_num=-1;//将调出的页的相关状态还原 page_table[j].flag=0; break; } } memory[replace]=page_array[i];//将新页号调入内存页面数组中储存并更改对应页的状态 page_table[page_array[i]].flag=1; page_table[page_array[i]].memory_num=replace; } if(in==0&&memory[memory_size-1]==-1)//当内存中无对应的页且内存中有空闲页面时 { cout<<"【"< "< lackTime++; memory[is_full]=page_array[i];//修改相应的页状态和页面内容,用于显示输出 page_table[page_array[i]].flag=1; page_table[page_array[i]].memory_num=is_full; is_full++; } for(intq=0;q cout< cout< } }4.3最近最久未使用算法主要代码 for(i=0;i { in=0;//初始化相应的标志位 for(q=0;q { if(page_array[i]==memory[q])//当该页已经在内存中时 { cout<<"【"< "< in=1;break;//改变状态为并退出当前for循环 } } if(in==0&&memory[memory_size-1]! =-1)//当内存中无该页面且内存无空闲页面时 { lackTime++;//缺页次数加一 for(q=0;q weight[q]=0; for(q=0;q { for(intp=i-1;p>=0;p--) { weight[q]++;//计算页面中各页到其余页的权重,加一 if(memory[q]==page_array[p])break;//当有相同的页时推出此层循环 } } max=0; for(q=0;q { if(weight[q]>max) max=weight[q];//找出最大的weight[q]中的q值 } for(q=0;q if(max==weight[q])break;//找到要置换的页面号且将要进入的页换进 cout<<"【"< change_page[k++]=memory[q]; memory[q]=page_array[i]; } if(in==0&&memory[memory_size-1]==-1)//内存中没有相应的页且内存有空闲页面 { cout<<"【"< "< lackTime++;memory[l++]=page_array[i];//将要进入的页调入页面中 } for(intq=0;q cout< cout< } 5结果分析(含实现中出错原因分析) 5.1运行结果 ----------------------------模拟缺页时的置换算法: ------------------------------ 请输入给定进程的页数: 7 输入给该进程分配内存的物理块数(即页面数) 3 请输入程序访问内存的访问串的长度 9 请输入数字0或1其中: 0.用户自己输入访问串序列1.随机生成访问串序列 1 随机生成访问的访问串序列为 616532505 请选择使用那种替换算法: 0、退出1、LRU2、随机3、FIFO 1 ---------------------------------LRU-------------------------------------- 分配给此进程的内存页面数为3: 当内存中没有调入页时用-1表示 -1-1-1 ----------------缺页产生的序列如下: ------------------ 【6】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 6-1-1 【1】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 61-1 【6】号页已经存在内存中,此处不用调入,即保持上次调入的状态: 61-1 【5】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 615 【3】号页不在内存中,发生置换算法,并换掉页1 635 【2】号页不在内存中,发生置换算法,并换掉页6 235 【5】号页已经存在内存中,此处不用调入,即保持上次调入的状态: 235 【0】号页不在内存中,发生置换算法,并换掉页3 205 【5】号页已经存在内存中,此处不用调入,即保持上次调入的状态: 205 ----缺页次数: 6 ----缺页率: 66.6667% ----命中率: 33.3333% -----淘汰页号: 1->6->3->结束 ------------------------------LRU----------------------------------- 以之前的数据继续模拟其他算法(Y/y)? 重新输入各项参数模拟(N/n)? 退出(y、n之 外的任意键)y 请选择使用那种替换算法: 0、退出1、LRU2、随机3、FIFO 2 -----------------------------------随机淘汰置换算法----------------------------- ----------------------------随即淘汰置换算法步骤--------------------: 分配给此进程的内存页面数为3: 当内存中没有调入页时用-1表示 -1-1-1 ----------------缺页产生的序列如下: ------------------ 【6】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 6-1-1 【1】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 61-1 【6】号页已经在内存中,不需调入! 所以内存中页面内容为: 61-1 【5】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 615 【3】号页不在内存中,所以要发生置换,并换掉页5 613 【2】号页不在内存中,所以要发生置换,并换掉页3 612 【5】号页不在内存中,所以要发生置换,并换掉页2 615 【0】号页不在内存中,所以要发生置换,并换掉页1 605 【5】号页已经在内存中,不需调入! 所以内存中页面内容为: 605 ----缺页次数: 7 ----缺页率: 77.7778% ----命中率: 22.2222% ----淘汰页号的序列为: 5->3->2->1->结束 -------------------------------------------------------------------------- 以之前的数据继续模拟其他算法(Y/y)? 重新输入各项参数模拟(N/n)? 退出(y、n之 外的任意键)y 请选择使用那种替换算法: 0、退出1、LRU2、随机3、FIFO 3 -----------------------------------FIFO---------------------------------- ------------------------FIFO算法步骤--------------------: 分配给此进程的内存页面数为3: 当内存中没有调入页时用-1表示 -1-1-1 ----------------缺页产生的序列如下: ------------------ 【6】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 6-1-1 【1】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 61-1 【6】号页已经在内存中,不需调入! 所以内存中页面内容为: 61-1 【5】号页不在内存中且内存有空闲页面,不发生置换算法直接调入该页后页面内容如下: 615 【3】号页不在内存中,所以要发生置换,并换掉页6 315 【2】号页不在内存中,所以要发生置换,并换掉页1 325 【5】号页已经在内存中,不需调入! 所以内存中页面内容为: 325 【0】号页不在内存中,所以要发生置换,并换掉页5 320 【5】号页不在内存中,所以要发生置换,并换掉页3 520 ----缺页次数: 7 ----缺页率: 77.7778% ----命中率: 22.2222% ----淘汰页号的序列为: 6->1->5->3->结束 -------------------------------------------------------------------------- 以之前的数据继续模拟其他算法(Y/y)? 重新输入各项参数模拟(N/n)? 退出(y、n之 外的任意键)n ----------------------------模拟缺页时的置换算法: ------------------------------ 请输入给定进程的页数: 7 输入给该进程分配内存的物理块数(即页面数) 8 请输入程序访问内存的访问串的长度 9 由于分配给进程的页面数足够,可以不用发生置换算法,退出此操作重新输入数据 ----------------------------模拟缺页时的置换算法: ------------------------------ 请输入给定进程的页数: 7 输入给该进程分配内存的物理块数(即页面数) 3 请输入程序访问内存的访问串的长度 9 请输入数字0或1其中: 0.用户自己输入访问串序列1.随机生成访问串序列 2 输入出错! ----------------------------模拟缺页时的置换算法: ------------------------------ 请输入给定进程的页数: 5.2结果分析 1.在每种置换算法的置换步骤中,首先都是先输出此次要调用的页号,然后是相关的内存页面中的各种信息,最后才输出调入当前执行的页后的页面的内容(空页面一把都是用-1标示的)。 2.在一种算法所有的置换步骤结束后才依次输出缺页次数,缺页率,命中率和要置换出去的页号。 3.还有的就是一种特殊的情况: 即当进程分成的页数小于分配给内存的页面数时,是不用发生置换算法的。 所以该系统会输出提示信息并且返回重新输入。 4.在输错对应项的数字时,系统会提示输入出错重新开始计算。 5.在一项算法结束后系统会询问用户是按之前的数据检验其他的算法还是要重新输入数据开始模拟新的置换算法亦或是退出此系统。 5.3出错原因分析 由于在dev_cpp中编译及调试,当到telnet下实现时会出现错误,究其原因时因为我所用的随机淘汰算法的函数名random()与linux系统调用有重名,所以报错,换函数名后正确。 6设计小结(即收获和体会) 经过几个星期的上机实践学习,使我对操作系统这门课程有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是以前的C语言基础没打好,一些基本常识性东西都不知道,再有操作时有很多很生疏的东西,虽然在学习课本知识的时感觉什么东西都很简单,但真正操作起来确实如此之难,语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。 通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习操作系统,还是其它的课程,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。 此次课设不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才可以掌握的更加透彻。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2121014 操作系统 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)