ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:468.69KB ,
资源ID:20842740      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20842740.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(磁盘调度算法程序课程设计报告Word下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

磁盘调度算法程序课程设计报告Word下载.docx

1、3.2 程序的函数调用关系 .5四、详细设计 .54.1 数据结构描述 .54.2 各功能模块(或主要过程)分析 .54.3 各子程序流程分析 .74.3.1 FCFS( ).7 4.3.2 SSTF().84.3.3 SCAN( ) .9 五、调试与测试 .105.1 程序运行初始界面 .105.2 键盘输入磁道 .105.3 随机产生磁道 .105.4 先来先服务算法 .105.5 最短寻道时间优先算法10 5.6 扫描算法125.6.1 先向外扫描 .115.6.2 先向里扫描 .115.7 退出程序 .11六、结论与体会 .12参考文献 .12附件:源程序清单 .131一、课程设计的目

2、的和要求1.1 目的磁盘是经常使用的一种重要的外设,对磁盘数据的寻道时间的长短直接影响机 器的整体运行速度,本设计要求用 C 语言(或高级语言)编写程序模拟实现磁 盘调度的常用算法。以加深对磁盘调度常用算法的理解和实现技巧。1.2 要求1)、设计一个函数完成先来先服务的磁盘调度功能。2)、设计一个函数完成最短寻道时间优先的磁盘调度功能。3)、设计一个函数完成电梯算法的磁盘调度功能。二、系统需求分析2.1 任务介绍1、可利用先来先服务算法(FCFS 即 first come first served)、最短寻道时 间优先算法(SSTF 即 shortest seek time first)、扫描

3、算法(SCAN),来实现 磁盘的访问顺序。2、根据磁盘调度算法的不同的特性做好软件实现的需求分析。3、可根据问题的实际需要,可模拟数据在磁道的存放位置。4、当系统运行时,能直观地、动态地反映当前磁盘状态及不同算法的平均寻道 时间。5、要求在系统安全状态的前提下,用户指定需要访问的磁道,软件自动模拟在 不同算法情况下,磁盘寻道顺序和平均寻道时间。2.2 基本需求设计系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、 最短寻道时间优先算法(SSTF)、扫描算法(SCAN)。1、先来先服务算法(FCFS)这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序 进行调度。

4、此算法的优点是公平、简单,且每个进程的请求都能依次得到处理, 不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优 化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量, 致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。 2、最短寻道时间优先算法(SSTF)2该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最 近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保 证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因 而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道 的请求将会无限

5、期的被延迟,有些请求的响应时间将不可预期。3、扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁 头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下 一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样 自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。 这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道 之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯 的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法 的服务集中于中间磁道和响应时间变化比较大的缺点

6、,而具有最短寻道时间优 先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法, 两侧磁道被访问的频率仍低于中间磁道。三、概要设计3.1 程序主要流程下图 3-1 为磁盘调度算法总流程图,程序运行开始,进入选择界面,输入磁道 数,然后依次调用 decide()函数和 trans()函数,再进入主循环界面,选择调 度算法,直到选择 4,程序执行完毕退出。3开始输入 14 中的一数值,输入是否为 4?结束图 3-143.2 程序函数调用关系下图为磁盘调度算法的函数之间的调用关系,主函数调用子函数,子函数也可 以调用子函数,进行进程的初始化,排序等等。函数调用关系图,如图 3-2:ma

7、in()SCAN()图 3-2四、详细设计4.1 数据结构描述本系统划分为三个模块:先来先服务算法模块 void FCFS(int cidao, int m)、最短寻道时间优先算法模块 void SSTF(int cidao,int m)、扫描算 法模块 void SCAN(int cidao,int m) 。1. 先来先服务算法模块:void FCFS(int cidao,int m)输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度, 输出移动平均磁道数。这是一种简单的磁盘调度算法。它根据进程请求访问磁 盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能 依次

8、得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由 于未对寻道进行优化,致使平均寻道时间可能较长。2 .最短寻道时间优先算法模块:void SSTF(int cidao,int m)将磁道号用冒泡法从小到大排序,输出排好序的磁道序列,输入当前磁道 号,根据前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度, 输出移动的平均磁道数。该算法选择这样的进程,其要求访问的磁道与当前磁 头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保 证平均寻道时间最短。3 .扫描算法模块:void SCAN(int cidao,int m)将磁道号用冒泡法从小到大排序,输出

9、排好序的序列,输入当前磁道号,5选择移动臂的移动方向,根据当前磁道在已排的序列中的位置,选择扫描的顺 序,求出平均寻道长度,输出移动的平均磁道数。SCAN 算法不仅考虑到欲访问 的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁 头正在自里向外移动时,SCAN 算法所选择的下一个访问对象应是其欲访问的磁 道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外 的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样 的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的 出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度

10、算 法。4.2 各模块函数功能分析由于一开始我们要对键盘输入的磁道数和要使用的算法进行一次有效性的 判断,我使用了 int decide(char str),如果输入的信息不是 09 之间的数 都将被判定为不合法,合法后才能进行下一步。判断完合法性后,要将我们输入的字符转化为数字,这里我用了 int trans(char str,int a)。当然系统自动生成的就不要使用以上两个函数了。一切都准备好后,开始选择要调用哪个算法了,先来先服务调度算法我使 用了 void FCFS(int cidao,int m),这个算法主要完成按原来键盘输入的次 序或系统自动生成的次序来寻到,然后输出总的寻道长

11、度和平均寻道长度。以下两个算法都要用到排序算法,这里我使用了冒泡排序法 int *sort(int cidao,int m),将磁道数按从小到大的序列排好。最短寻道时间优先调度算法我使用了 void SSTF(int cidao,int m),在 排好序列磁道中选择离当前磁道最近的磁道开始寻道,然和再和相邻的两个磁 道进行比较,看离哪个更近;如果当前磁道是最大值或是最小值,直接按倒叙 或是正序寻道,最后输出总的寻道长度和平均寻道长度。扫描调度算法我使用了 void SCAN(int cidao,int m),在排好序的磁道 序列中根据当前磁道数,选择是向外寻道还是向内寻道,如果当前磁道数是最

12、大值或是最小值,直接向内或向外寻道,最后也要输出总的寻道长度和平均寻 道长度。64.3 各子函数流程分析 4.3.1 FCFS()下图 4-1 为 FCFS 函数的流程图:now)图 4-174.3.2 SSTF()minnow=now序列图 4-284.3.3 SCAN()=min图 4-39五、调试过程5.1运行程序初始界面运行程序,显示初始界面如图 5-1 所示,选择产生磁道的方式。图 5-15.2 随机产生磁道输入 1 可随机产生磁道数,如图 5-2 所示。图 5-25.3 键盘输入磁道输入 2 进行键盘输入,并附带错误提醒功能,如图 5-3 所示。图 5-3105.4 先来先服务算法

13、输入 1,选择先来先服务算法,如图 5-4 所示。图 5-45.5 最短寻道时间优先算法输入 2,选择最短寻道时间优先算法,如图 5-5 所示。图 5-55.6 扫描算法5.6.1 先向外扫描:输入 3 后,选择扫描算法,再输入 1 选择先向外扫描,如图 5-6 所示。图 5-6115.6.2 先向里扫描:输入 3 后,选择扫描算法,再输入 0 选择先向里扫描,如图 5-7 所示。图 5-75.7 退出程序输入 4 退出,如图 5-8 所示。图 5-8六、结论与体会这次操作系统的课程设计,从理论到实践,我学到很多很多的的东西,不 仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过

14、的知 识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知 识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结 论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。本次实验首先要了解磁盘调度的工作原理及四种调度方法的工作原理。在 课程设计前的准备工作时,先把这部分工作做完了。在设计总的程序框架的时 候,要注意各功能模块的位置,尽量做到简洁、有序;各功能模块与主程序要 正确衔接。在设计的过程中遇到许多问题,我设计的是四种调度算法中的后两种。例 如:在最初程序设计时主要有两种构思:1)选用数据结构是链表的。2)选用 数组。我最初尝试了用链表,觉得方

15、便易懂,但是在循环扫描处出现了些问题, 后来又转变了设计思路,选用了数组,直接进行排序,然后再联系到各功能模 块。12至此,计算机操作系统课程设计算法已经完成。但由于这次设计的时间比 较仓促,其中不免会有些纰漏,在设计的过程中我也发现了自己的不足之处,对以前所学过的知识理解得 不够深刻,掌握得不够牢固,自身知识的很多漏洞,看到了自己的实践经验还 是比较缺乏,理论联系实际的能力还急需提高。比如说编语言掌握得不好,应 用程序编写不太会通过这次课程设计之后,一定把以前所学过的知识重新 温故。在此,也感谢在课程设计过程中帮我解惑的老师和同学。七、参考文献1汤小丹、汤子赢等.计算机操作系统.西安:西安电

16、子科技大学出版社,2007.2张丽芬.操作系统实验教程M.北京:清华大学出版社,2006.13源程序清单磁盘调度算法源程序清单#includestdlib.hiostream.hmath.h#include #define maxsize 100/*判断输入数据是否有效*/ int decide(char str) /判断输入数据是否有效int i=0;while(stri!=0)if(stri9return 0;break;i+;return i;/*将字符串转换成数字*/int trans(char str,int a) /将字符串转换成数字int i;int sum=0;for(i=0;

17、ia;i+)sum=sum+(int)(stri-)*pow(10,a-i-1);return sum;/*冒泡排序算法*/int *sort(int cidao,int m)int i,j;int temp;m;i+) /使用冒泡法按从小到大顺序排列for(j=i+1;jcidaoj)14temp=cidaoi;cidaoi=cidaoj;cidaoj=temp;return cidao;/*先来先服务调度算法*/ void FCFS(int cidao,int m) /磁道号数组,个数为 mint now=20;/当前磁道号 /总寻道长度int j,i;float ave; /平均寻道长度

18、cout磁盘请求序列为:;for( i=0;i+) /按先来先服务的策略输出磁盘请求序列cidaoi endl;sum+=abs(cidao0-now);磁盘扫描序列为:i+) /输出磁盘扫描序列for(i=0,j=1;i+,j+) /求平均寻道长度sum+=abs(cidaoj-cidaoi);ave=(float)(sum)/(float)(m);总的寻道长度:sum平均寻道长度:ave/*最短寻道时间优先调度算法*/ void SSTF(int cidao,int m)int k=1;int l,r;int i,j,sum=0;cidao=sort(cidao,m); /调用冒泡排序算法排序15if(cidaom-1=now) /若当前磁道号大于

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1