磁盘的调度算法

上传人:鸭*** 文档编号:1896804 上传时间:2022-09-25 格式:DOC 页数:16 大小:127KB
返回 下载 相关 举报
磁盘的调度算法_第1页
第1页 / 共16页
磁盘的调度算法_第2页
第2页 / 共16页
磁盘的调度算法_第3页
第3页 / 共16页
磁盘的调度算法_第4页
第4页 / 共16页
磁盘的调度算法_第5页
第5页 / 共16页
磁盘的调度算法_第6页
第6页 / 共16页
磁盘的调度算法_第7页
第7页 / 共16页
磁盘的调度算法_第8页
第8页 / 共16页
磁盘的调度算法_第9页
第9页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《磁盘的调度算法》由会员分享,可在线阅读,更多相关《磁盘的调度算法(16页珍藏版)》请在布米米文库上搜索。

1、. .实验七磁盘的调度算法一.实验要求 设计五个算法,分别是先来先效劳算法,最短寻道时间优先算法,扫描(SCAN)算法,循环扫描(CSCAN)算法,NStepSCAN算法.由人工输入当前的磁道数,由系统随即生成要访问的磁道.二、开发环境操作系统:Rad Hat Linux ,开发环境:C语言.三、分析设计一实验原理. 磁盘是可被多个进程共享的设备。当有多个进程都请求访问磁盘时,应采用一种适当的调度算法,以使各进程对磁盘的平均访问(主要是寻道)时间最小。由于在访问磁盘的时间中,主要是寻道时间,因此,磁盘调度的目标应是使磁盘的平均寻道时间最少。(1) 先来先效劳(First-e,First-Ser。

2、ved,FCFS):这是一种简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进展调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进展优化,致使平均寻道时间可能较长。(2) 最短寻道时间优先(ShortestSeekTimeFirst,SSTF): 该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保证平均寻道时间最短。(3) 扫描(SCAN)算法: SCAN算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正。

3、在自里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而防止了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。(4) 循环扫描(CSCAN)算法: 处理该进程的请求,致使该进程的请求被严重地推迟。为了减少这种延迟,CSCAN算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环。

4、,进展扫描。(5) N_Step_SCAN算法: N步SCAN算法是将磁盘请求队列分成假设干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列.而每处理一个队列时又是按SCAN算法,对一个队列处理完后,再处理其他队列.当正在处理某子队列时,如果又出现新的磁盘I/O请求,便将新请求进程放进其他队列.二程序构造第一局部:程序的主要流程(1) 手动输入当前的磁道号,该磁道号在0n65536以内(65536是2的16次方),超出X围那么需重新输入.(2) 手动输入要寻找磁道的X围.(3) 主菜单,选择要进展磁道调度算法,此时会随机生成一个在第二步生成磁道X围以内的10个磁道数,由SetDI。

5、方法生成,再将生成的随机磁道号以数组形式作为参数被某个算法调用.例如,选择了case 1,那么先调用SetDI方法,再执行FCFS算法.如下: case 1: SetDI(DiscLine); /随机生成磁道数 FCFS(Hand,DiscLine); /先来先效劳算法(FCFS) break;第二局部: 局部的代码实现(1) 就每个算法而言,都有调用一个子算法CopyL把函数SetDI随机生成的磁道数数组复制给RLine,为什么要复制,原因是在整个程序中的最后一项功能是实现5种算法对一次随即生成的磁道数的比拟,所以在每次调用一种算法时需要设置一个临时的数组Rline来存放.(2)在这5个算法。

6、中都有一个字函数DelInq,该函数的作用是使每个磁道数向前移动一位,简单地以FCFS算法为例,这里只FCFS其中的核心代码:All=Han-RLine0; for(i=0;i=9;i+) Temp=RLine0-RLine1;/求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离 if(Temp0) Temp=(-Temp);/移动磁道数为负数时,算出相反数作为移动磁道数 printf(%5d,RLine0); All=Temp+All;/求全部磁道数的总和 DelInq(RLine,0,k);/每个磁道数向前移动一位 k-; Han是当前磁道数,RLine0是第一个随机磁道数,H。

7、an-RLine0得到的是一次磁头移动的距离,再赋予All,即All是存放磁头移动的距离总和,for循环是执行10次,Temp变量是求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离,All=Temp+All是求全部磁道数的总和之后是DelInq函数,使每个磁道数向前移动一位。例如随机生成的磁道数数组RLine是:583 286 177 115 593 535 586 492 249 421 因为当前的磁道数是500,通过All=Han-RLine0语句得到All等于83,接下来是Temp=RLine0-RLine1,是583-286=297,此时All等于83+297=380,再。

8、通过DelInq整个RLine数组的每个元素向前移一位,如下列图所示:(3) 如果选择case 6: 各类算法的比拟,该比拟是比拟这5种算法的寻道长度的总和,由小到大的排序.算法由PaiXu()函数实现.具体是每种算法的最后都设置Best的二维数组, BestJage1=All,All是磁道数总和,Jage视每种算法而定,例如FCFS为1,那么Jage为1, SSTF为2,那么Jage为2,BestJage0=1(用来唯一标识某个算法) .最后以PaiXu()算法,用冒泡法排序把5个算法的磁道数综合由小到大排序.三数据构造: Hand:当前磁道号;DiscLine10:随机生成的磁道号; vo。

9、id SetDI(int DiscL)生成随机磁道号算法; void CopyL(int Sour,int Dist ,int x) 数组Sour复制到数组Dist,复制到x个数四详细设计; void DelInq(int Sour,int x,int y) 数组Sour把x位置的数删除,x后的数组元素向前挪一位.void PaiXu()寻道长度由低到高排序void FCFS(int Han,int DiscL)先来先效劳算法(FCFS) void SSTF(int Han,int DiscL)最短寻道时间优先算法(SSTF) int SCAN(int Han,int DiscL,int x,。

10、int y) 扫描算法(SCAN) void CSCAN(int Han,int DiscL)循环扫描算法(CSCAN) void N_Step_SCAN(int Han1,int DiscL)N步扫描算法(NStepScan)* 课题:磁盘调度算法 *#include stdio.h#include stdlib.hvoid CopyL(int Sour,int Dist ,int x); /数组Sour复制到数组Dist,复制到x个数void SetDI(int DiscL); /随机生成磁道数 void Print(int Pri,int x); /打印输出数组Privoid DelIn。

11、q(int Sour,int x,int y); /数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void FCFS(int Han,int DiscL); /先来先效劳算法(FCFS)void SSTF(int Han,int DiscL); /最短寻道时间优先算法(SSTF)int SCAN(int Han,int DiscL,int x,int y); /扫描算法(SCAN)void CSCAN(int Han,int DiscL); /循环扫描算法(CSCAN)void N_Step_SCAN(int Han1,int DiscL); /N步。

12、扫描算法(NStepScan)void PaiXu(); /寻道长度由低到高排序void Pri();int NAll=0;int Best52; /用作寻道长度由低到高排序时存放的数组 int Limit=0; /输入寻找的X围磁道数iint Jage;float Aver=0;int main() int i; int DiscLine10; /声明准备要生成的随机磁道号的数组 int Hand; /磁道数 int Con=1; int n; while(Con=1) Jage=0; printf( 请输入初始的磁道数(0n65536) printf(超出X围!); else printf( ); printf( 操作系统课程设计 ); printf( 磁盘调度算法 ); printf( ); printf( ); printf( 1.先来先效劳算法(FCFS) ); printf( ); printf( 2.最短寻道时间优先算法(SSTF) ); printf( ); printf( 3.扫描算法(SCAN) ); printf( ); printf( 4.循环扫描算法(CSCAN) ); printf( ); printf( 。

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

当前位置:首页 > 办公文档 > 总结/报告


关于我们  网站声明   联系我们

       copyright@ 2022 布米米文库(布米米网站) All Rights Reserved  赣ICP备2021007278号  赣公网安备 36010402000315号