磁盘调度报告Word文档下载推荐.docx

上传人:b****2 文档编号:824432 上传时间:2023-04-29 格式:DOCX 页数:27 大小:232.22KB
下载 相关 举报
磁盘调度报告Word文档下载推荐.docx_第1页
第1页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第2页
第2页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第3页
第3页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第4页
第4页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第5页
第5页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第6页
第6页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第7页
第7页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第8页
第8页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第9页
第9页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第10页
第10页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第11页
第11页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第12页
第12页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第13页
第13页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第14页
第14页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第15页
第15页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第16页
第16页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第17页
第17页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第18页
第18页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第19页
第19页 / 共27页
磁盘调度报告Word文档下载推荐.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

磁盘调度报告Word文档下载推荐.docx

《磁盘调度报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《磁盘调度报告Word文档下载推荐.docx(27页珍藏版)》请在冰点文库上搜索。

磁盘调度报告Word文档下载推荐.docx

1.3意义

在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。

操作系统中,对磁盘的访问要求来自多方面,常常需要排队。

这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。

访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。

因此,磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。

2正文

2.1课设要求

1)、设计一个函数完成先来先服务的磁盘调度功能。

2)、设计一个函数完成最短寻道时间优先的磁盘调度功能。

3)、设计一个函数完成电梯算法的磁盘调度功能。

2.2课设设备、环境

奔腾以上计算机,装有TurboC2.0软件

2.3课设方法及步骤

2.3.1设计方法:

本系统应该具有功能:

设计一个函数完成先来先服务的磁盘调度功能,设计一个函数完成最短寻道时间优先的磁盘调度功能,设计一个函数完成电梯算法的磁盘调度功能,并设计一个函数实现文件保存功能。

本系统具有通用性,界面美观,操作方便考虑到了系统安全问题。

相关信息应保存在文件中。

本软件的性能很好:

通过磁盘调度算法的模拟设计,了解磁盘调度的特点。

磁盘调度算法是根据访问都指定的磁道(柱面)位置来决定执行次序的调度。

其目的是尽可能地减少操作中的寻道时间。

在磁盘盘面上,0磁道在盘面的外圈;

号数越大,磁道戛靠近盘片的中心。

通常采用FCFS(先来先服务)、SSTF(最短寻道时间)、SCAN(扫描)进行不同的磁盘调度。

该磁盘调度系统流程图如下:

图2.3.1.1

系统模块图如下:

图2.3.1.2

函数调用关系图

图2.3.1.3

2.3.2设计步骤:

下面我将详细地为你讲解本程序的FCFS(先来先服务)、SSTF(最短寻道时间)、SCAN(扫描)、C-SCAN(单向扫描)。

2.3.2.1FCFS(先来先服务)算法

先来先服务是一种最简单的磁盘调度算法。

它根据进程请求访问磁盘的先后次序进行调度。

此算法的优点是公平,简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求长期得不到满足的情况。

但是,此算法由于未对寻道进行优化,致使平均寻道时间可能较长。

图2.4.2展示出有10个进程先后提出磁盘I/O请求时,按先来先服务算法进行调度的情况。

这里,将进程号按他们发出请求的先后次序排队。

这样,平均寻道距离为53.1条磁道,与后面将讲到的几种调度算法相比,其平均寻道距离较大,故先来先服务算法仅适用于请求磁盘I/O的进程数目较少的场合。

程序设计流程图为:

图2.3.2.1

我们通过程序

for(i=0;

i<

num;

i++)

{sum+=abss(p[i]-start);

start=p[i];

}来实现该算法。

2.3.2.2SSTF(最短寻道时间)算法

该算法选择这样的进程,其要求访问的磁道,与当前磁头所在的磁道距离最近,以使得每次的寻道时间最短,但是这种算法不能保证平均寻道时间最短。

图2.4.3展示出最短寻道时间优先算法进行调度时,各进程被调度的次序,每次磁头移动的距离,以及9次磁头平均移动距离。

比较图2.4.2和图2.4.3可以看出,最短寻道时间优先算法的平均每次磁头移动距离,明显低于先来先服务的距离,因而最短寻道时间优先算法较之先来先服务有更好的寻道性能,故过去曾一度被广泛采用。

图2.3.2.2

我们通过程序

n;

{min=abss(p[0]-start);

for(j=0;

j<

j++)

{if(min>

=abss(p[j]-start))

{min=abss(p[j]-start);

current=j;

}

temp[len++]=p[current];

sum+=fabs(p[current]-start);

start=p[current];

for(j=current+1;

p[j-1]=p[j];

num--;

}来实现最短寻道时间优先算法。

2.3.2.3SCAN(电梯调度)算法

该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。

例如,当磁头正在自里向外移动时,电梯调度算法所考虑的下一个访问对象,应是其欲访问的磁道既在当前磁道之外,又是距离最近的。

这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂向为自外向里移动。

这时,同样也是每次选择这样的进程来调度,即要访问的磁道在当前位置内距离最近者,这样,磁头又逐步地从外向里移动,直至再无更里面的磁道要访问,从而避免了出现“饥饿”现象。

由于在这种算法中磁头移动的规律颇似电梯的运行,因而又常称之为电梯调度算法。

我们使用语句printf("

请选择移动臂初始方向(1增加0减小):

"

);

来实现另一个功能,用户可以选择相对当前磁道位置增加或者减少的方向移动,其中用1代表向上移动,0代表向下移动。

从而使功能更加强大。

图2.3.2.3

我们通过语句

max_len;

temp[i]=max[i];

min_len;

temp[max_len++]=min[i];

for(i=0;

{sum+=abss(temp[i]-start);

start=temp[i];

}来实现向增加方向移动功能。

与此相同我们通过语句

i++)

temp[i]=min[i];

temp[min_len++]=max[i];

{sum+=fabs(temp[i]-start);

start=temp[i];

}来实现向减小方向移动功能。

电梯调度算法既能获得较好的寻道性能,又能防止“饥饿”现象,故被广泛用于大,中,小型机器和网络中的磁盘调度,但是也存在这样的问题:

当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。

2.3.2.4保存文件

fp=fopen("

cidao.txt"

"

a"

if(fp==NULL)

printf("

文件打不开!

\n"

else{fprintf(fp,"

%s\n"

p);

totalnum;

{

if(i)

fprintf(fp,"

->

fprintf(fp,"

%d"

file[i]);

}来实现保存功能。

我们可以将运行的结果存储到记事本中,方便快捷。

2.4 

实验、调试及测试结果与分析。

本程序可算是经历了一番周折,最后总算调试成功。

下面我来介绍一下本程序的运行方法以及分析运行结果。

为了实现磁盘调度,我们设计了3种算法。

另外增加了保存文件功能。

如图所示:

图2.4.1

我们程序的主菜单,我们可以通过提示选择我们想要的相关算法

图2.4.2

展示出选择1先来先服务算法的执行结果,屏幕展示出最短寻道时间优先顺序,以及移动的总道数,平均寻道长度,还有提出询问,是否保存文件。

图2.4.3

展示出选择2最短寻道时间优先算法的执行结果,屏幕展示出最短寻道时间优先顺序,以及移动的总道数,平均寻道长度,还有提出询问,是否保存文件。

图2.4.4

展示出选择3电梯调度算法的执行结果,程序给出提示,选择0程序将向相对当前磁道位置减少的方向移动,屏幕上显示出最短寻道时间优先顺序,以及移动的总道数,平均寻道长度,还有提出询问,是否保存文件。

图2.4.5

展示出选择3电梯调度算法的执行结果,程序给出提示,选择1程序将向相对当前磁道位置增加的方向移动,屏幕上显示出最短寻道时间优先顺序,以及移动的总道数,平均寻道长度,还有提出询问,是否保存文件。

结论

这个程序基本完成了磁盘调度算法设计的目的与要求。

不过其中也有一些不足之处,例如算法有点麻烦,有些句子不是很能理解。

但是通过上网查找资料,去图书馆借阅相关书籍解决了这些不足之处。

由于关于磁盘调度的那部分,理论内容很少,所以,这次课程设计,我主要将重点放在实践中,也就是说,我在本次实验中,我是实现了3种磁盘调度算法。

我这么做的原因有三个:

一是关于磁盘调度的理论性问题很少,如果仅仅模拟一下磁盘调度,那么实在是对不起辛辛苦苦教我们一学期的老师。

二是既然我们从课堂上学到了理论知识,那么就应该应用于实践,如果仅仅演示一下课堂上讲的理论或算法,那么实在是纸上谈兵。

毕竟,程序员做的程序是给客户用的,并不是每个客户都精通计算机,如何完成客户要求的程序,并且客户使用起来方便,那么才可以说是一个比较不错的程序。

三是作为我们这些计算机专业的学生,迟早将面临着毕业设计,到时候我们总不能编写一些算法来敷衍吧,所以我认为在平时的课程设计中不但要真心真意地去做,更为重要的是程序使用并且使用简便,对于用户来说,重要的不是算法,而是程序的结果。

作为一个计算机专业的学生,在课堂上要把基本思想熟练掌握,课后在写程序的时候要把思想封装到程序当中,充分体现它的应用价值。

本次课程设计,我利用调度算法完成了磁盘的调度,充分利用了课堂上讲的理论知识,完成了本次设计。

至于功能吗,很单一,只不过是演示了一下3种最基本的磁盘调度算法,虽然界面不漂亮,尚且不完整,但是通过这次课程设计使我懂得了如何完成磁盘的调度。

程序最大的不足就是界面不漂亮,,我的设想是:

为程序添加一些图像,并设计背景音乐。

因为原理问题已经懂了,所以我相信利用管道能够实现更强大功能的软件。

参考文献 

[1]张尧学。

计算机操作系统教程。

出版地:

清华大学出版

[2]任爱华。

操作系统实用教程。

出版地:

清华大学出版

[3]周苏。

操作系统原理实验。

科学出版社

[4]张尧学、史美林。

计算机操作系统教程(第2版)。

清华大学出版社

[5]曾平、李春葆。

操作系统习题与解析.出版地:

[6]张尧学、史美林。

操作系统系统教程(第2版)习题解答与实验指导.出版地:

清华大学出版社

附录

#include<

stdio.h>

string.h>

math.h>

stdlib.h>

#defineM100

intfile[M],total,totalnum,xuan;

voidprint(int*p,intnum)//输出优先顺序

{

inti;

短寻道时间优先顺序是:

"

{

if(i)

p[i]);

file[i]=p[i];

}

}

intabss(inta)//绝对值函数

if(a<

0)

a*=-1;

returna;

voidfcfs(int*p,intnum,intstart)//先来先服务算法FCFS

doublesum=0;

sum+=abss(p[i]-start);

start=p[i];

print(p,num);

total=(int)sum;

移动的总道数:

%.0lf\n"

sum);

平均寻道长度:

%lf\n"

sum/num);

voidsstf(int*p,intnum,intstart)//最短寻道时间优先算法SSTF

inti,j,min,current,temp[M],n,len=0;

n=num;

min=abss(p[0]-start);

for(j=0;

{

if(min>

{

min=abss(p[j]-start);

current=j;

}

print(temp,n);

sum/n);

intcmp1(constvoid*a,constvoid*b)

return*(int*)a-*(int*)b;

intcmp2(constvoid*a,constvoid*b)

return*(int*)b-*(int*)a;

voidscan(int*p,intnum,intstart)//电梯调度算法(扫描算法SCAN)

inti,temp[M],max[M],min[M],max_len,min_len;

max_len=min_len=0;

if(p[i]>

=start)

max[max_len++]=p[i];

else

min[min_len++]=p[i];

while

(1)

printf("

scanf("

&

xuan);

if(xuan==1)

qsort(max,max_len,sizeof(max[0]),cmp1);

qsort(min,min_len,sizeof(min[0]),cmp2);

for(i=0;

temp[i]=max[i];

for(i=0;

temp[max_len++]=min[i];

i++)

sum+=abss(temp[i]-start);

start=temp[i];

total=(int)sum;

print(temp,num);

printf("

break;

elseif(xuan==0)

temp[i]=min[i];

temp[min_len++]=max[i];

+

选择错误请重新选择!

continue;

voidsave(char*p)//保存文件

FILE*fp;

fp=fopen("

else

file[i]);

%d\n"

total);

平均寻道长度:

%lf\n\n"

total*1.0/totalnum);

保存文件成功!

intmain()

intnode[M],num,i,start,node2[M];

charc[M],str[M],choose[M];

/*****************磁盘调度算法******************/\n"

请输入磁道个数:

scanf("

num);

totalnum=num;

请输入各磁道号:

node[i]);

node2[i]=node[i];

请输入当前磁道号:

start);

/*********************菜单**********************/\n"

**\n"

*1、先来先服务算法FCFS*\n"

*2、最短寻道时间优先算法SSTF*\n"

*3、电梯调度算法(扫描算法SCAN)*\n"

*0、退出*\n"

/***********************************************/\n"

remove("

//如果文件已经存在删除

请选择:

%s"

choose);

if(strcmp(choose,"

0"

)==0)

break;

elseif(strcmp(choose,"

1"

for(i=0;

node2[i]=node[i];

fcfs(node2,num,start);

2"

sstf(node2,num,start);

3"

scan(node2,num,start);

选择错误!

continue;

}

if(strcmp(choose,"

)==0||strcmp(choose,"

strcpy(str,"

先来先服务算法FCFS:

elseif(strcmp(choose,"

最短寻道时间优先算法SSTF:

elseif(xuan==1)

电梯调度算法(扫描算法SCAN移动臂先向增加方向移动):

else

strcpy(str,"

电梯调度算法(扫描算法SCAN移动臂先向减小方向移动):

while

(1)

是否保存文件(Y/N)\n"

c);

i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2