操作系统课程设计磁盘调度算法程序设计

上传人:pu****.1 文档编号:499081727 上传时间:2023-04-01 格式:DOC 页数:23 大小:305KB
返回 下载 相关 举报
操作系统课程设计磁盘调度算法程序设计_第1页
第1页 / 共23页
操作系统课程设计磁盘调度算法程序设计_第2页
第2页 / 共23页
操作系统课程设计磁盘调度算法程序设计_第3页
第3页 / 共23页
操作系统课程设计磁盘调度算法程序设计_第4页
第4页 / 共23页
操作系统课程设计磁盘调度算法程序设计_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《操作系统课程设计磁盘调度算法程序设计》由会员分享,可在线阅读,更多相关《操作系统课程设计磁盘调度算法程序设计(23页珍藏版)》请在金锄头文库上搜索。

1、成绩 课程设计报告 题 目 磁盘调度算法程序设计 课 程 名 称 操作系统课程设计 院 部 名 称 信息技术学院 专 业 计算机科学与技术 班 级 09级计算机科学与技术(2) 学 生 姓 名 学 号 课程设计地点 A206 课程设计学时 20 指 导 教 师 金陵科技学院教务处制一、课程设计的目的和要求磁盘是经常使用的一种重要的外设,对磁盘数据的寻道时间的长短直接影响机器的整体运行速度,本设计要求用C语言(或高级语言)编写程序模拟实现磁盘调度的常用算法。以加深对磁盘调度常用算法的理解和实现技巧。编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度,要求设计主界面以灵活选择某算法,且以下算

2、法都要实现:1、先来先服务算法(FCFS)2、最短寻道时间优先算法(SSTF)3、扫描算法(SCAN)二、课程设计环境要求1、硬件环境Lenovo 计算机,Intel Pentium Dual E2180 2.00GHz 2.00GHz,0.99GB的内存2、软件环境Microsoft Visual Studio 6.0软件,Microsoft Office软件,Microsoft Windows XP系统。三、设计任务介绍及系统需求分析 在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为

3、每个磁盘设备建立一个等待队列。四、概要设计系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)。1、先来先服务算法(FCFS)这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。2、最短寻道时间优先算法(SSTF)该算法选择这样的进程,其要求

4、访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。3、扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样

5、也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。本系统划分为三个模块:先来先服务算法模块void FCFS(int array,int m)、最短寻道时间优先算法模块void SSTF(int array,int m)、扫描算法模块void SCAN(int array,int

6、m) 系统模块调用关系图: 磁盘调度模拟系统退出先来先服务算法最短寻道时间优先扫描算法五、详细设计1、功能模块设计(1) 先来先服务算法模块:void FCFS(int cidao,int m)输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度,输出移动平均磁道数。主要代码:now=printnow(); /输入当前磁道号cout磁盘扫描序列为:; for( i=0;im;i+) /输出磁盘扫描序列 coutcidaoi ; for(i=0,j=1;jm;i+,j+) /求平均寻道长度 sum+=abs(cidaoj-cidaoi); ave=(float)(sum)/(float

7、)(m); FCFS算法流程图: 输入磁道号求平均寻道长度输出移动的平均磁道数按输入顺序将磁道序列输出开始结束 算法优点:简单公平,每个进程的请求都能得到依次的处理,不会出现每一进程的请求长期得不到满足的情况;算法缺点:没有对寻道优化,当访问磁道差距较大且访问频繁时,该算法会导致平均寻道长度、平均寻道时间过长,效率降低。(2) 最短寻道时间优先算法模块:void SSTF(int cidao,int m)将磁道号用从小到大排序,输出排好序的磁道序列,输入当前磁道号,根据前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。主要代码:now=printnow();

8、/输入当前磁道号 if(cidaom-1=now) sum=printin(cidao,now,m); if(nowcidao0&nowcidaom-1) /若当前磁道号大于请求序列中最小者且小于最大者 cout磁盘扫描序列为:; while(cidaok=0)&(rm) /当前磁道在请求序列范围内 if(now-cidaol)=(cidaor-now) /先向磁道减少的方向访问 sum=prints(cidao, now,m, l, r); else sum=printl(cidao, now, m, l, r);SSTF算法流程图: 求平均寻道长度选择与当前磁道距离最近的磁道进行扫描移动到

9、最小(大)号,改向外(内)移动扫描未扫描的磁道输出移动的平均磁道数输出排好序的磁道序列判断当前磁头在序列中的位置结束开始输入磁道号使用冒泡法从小到大排序输入当前磁道号 要求访问的刺刀是当前磁头所在的磁道最近;算法优点:单次寻道时间最短;算法缺点:当磁道调用集中再两端时平均寻道时间不一定最短,可能导致一些请求无限推延,发生“饥饿”现象。(3) 扫描算法模块:void SCAN(int cidao,int m)将磁道号用冒泡法从小到大排序,输出排好序的序列,输入当前磁道号,选择移动臂的移动方向,根据当前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。主要代码:no

10、w=printnow(); /输入当前磁道号 coutd; if(cidaom-1=now&d=0) /若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优 sum=printout(cidao,now,m); if(cidaom-1=now&d=0) /若当前磁道号小于请求序列中最小者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先 sum=printout(cidao,now,m); if(cidao0=now&d=1) /若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先 sum=printin(cidao,

11、now,m); if(nowcidao0&nowcidaom-1) /若当前磁道号大于请求序列中最小者且小于最大者 while(cidaoknow) k+; l=k-1; r=k; coutd; if(d=0) /先向磁道号减小方向访问 sum=prints(cidao, now,m, l, r); if(d=1) /先向磁道号增加方向访问 sum=printl(cidao, now,m, l, r); ave=(float)(sum)/(float)(m); SCAN算法流程图: 求平均寻道长度选择移动臂移动方向,开始扫描移动到最小(大)号,改向外(内)移动扫描未扫描的磁道输出移动的平均磁道数输出排好序的磁道序列开始结束输入磁道号使用冒泡法从小到大排序输入当前磁道号判断当前磁头在序列中的位置该算法不仅考虑到访问的磁道与当前磁道的距离,更优先考虑磁头当前的移动方向。例如当磁道正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是既在当前磁道外,有事距离最近的待访问磁道,这样自里向外的访问,直到再无更外磁道需要访问时,才将磁臂换向为自外向里移动。同样也是每次选择这样的进程来调度,即在当前位置内最近待访问磁道,这样磁头又逐步向里移动,直到再无更内磁道要访问;算法优点:缩短时间,兼顾公平,避免“饥饿”现象;算法缺点:不仅要记住读写磁头的当前

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号