操作系统课程设计磁盘调度先来先服务算法.docx

上传人:b****2 文档编号:1834743 上传时间:2023-05-01 格式:DOCX 页数:11 大小:30.92KB
下载 相关 举报
操作系统课程设计磁盘调度先来先服务算法.docx_第1页
第1页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第2页
第2页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第3页
第3页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第4页
第4页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第5页
第5页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第6页
第6页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第7页
第7页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第8页
第8页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第9页
第9页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第10页
第10页 / 共11页
操作系统课程设计磁盘调度先来先服务算法.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统课程设计磁盘调度先来先服务算法.docx

《操作系统课程设计磁盘调度先来先服务算法.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计磁盘调度先来先服务算法.docx(11页珍藏版)》请在冰点文库上搜索。

操作系统课程设计磁盘调度先来先服务算法.docx

操作系统课程设计磁盘调度先来先服务算法

ThismodelpaperwasrevisedbyLINDAonDecember15,2012.

 

操作系统课程设计磁盘调度先来先服务算法

《操作系统原理》

课程设计报告书

题目:

磁盘调度先来先服务算法

学号:

学生姓名:

专业:

计算机科学与技术

指导教师:

2014年5月29

1功能描述1

1.1功能实现思想1

1.2功能详述1

2系统设计1

2.1系统总体设计1

2.1.1数据结构描述1

2.1.2函数功能分析1

2.1.2程序函数调用关系2

2.2系统详细设计2

2.2.1设计任务2

2.2.2设计要求2

2.2.3算法思想2

2.2.4FCFS算法流程图3

3系统实现3

4系统测试与分析4

4.1系统运行结果4

4.2系统运行结果分析4

5总结5

参考文献5

附:

源程序代码6

教师评分表9

1功能描述

根据进程请求访问磁盘的先后次序进行调度,从而计算出磁头移动的总距离和平均寻道长度。

1.1功能实现思想

这是一种比较简单的磁盘调度算法。

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

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

此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。

1.2功能详述

根据进程请求访问磁盘的先后次序进行调度,首先根据提示输入总的磁道数、提出磁盘I/O申请的进程数、开始磁道号和磁道序列。

通过程序调用函数输出磁盘请求序列和磁盘扫描序列,从而计算出磁头移动的总距离和平均寻道长度。

2系统设计

2.1系统总体设计

2.1.1数据结构描述

voidFCFS(intcidao[],intm)输入磁道号,按先来先服务的策略输出磁盘请求序列和磁盘扫描序列,求移动的总距离和平均寻道长度,输出移动的总磁道数和平均寻道长度。

2.1.2函数功能分析

由于一开始要对键盘输入的磁道数和要使用的算法进行一次有效性的判断,我使用了intdecide(charstr[]),如果输入的信息不是0~9之间的数都将被判定为不合法,合法后才能进行下一步。

判断完合法性后,要将输入的字符转化为数字,这里我用了inttrans(charstr[],inta)。

先来先服务调度算法我使用了voidFCFS(intcidao[],intm),该算法主要完成按原来键盘输入的次序来寻道,然后输出移动的总磁道数和平均寻道长度。

2.1.2程序函数调用关系

下图为磁盘调度算法之先来先服务的函数之间的调用关系,主函数调用子函数,子函数也可以调用子函数。

图1程序函数调用关系

2.2系统详细设计

2.2.1设计任务

本系统采用先来先服务算法FCFS,来实现磁盘调度的模拟。

2.2.2设计要求

根据磁盘调度算法的思想,编程实现求先来先服务算法的平均寻道长度。

2.2.3算法思想

先来先服务的算法,即先来的请求先被响应。

FCFS算法看起来是比较合理的算法,但是当请求频率过高的时候FCFS算法的响应时间就会大大的延长,这也是最基本的算法,直接实现的是由输入的顺序来顺序的执行。

2.2.4FCFS算法流程图

图2FCFS算法流程图

3系统实现

1)开发环境:

Window7

2)开发工具和编程语言

开发工具:

VisualC++6.0

编程语言:

C++

4系统测试与分析

4.1系统运行结果

图3运行结果

4.2系统运行结果分析

根据系统提示进行输入数据,如输入的总磁道数为9,磁盘I/O申请的进程数为9,输入的磁道系列为555839189016015038184,输入开始磁道号:

100(当输入的数据类型有误是,会提醒重新输入),可以得到磁盘请求的序列和扫描的序列都为555839189016015038184,也得到了移动的总磁道数为498和平均寻道长度为55.3333。

实验结果符合预想的结果。

5总结

通过本次课程设计,我对磁盘的调度算法之先来先服务有了更深的了解,但在本次课程设计过程也遇到了一些问题,最后在同学的帮助下通过各种尝试,发现需将字符转化成数字,这也算是一个不小的收获吧。

总体而言,本次课设让我学会了很多,也让我对以前学过的知识回顾了很多,本次课程设计涉及的算法并不难,都是些基本的算法,所以告诉我们要打好基础,学好数据结构也是很重要的。

还有就是让我对操作系统的基础知识了解得更透彻了。

我深刻认识到算法的逻辑性对程序的重要影响,算法的准确度对程序运行结果的重要影响,这对我以后在操作系统的学习中有极大帮助。

参考文献

【1】汤小丹汤子瀛《计算机操作系统》(第三版)西安电子科技大学出版社

【2】付永华王素立薛海燕《C++高级语言程序设计》中国电力出版社

【3】张海云《计算机操作系统原理实验指导书》中国电力出版社

附:

源程序代码

#include

#include

#include

#include

usingnamespacestd;

#definemaxsize100//定义最大数组域

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

{

sum=sum+(int)((str[i]-'0')*pow(10,a-i-1));

}

returnsum;

}

voidFCFS(intcidao[],intm)//磁道号数组,个数为m

{

intbeginnumber;//开始的磁道号

intsum=0;//总寻道长度

intj,i;

inta;//字符串个数

charstr[100];

floatave;//平均寻道长度

B:

cout<<"请输入开始的磁道号:

";

cin>>str;//对输入数据进行有效性判断

a=decide(str);

if(a==0)

{

cout<<"输入数据的类型错误,请重新输入!

"<

gotoB;//输入错误,跳转到B,重新输入

}

else

beginnumber=trans(str,a);//输入开始的磁道号

sum+=abs(cidao[0]-beginnumber);

cout<<"磁盘请求序列为:

";

for(i=0;i

{

cout<

}

cout<

cout<<"磁盘扫描序列为:

";

for(i=0;i

{

cout<

}

for(i=0,j=1;j

{

sum+=abs(cidao[j]-cidao[i]);

ave=(float)(sum)/(float)(m);

}

cout<

cout<<"移动的总磁道数为:

"<

cout<<"平均寻道长度:

"<

}

voidmain()

{

cout<<"---------------------------"<

cout<<"计算机科学与技术"<

cout<<"

cout<<"张愿丽"<

cout<<"---------------------------"<

inta;

intcidao[maxsize];

inti=0,number;

intn;

cout<<"请输入总磁道数:

";

cin>>n;

cout<

intm;

cout<<"请输入提出磁盘I/O申请的进程数:

";

cin>>m;

cout<

charstr[100];

A:

cout<<"请输入磁道序列(0结束):

"<

cin>>str;//对输入数据进行有效性判断

a=decide(str);

if(a==0)

{

cout<<"输入数据的类型错误,请重新输入!

"<

gotoA;//输入错误,跳转到A,重新输入

}

else

cidao[i]=trans(str,a);

i++;

while(cidao[i-1]!

=0)

{

cin>>str;//对输入数据进行有效性判断

a=decide(str);

if(a==0)

cout<<"输入数据的类型错误,请重新输入!

"<

else

{

cidao[i]=trans(str,a);

i++;

}

}

number=i-1;//要访问的磁道数

cout<<"您输入的磁道序列为:

";

for(i=0;i

{

cout<

}

cout<

FCFS(cidao,number);

}

教师评分表

评分细则

分数

理解功能及基本原理程度。

(20分)

报告文字、图、表格式规范、整齐程度。

(15分)

报告内容完整、逻辑性程度。

(15分)

程序代码是否有注释、是否有语法错误。

(10分)

程序运行是否正常。

(20分)

程序运行界面是否美观。

(15分)

是否有创新思考、做法等。

(5分)

其他说明:

总分:

成绩:

指导老师签名:

日期:

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

当前位置:首页 > 总结汇报 > 学习总结

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

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