操作系统磁盘调度算法实验报告及代码Word下载.docx
- 文档编号:16033900
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:9
- 大小:71.06KB
操作系统磁盘调度算法实验报告及代码Word下载.docx
《操作系统磁盘调度算法实验报告及代码Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统磁盘调度算法实验报告及代码Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
由于这次的课程设计是单人做的,所以也增强了独立做程序的能力。
不过,通过这次课程设计,我也了解到自己有很多不足,比如在设计界面方面明显经验不足,许多地方都需要上网查询,以至于界面的简陋,代码也不够工整明了。
总的来说,这次课程设计不仅提升了自己的知识和能力,还让自己知道了自己的许多不足之处。
教师评语
评价指标:
●题目内容和要求完成情况优□良□中□差□
●对算法原理的理解程度优□良□中□差□
●程序设计水平优□良□中□差□
●程序运行效果及正确性优□良□中□差□
●课程设计报告结构清晰优□良□中□差□
●报告中总结和分析详尽优□良□中□差□
教师签名
1、需求分析:
(1)输入的形式和输入值的范围:
在文本框输入序列长度,输入值为int类型
(2)输出的形式:
输出每种磁盘调度算法的服务序列
(3)程序所能达到的功能:
模拟实现FCFS、SSTF、电梯LOOK、C-SCAN算法,并计算及比较磁头移动道数。
测试数据:
包括正确的输入及其输出结果和含有错误的输入及其输出结果。
输入磁道范围
0~1000
输入所选磁道个数
选择算法
1~4
2、概要设计:
主程序流程图:
3、详细设计:
先来先服务算法(FCFS):
按先来后到次序服务,未作优化。
最简单的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。
采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。
先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。
最短寻道时间优先算法(SSTF)
:
最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。
与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。
但最短查找时间优先(SSTF)调度,FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。
SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)。
扫描算法(SCAN):
SCAN
算法又称电梯调度算法。
SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。
“电梯调度”算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。
但是,“电梯调度”算法在实现时,不仅要记住读写磁头的当前位置,还必须记住移动臂的当前前进方向。
循环扫描(C-SCAN):
循环扫描CSCAN是为了减少SCAN算法造成的某些进程的请求被严重推迟,CSCAN算法规定磁头单向移动。
函数调用关系图:
4、调试分析:
(1)调试过程中遇到的问题是如何解决的以及对设计与实现的讨论和分析;
通过对每一行的输出判断问题出现在哪里,然后把出问题的地方缩小到一定范围,然后解决问题,如若解决不出则上网查询,再不行就咨询同学。
设计主要分为界面设计和算法设计,界面设计部分并没有进行过多的改进,算法部分SSTF算法实现的比较复杂,时间复杂度较高。
(2)算法的时间复杂性(包括基本操作和其他算法的时间复杂性的分析)和改进设想;
FIFO算法经历一重循环,时间复杂度为O(n),算法比较简单;
SSTF算法经历二重循环,时间复杂度为O(n^2),算法较为复杂
SCAN和CSCAN算法含多个一重循环,时间复杂度为O(n),动态数组存储服务序列;
(3)设计过程的经验和体会;
设计过程必须要考虑时间复杂度,过高的时间复杂度会导致程序执行效率低下。
必须要进行结构化设计,各个模块要很清晰的体现,能在代码中找到相关模块的代码,这样才便于程序的维护和调试。
(4)实现过程中出现的主要问题及解决方法。
主要问题是SSTF算法的设计。
解决方法是上网查询SSTF算法的代码,学习其中的算法思想,然后运用到自己的代码中去。
5、运行结果:
输入磁道范围、输入所选磁道个数、选择算法:
测试与运行结果:
输出请求序列、平均寻道时间:
6、总结:
七、源代码:
#include<
stdio.h>
iostream>
string.h>
math.h>
usingnamespacestd;
#definemaxsize1000
//判断输入的数据是否有效
intdecide(charstr[])
{
inti=0;
while(str[i]!
='
\0'
)
if(str[i]<
'
0'
||str[i]>
9'
return0;
break;
}
i++;
returni;
//将字符串转换为数字
inttrans(charstr[],inta)
inti;
intsum=0;
for(i=0;
i<
a;
i++)
sum=sum+(int)((str[i]-'
)*pow(10,a-i-1));
returnsum;
//冒泡排序算法
int*bubble(intcidao[],intm)
inti,j;
inttemp;
m;
for(j=i+1;
j<
j++)
if(cidao[i]>
cidao[j])
temp=cidao[i];
cidao[i]=cidao[j];
cidao[j]=temp;
cout<
<
"
排序后的磁盘序列为:
;
cidao[i]<
endl;
returncidao;
//当前磁道输入
intprintnow()
charstr[10];
inta,now;
请输入当前磁道号:
A:
cin>
>
str;
a=decide(str);
if(a==0)
输入数据类型有误,请重新输入!
gotoA;
else
now=trans(str,a);
returnnow;
intprintoi(intcidao[],intnow,intm)
磁道扫描序列为:
for(i=m-1;
i>
=0;
i--)
sum+=abs(now-cidao[i]);
now=cidao[i];
//直接由内向外依次给予各请求服务
intprintio(intcidao[],intnow,intm)
sum+=abs(cidao[i]-now);
//直接从当前次磁道到最外,再由外向内依次给予各请求服务
intprintioi(intcidao[],intnow,intm)
//直接从当前次磁道到最内,再由内向外依次给予各请求服务
intprintoio(intcidao[],intnow,intm)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 磁盘 调度 算法 实验 报告 代码