磁盘调度操作系统实验报告.doc

上传人:scccc 文档编号:14536683 上传时间:2022-02-08 格式:DOC 页数:25 大小:262KB
返回 下载 相关 举报
磁盘调度操作系统实验报告.doc_第1页
第1页 / 共25页
磁盘调度操作系统实验报告.doc_第2页
第2页 / 共25页
磁盘调度操作系统实验报告.doc_第3页
第3页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《磁盘调度操作系统实验报告.doc》由会员分享,可在线阅读,更多相关《磁盘调度操作系统实验报告.doc(25页珍藏版)》请在三一文库上搜索。

1、实验磁盘调度算法实现一、实验目的本课程设计的目的是通过磁盘调度算法设计一个磁盘调度模拟系统, 从而使 磁盘调度算法更加形象化, 容易使人理解, 使磁盘调度的特点更简单明了, 能使 使用者加深对先来先服务算法、 最短寻道时间优先算法、 扫描算法以及循环扫描 算法等磁盘调度算法的理解。二、实验内容系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF、扫描算法(SCAN、循环扫描算法(CSCAN2.1 先来先服务算法( FCFS )这是一种比较简单的磁盘调度算法。 它根据进程请求访问磁盘的先后次序进 行调度。此算法的优点是公平、简单,且每个进程的请求都

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

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

4、道时间优先算法的优点即 吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问 的频率仍低于中间磁道。2.4循环扫描算法(CSCAN)循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的, 当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是 由于这些磁道刚被处理,而磁盘另一端的请求密度相当高, 且这些访问请求等待 的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自 里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道, 即将最小磁道号紧接着最大磁道号构成循环,进行扫描。三、实验流程3.1系统功能图嵐盘调度主界

5、面图3-1系统功能图3.2算法流程图本次实验为实现磁盘调度算法,分别实现四个算法并调试。四个算法算法包 括:先来先服务算法(FCFS、最短寻道时间优先算法(SSTF、扫描算法(SCAN、 循环扫描算法(CSCA)四个算法的流程图分析如下。1)先来先服务算法(FCFS的流程图I幵始)输入磯适序列T显示鐵盘错求序列输入当前磁道号1显示磁盘扫描序列T显示平均昭道长痕(结束)图3-2先来先服务算法的流程图2)最短寻道时间优先算法(SSTF的流程图氓;砾復讨输图3-3最短寻道时间优先算法的流程图3)扫描算法(SCAN的流程图虢输紳的iWwCEE3图3-4扫描算法的流程图4) 循环扫描算法(CSCAN的流

6、程图CEE)图3-5循环扫描算法的流程图四、源程序#i nclude#i nclude#i nclude#in clude#defi ne maxsize 1000判断输入数据是否有效int decide(char str) /判断输入数据是否有效int i=0;while(stri!=0) if(stri9) return 0; break;i+;return i;/*将字符串转换成数字 */int trans(char str,int a) /将字符串转换成数字int i;int sum=0;for(i=0;ia;i+) sum=sum+(int)(stri-0)*pow(10,a-i-1

7、);return sum;/*冒泡排序算法 */int *bubble(int cidao,int m)int i,j;int temp;for(i=0;im;i+) / 使用冒泡法按从小到大顺序排列for(j=i+1;jcidaoj) temp=cidaoi; cidaoi=cidaoj; cidaoj=temp;cout 排序后的磁盘序列为: ;for( i=0;im;i+) / 输出排序结果coutcidaoi ;coutendl;return cidao;先来先服务调度算法void FCFS(int cidao,int m) / 磁道号数组,个数为 mint now;/ 当前磁道号in

8、t sum=0; /总寻道长度int j,i;int a;char str100;float ave; /平均寻道长度cout 磁盘请求序列为: ;for( i=0;im;i+) / 按先来先服务的策略输出磁盘请求序列coutcidaoi ;coutendl;coutstr; / 对输入数据进行有效性判断a=decide(str);if(a=0)coutvv输入数据的类型错误,请重新输入! endl;goto B;else now=trans(str,a); /输/ 入当前磁道号sum+=abs(cidao0-now);cout 磁盘扫描序列为: ;for( i=0;im;i+) / 输出磁盘

9、扫描序列 coutcidaoi ;for(i=0,j=1;jm;i+,j+) / 求平均寻道长度sum+=abs(cidaoj-cidaoi); ave=(float)(sum)/(float)(m);coutendl;cout 平均寻道长度: aveendl;最短寻道时间优先调度算法 */void SSTF(int cidao,int m)int k=1;int now,l,r;int i,j,sum=0;int a;char str100;float ave;cidao=bubble(cidao,m); /调用冒泡排序算法排序coutstr; /对输入数据进行有效性判断a=decide(s

10、tr);if(a=0)cout 输入数据的类型错误 ,请重新输入! endl;goto C;else now=trans(str,a); /输/ 入当前磁道号if(cidaom-1=now) / 若当前磁道号大于请求序列中最大者,则直接由外向 内依次给予各请求服务cout=0;i-)coutcidaoi=now) / 若当前磁道号小于请求序列中最小者, 则直接由内向外依 次给予各请求服务cout 磁盘扫描序列为: ;for(i=0;im;i+) coutcidaoicidao0&nowcidaom-1) / 若当前磁道号大于请求序列中最小者 且小于最大者cout 磁盘扫描序列为: ;while

11、(cidaok=0)&(rm) / 当前磁道在请求序列范围内if(now-cidaol)=(cidaor-now) / 选择与当前磁道最近的请求给予 服务coutcidaol ;sum+=now-cidaol;now=cidaol;l=l-1;elsecoutcidaor ;sum+=cidaor-now;now=cidaor;r=r+1;if(l=-1) / 磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道 for(j=r;jm;j+) coutcidaoj=0;j-) coutcidaoj ; sum+=cidaom-1-cidao0;ave=(float)(sum)/(float)(m

12、); coutendl;aveendl;cout 平均寻道长度:扫描调度算法/* */ void SCAN(int cidao,int m) / 先要给出当前磁道号和移动臂的移动方向 int k=1;int now,l,r,d;int i,j,sum=0;int a;char str100;float ave;cidao=bubble(cidao,m); /调用冒泡排序算法排序coutstr; / 对输入数据进行有效性判断a=decide(str);if(a=0)cout 输入数据的类型错误 ,请重新输入! endl;goto D;else now=trans(str,a); /输入当前磁道号

13、if(cidaom-1=now) / 若当前磁道号大于请求序列中最大者,则直接由外向 内依次给予各请求服务 ,此情况同最短寻道优先cout=0;i-)coutcidaoi=now) / 若当前磁道号小于请求序列中最小者, 则直接由内向外依次给予各请求服务 ,此情况同最短寻道优先for(i=0;im;i+)coutcidaoicidao0&nowcidaom-1) / 若当前磁道号大于请求序列中最小者且小于最大者while(cidaoknow) k+;l=k-1;r=k;cout 请输入当前移动臂的移动的方向 :nendl;cout 0: 表示向内 1 :表示向外 : d;if(d=0) / 选

14、择移动臂方向向内,则先向内扫描cout=0;j-) coutcidaoj ; / 输出向内扫描的序列for(j=r;jm;j+) / 磁头移动到最小号,则改变方向向外扫描未扫描的磁道coutcidaoj ; / 输出向外扫描的序列sum=now-2*cidao0+cidaom-1;cout 磁盘扫描序列为: ;for(j=r;jm;j+) coutcidaoj=0;j-) / 磁头移动到最大号,则改变方向向内扫描未扫描的 磁道coutcidaoj ;sum=-now-cidao0+2*cidaom-1;ave=(float)(sum)/(float)(m);coutendl;cout 平均寻道

15、长度: aveendl;循环扫描调度算法void CSCAN(int cidao,int m) int k=1;int now,l,r;int i,j,sum=0;int a;char str100;float ave;cidao=bubble(cidao,m); /调用冒泡排序算法排序coutstr; /对输入数据进行有效性判断a=decide(str);if(a=0)cout 输入数据的类型错误 ,请重新输入! endl;goto E;else now=trans(str,a); /输/ 入当前磁道号if(cidaom-1=now) / 若当前磁道号大于请求序列中最大者,则直接将移动臂移动

16、到最小号磁道依次向外给予各请求服务cout 磁盘扫描序列为: ;for(i=0;im;i+) coutcidaoi=now) / 若当前磁道号小于请求序列中最小者, 则直接由内向外依次给予各请求服务 ,此情况同最短寻道优先for(i=0;im;i+) coutcidaoicidao0&nowcidaom-1) / 若当前磁道号大于请求序列中最小者且小于最大者cout 磁盘扫描序列为: ;while(cidaoknow) / 单向反复地从内向外扫描k+;l=k-1;r=k;for(j=r;jm;j+) coutcidaoj ; / 输出从当前磁道向外扫描的序列for(j=0;jr;j+) / 当

17、扫描完最大号磁道,磁头直接移动到最小号磁道,再 向外扫描未扫描的磁道coutcidaoj ;sum=2*cidaom-1+cidaol-now-2*cidao0;ave=(float)(sum)/(float)(m);coutendl;cout 平均寻道长度: aveendl;void main()int a;int c; /菜单项int cidaomaxsize;int i=0,count;char str100;cout 请输入磁道序列 (输入 0 结束 ): str; / 对输入数据进行有效性判断a=decide(str);if(a=0)cout 输入数据的类型错误 ,请重新输入! st

18、r; /对输入数据进行有效性判断a=decide(str);if(a=0) cout 输入数据的类型错误 ,请重新输入! endl; elsecidaoi=trans(str,a);count=i-1; / 要访问的磁道数cout 输入的磁道序列为: ;for(i=0;icount;i+) coutcidaoi ; / 输出磁道序列coutendl;while(1)coutendl;coutendl;4.循coutn 1.先来先服务2.最短寻道时间优先3.扫描调度环扫描5.退出 nendl;cout endl;G:coutstr; /对输入数据进行有效性判断a=decide(str);if(a

19、=0)cout 输入数据的类型错误 ,请重新输入! 5)cout 输入的数据错误!请重新输入 endl; goto G;switch(c)case 1: /使用FCFS算法FCFS(cidao,count);break;case 2: /使用 SSTF 算法SSTF(cidao,count);break;case 3: /使用 SCAN 算法SCAN(cidao,count);break;case 4: /使用 CSCAN 算法CSCAN(cidao,count);break;五、实验结果5.1程序主界面运行程序后,将会提示用户输入磁道序列, 并且以 0 结束。当用户输入磁道所示。请输/存直序

20、列t输入瞬页=L2 34 56 78 8? 23 45 6? 0输入的磁道序列块:12 34 56 78 89 23 45 67图5-1程序主界面5.2先来先服务算法(FCFS运行结果选择算法1之后,进入算法1的操作。系统会显示磁盘的请求序列。用户需要输入当前的磁道号,系统会显示出磁盘的扫描序列和平均寻道长度。由运行结果可得出,先来先服务算法的平均寻道长度为24.75。先来先服务算法的运行 图如图5-2所示。1先来先服务 趴最短寻道时间优先 茶扫描调度 4循环扫描 退出12号12.7 M s I i为勢: :列的列度 S序前序长道 輕攵扫寻 选盘曹均 ww平87865437 C54325432

21、图5-2先来先服务算法运行结果图5.3最短寻道时间优先算法(SSTF运行结果选择算法2之后,进入算法2的操作。系统会显示磁盘的请求序列。用户需要输入当前的磁道号,系统会显示出磁盘的扫描序列和平均寻道长度。由运行结果可得出,先来先服务算法的平均寻道长度为20.625 o最短寻道时间优先算法的运行图如图5-3所示为号120. 列道-2 2S . 盘的列度 盍前序长 择戈扫寻 选均1 先来先服务器最短寻道时间优先 X扫描调度 4循环扫描5 退出;丄2 23 34 45 56 67 78 89 :123 34 45 56 6? 78 99625图5-3最短寻道时间优先算法 运行结果图5.4扫描算法(S

22、CAN运行结果选择算法3之后,进入算法3的操作。系统会显示磁盘的请求序列。用户需 要输入当前的磁道号,系统会显示出磁盘的扫描序列和平均寻道长度。由运行结果可得出,先来先服务算法的平均寻道长度为11。扫描算法的运行图如图5-4 所示。为号121 列道 1 圧驴- 一:創的冽度 一蛊前序长 一 這 一择UC扫寻 一远E.翌匕 一佳攜遏平1 先来先服务 2 最短寻道时间优先 沢扫描调度 农循环扫描5 退岀12 23 34 45 56 67 78 89 123 34 45 56 t7 7S S9图5-4扫描算法运行结果图5.5循环扫描算法(CSCAJN运行结果选择算法4之后,进入算法4的操作。系统会显示磁盘的请求序列。用户需 要输入当前的磁道号,系统会显示出磁盘的扫描序列和平均寻道长度。 由运行结 果可得出,先来先服务算法的平均寻道长度为11。扫描算法的运行图如图5-5 所示。1-先来先务 汉最短寻道时间优先3 扫描调度4.循环扫描 窕退出图5-5循环扫描算法运行结果图六、总结通过本次实验,学习了解磁盘调度四种调度算法 (先来先服务算法;最短寻 道时间优先算法;扫描算法;循环扫描算法)的工作原理以及四种调度算法之间 的差异和共性,并且在当中发现了自己的不足,对以前所学过的知识理解得不够 深刻,掌握得不够牢固,看到了自己的实践经验还是比较缺乏, 实践能力还需要

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1