模拟磁盘调度算法系统的设计毕业设计_第1页
模拟磁盘调度算法系统的设计毕业设计_第2页
模拟磁盘调度算法系统的设计毕业设计_第3页
模拟磁盘调度算法系统的设计毕业设计_第4页
模拟磁盘调度算法系统的设计毕业设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.03主要技术:(1)用C语言编写程序;(2)对编程软件Microsoft Visual C+ 6.0的了解和使用;(3)操作系统基础知识(主要是对先来先服务(FCFS)算法、最短寻道时间(SSTF)算法、电梯(SCAN)算法的了解);(4)操作系统扩展知识(通过网络自学环形扫描(C_SCAN)算法及N_SCAN算法)。

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

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

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

6、前磁头位置及一组作业磁道请求。选择所需的算法,输出相应结果:(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模块框图:(1)先来先服务算法模块void FCFS(

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

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

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

11、9;k+)printf("%d->",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=corren

12、ttrack;for(i=0;i<10;i+)for(j=0;j<10;j+)if(trackj!=-1)d=abs(corrent-trackj);if(d<min_d)min_d=d;k=j;Linei=trackk;corrent=Linei;trackk=-1;min_d=65536;printf("%d->",correnttrack);Print(Line);(3)电梯算法void SCAN(int correnttrack,int track)默认磁头当前移动方向为自内向外,先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道

13、请求,再将磁臂换向,访问磁头内侧距离当前磁头位置最近的作业磁道请求。电梯算法代码:void SCAN(int correnttrack,int track)int Line10;int dLine10;int i;int j;int k; int min; k=0; min=track0;for(i=0;i<10;i+)for(j=0;j<10;j+)if(trackj!=-1)if(trackj<min)min=trackj;k=j;dLinei=trackk;trackk=-1;min=65536;k=0;for(i=0;i<10;i+)if(correnttrac

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

15、,int track)int Line10;int dLine10;int i;int j;int k; int min; k=0; min=track0;for(i=0;i<10;i+)for(j=0;j<10;j+)if(trackj!=-1)if(trackj<min)min=trackj;k=j;dLinei=trackk;trackk=-1;min=65536;k=0;for(i=0;i<10;i+)if(correnttrack>dLinei)k=k+1; j=k;for(i=0;i<10-k;i+)Linei=dLinej;j=j+1;j=0;

16、for(i=10-k;i<10;i+)Linei=dLinej;j=j+1;Print(Line);(5)N_SCAN算法void N_SCAN(int correnttrack,int track)默认磁头当前移动方向为自内向外,先选择当前磁头之外距离其最近的磁道进行访问,直到再无更外的磁道请求,接下来一并考虑在磁头向外侧移动过程当中输入的作业请求与磁头内侧未被处理的作业磁道请求。N_SCAN算法void N_SCAN(int correnttrack,int track)int Line10;int dLine10;int lLine10;int i;int j;int k; int

17、 min,max;int choice;for(k=0;k<10;k+)lLinek=-1; k=0;min=track0;for(i=0;i<10;i+)for(j=0;j<10;j+)if(trackj!=-1)if(trackj<min)min=trackj;k=j;dLinei=trackk;trackk=-1;min=65536;k=0;for(i=0;i<10;i+)if(correnttrack>dLinei)k=k+1; j=k;for(i=0;i<10-k;i+)Linei=dLinej;printf("%d->&qu

18、ot;,Linei);Linei=-1;j=j+1; j=k-1;for(i=10-k;i<10;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"); scanf("%

19、d",&choice);printf("n磁头继续移动轨迹为:n"); k=9; max=Line9;for(i=0;i<10;i+)for(j=0;j<10;j+)if(Linej>max)max=Linej;k=j;lLinei=Linek;Linek=-1;max=0;for(i=0;i<9;i+)if(lLinei!=-1)printf("%d->",lLinei);printf("%d",lLine9);2总模块代码:void main()int track10;int n;i

20、nt correnttrack;int choice=1;printf("n*磁盘调度模拟系统*");while(choice=1)printf("n请输入当前磁道号:");scanf("%d",&correnttrack);printf("n请输入一组作业的磁道请求<以回车分隔>:n");scanf("%d %d %d %d %d %d %d %d %d %d", &track0,&track1,&track2,&track3,&tr

21、ack4, &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("t5.(N_SCAN)n"); scanf("%d&

22、quot;,&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: pri

23、ntf("*环形扫描算法(C_SCAN)*n磁头移动轨迹为: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-

24、Come,First-Served,FCFS)按输入顺序输出访问序列。选择该算法后,将输出相应磁头移动轨迹:图9 先来先服务算法0 输出结果为69-> 23-> 120-> 45-> 77-> 31-> 55-> 99-> 150-> 2 满足要求。(2)最短寻道时间优先算法(Shortest Seek Time First,SSTF)依次输出距离当前磁头位置最近的磁道请求。选择该算法后,将输出相应磁头移动轨迹:图10 最短寻道优先算法 输出结果为45-> 55-> 69-> 77-> 99-> 120->

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

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

27、; 88-> 45-> 31-> 23-> 8 -> 2-> 1 满足要求。六、调试分析及故障处理1调试分析:(1)在代码中错误的使用了中文括号“)”,导致程序出错。图14 错误报告(2)在定义函数时误在结尾处加分号“;”,导致调试过程中出错。图15 错误报告(3)由于未对变量初始化,导致错误:图16 错误警告未对k初始化,如下图:图17 变量表2故障处理:重新检查代码,发现错误,并及时修正。调试后无误:图18 无错误及警告发生故障时,可采取单步调试的方法,逐条语句检查,修正错误。图19 故障处理过程七、设计结论磁盘,是一种很重要也很常用的外设,其分配也有一

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论