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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

模拟磁盘调度算法系统的设计毕业设计.docx

1、模拟磁盘调度算法系统的设计毕业设计目录 一、设计任务及主要技术 3二、设计方案及论证结果 4三、系统的原理框图 5四、设计程序 12五、实验结果 20六、调试分析及故障处理 24七、设计结论 25八、心得体会 261、设计任务及主要技术1整体功能概述(设计任务): 磁盘是外设中一个很常用的部分,所以,对磁盘数据的寻道时间的长短可以直接影响机器的整体运行速度的快慢。本设计为一个模拟磁盘调度算法的磁盘调度模拟系统,能够模拟先来先服务(FCFS)算法、最短寻道时间(SSTF)算法、电梯(SCAN)算法、环形扫描(C_SCAN)算法及N_SCAN算法五个磁盘调度算法,输入为一组作业的磁道请求,输出为按

2、选择的算法执行时的磁头移动轨迹。其中,先来先服务(FCFS)算法、最短寻道时间(SSTF)算法、电梯(SCAN)算法为基本算法,环形扫描(C_SCAN)算法及N_SCAN算法为扩展算法。2运行环境:(1)硬件环境 Intel core i5 CPU (2)软件环境 Windows 7 Microsoft Visual C+ 6.0 3主要技术:(1)用C语言编写程序;(2)对编程软件Microsoft Visual C+ 6.0的了解和使用;(3)操作系统基础知识(主要是对先来先服务(FCFS)算法、最短寻道时间(SSTF)算法、电梯(SCAN)算法的了解);(4)操作系统扩展知识(通过网络自

3、学环形扫描(C_SCAN)算法及N_SCAN算法)。 二、设计方案及论证结果1设计方案:(1)先来先服务算法(First-Come,First-Served,FCFS)此算法为一种最简单的磁盘调度算法。它直接根据作业请求磁盘的先后顺序对磁盘进行寻访。此算法公平、简单,每个作业的磁盘请求都可以得到处理,不会出现某个作业的请求长期得不到满足的情况。但此算法未对寻道方案进行优化,故平均周转时间及带权周转时间都会较长。(2)最短寻道时间优先算法(Shortest Seek Time First,SSTF)此算法优先选择距离当前磁头位置最近的作业磁道请求。此算法可以使得每次寻道时所用的时间都最短,但不能

4、保证平均周转时间及带权周转时间最短。(3)电梯算法(SCAN)此算法同时考虑下一个作业磁道请求与当前磁头位置的距离和当前磁头移动方向。本设计默认磁头当前移动方向为自内向外,故SCAN算法先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,再将磁臂换向,访问磁头内侧距离当前磁头位置最近的作业磁道请求。此算法避免了饥饿现象的出现,每个作业的磁盘请求都可以得到处理,且使每次寻道时间相对较短。(4)环形扫描算法(C_SCAN)此算法磁头移动方向一直为自内向外,同时考虑下一个作业磁道请求与当前磁头位置的距离最短。先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,再直接将

5、磁头移到最内侧磁道(此过程快速移动,并不访问任何磁道),再由内向外顺次访问距离当前磁头位置最近的作业磁道请求。此算法每个作业的磁盘请求都可以得到处理,且使每次寻道时间相对较短。由于该方法一直保持磁头移动寻访方向不变,对两端磁道请求比较有利。(5)N_SCAN算法此算法同时考虑下一个作业磁道请求与当前磁头位置的距离和当前磁头移动方向,但每次磁臂调转方向时,将同时处理在磁头向一侧移动过程当中输入的作业请求。本设计默认磁头当前移动方向为自内向外,先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,接下来一并考虑在磁头向外侧移动过程当中输入的作业请求与磁头内侧未被处理的作业磁道请求。此

6、算法对中间磁道请求比较有利。2论证结果: 本设计输入当前磁头位置及一组作业磁道请求。选择所需的算法,输出相应结果:(1)先来先服务算法(FCFS) 按输入顺序输出访问序列。(2)最短寻道时间优先算法(SSTF)依次输出距离当前磁头位置最近的磁道请求。(3)电梯算法(SCAN)先按照从小到大的顺序输出所输入的当前磁头位置外侧的磁道请求,再按照从大到小的顺序输出所输入的当前磁头位置内侧的磁道请求。(4)环形扫描算法(C_SCAN)先按照从小到大的顺序输出所输入的当前磁头位置外侧的磁道请求,再按照从小到大的顺序输出所输入的当前磁头位置内侧的磁道请求。(5)N_SCAN算法先按照从小到大的顺序输出所输

7、入的当前磁头位置外侧的磁道请求,再按照从大到小的顺序输出在磁头向外侧移动过程当中输入的作业请求与所输入的当前磁头位置内侧的磁道请求。三、系统的原理框图1总体框图:本系统划分为五个模块:先来先服务算法模块FCFS(int track)、最短寻道时间算法模块SSTF(int correnttrack,int track)、电梯算法模块SCAN(int correnttrack,int track)、环形扫描算法模块C_SCAN(int correnttrack,int track)及N_SCAN算法模块N_SCAN(int correnttrack,int track)。总体框图:图1 总体框图2

8、模块框图: (1)先来先服务算法模块void FCFS(int track)直接根据作业请求磁盘的先后顺序对磁盘进行寻访。此算法公平、简单,每个作业的磁盘请求都可以得到处理,不会出现某个作业的请求长期得不到满足的情况。先来先服务算法流程图:图2 先来先服务算法模块流程图(2)最短寻道时间优先算法模块void SSTF(int correnttrack,int track)优先选择距离当前磁头位置最近的作业磁道请求,可以使得每次寻道时所用的时间都最短。最短寻道时间优先算法流程图:图3最短寻道时间优先算法模块流程图(3)电梯算法模块void SCAN(int correnttrack,int tr

9、ack)默认磁头当前移动方向为自内向外,先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,再将磁臂换向,访问磁头内侧距离当前磁头位置最近的作业磁道请求。电梯算法流程图:图4 电梯算法模块流程图(4)环形扫描算法模块void C_SCAN(int correnttrack,int track)先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,再直接将磁头移到最内侧磁道(此过程快速移动,并不访问任何磁道),再由内向外顺次访问距离当前磁头位置最近的作业磁道请求。一直保持磁头移动寻访方向不变,对两端磁道请求比较有利。环形扫描算法流程图:图5 环形扫描算法模块流程图(

10、5)N_SCAN算法模块void N_SCAN(int correnttrack,int track)本设计默认磁头当前移动方向为自内向外,先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,接下来一并考虑在磁头向外侧移动过程当中输入的作业请求与磁头内侧未被处理的作业磁道请求。此算法对中间磁道请求比较有利。N_SCAN算法流程图:图6 N_SCAN算法模块流程图(1)图7 N_SCAN算法模块流程图(2)四、设计程序1主要模块代码:(1)先来先服务算法void FCFS(int track)直接根据作业请求磁盘的先后顺序对磁盘进行寻访。先来先服务算法代码:void FCFS(i

11、nt track) int k; for(k=0;k,trackk); printf(%d,track9);(2)最短寻道时间优先算法void SSTF(int correnttrack,int track)优先选择距离当前磁头位置最近的作业磁道请求。最短寻道时间优先算法代码:void SSTF(int correnttrack,int track) int Line10; int i; int j; int d; int min_d; int k; int corrent; min_d=abs(correnttrack-track0); k=0; corrent=correnttrack;

12、for(i=0;i10;i+) for(j=0;j10;j+) if(trackj!=-1) d=abs(corrent-trackj); if(d,correnttrack); Print(Line);(3)电梯算法void SCAN(int correnttrack,int track)默认磁头当前移动方向为自内向外,先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,再将磁臂换向,访问磁头内侧距离当前磁头位置最近的作业磁道请求。电梯算法代码:void SCAN(int correnttrack,int track) int Line10; int dLine10; int

13、 i; int j; int k; int min; k=0; min=track0; for(i=0;i10;i+) for(j=0;j10;j+) if(trackj!=-1) if(trackjmin) min=trackj; k=j; dLinei=trackk; trackk=-1; min=65536; k=0; for(i=0;idLinei) k=k+1; j=k; for(i=0;i10-k;i+) Linei=dLinej; j=j+1; j=k-1; for(i=10-k;i10;i+) Linei=dLinej; j=j-1; Print(Line);(4)环形扫描算法

14、void C_SCAN(int correnttrack,int track)先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,再直接将磁头移到最内侧磁道(此过程快速移动,并不访问任何磁道),再由内向外顺次访问距离当前磁头位置最近的作业磁道请求。环形扫描算法代码:void C_SCAN(int correnttrack,int track) int Line10; int dLine10; int i; int j; int k; int min; k=0; min=track0; for(i=0;i10;i+) for(j=0;j10;j+) if(trackj!=-1)

15、if(trackjmin) min=trackj; k=j; dLinei=trackk; trackk=-1; min=65536; k=0; for(i=0;idLinei) k=k+1; j=k; for(i=0;i10-k;i+) Linei=dLinej; j=j+1; j=0; for(i=10-k;i10;i+) Linei=dLinej; j=j+1; Print(Line);(5)N_SCAN算法void N_SCAN(int correnttrack,int track)默认磁头当前移动方向为自内向外,先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,接下

16、来一并考虑在磁头向外侧移动过程当中输入的作业请求与磁头内侧未被处理的作业磁道请求。N_SCAN算法void N_SCAN(int correnttrack,int track) int Line10; int dLine10; int lLine10; int i; int j; int k; int min,max; int choice; for(k=0;k10;k+) lLinek=-1; k=0; min=track0; for(i=0;i10;i+) for(j=0;j10;j+) if(trackj!=-1) if(trackjmin) min=trackj; k=j; dLine

17、i=trackk; trackk=-1; min=65536; k=0; for(i=0;idLinei) k=k+1; j=k; for(i=0;i,Linei); Linei=-1; j=j+1; j=k-1; for(i=10-k;i10;i+) Linei=dLinej; j=j-1; printf(n是否还有作业请求(1-是;0-否):n); scanf(%d,&choice); k=9-k; while(choice=1) printf(n请输入作业的磁道请求:n); scanf(%d,&Linek); k=k-1; printf(n是否还有作业请求(1-是;0-否):n); sc

18、anf(%d,&choice); printf(n磁头继续移动轨迹为:n); k=9; max=Line9; for(i=0;i10;i+) for(j=0;jmax) max=Linej; k=j; lLinei=Linek; Linek=-1; max=0; for(i=0;i,lLinei); printf(%d,lLine9);2总模块代码:void main() int track10; int n; int correnttrack; int choice=1; printf(n*磁盘调度模拟系统*); while(choice=1) printf(n请输入当前磁道号:); sca

19、nf(%d,&correnttrack); printf(n请输入一组作业的磁道请求:n); scanf(%d %d %d %d %d %d %d %d %d %d, &track0,&track1,&track2,&track3,&track4, &track5,&track6,&track7,&track8,&track9); printf(n请选择算法:n); printf(t1.先来先服务算法(FCFS)n); printf(t2.最短寻道时间优先算法(SSTF)n); printf(t3.电梯算法(SCAN)n); printf(t4.环形扫描算法(C_SCAN)n); printf

20、(t5.(N_SCAN)n); scanf(%d,&n); printf(nn); switch(n) case 1: printf(*先来先服务算法(FCFS)*n磁头移动轨迹为:n); FCFS(track); break; case 2: printf(*最短寻道时间优先算法(SSTF)*n磁头移动轨迹为:n); SSTF(correnttrack,track); break; case 3: printf(*电梯算法(SCAN)*n磁头移动轨迹为:n); SCAN(correnttrack,track); break; case 4: printf(*环形扫描算法(C_SCAN)*n磁

21、头移动轨迹为:n); C_SCAN(correnttrack,track); break; case 5: printf(*N_SCAN*n磁头移动轨迹为:n); N_SCAN(correnttrack,track); break; printf(n请问是否继续?(1-继续;0-退出)n); scanf(%d,&choice); 五、实验结果1总模块实验结果:程序开始运行,将出现输入选择界面;图8 主界面2基础模块实验结果:(1)先来先服务算法(First-Come,First-Served,FCFS)按输入顺序输出访问序列。选择该算法后,将输出相应磁头移动轨迹:图9 先来先服务算法0 输出结

22、果为69- 23- 120- 45- 77- 31- 55- 99- 150- 2 满足要求。(2)最短寻道时间优先算法(Shortest Seek Time First,SSTF)依次输出距离当前磁头位置最近的磁道请求。选择该算法后,将输出相应磁头移动轨迹:图10 最短寻道优先算法 输出结果为45- 55- 69- 77- 99- 120- 150- 31- 23- 2 满足要求。(3)电梯算法(SCAN)先按照从小到大的顺序输出所输入的当前磁头位置外侧的磁道请求,再按照从大到小的顺序输出所输入的当前磁头位置内侧的磁道请求。选择该算法后,将输出相应磁头移动轨迹:图11 电梯算法 输出结果为5

23、5- 69- 77- 99- 120- 150- 45- 31- 23- 2 满足要求。3扩展模块实验结果:(1)环形扫描算法(C_SCAN)先按照从小到大的顺序输出所输入的当前磁头位置外侧的磁道请求,再按照从小到大的顺序输出所输入的当前磁头位置内侧的磁道请求。选择该算法后,将输出相应磁头移动轨迹:图12 环形扫描算法 输出结果为55- 69- 77- 99- 120- 150- 2- 23- 31- 45 满足要求。(2)N_SCAN算法先按照从小到大的顺序输出所输入的当前磁头位置外侧的磁道请求,再按照从大到小的顺序输出在磁头向外侧移动过程当中输入的作业请求与所输入的当前磁头位置内侧的磁道请

24、求。选择该算法后,将输出相应磁头移动轨迹:图13 N_SCAN算法 输出结果为55- 69- 77- 99- 120- 150- 88- 45- 31- 23- 8 - 2- 1 满足要求。六、调试分析及故障处理1调试分析:(1)在代码中错误的使用了中文括号“)”,导致程序出错。图14 错误报告(2)在定义函数时误在结尾处加分号“;”,导致调试过程中出错。图15 错误报告(3)由于未对变量初始化,导致错误:图16 错误警告未对k初始化,如下图:图17 变量表2故障处理:重新检查代码,发现错误,并及时修正。调试后无误:图18 无错误及警告发生故障时,可采取单步调试的方法,逐条语句检查,修正错误。

25、图19 故障处理过程七、设计结论磁盘,是一种很重要也很常用的外设,其分配也有一定的分配策略。在操作系统中,作业对磁盘的请求常常要排队,由此需要一些高效率的磁盘分配策略算法。本系统设计了五种寻道策略,其中先来先服务算法为一种最简单的磁盘调度算法,它直接根据作业请求磁盘的先后顺序对磁盘进行寻访,公平、简单,每个作业的磁盘请求都可以得到处理,不会出现某个作业的请求长期得不到满足的情况,但未对寻道方案进行优化,故平均周转时间及带权周转时间都会较长;最短寻道时间优先算法优先选择距离当前磁头位置最近的作业磁道请求,可以使得每次寻道时所用的时间都最短,但不能保证平均周转时间及带权周转时间最短;电梯算法同时考

26、虑下一个作业磁道请求与当前磁头位置的距离和当前磁头移动方向先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,再将磁臂换向,访问磁头内侧距离当前磁头位置最近的作业磁道请求,避免了饥饿现象的出现,每个作业的磁盘请求都可以得到处理,且使每次寻道时间相对较短;环形扫描算法的磁头移动方向一直为自内向外,同时考虑下一个作业磁道请求与当前磁头位置的距离最短,先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,再直接将磁头移到最内侧磁道(此过程快速移动,并不访问任何磁道),再由内向外顺次访问距离当前磁头位置最近的作业磁道请求,使每个作业的磁盘请求都可以得到处理,且使每次寻道时间相对较短,由于该方法一直保持磁头移动寻访方向不变,对两端磁道请求比较有利; N_SCAN算法同时考虑下一个作业磁道请求与当前磁头位

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

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