您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统课程设计-磁盘调度算法
沈阳理工大学课程设计专用纸Noi沈阳理工大学目录1课程设计目的及要求……………………………………………………错误!未定义书签。2相关知识…………………………………………………………………错误!未定义书签。3题目分析…………………………………………………………………24概要设计…………………………………………………………………24.1先来先服务(FCFS)的设计思想……………………………….24.2最短寻道时间优先调度(SSTF)的设计思想…………………..24.3扫描算法(SCAN)的设计思想…………………………………24.4循环扫描(CSCAN)的设计思想………………………………..25代码及流程………………………………………………………………35.1流程图……………………………………………………………...35.2源代码……………………………………………………………...86运行结果…………………………………………………………………167设计心得…………………………………………………………………19参考文献…………………………………………………………………………19沈阳理工大学课程设计专用纸No1沈阳理工大学1课程设计目的及要求设计目的:加深对操作系统原理的进一步认识,加强实践动手能力和程序开发能力的培养,提高分析问题解决问题的能力,培养合作精神,以巩固和加深磁盘调度的概念。操作系统是一门工程性很强的课程,它不仅要求学生掌握操作系统的工作原理和理论知识,也要求学生的实际动手能力,以加深对所学习内容的理解,使学生熟练地掌握计算机的操作方法,使用各种软件工具,加强对课程内容的理解。这次课程设计,就是通过模拟磁臂调度来加深对操作系统中磁臂调度概念的理解。使学生熟悉磁盘管理系统的设计方法;加深对所学各种磁盘调度算法的了解及其算法的特点。设计要求:编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度;要求设计主界面可以灵活选择某算法,且以下算法都要实现1、先来先服务算法(FCFS)2、最短寻道时间优先算法(SSTF)3、扫描算法(SCAN)4、循环扫描算法(CSCAN)2相关知识数据结构:数组now:当前磁道号;array[]:放置磁道号的数组;voidFCFS(intarray[],intm)先来先服务算法(FCFS)voidSSTF(intarray[],intm)最短寻道时间优先算法(SSTF)voidSCAN(intarray[],intm)扫描算法(SCAN)voidCSCAN(intarray[],intm)循环扫描算法(CSCAN)磁盘调度:当有多个进程都请求访问磁盘时,采用一种适当的驱动调度算法,使各进程对磁盘的平均访问(主要是寻道)时间最小。目前常用的磁盘调度算法有:1)闲来先服务2)最短寻道时间优先3)扫描算法4)循环扫描算法等沈阳理工大学课程设计专用纸No2沈阳理工大学3题目分析选择一个自己熟悉的计算机系统和程序设计语言模拟操作系统基本功能的设计方法及其实现过程完成各分项功能。在算法的实现过程中,要求可决定变量应是动态可变的;同时模块应该有一个合理的输出结果。具体可参照实验的程序模拟.各功能程序要求自行编写程序实现,不得调用现有操作系统提供的模块或功能函数。磁盘调度程序模拟。先来先服务调度算法.最短寻道时间优先调度,循环(SCAN)调度算法。程序设计语言自选,最终以软件(含源代码以及执行程序)和设计报告的形式提交课程设计结果.。磁盘调度让有限的资源发挥更大的作用。在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列。4概要设计1.先来先服务(FCFS)的设计思想即先来的请求先被响应。FCFS策略看起来似乎是相当公平的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。FCFS策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间。为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用FCFS策略。这个过程就叫做磁盘调度管理。有时候fcfs也被看作是最简单的磁盘调度算法。2.最短寻道时间优先调度(SSTF)的设计思想最短时间优先算法选择这样的进程。要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。3.扫描算法(SCAN)的设计思想扫描(SCAN)调度算法:该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁道换向自外向里移动。这时,同样也是每次选择这样的进程来调度,也就是要访问的当前位置内距离最近者,这样,磁头又逐步地从外向里移动,直至再无更里面的磁道要访问,从而避免了出现“饥饿”现像。4.循环扫描(CSACN)的设计思想循环扫描(CSCAN)算法:当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该里程就必须等待,为了减少这种延迟,CSCAN算法规定磁头单向移动,而本实验过程中我们所设计的是磁头从里向外移动,而从外向里移动时只须改方向而已,本实验未实现。但本实验已完全能演示循环扫描的全过程。沈阳理工大学课程设计专用纸No3沈阳理工大学5代码及流程1.先来先服务(FCFS)图1—1FCFS的流程图沈阳理工大学课程设计专用纸No4沈阳理工大学2.最短寻道时间优先调度(SSTF)图1—2SSTF的流程图沈阳理工大学课程设计专用纸No5沈阳理工大学3.扫描算法(SCAN)图1—3SCAN的流程图沈阳理工大学课程设计专用纸No6沈阳理工大学4.循环扫描(CSCAN)图1—4CSCAN的流程图沈阳理工大学课程设计专用纸No7沈阳理工大学图1—5主函数的流程图沈阳理工大学课程设计专用纸No8沈阳理工大学源代码:#includestdio.h#includestdlib.h//#includeiostream.h#definemaxsize100//定义最大数组域//先来先服务调度算法voidFCFS(intarray[],intm){intsum=0,j,i;intavg;printf(\nFCFS调度结果:);for(i=0;im;i++)//输出FCFS磁盘调度结果{printf(%d,array[i]);}for(i=0,j=1;jm;i++,j++){sum+=abs(array[j]-array[i]);//累计总的移动距离}avg=sum/(m-1);//计算平均寻道长度printf(\n移动的总道数:%d\n,sum);printf(平均寻道长度:%d\n,avg);}//最短寻道时间优先调度算法voidSSTF(intarray[],intm){inttemp;intk=1;intnow,l,r;inti,j,sum=0;intavg;for(i=0;im;i++){for(j=i+1;jm;j++)//对磁道号进行从小到大排列{if(array[i]array[j])//两磁道号之间比较{temp=array[i];沈阳理工大学课程设计专用纸No9沈阳理工大学array[i]=array[j];array[j]=temp;}}}for(i=0;im;i++)//输出排序后的磁道号数组{printf(%d,array[i]);}printf(\n请输入当前的磁道号:);scanf(%d,&now);printf(\nSSTF调度结果:);if(array[m-1]=now)//判断整个数组里的数是否都小于当前磁道号{for(i=m-1;i=0;i--)//将数组磁道号从大到小输出printf(%d,array[i]);sum=now-array[0];//计算移动距离}elseif(array[0]=now)//判断整个数组里的数是否都大于当前磁道号{for(i=0;im;i++)//将磁道号从小到大输出printf(%d,array[i]);sum=array[m-1]-now;//计算移动距离}else{while(array[k]now)//逐一比较以确定K值{k++;}l=k-1;r=k;//确定当前磁道在已排的序列中的位置while((l=0)&&(rm)){if((now-array[l])=(array[r]-now))//判断最短距离{printf(%d,array[l]);sum+=now-array[l];//计算移动距离now=array[l];l=l-1;}else沈阳理工大学课程设计专用纸No10沈阳理工大学{printf(%d,array[r]);sum+=array[r]-now;//计算移动距离now=array[r];r=r+1;}}if(l=-1){for(j=r;jm;j++){printf(%d,array[j]);}sum+=array[m-1]-array[0];//计算移动距离}else{for(j=l;j=0;j--){printf(%d,array[j]);}sum+=array[m-1]-array[0];//计算移动距离}}avg=sum/m;printf(\n移动的总道数:%d\n,sum);printf(平均寻道长度:%d\n,avg);}//扫描算法voidSCAN(intarray[],intm)//先要给出当前磁道号和移动臂的移动方向{inttemp;intk=1;intnow,l,r,d;inti,j,sum=0;intavg;for(i=0;im;i++){for(j=i+1;jm;j++){if(array[i]array[j])//对磁道号进行从小到大排列沈阳理工大学课程设计专用纸No11沈阳理工大学{temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;im;i++){printf(%d,array[i]);//输出排序后的磁道号数组}printf(\n请输入当前的磁道号:);scanf(%d,&now);if(array[m-1]=now)//判断整个数组里的数是否都小于当前磁道号{printf(\nSCAN调度结果:);for(i=m-1;i=0;i--){printf(%d,array[i]);//将数组磁道号从大到小输出}sum=now-array[0];//计算移动距离}elseif(array[0]=now)//判断整个数组里的数是否都大于当前磁道号{printf(\nSCAN调度结果:);for(i=0;im;i++){printf(%d,array[i]);//将磁道号从小到大输出}sum=array[m-1]-now;//计算移动距离}else{while(array[k]now)//逐一比较以确定K值{k++;}l=k-1;r=k;printf(\n请输入当前移动臂的移动的方向(1磁道号增加方向,0磁道号减小方向):);scanf(%d,&d);printf(\nSCAN调度结果:);if(d==0)沈阳理工大学课程设计专用纸No12沈阳理工大学{for(j=l;j=0;j--){printf(%d,array[j]);}for(j=r;jm;j++){printf(%d,array[j]);}sum=now-2*array[0]+array[m-1];//计算移动距离}//磁道号减小方向else{for(j=r;jm;j++){printf(%d,array[j]);}for(j=l;j=0;j--){printf(%d,array[j]);}sum=-now-array[0]+2*array[m-1];//计算
本文标题:操作系统课程设计-磁盘调度算法
链接地址:https://www.777doc.com/doc-5150445 .html