ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:17.32KB ,
资源ID:9888714      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9888714.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(磁盘调度算法求平均寻道长度.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

磁盘调度算法求平均寻道长度.docx

1、磁盘调度算法求平均寻道长度磁盘调度算法 求平均寻道长度磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘时,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。由于在访问磁盘的时间中,主要是寻道时间,因此,磁盘调度的目标,是使磁盘的平均寻道时间最少。目前常用的磁盘调度算法有:先来先服务、最短寻道时间优先及扫描算法。 1、FCFS 最简单的调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。 例如,如果现在读写磁头正在50号柱面上执行输出操作,而等待访问者依次要访问的柱面为130、199、32、159、15、148

2、、61、99,那么,当50号柱面上的操作结束后,移动臂将按请求的先后次序先移到130号柱面,最后到达99号柱面。 采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。 它是从就绪队列中选择一个估计运行时间最短的进程,将处理器分配给该进程,使之占有处理器并执行,直到该进程完成或因发生事件而阻塞,然后退出处理器,再重新调度。 单项扫描调度算法的基本思想是,不考虑访问者等待的先后次序,总是从0号柱面开始向里道扫描,按照各自所要访问的柱面位置的次序去选择访问者。在移动臂到达最后一个柱面后,立即快速返回到0号柱

3、面,返回时不为任何的访问者等待服务。在返回到0号柱面后,再次进行扫描。 对上述相同的例子采用单向扫描调度算法的执行次序 由于该例中已假定读写的当前位置在50号柱面,所以,指示了从50号柱面继续向里扫描,依次为61、99、130、148、159、199各柱面的访问者服务,此时移动臂已经是最内的柱面,于是立即返回到0号柱面,重新扫描,依次为15、32号柱面的访问者服务。 当磁头刚从里向外移动而越过了某一磁道进,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。为减少这种延迟,CSCAN算

4、法规定磁头单向移动。 #include stdio.h #include math.h FCFS() /*/ int nowtrack,totalnum,i; /*totalnumnowtrack*/ int *Track; int num=0; printf(nPlease input now Track num:); scanf(%d,&nowtrack); printf(nPlease input total num:); scanf(%d,&totalnum); Track=(int *)malloc(totalnum*sizeof(int); /*/ printf(nPlease i

5、nput tracknum:n); /*/ for(i=0;itotalnum;i+) printf(n); scanf(%d,&Tracki); for(i=0;itotalnum;i+) /*/ num=abs(nowtrack-Tracki)+num; nowtrack=Tracki; printf(nSearch Track queue is:); for(i=0;itotalnum;i+) printf( %d,Tracki); printf(nnTotal search distance is %d,num); printf(nnAverage search distance is

6、 %f,(float)num/(float)totalnum); SSTF() /*/ int nowtrack,totalnum,i,j,k,t=0,num=0; int *Track;/*Track array*/ int *ptrack; /*Track*/ printf(nPlease input now Track num:); scanf(%d,&nowtrack); printf(nPlease input total num:); scanf(%d,&totalnum); Track=(int *)malloc(totalnum*sizeof(int); ptrack=(int

7、 *)malloc(totalnum*sizeof(int); printf(nPlease input tracknum:); for(i=0;itotalnum;i+) printf(n); scanf(%d,&Tracki); for (j=0;jtotalnum;j+) for (i=0;i=Tracki+1) t=Tracki;Tracki=Tracki+1;Tracki+1=t; if(Track0=nowtrack) /*/ for(t=0;ttotalnum;t+) num=num+abs(nowtrack-Trackt); nowtrack=Trackt; ptrackt=T

8、rackt; else if(Tracktotalnum-1=0;t-) num=num+abs(nowtrack-Trackt); nowtrack=Trackt; ptrackt=Trackt; else for(i=0;itotalnum;i+) if(Tracki=nowtrack) /*/ if(abs(nowtrack-Tracki)=abs(nowtrack-Tracki+1) for(k=i+1;k=0;k-) num=num+abs(nowtrack-Trackk); nowtrack=Trackk; ptrackk=Trackk; else for(k=i;k0;k-) n

9、um=num+abs(nowtrack-Trackk); nowtrack=Trackk; ptrackk=Trackk; for(k=i+1;ktotalnum;k+) num=num+abs(nowtrack-Trackk); nowtrack=Trackk; ptrackk=Trackk; printf(nSearch Track queue is:); for(i=0;itotalnum;i+) printf( %d,ptracki); printf(ntotal search distance is %d,num); printf(nnAverage search distance

10、is %f,(float)num/(float)totalnum); SCAN() /*/ int nowtrack,totalnum,i,num=0,j,t=0; int *Track; int *ptrack; /*Track*/ num=0; printf(nPlease input now Track num:); scanf(%d,&nowtrack); printf(nPlease input total num:); scanf(%d,&totalnum); Track=(int *)malloc(totalnum*sizeof(int); ptrack=(int *)mallo

11、c(totalnum*sizeof(int); printf(nPlease input tracknum:); for(i=0;itotalnum;i+) printf(n); scanf(%d,&Tracki); for (j=0;jtotalnum;j+) for (i=0;iTracki+1) t=Tracki;Tracki=Tracki+1;Tracki+1=t; if(Track0=nowtrack) /*/ for(t=0;ttotalnum;t+) num=num+abs(nowtrack-Trackt); nowtrack=Trackt; ptrackt=Trackt; el

12、se if(Tracktotalnum-1=0;t-) num=num+abs(nowtrack-Trackt); nowtrack=Trackt; ptrackt=Trackt; else for(i=0;i=Tracki & Tracki+1=nowtrack ) for(t=i+1;t=0;t-) num=num+abs(nowtrack-Trackt); nowtrack=Trackt; ptrackt=Trackt; printf(nSearch Track queue is:); for(i=0;itotalnum;i+) printf( %d,ptracki); printf(n

13、Total search distance is %d,num); printf(nnAverage search distance is %f,(float)num/(float)totalnum); CSCAN() /*/ int nowtrack,totalnum,i,num=0,j,t=0; int *Track; int *ptrack; /*Track*/ num=0; printf(nPlease input now Track num:); scanf(%d,&nowtrack); printf(nPlease input total num:); scanf(%d,&tota

14、lnum); Track=(int *)malloc(totalnum*sizeof(int); ptrack=(int *)malloc(totalnum*sizeof(int); printf(nPlease input tracknum:); for(i=0;itotalnum;i+) printf(n); scanf(%d,&Tracki); for (j=0;jtotalnum;j+) for (i=0;iTracki+1) t=Tracki;Tracki=Tracki+1;Tracki+1=t; if(Track0=nowtrack) /*/ for(t=0;ttotalnum;t

15、+) num=num+abs(nowtrack-Trackt); nowtrack=Trackt; ptrackt=Trackt; else if(Tracktotalnum-1=nowtrack) /*/ for(t=0;ttotalnum;t+) num=num+abs(nowtrack-Trackt); nowtrack=Trackt; ptrackt=Trackt; else for(i=0;i=Tracki & Tracki+1=nowtrack ) for(t=i+1;ttotalnum;t+) num=num+abs(nowtrack-Trackt); nowtrack=Trac

16、kt; ptrackt=Trackt; for(t=0;t=i;t+) num=num+abs(nowtrack-Trackt); nowtrack=Trackt; ptrackt=Trackt; printf(nSearch Track queue is:); for(i=0;itotalnum;i+) printf( %d,ptracki); printf(total search distance is %d,num); printf(nnAverage search distance is %f,(float)num/(float)totalnum); main() /*/ int e

17、nd ; while(end!= NULL ) int Algorithm; printf(*program*n); printf(nPlease choose an algorithm:(1-4)n); printf(n 0.EXIT 1.FCFS 2.SSTF 3.SCAN 4.CSCAN n); printf(nAlgorithm: ); scanf(%d,&Algorithm); switch(Algorithm) case 0: exit(); case 1: printf(You alreaday choose FCFS Algorithm!n); FCFS(); break ;

18、case 2: printf(You alreaday choose SSTF Algorithm!n); SSTF(); break ; case 3: printf(You alreaday choose SCAN Algorithm!n); SCAN(); break ; case 4: printf(You alreaday choose CSCAN Algorithm!n); CSCAN(); break ; default : break; printf(nnAre you continue:( Input 0 stop and input 1 continue! )n); sca

19、nf(%d,&end); getch(); 此结构图是以SCAN磁盘调度算法为例: 假设磁道数为0199,我们申请调度的盘块儿分别在45, 50, 90, 123 , 253 磁道上。当前硬盘磁头在第100号磁道。 输入总的磁道数 输入当前磁道数 分别输入各磁道数 寻找100以外的磁寻找100以内的磁道,进行差运算 道,进行差运算 将差值进行加法运算,然后除以磁道 个数,即得到平均寻道长度 在磁盘调度算法中,分别用到了这四种不理原理的调度方法,实现了不同方式的运行结果,FCFS算法仅适用于请求磁盘I/O的进程数目少的场合。SCAN算法的应用,避免了出现“饥饿”现象的发生。对于FCFS算法,是先进来的数据先使用;对于SSTF算法,是寻找离给定的磁道数最近的磁道,然后做差运算,最后求平均得出平均寻道长度;对于SCAN算法,是先找离第100磁道以外的磁道数,而后再去找离第100磁道以内的磁道数,分别做差运行,最后求平均得出平均寻道长度。对于CSCAN算法,则恰恰与SCAN算法是相反过程的,也能很好的求出平均得出平均寻道长度。 参考文献: 1、计算机操作系统汤子瀛 哲凤屏 汤小丹 西安电子科技大学出版社 2、计算机操作系统教程 周长林 左万历 高等教育出版社

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1