操作系统课程设计磁盘调度算法Word下载.docx
- 文档编号:20428195
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:22
- 大小:212.52KB
操作系统课程设计磁盘调度算法Word下载.docx
《操作系统课程设计磁盘调度算法Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计磁盘调度算法Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
array[]:
放置磁道号的数组;
voidFCFS(intarray[],intm)先来先服务算法(FCFS)
voidSSTF(intarray[],intm)最短寻道时间优先算法(SSTF)
voidSCAN(intarray[],intm)扫描算法(SCAN)
voidCSCAN(intarray[],intm)循环扫描算法(CSCAN)
磁盘调度:
当有多个进程都请求访问磁盘时,采用一种适当的驱动调度算法,使各进程对磁盘的平均访问(主要是寻道)时间最小。
目前常用的磁盘调度算法有:
1)闲来先服务2)最短寻道时间优先3)扫描算法4)循环扫描算法等
3题目分析
选择一个自己熟悉的计算机系统和程序设计语言模拟操作系统基本功能的设计方法及其实现过程
完成各分项功能。
在算法的实现过程中,要求可决定变量应是动态可变的;
同时模块应该有一个合理的输出结果。
具体可参照实验的程序模拟.各功能程序要求自行编写程序实现,不得调用现有操作系统提供的模块或功能函数。
磁盘调度程序模拟。
先来先服务调度算法.最短寻道时间优先调度,循环(SCAN)调度算法。
程序设计语言自选,最终以软件(含源代码以及执行程序)和设计报告的形式提交课程设计结果.。
磁盘调度让有限的资源发挥更大的作用。
在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。
由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列。
4概要设计
1.先来先服务(FCFS)的设计思想
即先来的请求先被响应。
FCFS策略看起来似乎是相当"
公平"
的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。
FCFS策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间。
为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用FCFS策略。
这个过程就叫做磁盘调度管理。
有时候fcfs也被看作是最简单的磁盘调度算法。
2.最短寻道时间优先调度(SSTF)的设计思想
最短时间优先算法选择这样的进程。
要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。
3.扫描算法(SCAN)的设计思想
扫描(SCAN)调度算法:
该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。
例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。
这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁道换向自外向里移动。
这时,同样也是每次选择这样的进程来调度,也就是要访问的当前位置内距离最近者,这样,磁头又逐步地从外向里移动,直至再无更里面的磁道要访问,从而避免了出现“饥饿”现像。
4.循环扫描(CSACN)的设计思想
循环扫描(CSCAN)算法:
当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该里程就必须等待,为了减少这种延迟,CSCAN算法规定磁头单向移动,而本实验过程中我们所设计的是磁头从里向外移动,而从外向里移动时只须改方向而已,本实验未实现。
但本实验已完全能演示循环扫描的全过程。
5代码及流程
1.先来先服务(FCFS)
图1—1FCFS的流程图
2.最短寻道时间优先调度(SSTF)
图1—2SSTF的流程图
3.扫描算法(SCAN)
图1—3SCAN的流程图
4.循环扫描(CSCAN)
图1—4CSCAN的流程图
图1—5主函数的流程图
源代码:
#include"
stdio.h"
stdlib.h"
//#include"
iostream.h"
#definemaxsize100//定义最大数组域
//先来先服务调度算法
voidFCFS(intarray[],intm)
{
intsum=0,j,i;
intavg;
printf("
\nFCFS调度结果:
"
);
for(i=0;
i<
m;
i++)//输出FCFS磁盘调度结果
%d"
array[i]);
}
for(i=0,j=1;
j<
i++,j++)
sum+=abs(array[j]-array[i]);
//累计总的移动距离
avg=sum/(m-1);
//计算平均寻道长度
\n移动的总道数:
%d\n"
sum);
平均寻道长度:
avg);
//最短寻道时间优先调度算法
voidSSTF(intarray[],intm)
inttemp;
intk=1;
intnow,l,r;
inti,j,sum=0;
i++)
for(j=i+1;
j++)//对磁道号进行从小到大排列
if(array[i]>
array[j])//两磁道号之间比较
temp=array[i];
array[i]=array[j];
array[j]=temp;
for(i=0;
i++)//输出排序后的磁道号数组
\n请输入当前的磁道号:
"
scanf("
%d"
&
now);
\nSSTF调度结果:
if(array[m-1]<
=now)//判断整个数组里的数是否都小于当前磁道号
{
for(i=m-1;
i>
=0;
i--)//将数组磁道号从大到小输出
sum=now-array[0];
//计算移动距离
elseif(array[0]>
=now)//判断整个数组里的数是否都大于当前磁道号
i++)//将磁道号从小到大输出
sum=array[m-1]-now;
else
while(array[k]<
now)//逐一比较以确定K值
k++;
l=k-1;
r=k;
//确定当前磁道在已排的序列中的位置
while((l>
=0)&
&
(r<
m))
if((now-array[l])<
=(array[r]-now))//判断最短距离
array[l]);
sum+=now-array[l];
now=array[l];
l=l-1;
array[r]);
sum+=array[r]-now;
now=array[r];
r=r+1;
if(l=-1)
for(j=r;
j++)
array[j]);
sum+=array[m-1]-array[0];
for(j=l;
j>
j--)
avg=sum/m;
//扫描算法
voidSCAN(intarray[],intm)//先要给出当前磁道号和移动臂的移动方向
intnow,l,r,d;
array[j])//对磁道号进行从小到大排列
//输出排序后的磁道号数组
\nSCAN调度结果:
i--)
//将数组磁道号从大到小输出
//将磁道号从小到大输出
\n请输入当前移动臂的移动的方向(1磁道号增加方向,0磁道号减小方向):
d);
if(d==0)
sum=now-2*array[0]+array[m-1];
}//磁道号减小方向
sum=-now-array[0]+2*array[m-1];
}//磁道号增加方向
//循环扫描算法
voidCSCAN(intarray[],intm)
\nCSCAN调度结果:
sum=now-array[0]+array[m-1];
for(j=m-1;
=r;
sum=2*(array[m-1]-array[0])-array[r]+now;
for(j=0;
r;
sum=2*(array[m-1]-array[0])+array[r-1]-now;
//操作界面
intmain()
intc;
FILE*fp;
//定义指针文件
intcidao[maxsize];
//定义磁道号数组
inti=0,count;
fp=fopen("
cidao.txt"
"
r+"
//读取cidao.txt文件
if(fp==NULL)//判断文件是否存在
\n请先设置磁道!
\n"
exit(0);
while(!
feof(fp))//如果磁道文件存在
fscanf(fp,"
cidao[i]);
//调入磁道号
i++;
count=i-1;
\n--------------------------------------------------\n"
10-11年度OS课程设计--磁盘调度算法系统\n"
计算机科学与技术二班\n"
姓名:
宋思扬\n"
学号:
0803050203\n"
电话:
************\n"
2010年12月29日\n"
\n磁道读取结果:
\n"
count;
%5d"
cidao[i]);
//输出读取的磁道的磁道号
\n"
while
(1)
\n算法选择:
1、先来先服务算法(FCFS)\n"
2、最短寻道时间优先算法(SSTF)\n"
3、扫描算法(SCAN)\n"
4、循环扫描算法(CSCAN)\n"
5.退出\n"
请选择:
c);
if(c>
5)
break;
switch(c)//算法选择
case1:
FCFS(cidao,count);
//先来先服务算法
case2:
SSTF(cidao,count);
//最短寻道时间优先算法
case3:
SCAN(cidao,count);
case4:
CSCAN(cidao,count);
case5:
return0;
6运行结果
图2—1运行界面
图2—2运行FCFS的界面
图2—3运行SSTF的界面
图2—4运行SCAN的界面
图2—5运行SCAN的界面
图2—6运行CSCAN的界面
图2—7运行CSCAN的界面
运行结果:
四种磁盘调度运行结果正确,与预期的相符。
7设计心得
此次操作系统的课程设计,从理论到实践,在两个星期的日子里,可以说是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
本次实验首先要了解磁盘调度的工作原理及四种调度方法的工作原理。
在课程设计前的准备工作时,先把这部分工作做完了。
在设计总的程序框架的时候,要注意各功能模块的位置,尽量做到简洁、有序;
各功能模块与主程序要正确衔接。
在设计的过程中遇到许多问题,我设计的是四种调度算法中的后两种。
例如:
在最初程序设计时主要有两种构思:
1)选用数据结构是链表的。
2)选用数组。
我最初尝试了用链表,觉得方便易懂,但是在循环扫描处出现了些问题,后来又转变了设计思路,选用了数组,直接进行排序,然后再联系到各功能模块。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,自身知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
比如说编语言掌握得不好,应用程序编写不太会……通过这次课程设计之后,一定把以前所学过的知识重新温故。
在此,也感谢在课程设计过程中帮我解惑的老师和同学。
8参考文献
[1]《操作系统》人民邮电出版社宗大华宗涛陈吉人编著
[2]《C语言程序设计》清华大学出版社马秀丽刘志妩李筠编著
[3]《操作系统实验指导书》沈阳理工大学唐巍菀勋编著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 磁盘 调度 算法