仿真模拟磁盘调度过程.docx

上传人:小飞机 文档编号:5006981 上传时间:2023-05-29 格式:DOCX 页数:18 大小:195.75KB
返回 下载 相关 举报
仿真模拟磁盘调度过程.docx_第1页
第1页 / 共18页
仿真模拟磁盘调度过程.docx_第2页
第2页 / 共18页
仿真模拟磁盘调度过程.docx_第3页
第3页 / 共18页
仿真模拟磁盘调度过程.docx_第4页
第4页 / 共18页
仿真模拟磁盘调度过程.docx_第5页
第5页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《仿真模拟磁盘调度过程.docx》由会员分享,可在线阅读,更多相关《仿真模拟磁盘调度过程.docx(18页珍藏版)》请在三一办公上搜索。

1、仿真模拟磁盘调度过程。要求给出响应任意给定的一组磁盘请求序列时磁头移动的 过程,即能统计和报告出“最短寻找时间优先算法”下磁头响应请求的顺序、移臂的总量和掉 头的次数,调度算法从先来先服务、最短寻道时间优先以及SACN算法中任选两个,并进 行性能比较。青岛农业大学理学与信息科学学院操作系统课程设计报告设计题 目磁盘调度的仿真模拟学生专业班级学生姓名(学号)韩琦(20102769)设计小组其他同学姓名(学号)赵玺(20102990)李帅(20102797)指导教师王艳春完成时间2013年6月26日实习(设计)地点 信息楼1392013年6月26日一、课程设计目的和任务操作系统的理论只有通过操作系

2、统的实际操作和编程才能有真正的理解和 掌握,没有实践操作系统的操作和编程,学习操作系统就是纸上谈兵。操作系统 课程设计是在学习完操作系统课程后进行的一次全面的综合实习,是计算机 科学与技术专业的重要实践性教学环节。通过课程设计,达到如下目的:1、巩固和加深对操作系统原理的理解,提高综合运用本课程所学知识的能 力。2、培养学生选用参考书,查阅手册及文献资料的能力;培养独立思考,深 入研究,分析问题、解决问题的能力。3、通过实际操作系统的分析设计、编程调试,掌握系统软件的分析方法和 工程设计方法。4、能够按要求编写课程设计报告书,能正确阐述设计和实验结果、正确绘 制系统和程序框图。5、通过课程设计

3、,培养学生严谨的科学态度,严肃认真的工作作风和团队 协作精神。二、分析与设计1 .分析设计思路1)先来先服务算法(FCFS)这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进 行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不 会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化, 在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平 均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。2)扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头 的当前移动方向。例如,当磁头正在自里向

4、外移动时,扫描算法所选择的下一个 访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向 外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时, 同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从 而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故 又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于 中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。2.概要设计3 .详细设计if(aj-k0)

5、按方向访问i=0iinist rat or:ffiDebug8 (1). exe、A访访访访访、 j制要要要要要*制 wffl禀Bffl而请畚要访I项的磁道总数 司的磁道m 可的磁道2 = 21 可的磁道3: 12 可的磁道,4:22 可的磁道SH3 :旨针所在磁道:S1)输入磁道总数以及磁道的编号,最后为初始磁道 这里数据为5; 11 21 12 22 13 ; 5C: Docu*ents and Sett ingsAdainistrator桌面Debug8 (1). exev商1121122213连磁盘调度算法1 .先来先服务(FCFS)2.扫描算法 (SCAN)Ld2)选择磁盘调度算法

6、如果为FCFS输出访问顺序11 21 12 22 13平均寻道长度8.800000移臂的总量44掉头次数4如果为SCAN且 移动臂由里向外输出访问顺序11 12 13 21 22平均寻道长度3.400000移臂的总量17掉头次数 0如果为SCAN且 移动臂由外向里输出访问顺序 11 12 13 21 22平均寻道长度3.400000移臂的总量 17掉头次数 0四、程序清单#include#includevoid FCFS(int b,int n,int init) /先来先服务 init 指针(int i,s,sum; /sum是移臂的总量,i是磁盘编号int a20;/定义一个20的数组in

7、t x,y,z;/求调头的次数的相关变量int k=0;/ k的初值为0,即默认的掉头数为0.for(i=0;in;i+)ai=bi; 将 bi的值赋值给 ais=init;/init为初始的磁头位置sum=0;移臂总量设初值为0for(i=0;in;i+) 循环输出第n次访问的磁道(printf(第d 次访问的磁道:dn”,i+1,ai);sum+=abs(s-ai); 递归求和x=s-ai;/x为两个磁道的差值s=ai;/把当前ai的值给sy=ai-ai+1;/y为另外两个磁道的差值z=x*y;两个磁道差值相乘,由是否变号判断是否转向if (z0)/z0,表示转向k=k+1; /递归求出调

8、头的次数printf (平均寻道长度:fn”,sum*1.0/n); /输出平均寻道长度 printf(-移臂的总量:dn,sum);/输出移臂总量printf(调头的次数:dn”, k);/输出掉头次数void SCAN1(int b,int n,int k) /扫描算法,k 为初始的磁道 (int i,j,s,l,sum=0,p,biaoji; /i、j 均为磁盘编号,int z=0; 定义掉头数z为0int a20;for(i=0;in;i+)ai=bi;将 bi的值赋值给 aifor(i=0;i1;i+) 循环磁道,以i为编号(for(j=0;jn;j+) /同时以j为编号循环磁道(i

9、f(ai-k)*(aj-k)=0;i-)/通过循环把小于k的磁道排序输出(biaoji=0;for(j=0;j=i;j+)if(aj-k0)/找出比K小的磁道(biaoji=1; 标记定为1p=j; 保留此时j的值,给pbreak;if(biaoji=1) 找出小于K的且更接近的磁道(s=ap;把上述循环中找到的第一个小于K的磁道给sfor(j=0;j=i;j+)if(ajk&k-ajk-s)循环 aj,找到同样小于 K 但是大于s的值s=aj; 把循环找到的这个值给sp=j; 把此时的磁盘编号j给pap=ai; /把以访问的磁道用末尾的磁道替代printf(第%d次访问的磁道:dn”,n-i

10、,s); /通过上述循环 可以把小于K的磁道从大到小输出sum+=k-s;k=s; /改变当前指针所指向的磁道else /否则通过循环把大于K的磁道排序输出(s=a0; 当前指针指向序列中第一个磁道for(j=0;j=i;j+)if(aj-k=s-k) 通过循环把大于K的磁道按从小到大的顺 序输出(s=aj;p=j;ap=ai; 同上printf(第d 次访问的磁道:dn”,n-i,s);sum+=abs(k-s);k=s; /改变指针的指向printf(平均寻道长度:fn”,sum*1.0/n);printf(移臂的总量:dn”, sum);printf(调头的次数:dn”, z);void

11、 SCAN2(int b,int n,int k)/扫描算法,k 为初始的磁道 (int i,j,s,sum=0,p,biaoji;/i、j 均为磁盘编号int z=0;/定义掉头数z为0int a20;for(i=0;in;i+)ai=bi;/将 bi的值赋值给 aifor(i=0;i1;i+) 循环磁道,以i为编号(for(j=0;jn;j+)/同时以j为编号循环磁道(if(ai-k)*(aj-k)=0;i-)/通过循环把大于k的磁道排序输出(biaoji=0;for(j=0;j0)/找出比K大的磁道(biaoji=1;/标记定为1p=j;/保留此时j的值,给p break;if(biao

12、ji=1)(s=ap;/把上述循环中找到的第一个大于K的磁道给sfor(j=0;jk&aj-ks-k)/循环aj,找到同样大于K但是小于s的值s=aj;/把循环找到的这个值给sp=j;/把此时的磁盘编号j给pap=ai;/把以访问的磁道用末尾的磁道替代printf(第d 次访问的磁道:dn”,n-i,s);sum+=s-k;k=s;/改变指针的指向else(s=a0;for(j=0;j=i;j+)if(k-aj=k-s)(s=aj;p=j;ap=ai;printf(第%d次访问的磁道:dn”,n-i,s);/输出 sum+=abs(k-s);k=s;printf(平均寻道长度:fn”,sum*

13、1.0/n);/输出printf(移臂的总量:dn”, sum);printf(调头的次数:dn”, z);void main() /main 函数 (int a20;int i,n,k,k1,init; /定义初始磁道 init printf(-请输入需要访问的磁道总数:);/键盘输入磁道总数:n scanf(%d,&n);for(i=0;in;i+) /键盘输入访问的磁道:ai(printf(需要访问的磁道%d:,i+1);scanf(%d,&ai);printf (-请输入指针所在磁道:);/键盘输入初始磁道scanf(%d,&init);k=1;/k= 1.才能使while工作whil

14、e(k)/case选择 磁盘调度算法 (printf(*n); printf(磁盘调度算法n);printf(1.先来先服务(FCFS)n);printf(2 .扫描算法(SCAN)n);printf(*n); printf(请在下面输入您的选择:); scanf(%d,&k);switch(k)(case 1:FCFS(a,n,init);break; /调用先来先服务算法case 2:k1=1; /赋初值已完成下面的循环while(k1)/case选择初始的移臂方向(printf(* 扫描算法 *n);printf(1.移动臂由里向外 2.移动臂由外向里n);printf(0.返回上一层n

15、);printf(*n);printf(请在下面输入您的选择:);scanf(%d,&k1);switch(k1)(case 1:SCAN1(a,n,init);break;case 2:SCAN2(a,n,init);break;五、总结与体会通过本次实习,我们又重新翻阅了课本,查看了关于磁盘调度以及它的四种 算法的相关内容,使我对于磁盘调度算法和原理有了更深刻的理解。对于理论在 实践中的应用也有一定的了解。这次磁盘调度模拟系统设计要求包含两种算法,我们通过商量最后选择了先 来先服务(FCFS)算法和扫描(SCAN)算法,其中扫描算法分为自里向外和自外 向里两种扫描方式。操作系统中,对磁盘的

16、访问要求来自多方面,常常需要排队。这时,对众多 的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性 能。磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘是,应采用 一种最佳调度算法,以使各种进程对磁盘的平均访问时间最小。由于在访问磁盘 的时间中,主要是寻道时间,因此,磁盘调度的目标,是使磁盘的平均寻道时间 最少。所以我们就决定用他们的平均寻道时间来判断性能高低。平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道 数(n),即:L=(M1+M2+Mi+Mn)/n其中Mi是为所需访问的磁道号 所需移动的磁道数。在本次实习中,我们选得课题并不是很难。最后完

17、成的内容也并不是很复杂, 但是程序也不够完善和严谨,界面也很粗糙。但是我们仍觉得设计的过程是相当 重要的,从中我学到了很多,收获了很多,无论在理论上还是实践中,都得到不 少的提高,这对于我以后的工作和学习都有一种巨大的帮助。我觉得实习反映的 是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校 转到踏上社会的一个过程。我觉得作为一名计算机专业的学生,这次实习是很有 意义的。六、参考文献1 汤子瀛.计算机操作系统(修订版).西安电子科技大学出版社,20012 百度百科.3 百度文库.4 敏编.操作系统教程.西安电子科技大学出版社5 周湘贞、曾宪权.操作系统原理与实践教程.清华大学出版社课程设计成绩评定表学生姓名韩琦1专业班级1计本10级1班设计题目磁盘调度的仿真模拟指导教师评语及意见:指导教师评阅成绩:指导教师签字:年月日注:此表装订在课程设计之后。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号