版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、题目:磁盘调度一. 设计目的本课程设计是学习完计算机操作系统课程后,进行的一次全面的综合训练,通过课程设计,我们更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了动手能力 。二. 课程设计内容和要求编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度,要求设计 主界面以灵活选择某算法,且以下算法都要实现:1、先来先服务算法(FCFS2、最短寻道时间优先算法(SSTF3、扫描算法(SCAN4、循环扫描算法(CSCAN三. 算法及数据结构3.1算法的总体思想设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的 分配策略有先请求先分配、优先级高者先分
2、配等策略。在多道程序系统中,低效 率通常是由于磁盘类旋转设备使用不当造成的。 操作系统中,对磁盘的访问要求 来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直 接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构 成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间, 其中查找时间是决定因素。因此,磁盘调度算法先考虑优化查找策略,需要时再 优化旋转等待策略。平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道 数(N),即:L= (M1+M2十+Mi+MN /N其中Mi为所需访问的磁道号所需移动的磁道数。启动磁盘执行输入输出
3、操作时,要把移动臂移动到指定的柱面,再等待指定 扇区的旋转到磁头位置下,然后让指定的磁头进行读写,完成信息传送。因此, 执行一次输入输出所花的时间有:寻找时间一一磁头在移动臂带动下移动到指定柱面所花的时间。延迟时间一一指定扇区旋转到磁头下所需的时间。传送时间 由磁头进程读写完成信息传送的时间。其中传送信息所花的时间,是在硬件设计就固定的。而寻找时间和延迟时间 是与信息在磁盘上的位置有关。为了减少移动臂进行移动花费的时间,每个文件的信息不是按盘面上的磁道 顺序存放满一个盘面后,再放到下一个盘面上。而是按柱面存放,同一柱面上的 各磁道被放满信息后,再放到下一个柱面上。所以各磁盘的编号按柱面顺序(从
4、 0号柱面开始),每个柱面按磁道顺序,每个磁道又按扇区顺序进行排序 。3.2算法实现1. 先来先服务算法(FCFS先来先服务(FCFS调度:按先来后到次序服务,未作优化。最简单的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问 者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。例如,如 果现在读写磁头正在50号柱面上执行输出操作,而等待访问者依次要访问的柱 面为130、199、32、159、15、148、61、99,那么,当50号柱面上的操作结束 后,移动臂将按请求的先后次序先移到 130号柱面,最后到达99号柱面。采用先来先服务算法决定等待访问者执行输入输出操作的次
5、序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长, 所以执行输入输出操作的总时 间也很长。2. 短寻道时间优先算法(SSTF最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个 请求先执行的,而不管访问者到来的先后次序。现在仍利用同一个例子来讨论, 现在当50号柱面的操作结束后,应该先处理 61号柱面的请求,然后到达32号 柱面执行操作,随后处理15号柱面请求,后继操作的次序应该是99、130、148、 159、199。采用最短寻找时间优先算法决定等待访问者执行操作的次序时,读写磁头总共移动了 200多个柱面的距离,与先来先服务、算法比较,大幅度地减少了寻找 时间,因而缩短
6、了为各访问者请求服务的平均时间,也就提高了系统效率。 但最短查找时间优先(SSTF调度,FCFS会引起读写头在盘面上的大范围移动, SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。 SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖 延(又称饥饿)。3. 扫描算法(SCANSCAN算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间 优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了 SSTF算法的不公平性,但仍有利于对中间磁道的请求。“电梯调度”算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前 移
7、动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移 动方向再选择。这好比乘电梯,如果电梯已向上运动到4层时,依次有3位乘客 陈生、伍生、张生在等候乘电梯。他们的要求是:陈生在2层等待去10层;伍生在5层等待去底层;张生在8层等待15层。由于电梯目前运动方向是向上, 所以电梯的形成是先把乘客张生从 8层带到15层,然后电梯换成下行方向,把 乘客伍生从5层带到底层,电梯最后再调换方向,把乘客陈生从2层送到10层。我们仍用前述的同一例子来讨论采用“电梯调度”算法的情况。由于磁盘移 动臂的初始方向有两个,而该算法是与移动臂方向有关,所以分成两种情况来讨 论。<1> .移动
8、臂由里向外移动开始时,在50号柱面执行操作的读写磁头的移动臂方向是由里向外,趋向32号柱面的位置,因此,当访问50号柱面的操作结束后,沿臂移动方向最近的 柱面是32号柱面。所以应先为32号柱面的访问者服务,然后是为 15号柱面的 访问者服务。之后,由于在向外移方向已无访问等待者,故改变移动臂的方向, 由外向里依次为各访问者服务。在这种情况下为等待访问者服务的次序是61、99、130、14 8、159、199。2.移动臂由外向里移动开始时,正在50号柱面执行操作的读写磁头的移动臂是由外向里(即向柱 面号增大的内圈方向)趋向61号柱面的位置,因此,当访问50号柱面的操作结 束后,沿臂移动方向最近的
9、柱面是 61号柱面。所以,应先为61号柱面服务,然 后按移动臂由外向里移动的方向,依次为 99、130、14 8、159、199柱面的访问 者服务。当201号柱面的操作结束后,向里移动的方向已经无访问等待者, 所以 改变移动臂的前进方向,由里向外依次为 32、15柱面的访问者服务。“电梯调度”与“最短寻找时间优先”都是要尽量减少移动臂时所花的时间。 所不同的是:“最短寻找时间优先”不考虑臂的移动方向,总是选择离当前读写 磁头最近的那个柱面,这种选择可能导致移动臂来回改变移动方向;“电梯调度” 是沿着臂的移动方向去选择离当前读写词头最近的哪个柱面的访问者,仅当沿移动臂的前进移动方向无访问等待者时
10、,才改变移动臂的前进方向。由于移动臂改 变方向是机械动作,速度相对较慢,所以,电梯调度算法是一种简单、使用且高 效的调度算法。但是,“电梯调度”算法在实现时,不仅要记住读写磁头的当前位置,还必 须记住移动臂的当前前进方向。4. 循环扫描算法(CSCAN单项扫描调度算法的基本思想是,不考虑访问者等待的先后次序,总是从 0 号柱面开始向里道扫描,按照各自所要访问的柱面位置的次序去选择访问者。在移动臂到达最后一个柱面后,立即快速返回到0号柱面,返回时不为任何的访问 者等待服务。在返回到0号柱面后,再次进行扫描。由于该例中已假定读写的当前位置在 50号柱面,所以,指示了从50号柱面 继续向里扫描,依次
11、为61、99、130、148、159、199各柱面的访问者服务,此 时移动臂已经是最内的柱面,于是立即返回到0号柱面,重新扫描,依次为15、32号柱面的访问者服务。除了 “先来先服务”调度算法外,其余三种调度算法都是根据欲访问的柱面 位置来继续调度的。在调度过程中可能有新的请求访问者加入。在这些新的请求 访问者加入时,如果读写已经超过了它们所要访问的柱面位置,则只能在以后的调度中被选择执行。在多道程序设计系统中,在等待访问磁盘的若干访问者请求 中,可能要求访问的柱面号相同,但在同一柱面上的不同磁道,或访问同一柱面 中同一磁道上的不同扇区。所以,在进行移动调度时,在按照某种短法把移动臂 定位到某
12、个柱面后,应该在等待访问这个柱面的各个访问者的输入输出操作都完 成之后,再改变移动臂的位置。3.3.三个模块之间的调用关系图3.4实现代码#i nclude<stdio.h>#in clude<math.h>void FCFS(i nt b,i nt n,i nt in it) /先来先服务int i,s,sum;int a20;for(i=0;i< n;i+)ai=bi;s=i nit;sum=0;for(i=0;i< n;i+)printf("第d次访问的磁道:%dn",i+1,ai); sum+=abs(s-ai);s=ai;pri
13、ntf("平均寻道长度:%fn",sum*1.0/n);void SSTF(i nt b,i nt n,i nt k) /最短寻道法int i,j,s,sum=0,p;int a20;for(i=0;i< n;i+)ai=bi;for(i=n-1;i>=0;i-)s=a0;p=0;for(j=0;j<=i;j+)if(abs(aj-k)<abs(s-k)s=aj;p=j;ap=ai;printf("第£|次访问的磁道:%dn",n-i,s); sum+=abs(s-k);k=s;printf("平均寻道长度:%
14、fn",sum*1.0/n);扫描算法void SCAN1(i nt b,i nt n,i nt k) /int i,j,s,sum=0,p,biaoji;int a20;for(i=0;i< n;i+)ai=bi;for(i=n-1;i>=0;i-)biaoji=0;for(j=0;j<=i;j+)if(aj-k<0)biaoji=1;P=j; break;if(biaoji=1)s=ap;for(j=0;j<=i;j+)if(aj<k&&k-aj<k-s)s=aj;P=j;ap=ai;printf("第d次访问的
15、磁道:dn",n-i,s);sum+=k-s;k=s;elses=a0;for(j=0;j<=i;j+)if(aj-k<=s-k)s=aj;p=j;ap=ai;printf("第£|次访问的磁道:dn",n-i,s); sum+=abs(k-s);k=s;printf(”平均寻道长度:fn",sum*1.0/n);void SCAN2(i nt b,i nt n,i nt k) /循环算法int i,j,s,sum=0,p,biaoji;int a20;for(i=0;i< n;i+)ai=bi;for(i=n-1;i>
16、=0;i-)biaoji=0;for(j=0;j<=i;j+)if(aj-k>0)biaoji=1;P=j; break;if(biaoji=1)s=ap;for(j=0;j<=i;j+)if(aj>k&&aj-k<s-k)s=aj;p=j;ap=ai;printf("第d次访问的磁道:dn",n-i,s);sum+=s-k;k=s;elses=a0;for(j=0;j<=i;j+)if(k-aj<=k-s)s=aj;p=j;ap=ai;printf("第d次访问的磁道:dn",n-i,s); s
17、um+=abs(k-s);k=s;printf("平均寻道长度:fn",sum*1.0/n);void C_SCAN(i nt b,i nt n,i nt k) /循环算法int i,j,s,sum=0,p,biaoji;int a20;for(i=0;i< n;i+)ai=bi;for(i=n-1;i>=0;i-)biaoji=0;for(j=0;j<=i;j+)if(aj-k>0)biaoji=1;p=j;break;if(biaoji=1)s=ap;for(j=0;j<=i;j+)if(aj>k&&aj-k<s
18、-k)s=aj;p=j;ap=ai;printf("第d次访问的磁道:%dn",n-i,s);sum+=s-k;k=s;if(biaoji=0) break;s=a0;for(j=0;jv=i;j+)if(aj<=s)s=aj;P=j;ap=ai;printf("第d次访问的磁道:dn",n-i,s); sum+=k-s;k=s;i-;for(;i>=0;i-)s=a0;for(j=0;j<=i;j+)if(aj-k<s-k)s=aj;P=j;ap=ai;printf("第£|次访问的磁道:%dn",
19、n-i,s); sum+=s-k;k=s;printf("平均寻道长度:fn",sum*1.0/n); void mai n()int a20;int i,n ,k,k1,i nit;printf(”请输入需要访问的磁道总数:");sca nf("%d",&n);for(i=0;i< n;i+)printf("需要访问的磁道%d:",i+1);scan f("%d",&ai);printf("请输入指针所在磁道:");sca nf("%d",&
20、amp;init);k=1;while(k)printf("f*n");printf("$ 程倩磁盘调度 $n");printf("*1.先来先服务(FCFS) *n");printf("* 2.最短寻道时间优先(SSTF) *n");printf("* 3.扫描算法(SCAN) *n");printf("* 4. 循环算法(C-SCAN) *n"); prin tf("* 0. 退出*n");printf("f*n");printf(
21、"&&&&&&&&&&&&谢谢使用 &&&&&&&&&&&&&&n"); printf(” 请在下面输入您的选择:");scan f("%d",&k);switch(k)case 1:FCFS(a, n,in it);break;case 2:SSTF(a ,n ,i nit);break;case 3:k1=1;while(k1)
22、printf("f*n");printf("# 程倩磁盘调度 #'n");prin tf("* 1.移动臂由里向外*n");prin tf("* 2.移动臂由外向里*n");prin tf("* 0.返回上一层*n");prin tf("请在下面输入您的选择:");printf("f*n");printf("# 谢谢使用 #n");scan f("%d",&k1);switch(k1)case 1:S
23、CAN1(a, n,in it);break;case 2:SCAN2(a, n,in it);break; break;case 4:C_SCAN(a, n,in it);break;四. 运行结果及分析H :憬原螂,磁盘调度模拟算法.exe-! x|>0<耳耳>00<M:耳 NKNXNKN 耳1您您您您您洼4 5S4:5:在留的的的的磁 厉问诃问问问入耳耳 >OO< K>OO< K>OO< moot XXNKM:耳 NKM:耳 NKNXNKN 耳 NKN 耳 NKNXN<rr -I" ffi寻道4间优先<SS
24、TF>*2 毘耒先|K#<fcfs>*3.ruwrhiwruwrhiwruwrijwruw*M-MMKK4 _j<C-SCAN> Y<SCAN>MMMW0.退岀rf'LiwjHJwruwjHJwruwjHJWj 同 |-tJ- ruvuvuwruvuvuwruvuvuwruw穆在下面输入您的选择:2.最短寻道时间优先® h:;摄原贻1磁盘调度模拟算法,岂E二Ig. 2drwrvrviruwruvwuYvruvwvwwrvWfH#NJfME 44:M 脚 CC-SCfiN> Yi<SCftN>nf%rr&rrwMrTvrwrwww«Lr色 | | rvFvwwxjmmr<wuwnr 佬苕rrh l冋J 寻道时I可优先佃£TF> *2.先.壬先服#<FCFS>*»3 J*«-从孔退tS津罟*3 0策弭弭弭KXKNJ(耳拭廉注魅図* 9 6 55泌1:雷道道* 彳几- Lx* p Inp p 扌耳 愛次次次次寵12 3 4 5 -V 在 www 请您餐您您平3.先来先服务-|n| x|OOKrvfxrfu-fu-rvfxrru-fu-fvfxrfu-fu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应链安全采购策略与供应商合作考核试卷
- 日用化学产品的用户满意度评估考核试卷
- 固体饮料行业品牌建设案例解析考核试卷
- 托儿所服务的家长沟通与家庭教育支持考核试卷
- 南京信息工程大学《遥感概论》2021-2022学年第一学期期末试卷
- 南京信息工程大学《微分方程数值解》2022-2023学年第一学期期末试卷
- 南京信息工程大学《通信网》2023-2024学年期末试卷
- 家居纺织品的生物医学应用与市场前景研究考核试卷
- 《C-V2X车联网中基于区块链的鲁棒性联邦学习方案》
- 《2024至2028年江苏省专业市场深度调研及前景预测报告》范文
- 2022中小学高级教师任职资格评审讲课答辩题目及答案
- 针刺伤标准预防
- 团播主持人协议
- 《急救药品》课件
- 氯酸盐行业分析
- 国开电大 可编程控制器应用实训 形考任务6实训报告
- GB/T 34120-2023电化学储能系统储能变流器技术要求
- 跨国企业中方外派人员的跨文化适应
- 《道路交叉设计》课件
- 《活着》读后感-课件
- 体检报告汇总分析中风险的防范
评论
0/150
提交评论