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

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上目 录3 题目分析24 概要设计2 4.1 先来先服务(FCFS)的设计思想.2 4.2 最短寻道时间优先调度(SSTF)的设计思想.2 4.3 扫描算法(SCAN)的设计思想2 4.4 循环扫描(CSCAN)的设计思想.25 代码及流程3 5.1 流程图.3 5.2 源代码.86 运行结果167 设计心得19专心-专注-专业1 课程设计目的及要求设计目的:加深对操作系统原理的进一步认识,加强实践动手能力和程序开发能力的培养,提高分析问题解决问题的能力,培养合作精神,以巩固和加深磁盘调度的概念。操作系统是一门工程性很强的课程,它不仅要求学生掌握操作系统的工作原理和理论

2、知识,也要求学生的实际动手能力,以加深对所学习内容的理解,使学生熟练地掌握计算机的操作方法,使用各种软件工具,加强对课程内容的理解。这次课程设计,就是通过模拟磁臂调度来加深对操作系统中磁臂调度概念的理解。使学生熟悉磁盘管理系统的设计方法;加深对所学各种磁盘调度算法的了解及其算法的特点。设计要求:编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度;要求设计主界面可以灵活选择某算法,且以下算法都要实现1、先来先服务算法(FCFS)2、最短寻道时间优先算法(SSTF)3、扫描算法(SCAN)4、循环扫描算法(CSCAN)2 相关知识数据结构:数组now:当前磁道号;array:放置磁道号的数组

3、;void FCFS(int array,int m )先来先服务算法(FCFS)void SSTF(int array,int m)最短寻道时间优先算法(SSTF)void SCAN(int array,int m) 扫描算法(SCAN)void CSCAN(int array,int m)循环扫描算法(CSCAN) 磁盘调度:当有多个进程都请求访问磁盘时,采用一种适当的驱动调度算法,使各进程对磁盘的平均访问(主要是寻道)时间最小。目前常用的磁盘调度算法有:1)闲来先服务2)最短寻道时间优先3)扫描算法4)循环扫描算法等3 题目分析选择一个自己熟悉的计算机系统和程序设计语言模拟操作系统基本功

4、能的设计方法及其实现过程 完成各分项功能。在算法的实现过程中,要求可决定变量应是动态可变的;同时模块应该有一个合理的输出结果。具体可参照实验的程序模拟 .各功能程序要求自行编写程序实现,不得调用现有操作系统提供的模块或功能函数。磁盘调度程序模拟。先来先服务调度算法. 最短寻道时间优先调度,循环(SCAN)调度算法。程序设计语言自选,最终以软件(含源代码以及执行程序)和设计报告的形式提交课程设计结果.。磁盘调度让有限的资源发挥更大的作用。在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个

5、磁盘设备建立一个等待队列。4 概要设计1.先来先服务(FCFS)的设计思想即先来的请求先被响应。FCFS策略看起来似乎是相当"公平"的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。FCFS策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间。为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用FCFS策略。这个过程就叫做磁盘调度管理。有时候fcfs也被看作是最简单的磁盘调度算法。2.最短寻道时间优先调度(SSTF)的设计思想最短时间优先算法选择这样的进程。要求访问的磁道,与当前

6、磁头所在的磁道距离最近,以使每次的寻道时间最短。3.扫描算法(SCAN)的设计思想扫描(SCAN)调度算法:该算法不仅考虑到欲访问 的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁道换向自外向里移动。这时,同样也是每次选择这样的进程来调度,也就是要访问的当前位置内距离最近者,这样,磁头又逐步地从外向里移动,直至再无更里面的磁道要访问,从而避免了出现“饥饿”现像。4.循环扫描(CSACN)的设计思想循环扫描(

7、CSCAN)算法:当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该里程就必须等待,为了减少这种延迟,CSCAN算法规定磁头单向移动,而本实验过程中我们所设计的是磁头从里向外移动,而从外向里移动时只须改方向而已,本实验未实现。但本实验已完全能演示循环扫描的全过程。5 代码及流程1.先来先服务(FCFS)图 11 FCFS的流程图2.最短寻道时间优先调度(SSTF) 图12 SSTF的流程图3.扫描算法(SCAN) 图13 SCAN的流程图 4.循环扫描(CSCAN)图14 CSCAN的流程图 图15 主函数的流程图源代码:#include"stdio.h&

8、quot;#include"stdlib.h"/#include"iostream.h"#define maxsize 100 /定义最大数组域/先来先服务调度算法void FCFS(int array,int m)int sum=0,j,i;int avg;printf("n FCFS调度结果: ");for(i=0;i<m;i+)/输出FCFS磁盘调度结果printf("%d ",arrayi);for(i=0,j=1;j<m;i+,j+)sum+=abs(arrayj-arrayi);/累计总的移

9、动距离avg=sum/(m-1);/计算平均寻道长度printf("n 移动的总道数: %d n",sum);printf(" 平均寻道长度: %d n",avg);/最短寻道时间优先调度算法void SSTF(int array,int m)int temp;int k=1;int now,l,r;int i,j,sum=0;int avg;for(i=0;i<m;i+)for(j=i+1;j<m;j+)/对磁道号进行从小到大排列if(arrayi>arrayj)/两磁道号之间比较temp=arrayi;arrayi=arrayj;a

10、rrayj=temp;for( i=0;i<m;i+)/输出排序后的磁道号数组printf("%d ",arrayi);printf("n 请输入当前的磁道号:");scanf("%d",&now);printf("n SSTF调度结果: ");if(arraym-1<=now)/判断整个数组里的数是否都小于当前磁道号 for(i=m-1;i>=0;i-)/将数组磁道号从大到小输出printf("%d ",arrayi);sum=now-array0;/计算移动距离el

11、se if(array0>=now)/判断整个数组里的数是否都大于当前磁道号 for(i=0;i<m;i+)/将磁道号从小到大输出printf("%d ",arrayi);sum=arraym-1-now;/计算移动距离elsewhile(arrayk<now)/逐一比较以确定K值k+;l=k-1;r=k;/确定当前磁道在已排的序列中的位置while(l>=0)&&(r<m)if(now-arrayl)<=(arrayr-now)/判断最短距离 printf("%d ",arrayl);sum+=now

12、-arrayl;/计算移动距离now=arrayl;l=l-1;else printf("%d ",arrayr);sum+=arrayr-now;/计算移动距离now=arrayr;r=r+1;if(l=-1) for(j=r;j<m;j+) printf("%d ",arrayj);sum+=arraym-1-array0;/计算移动距离else for(j=l;j>=0;j-) printf("%d ",arrayj);sum+=arraym-1-array0;/计算移动距离avg=sum/m;printf(&quo

13、t;n 移动的总道数: %d n",sum);printf(" 平均寻道长度: %d n",avg);/扫描算法void SCAN(int array,int m)/先要给出当前磁道号和移动臂的移动方向int temp;int k=1;int now,l,r,d;int i,j,sum=0;int avg;for(i=0;i<m;i+)for(j=i+1;j<m;j+)if(arrayi>arrayj)/对磁道号进行从小到大排列temp=arrayi;arrayi=arrayj;arrayj=temp;for( i=0;i<m;i+)pri

14、ntf("%d ",arrayi);/输出排序后的磁道号数组printf("n 请输入当前的磁道号:");scanf("%d",&now);if(arraym-1<=now)/判断整个数组里的数是否都小于当前磁道号 printf("n SCAN调度结果: ");for(i=m-1;i>=0;i-)printf("%d ",arrayi);/将数组磁道号从大到小输出sum=now-array0;/计算移动距离else if(array0>=now)/判断整个数组里的数是否

15、都大于当前磁道号 printf("n SCAN调度结果: ");for(i=0;i<m;i+)printf("%d ",arrayi);/将磁道号从小到大输出sum=arraym-1-now;/计算移动距离elsewhile(arrayk<now)/逐一比较以确定K值k+;l=k-1;r=k;printf("n 请输入当前移动臂的移动的方向 (1 磁道号增加方向,0磁道号减小方向) : ");scanf("%d",&d);printf("n SCAN调度结果: ");if(d

16、=0)for(j=l;j>=0;j-)printf("%d ",arrayj);for(j=r;j<m;j+)printf("%d ",arrayj);sum=now-2*array0+arraym-1;/计算移动距离/磁道号减小方向elsefor(j=r;j<m;j+)printf("%d ",arrayj);for(j=l;j>=0;j-)printf("%d ",arrayj);sum=-now-array0+2*arraym-1;/计算移动距离/磁道号增加方向avg=sum/m;pr

17、intf("n 移动的总道数: %d n",sum);printf(" 平均寻道长度: %d n",avg);/循环扫描算法void CSCAN(int array,int m)int temp;int k=1;int now,l,r,d;int i,j,sum=0;int avg;for(i=0;i<m;i+)for(j=i+1;j<m;j+)if(arrayi>arrayj)/对磁道号进行从小到大排列temp=arrayi;arrayi=arrayj;arrayj=temp;for( i=0;i<m;i+)printf(&qu

18、ot;%d ",arrayi);/输出排序后的磁道号数组printf("n 请输入当前的磁道号:");scanf("%d",&now);if(arraym-1<=now)/判断整个数组里的数是否都小于当前磁道号 printf("n CSCAN调度结果: ");for(i=0;i<m;i+) printf("%d ",arrayi);/将磁道号从小到大输出sum=now-array0+arraym-1;/计算移动距离else if(array0>=now)/判断整个数组里的数是否都

19、大于当前磁道号 printf("n CSCAN调度结果: ");for(i=0;i<m;i+) printf("%d ",arrayi);/将磁道号从小到大输出sum=arraym-1-now;/计算移动距离elsewhile(arrayk<now)/逐一比较以确定K值k+;l=k-1;r=k;printf("n 请输入当前移动臂的移动的方向 (1 磁道号增加方向,0磁道号减小方向) : ");scanf("%d",&d);printf("n CSCAN调度结果: ");if

20、(d=0)for(j=l;j>=0;j-)printf("%d ",arrayj);for(j=m-1;j>=r;j-)printf("%d ",arrayj);sum=2*(arraym-1-array0)-arrayr+now;/计算移动距离/磁道号减小方向elsefor(j=r;j<m;j+)printf("%d ",arrayj);for(j=0;j<r;j+)printf("%d ",arrayj);sum=2*(arraym-1-array0)+arrayr-1-now;/计算移

21、动距离/磁道号增加方向avg=sum/m;printf("n 移动的总道数: %d n",sum);printf(" 平均寻道长度: %d n",avg);/ 操作界面int main()int c;FILE *fp;/定义指针文件int cidaomaxsize;/定义磁道号数组int i=0,count;fp=fopen("cidao.txt","r+");/读取cidao.txt文件if(fp=NULL)/判断文件是否存在printf("n 请 先 设 置 磁 道! n");exit(0)

22、;while(!feof(fp)/如果磁道文件存在fscanf(fp,"%d",&cidaoi);/调入磁道号i+;count=i-1;printf("n -n");printf(" 10-11年度OS课程设计-磁盘调度算法系统n");printf(" 计算机科学与技术二班n");printf(" 姓名:宋思扬n");printf(" 学号:n");printf(" 电话:*n");printf(" 2010年12月29日n")

23、;printf("n -n");printf("n 磁道读取结果:n");for(i=0;i<count;i+)printf("%5d",cidaoi);/输出读取的磁道的磁道号printf("n "); while(1)printf("n 算法选择:n");printf(" 1、先来先服务算法(FCFS)n");printf(" 2、最短寻道时间优先算法(SSTF)n");printf(" 3、扫描算法(SCAN)n");pri

24、ntf(" 4、循环扫描算法(CSCAN)n");printf(" 5. 退出n");printf("n");printf("请选择:");scanf("%d",&c);if(c>5)break;switch(c)/算法选择case 1:FCFS(cidao,count);/先来先服务算法printf("n");break;case 2:SSTF(cidao,count);/最短寻道时间优先算法printf("n");break;case 3:SCAN(cidao,count);/扫描算法printf("n");break;case 4:CSCAN(cidao,count);/循环扫描算法printf("n");break;case 5:exit(0);return 0;6 运行结

温馨提示

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

评论

0/150

提交评论