模拟磁盘调度算法,操作系统课程设计_第1页
模拟磁盘调度算法,操作系统课程设计_第2页
模拟磁盘调度算法,操作系统课程设计_第3页
模拟磁盘调度算法,操作系统课程设计_第4页
模拟磁盘调度算法,操作系统课程设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、实用文档某某大学课程设计报告课程名称:操作系统设计题目:模拟磁盘调度算法系 别:计算机系专 业:计算机科学与技术组 别:学生姓名:学号:起止日期:指导教师:目录第一章需求分析 11.1 课程设计的简介 11.2 课程设计的目的 11.3 磁盘调度主要思'想 11.4 课程设方t内容 2第二章概要设计 32.1 设计思想 32.2 数据Z构 32.3 模块调用关系图 32.4 子模块程序流程图 5第三章详细设计 63.1模块划分 6第四章代码测试 94.1先来先服务 94.1最短寻道时间优先 114.1扫描算法 12第五章心得体会 13第六章致谢 13参考文献 13附源代码 1第一章需求

2、分析1.1 课程设计的简介这是一个用VC+6.0为工具、C+包编程语言而实现模拟先来先服务算法(FCFS、最短寻道时间优先算法(SSTF、扫描算法(SCAN的一个磁盘调度程 序。该程序设计系统主界面可以灵活选择某种算法并算出磁头移动的总磁道数以 及平均磁道数。1.2 课程设计的目的本课程设计的目的是通过设计一个磁盘调度模拟系统, 从而使磁盘调度算法 更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对 先来先服务算法(FCFS、最短寻道时间优先算法(SSTF、扫描算法(SCAN等 磁盘调度算法的理解。1.3 磁盘调度主要思想设备的动态分配算法与进程调度相似,也是基于一定的分配

3、策略的。常用的 分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效 率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直 接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构 成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间, 其中查找时间是决定因素。因此,磁盘调度算法先考虑优化查找策略,需要时再 优化旋转等待策略。平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道 数(N),即: L=(M1+M2 +Mi+MN /N。其中Mi为所

4、需访问的磁道号所需移动的磁道数。启动磁盘执行输入输出操作时,要把移动臂移动到指定的柱面,再等待指定 扇区的旋转到磁头位置下,然后让指定的磁头进行读写,完成信息传送。因此, 执行一次输入输出所花的时间有:寻找时间一一磁头在移动臂带动下移动到指定柱面所花的时间。延迟时间一一指定扇区旋转到磁头下所需的时间。传送时间一一由磁头进程读写完成信息传送的时间。其中传送信息所花的时间,是在硬件设计就固定的。而寻找时间和延迟时间 是与信息在磁盘上的位置有关。为了减少移动臂进行移动花费的时间,每个文件的信息不是按盘面上的磁道 顺序存放满一个盘面后,再放到下一个盘面上。而是按柱面存放,同一柱面上的 各磁道被放满信息

5、后,再放到下一个柱面上。所以各磁盘的编号按柱面顺序(从 0号柱面开始),每个柱面按磁道顺序,每个磁道又按扇区顺序进行排序。1.4 课程设计内容系统主界面可以灵活选择某种算法,算法包括:先来先服务算法( FCFS、 最短寻道时间优先算法(SSTF、扫描算法(SCAN。并计算及比较磁头移动总磁 道数和平均磁道数。1.4.1、 先来先服务算法(FCFS这是一种比较简单的磁盘调度算法。 它根据进程请求访问磁盘的先后次序进 行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不 会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化, 在对磁盘的访问请求比较多的情况下, 此

6、算法将降低设备服务的吞吐量,致使平 均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。1.4.2、 最短寻道时间优先算法(SSTF)该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量, 但却不能保证 平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的, 因而导 致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求 将会无限期的被延迟,有些请求的响应时间将不可预期。1.4.3、 扫描算法(SCAN扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当

7、磁头正在自里向外移动时,扫描算法所选择的下一个 访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时, 同样也是每次选择这样的进程来调度, 即其要访问的磁道,在当前磁道之内,从 而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行, 故 又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于 中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即 吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问 的频率仍低于中间磁道。第二章概要设计2.1 设

8、计思想本次课程设计我们是以面向对象的思想为主,利用Visual C +为工具实现模拟磁盘调度。程序主要是利用冒泡排序函数、FCFS函数、SSTF函数、SCAN函数、CSCAI®数实现函数的功能。利用菜单式的选择界面,方便的用户操作。最终对每一种模拟磁盘调度输出磁头平均移动的磁道数以及总磁道数。2.2 数据结构该程序主要是利用7个函数。Panduan()函数:对输入的字符进行判断是 否合法,zhuanhua ()函数:对输入合法的字符进行转化,bubble ()函数:对 输入的磁道进行冒泡排序,FCFS()函数,即先来先服务函数,SSTF()函数: 最短最短寻道时间函数,SCAN()函

9、数:才3描函数,CSCAN)函数:循环扫描 函数。各函数之间有点可以相互调用,共同实现要求。本程序主要用到的数据结构为数组、字符串,包括对字符串的合法性判断, 利用数组算磁头移动的总磁道数,平均移动磁道数。2.3 模块调用关系图图2-1磁盘调度模拟系统2.4 子模块程序流程图2.4.1 先来先服务算法(FCFS流程图:FCFS算法流程图开始输入磁道号按输入顺序蒋磁道 序列输出求平均寻道长度 输出移动的年均磁道数2.4.2 最短寻道时间优先算法(SSTF)流程图SSTF算法流程图开始输入磁道号调用冒泡排序函数输出排好序的磁道 序列L输入当前磁道号F选择与 当 前磁道距离最近 的磁道进行扫描判断当

10、前磁头在序 列中的位置移动到最小(大)号,改I而外(内)移动扫描未扫描的磁道求平均寻道长度求总寻道长度I结束2.4.3 扫描算法(SCAN流程图判断当前磁头在序 列中的位置选择与当前磁道距周最近 的磁道进行扫描移动到最小(人)号,改向夕I,(内)移动扫描未扫描的磁道第三章详细设计3.1 模块划分本系统划分为四个模块:先来先服务算法模块int FCFS(int array口,intm)、最短寻道时间优先算法模块int SSTF(int array口,int m)、扫描算法模块int SCAN(int array口,int m)3.1.1 先来先服务算法模块:int FCFS(int array,

11、int m)输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度,输出移动平均磁道数。主要代码:for(i=0,j=1;j<m;i+,j+)sum+=abs(arrayj-arrayi);ave=(float)(sum)/(float)(m);3.1.2 最短寻道时间优先算法模块:int SSTF(int array,int m)将磁道号用冒泡法从小到大排序,输出排好序的磁道序列,输入当前磁道号,根据前磁道在已排的序列中的位置, 动的平均磁道数。主要代码:for(i=0;i<m;i+) /*for(j=i+1;j<m;j+)if(arrayi>arrayj)t

12、emp=arrayi;arrayi=arrayj;arrayj=temp;if(arraym-1<=now) /*大者,则直接由外向内依次给予各请求服务for(i=m-1;i>=0;i-)cout<<arrayi<<""sum=now-array0;elseif(array0>=now) /*小者,则直接由内向外依次给予各请求服务while(l>=0)&&(r<m) /*选择扫描的顺序,求出平均寻道长度,输出移使用冒泡法按从小到大顺序排列*/若当前磁道号大于请求序列中最*/若当前磁道号小于请求序列中最*/

13、当前磁道在请求序列范围内*/if(now-arrayl)<=(arrayr-now) /*选择与当前磁道最近的请求给予服务*/cout<<arrayl<<""sum+=now-arrayl;now=arrayl;l=l-1;3.1.3 扫描算法模块:int SCAN(int array,int m)将磁道号用冒泡法从小到大排序,输出排好序的序列,输入当前磁道号,选 择移动臂的移动方向,根据当前磁道在已排的序列中的位置,选择扫描的顺序, 求出平均寻道长度,输出移动的平均磁道数。主要代码:if(d=0) /*选择移动臂方向向内,则先向内扫描*/fo

14、r(j=l;j>=0卜)cout<<arrayj<<" " /*输出向内扫描的序列*/for(j=r;j<m;j+) /*磁头移动到最小号,则改变方向向外扫描未扫描的磁道*/cout<<arrayj<<" " /*输出向外扫描的序列*/sum=now-2*array0+arraym-1;else /*选择移动臂方向向外,则先向外扫描*/for(j=r;j<m;j+)cout<<arrayj<<" " /*输出向外扫描的序列*、for(j=l;j&

15、gt;=0;j-)/*磁头移动到最大号,则改变方向向内扫描未扫描的磁道*/cout<<arrayj<<""sum=-now-array0+2*arraym-1;ave=(float)(sum)/(float)(m);第四章测试4.1 先来先服务算法输入磁道序列:65 78 34 23 87 100 18 26当前磁道号:80磁盘扫描序列为:65 78 34 23 87 100 18 26平均寻到长度:31.25磁头移动总磁道数:250Gstlp 13.2. ,,道:31数 为磁为 列的列密 序前序去心 求当描道动 一要扫覆 盘均头 磁蓬金08 873

16、2433243S74.2 最短寻道时间优先算法(1)当前磁道号大于磁道序列中的最大的磁道号时输入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列为:18 23 26 34 65 78 87 100当前磁道号:200磁盘扫描序歹U为100 87 78 65 34 26 23 18平均寻到长度:22.75磁头移动总磁道数:18210 017 88 18 37 25 66 24 43 36 S2 63 B2 798 0 712 8 25 S 071为号102.列道12数居为;道盘的列卷磁前序售心的当描道动后人扫砂均头 tn(2)当前磁道号小于磁道序列中的最小的磁道号时输入磁

17、道序列:65 78 34 23 87 100 18 26排序后的磁道序列为:18 23 26 34 65 78 87 100当前磁道号:10磁盘扫描序列为:18 23 26 34 65 78 87 100平均扫描长度:11.25磁道移动总磁道数:90列道:工 序磁为工 盘的列度 磁前序长 的当描道. 后入扫一 批请及平62328 01 1436232 5 02 9 S - lit34 65 78 876S 78 87 100100(3)当前磁道号大于磁道序列中的最小的磁道号且小于最大磁道号时输入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列为:18 23 26 34

18、 65 78 87 100当前磁道号:80磁盘扫描序列为:78 87 100 65 34 26 23 18平均扫描长度:13.25磁道移动总磁道数:106盘的列爵磁前印杏心的当描道动后入扫需均头为号78冽道.标为,数,道:18 23;8087 100251064.3扫描算法(1)当前磁道号大于磁道序列中的最大的磁道号时输入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列为:18 23 26 34 65 78 87 100当前磁道号:200磁盘扫描序列为100 87 78 65 34 26 23 18平均寻到长度:22.75磁头移动总磁道数:182(2)当前磁道号小于磁

19、道序列中的最小的磁道号时输入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列为:18 23 26 34 65 78 87 100当前磁道号:10磁盘扫描序列为:18 23 26 34 65 78 87 100平均扫描长度:11.25磁道移动总磁道数:90序后的磁盘序列为士 18 23 26 34 6s 78 87 10。输入当前带磁道号 1日盘扫描序列为】18 23 26 34 65 78 87 100(3)当前磁道号大于磁道序列中的最小的磁道号且小于最大磁道号 (磁头向外) 时输入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列为:18 2

20、3 26 34 65 78 87 100当前磁道号:80请输入当前移动臂的移动的方向(1表示向外,0表示向内):1磁盘扫描序列为:87 100 78 65 34 26 23 18平均寻到长度:12.75磁道移动总磁道数:102 3移 17510 为号一872.: 列道臂:1数 匡动为.道 一盘的移列量 榛的刖序善心 的当当描道动 、E入人扫需 一均头62328 i80动0078向6534 65 78 87 100<1表示向外,。表示向内3:134 26 23 18芹硬为,情 盘的列富 前序首 的当描道动 后入扫 一 寻列道为号87上 18;801002S231826 34?8 87 10

21、023 26 34 65 78请选择算法.5Press dny key to cont inue上14必 fr_第五章心的体会通过这次的课程设计使我认识到要将操作系统这门计算机专业的课学好不 仅仅是要把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结 合起来才能更好地巩固所学,才能提高自己实践能力 .通过这次的设计使我认识 到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识 同样重要。可以说此课程设计的理论难度并不大,但是若要深入发掘其中的东西, 并且实际去编程实现,就遇到了相当大的难度。因为与之涉及的很多方面并没有 学过,需要自己去自学和实践检验。通过本次课程

22、设计,通过模拟磁盘调度及进程排队算法来加深对操作系统中 各个磁臂调度算法概念的理解。模拟磁盘调度算法(FCFS,SSTF,SCAN,CSCAN以 现各种不同调度算法的过程,并计算各算法的平均寻道长度,以便于我们判断各 种算法的优劣以及各种算法使用的场合。对 VC+6.0的应用也更加得心应手。第六章致谢感谢陕粉丽老师和本组成员在这次系统开发过程中对我的帮助参考文献1计算机操作系统 高等教育出版社,作者:孙钟秀,费翔林,骆斌 等编著2 VC+深入详解 电子工业出版社作者:孙鑫,余指导教师评语:指导教师签名:年 月 日项目权重成绩成1、设计过程中出勤、学习态度等方面0.1绩2、设计技术水平0.4评3

23、、安全程度及可操作程度0.2定4、设计报告书写及图纸规范程度0.3总成绩教研室审核意见:教研室主任签字:教学院(系)审核意见:主任签字:附源代码#include<stdio.h>#include<stdlib.h>#include<iostream.h>#include<math.h>const int maxsize=1000;int panduan(char str);int zhuanhua(char str,int a);int *bubble(int cidao,int m);int FCFS(int cidao,int m);void

24、 SSTF(int cidao口,int m);void SCAN(int cidao口,int m);int main()int a;int c;int cidaomaxsize;int i=0,count;char str100;cout<<"请输入磁道序列(0结束):"<<endl;bei1:cin>>str;a=panduan(str);if(a=0)cout<<"输入数据的类型错误,请重新车入!"<<endl;goto bei1;elsecidaoi=zhuanhua(str,a);i

25、+;while(cidaoi-1!=0)cin>>str;a=panduan(str);if(a=0)cout<<"输入数据的类型错误,请重新输入! "<<endl;elsecidaoi=zhuanhua(str,a);i+;)count=i-1;cout<<"你输入的磁道序列为:"for(i=0;i<count;i+)(cout<<cidaoi<<"")cout<<endl;while(1)(cout<<endl;cout<&

26、lt;"|_|"<<endl;cout<<"|(*)系统菜单(*A_A*)|"<<endl;cout<<"|_|"<<endl;cout<<"|"<<endl;cout<<"|1.先来先服务|"<<endl;cout<<"|"<<endl;cout<<"|2.最短寻道时间优先|"<<endl;cout&

27、lt;<"|"<<endl;cout<<"|3.扫描调度|"<<endl;cout<<"|"<<endl;cout<<"|4.退出|"<<endl;cout<<"|"<<endl;cout<<"|_|"<<endl;cout<<"|_|"<<endl;bei7:cout<<"

28、请选择算法:"bei6:cin>>str;a=panduan(str);if(a=0)(cout<<"输入数据的类型错误,请重新车入!"<<endl;goto bei6;)elsec=zhuanhua(str,a);if(c=5)break;if(c>5)(cout<<"数据输入错误!请重新输入"<<endl;goto bei7;)switch(c)case 1:FCFS(cidao,count); break;case 2:SSTF(cidao,count); break;ca

29、se 3:SCAN(cidao,count); break; return 0;/*判断输入数据是否有效*/int panduan(char str)int i=0;while(stri!='0')if(stri<'0'|stri>'9')return 0;break;i+;return i;/*将字符串转换成数字*/int zhuanhua(char str,int a)int i;int sum=0;for(i=0;i<a;i+)sum=sum+(int)(stri-'0')*pow(10,a-i-1);re

30、turn sum;/*冒泡排序算法 */int *bubble(int cidao,int m)int i,j;int temp;for(i=0;i<m;i+)for(j=i+1;j<m;j+)if(cidaoi>cidaoj) temp=cidaoi;cidaoi=cidaoj;cidaoj=temp;cout<<"排序后的磁盘序列为:"for( i=0;i<m;i+)cout<<cidaoi<<""cout<<endl;return cidao;/*先来先服务调度算法 */int

31、 FCFS(int cidao,int m)int now;int sum=0;int j,i;int a;char str100;float ave;cout<<"磁盘请求序列为:"for( i=0;i<m;i+)cout<<cidaoi<<""cout<<endl;cout<<"请输入当前的磁道号:"bei2: cin>>str;a=panduan(str);if(a=0)cout<<"输入数据的类型错误,请重新输入!"&

32、lt;<endl;goto bei2; elsenow=zhuanhua(str,a);sum+=abs(cidao0-now);cout<<"磁盘扫描序列为:"for( i=0;i<m;i+)cout<<cidaoi<<""for(i=0,j=1;j<m;i+,j+)sum+=abs(cidaoj-cidaoi);ave=(float)(sum)/(float)(m);cout<<endl;cout<<"平均寻道长度:"<<ave<<

33、;endl;cout<<"磁头移动总磁道数:"<<sum<<endl;return 0;/*最短寻道时间优先调度算法*/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);cout<<"请输入当前的磁道号:bei3: cin>>str;a=panduan(str);if(a=0)cout<<"输入数据的类型错误got

34、o bei3;elseII.,请重新输入!"<<endl;now=zhuanhua(str,a);if(cidaom-1<=now)cout<<"磁盘扫描序列为:for(i=m-1;i>=0;i-)II.cout<<cidaoi<<""sum=now-cidao0;)if(cidao0>=now)(cout<<"磁盘扫描序列为:"for(i=0;i<m;i+)cout<<cidaoi<<""sum=cidao

35、m-1-now;)if(now>cidao0&&now<cidaom-1)(cout<<" 磁盘扫描序列为:" while(cidaok<now)(k+;)l=k-1;r=k;while(l>=0)&&(r<m)(if(now-cidaol)<=(cidaor-now)(cout<<cidaol<<""sum+=now-cidaol;now=cidaol;l=l-1;)else(cout<<cidaor<<""

36、;sum+=cidaor-now;now=cidaor;r=r+1;)if(l=-1)(for(j=r;j<m;j+)(cout<<cidaoj<<"")sum+=cidaom-1-cidao0;)elsefor(j=l;j>=0;j-)cout<<cidaoj<<""sum+=cidaom-1-cidao0;ave=(float)(sum)/(float)(m);cout<<endl;cout<<"平均寻道长度:"<<ave<<endl;cout<<"磁头移动总磁道数:"<<sum<<endl;

温馨提示

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

评论

0/150

提交评论