西安文理学院软件学院课程设计报告设计名称:计算机操作系统课程设计设计题目:磁盘调度算法学生学号:140210112专业班级:12级软件四班学生姓名:高孟学生成绩:指导教师(职称):孙少波(副教授)课题工作时间:2014.10.27至2014.12.7西安文理学院软件学院课程设计报告-1-目录第一章课题概述.....................................................................................................-2-1.1课程设计的目的.........................................................................................-2-1.2课程设计的要求.........................................................................................-2-第二章设计简介及设计方案论述.........................................................................-3-2.1设计思路与方案........................................................................................-3-第三章详细设计.....................................................................................................-4-3.1先来先服务算法(FCFS).......................................................................-4-3.1.1先来先服务算法说明......................................................................-4-3.1.2先来先服务算法流程图..................................................................-4-3.1.3先来先服务算法数据结构..............................................................-4-3.2最短寻道时间优先算法(SSTF)...........................................................-5-3.2.1最短寻道时间优先算法说明..........................................................-5-3.2.2最短寻道时间优先算法流程图......................................................-6-3.2.3最短寻道时间优先算法数据结构..................................................-6-3.3扫描算法(SCAN)..................................................................................-8-3.3.1扫描算法说明..................................................................................-8-3.3.2扫描算法流程图..............................................................................-9-3.3.3扫描算法数据结构........................................................................-10-3.4循环扫描算法(CSCAN).....................................................................-12-3.4.1循环扫描算法说明........................................................................-12-3.4.2循环扫描算法流程图....................................................................-13-3.4.3循环扫描算法数据结构................................................................-13-第四章设计结果及分析.......................................................................................-16-4.1先来先服务算法调试结果.......................................................................-16-4.2最短寻道时间算法调试结果...................................................................-16-4.3扫描算法调试结果...................................................................................-17-4.4循环扫描算法调试结果...........................................................................-17-总结.........................................................................................................................-18-参考文献.................................................................................................................-19-附录:磁盘调度算法源程序.........................................................................-20-西安文理学院软件学院课程设计报告-2-第一章课题概述1.1课程设计的目的通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,加深对先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)及循环扫描算法(CSCAN)等磁盘调度算法的理解。1.2课程设计的要求编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度:要求设计主界面可以灵活选择算法,且以下算法都要实现。(1)先来先服务算法(FCFS)(2)最短寻道时间优先算法(SSTF)(3)扫描算法(SCAN)(4)循环扫描算法(CSCAN)西安文理学院软件学院课程设计报告-3-第二章设计简介及设计方案论述2.1设计思路与方案磁盘调度算法主要包括四种算法,先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。1.先来先服务算法(FCFS):输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度,输出移动平均磁道数。2.最短寻道时间优先算法(SSTF):磁道号用冒泡法从小到大排序,输出排好序的磁道序列,输入当前磁道号,根据当前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。3.扫描算法(SCAN):将磁道号用冒泡法从小到大排序,输出排好序的序列,输入当前磁道号,选择移动臂的移动方向,根据当前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。4.循环扫描算法(CSCAN):将磁道号用冒泡法从小到大排序,输出排好序的序列,输入当前磁道号,规定移动臂单向反复的从内向外移动,根据当前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。西安文理学院软件学院课程设计报告-4-第三章详细设计3.1先来先服务算法(FCFS)3.1.1先来先服务算法说明这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。3.1.2先来先服务算法流程图开始输入磁道号按输入顺序将磁道输出求平均寻道时间输出移动的平均磁道数结束图3-1-2先来先服务算法流程图3.1.3先来先服务算法数据结构输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度,输出移动平均磁道数。西安文理学院软件学院课程设计报告-5-主要代码:for(i=0;im;i++)//输出FCFS磁盘调度结果{printf(%d,array[i]);}for(i=0,j=1;jm;i++,j++){sum+=abs(array[j]-array[i]);//累计总的移动距离,abs函数取绝对值}avg=sum/m;//计算平均寻道长度printf(\n平均寻道长度:%d\n,avg);3.2最短寻道时间优先算法(SSTF)3.2.1最短寻道时间优先算法说明该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。西安文理学院软件学院课程设计报告-6-3.2.2最短寻道时间优先算法流程图开始输入磁道号求平均寻道时间输出移动的平均磁道数结束使用冒泡排序法从小到大排序输出排好序的磁道序列输入当前磁道号判断当前磁头在序列中的位置选择与当前磁道最近的磁道进行扫描移动到最小(大)号改向内(外)移动扫描未扫描的磁道图3-2-2最短寻道时间优先算法流程图3.2.3最短寻道时间优先算法数据结构将磁道号用冒泡法从小到大排序,输出排好序的磁道序列,输入当前磁道号,根据前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。主要代码:for(i=0;im;i++)西安文理学院软件学院课程设计报告-7-{for(j=i+1;jm;j++)//对磁道号进行从小到大排列{if(array[i]array[j])//两磁道号之间比较{temp=array[i];array[i]=array[j];array[j]=temp;}}}printf(排序后磁道顺序为:);for(i=0;im;i++)//输出排序后的磁道号数组{printf(%d,array[i]);}printf(\n请输入当前的磁道号:);scanf(%d,&now);printf(\nSSTF调度结果:);if(array[m-