实验四 磁盘驱动调度算法的模拟
- 格式:doc
- 大小:23.00 KB
- 文档页数:2
磁盘调度算法的模拟实现及对比磁盘调度算法是操作系统中的一个重要组成部分,用于优化磁盘读写操作的效率,提高系统的响应速度和运行效率。
常见的磁盘调度算法包括先来先服务(FCFS)算法、最短寻道时间优先(SSTF)算法、电梯(Elevator)算法等。
在进行磁盘调度算法的比较和模拟之前,我们首先需要了解磁盘读写操作的基本原理。
磁盘是由许多磁道和扇区组成的,当操作系统需要对磁盘进行读写操作时,读写头需要按照特定的路径移动到目标扇区,这个过程称为寻道。
而磁头在寻道的过程中所花费的时间称为寻道时间。
不同的磁盘调度算法的主要目标就是使得寻道时间尽可能地短,从而提高磁盘的读写操作效率。
首先,我们来实现一个先来先服务(FCFS)算法的模拟。
FCFS算法是最简单的磁盘调度算法,它按照磁盘请求的先后顺序进行处理。
具体实现如下:```pythondef fcfs(disk_queue, start):head_movement = 0curr_pos = startfor request in disk_queue:head_movement += abs(request - curr_pos)curr_pos = requestreturn head_movement```上述代码中,`disk_queue`表示磁盘请求队列,`start`表示起始磁道号。
算法首先将磁头移动到起始磁道号`start`,然后按照磁盘请求的先后顺序对队列中的请求进行处理,计算磁头的移动距离。
最后返回磁头的总移动距离。
接下来,我们实现一个最短寻道时间优先(SSTF)算法的模拟。
SSTF 算法会选择离当前磁道最近的请求进行处理,从而减少磁头的寻道时间。
具体实现如下:```pythondef sstf(disk_queue, start):head_movement = 0curr_pos = startwhile disk_queue:min_distance = float('inf')min_index = -1for i, request in enumerate(disk_queue):distance = abs(request - curr_pos)if distance < min_distance:min_distance = distancemin_index = ihead_movement += min_distancecurr_pos = disk_queue.pop(min_index)return head_movement```上述代码中,算法首先将磁头移动到起始磁道号`start`,然后不断选择离当前磁道最近的请求处理,直到所有请求处理完毕。
磁盘调度操作系统实验报告一、实验目的:本次实验主要目的是通过模拟实现磁盘调度算法,加深对操作系统磁盘调度原理的理解,并学会使用操作系统磁盘调度算法解决实际问题。
二、实验内容:1.磁盘调度算法原理分析:磁盘调度算法是操作系统中的重要组成部分,它的任务是合理安排磁盘上数据的存取顺序,以提高磁盘的效率。
常见的磁盘调度算法有先来先服务(FCFS)、最短寻道时间优先(SSTF)、电梯算法(SCAN)等。
2.模拟实现磁盘调度算法:本实验选择最短寻道时间优先算法(SSTF)作为示例进行模拟实现。
SSTF算法的原理是优先选择离当前磁头位置最近的磁道进行访问,以减少磁头移动时间。
实验步骤:1.根据实际情况,创建一个磁道队列,记录需要访问的磁道序号。
2.初始化磁盘的起始位置和访问队列。
3.对访问队列进行排序,按照磁头当前位置到磁道的距离从小到大排列。
4.根据排序后的队列顺序,依次访问磁道,并记录磁头移动的距离。
5.计算平均寻道长度。
三、实验结果分析:通过模拟实现SSTF磁盘调度算法,我们获得了磁头对每个磁道的访问顺序和总共的磁头移动距离。
根据实验结果,我们可以发现SSTF算法相对于其他算法具有一定的优势。
在实际应用中,根据不同的实际情况,可以选择合适的磁盘调度算法以优化磁盘的访问效率。
四、实验总结:通过本次实验,我们对磁盘调度算法的原理和实现有了更深入的了解。
磁盘调度算法作为操作系统中一个重要的模块,对提高磁盘的读写效率起着重要的作用。
在实际应用中,我们需要根据具体问题选择合适的磁盘调度算法,以达到最优的访问效果。
磁盘调度算法的模拟实现学院专业学号学生姓名指导教师姓名2014年3月19日目录一、课设简介 (2)1.1 课程设计题目 (2)1.2 课程设计目的 (2)1.3 课程设计要求 (2)二、设计内容 (3)2.1功能实现 (3)2.2流程图 (3)2.3具体内容 (3)三、测试数据 (4)3.3 测试用例及运行结果 (4)四、源代码 (5)五、总结 (12)5.1 总结............................................一、课设简介1.1课程设计题目磁盘调度算法的模拟实现11.2程序设计目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
1)进一步巩固和复习操作系统的基础知识。
2)培养学生结构化程序、模块化程序设计的方法和能力。
3)提高学生调试程序的技巧和软件设计的能力。
4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
1.3 设计要求1)磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。
2)最好能实现磁道号序列中磁道号的动态增加。
3)磁道访问序列以链表的形式存储4)给出各磁盘调度算法的调度顺序和平均寻道长度二、设计内容2.1 功能实现设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟程序。
1) 先来先服务算法FCFS 2) 最短寻道时间优先算法SSTF 2.2流程图2.3具体内容1)先来先服务算法FCFS这是一种比较简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情开始 选择算法 F C F S S S T F 结束况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
实验四磁盘驱动调度算法的模拟一.实验内容:熟悉磁盘的结构以及磁盘的驱动调度算法的模拟,编程实现简单常用的磁盘驱动调度算法先来先服务(FIFO)、电梯调度算法、最短寻找时间优先算法、扫描(双向扫描)算法、单向扫描(循环扫描)算法等。
编程只需实现两个算法。
题目可以选取教材或习题中的相关编程实例。
编程语言建议采用c/c++或Java。
模拟程序鼓励采用随机数技术、动态空间分配技术,有条件的最好能用图形界面展现甚至用动画模拟。
实验性质:验证型。
二.实验目的和要求1)掌握使用一门语言进行磁盘驱动调度算法的模拟;2)编写程序将磁盘驱动调度算法的过程和结果能以较简明直观的方式展现出来。
三.实验原理、方法和步骤1. 实验原理磁盘驱动调度对磁盘的效率有重要影响。
磁盘驱动调度算法的好坏直接影响辅助存储器的效率,从而影响计算机系统的整体效率。
常用的磁盘驱动调度算法有:最简单的磁盘驱动调度算法是先入先出(F IFO)法。
这种算法的实质是,总是严格按时间顺序对磁盘请求予以处理。
算法实现简单、易于理解并且相对公平,不会发生进程饿死现象。
但该算法可能会移动的柱面数较多并且会经常更换移动方向,效率有待提高。
最短寻找时间优先算法:总是优先处理最靠近的请求。
该算法移动的柱面距离较小,但可能会经常改变移动方向,并且可能会发生进程饥饿现象。
电梯调度:总是将一个方向上的请求全部处理完后,才改变方向继续处理其他请求。
扫描(双向扫描):总是从最外向最里进行扫描,然后在从最里向最外扫描。
该算法与电梯调度算法的区别是电梯调度在没有最外或最里的请求时不会移动到最外或最里柱面,二扫描算法总是移到最外、最里柱面。
两端的请求有优先服被务的迹象。
循环扫描(单向扫描):从最外向最里进行柱面请求处理,到最里柱面后,直接跳到最外柱面然后继续向里进行处理。
该算法与扫描算法的区别是,回来过程不处理请求,基于这样的事实,因为里端刚被处理。
2. 实验方法1)使用流程图描述演示程序的设计思想;2)选取c/c++、Java等计算机语言,编程调试,最终给出运行正确的程序。
实验4 驱动调度一、实验内容模拟电梯调度算法,实现对磁盘的驱动调度。
二、实验目的磁盘是一种高速、大量旋转型、可直接存取的存储设备。
它作为计算机系统的辅助存储器,负担着繁重的输入输出任务,在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请示等待处理。
系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求,这就叫驱动调度,使用的算法称驱动调度算法。
驱动调度能降低为若干个输入输出请求服务所须的总时间,从而提高系统效率。
本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。
三、实验原理模拟电梯调度算法,对磁盘调度。
磁盘是要供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。
当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。
当有多个进程提出输入输出请求处于等待状态,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。
当存取臂仅需移到一个方向最远的所请求的柱面后,如果没有访问请求了,存取臂就改变方向。
假设磁盘有200个磁道,用C语言随机函数随机生成一个磁道请求序列(不少于15个)放入模拟的磁盘请求队列中,假定当前磁头在100号磁道上,并向磁道号增加的方向上移动。
请给出按电梯调度算法进行磁盘调度时满足请求的次序,并计算出它们的平均寻道长度。
四、算法流程图五、源程序和注释1.程序中使用的数据结构及符号说明。
#define NUM 15 //数组大小#define NOW 100 //起始寻道地址int C[NUM*2],flag,temp,i,j; //C[]数组,flag标志,temp交换标志double total=0; //平均寻道长度2. 源程序和注释#include<stdio.h>#include<stdlib.h>#include<math.h>#define NUM 15 //数组大小#define NOW 100 //起始寻道地址int C[NUM*2],flag,temp,i,j; //C[]数组,flag标志,temp交换标志double total=0; //平均寻道长度void input()//产生15个数字均小于200{printf("\n15 random numbers from 0 to 199\n\n");for(i=0;i<NUM;i++){C[i]=rand()%200;printf("C[%d]=%d;\t",i,C[i]);}}void turn()//次序对换{for(i=0;i<NUM/2;i++){temp=C[i];C[i]=C[NUM-i-1];C[NUM-i-1]=temp;}}void last(){for(i=0;i<flag+1;i++)//部分后移{C[i+NUM]=C[i];C[i]=0;}for(i=0;i<NUM;i++)//整体前移{C[i]=C[i+flag+1];}}void output()//输出数组的值{printf("\n15 order numbers from 0 to 199\n\n");for(i=0;i<NUM;i++){printf("C[%d]=%d;\t",i,C[i]);}}void order_1()//对15个数字进行从小到大排序{for(i=0;i<NUM;i++){for(j=i;j<NUM;j++){if(C[j]<C[i]){temp=C[j];C[j]=C[i];C[i]=temp;}}}}void order_2()//判定100的分界线{if(C[0]>=NOW)//均大于NOW{flag=15;}else if(C[14]<NOW)//均小于NOW{flag=14;}else{for(i=0;i<NUM-1;i++){if(C[i]<NOW&&C[i+1]>=NOW){flag=i;}}}}void work()//求平均寻道{total=fabs(C[0]-100);for(i=0;i<NUM-1;i++){total=total+fabs(C[i+1]-C[i]);}total=total/15;printf("total=%f;\n",total);}void main(){input();order_1();order_2();last();output();work();}六、程序运行时的初值和运行结果。
磁盘调度算法的模拟实现学院专业学号学生姓名指导教师姓名2014年3月19日目录一、课设简介 (2)1.1 课程设计题目 (2)1.2 课程设计目的 (2)1.3 课程设计要求 (2)二、设计内容 (3)2.1功能实现 (3)2.2流程图 (3)2.3具体内容 (3)三、测试数据 (4)3.3 测试用例及运行结果 (4)四、源代码 (5)五、总结 (12)5.1 总结............................................一、课设简介1.1课程设计题目磁盘调度算法的模拟实现11.2程序设计目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
1)进一步巩固和复习操作系统的基础知识。
2)培养学生结构化程序、模块化程序设计的方法和能力。
3)提高学生调试程序的技巧和软件设计的能力。
4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
1.3 设计要求1)磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。
2)最好能实现磁道号序列中磁道号的动态增加。
3)磁道访问序列以链表的形式存储4)给出各磁盘调度算法的调度顺序和平均寻道长度二、设计内容2.1 功能实现设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟程序。
1) 先来先服务算法FCFS 2) 最短寻道时间优先算法SSTF 2.2流程图2.3具体内容1)先来先服务算法FCFS这是一种比较简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情开始 选择算法 F C F S S S T F 结束况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
《操作系统》实验报告三、实验过程或算法(源程序)程系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。
模块调用关系图:1、先来先服务算法(FCFS)这是一种比较简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
2、最短寻道时间优先算法(SSTF)该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。
其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。
在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。
3、扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。
例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。
这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。
这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。
由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。
此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。
4、循环扫描算法(CSCAN)循环扫描算法是对扫描算法的改进。
磁盘调度算法的模拟实验要求:⏹ 请分别用SCAN 和SSTF 模拟磁盘调度,并打印出磁盘磁道的调度顺序。
⏹磁头的方向可以动态的规定 ⏹磁道请求个数及序列可以动态地写入 ⏹ 总结收获体会及对该题解的改进意见和见解先将请求的磁道序列排序,以当前磁道号将该序列分界,根据当前磁道移动方向决定 先读左边的还是先读右边的SSTF算法:先将请求的磁道序列排序,以当前磁道号将该序列分界,然后当前磁道号分别与左边、右边磁道作差比较,选作差最小的,也即最短的。
并修改当前磁道号及其访问位(1为已访问完,0为未访问)。
(注:还要考虑左边或右边没有磁道的情况,如何确定所要与之比较的磁道)利用数组相关知识(图SSTF1. 当前磁道号在已排序的磁道请求序列中间的运行结果)(图SSTF2 当前磁道号在已排序的磁道请求序列最右边的运行结果)(图SSTF2 当前磁道号在已排序的磁道请求序列最左边的运行结果)SCAN源代码:#include<stdio.h>void main(){int m=0,n,Seek[100],SCurrent,t,i=0,j,k,option;printf("请输入当前的磁道号:");scanf("%d",&SCurrent);printf("\n----1.向磁道号增加的方向访问\t2.向磁道号减少的方向访问----\n");printf("---请选择的当前磁头移动方向(1/2):");scanf("%d",&option);printf("\n请输入磁道请求序列(以-999结束):\n");scanf("%d",&n);while(n!=-999){Seek[i]=n;m++;i++;scanf("%d",&n);}/* 冒泡排序使磁道请求序列从小到大排序 */for(j=0;j<m-1;j++){for(i=0;i<m-1-j;i++)if(Seek[i]>Seek[i+1]){t=Seek[i];Seek[i]=Seek[i+1];Seek[i+1]=t;}}/* 找到当前磁道号在磁道请求序列中的排序位置 */k=0;for(i=0;i<m;i++){if(Seek[i]<SCurrent)k++;elsebreak;}printf("\n--------------扫描(SCAN)算法后的磁盘调度序列----------\n");/* 第一种: 当前磁道号先向外再向里读 */if(option==1){for(i=k;i<m;i++)printf("%5d",Seek[i]);for(i=k-1;i>=0;i--)printf("%5d",Seek[i]);}/* 第二种: 当前磁道号先向里再向外读 */if(option==2){for(i=k-1;i>=0;i--)printf("%d ",Seek[i]);for(i=k;i<m;i++)printf("%5d",Seek[i]);}printf("\n");}SSTF源代码:#include<stdio.h>void main(){int m=0,n,Seek[100],Flag[100],SCurrent,t,i=0,j,k,i0,j0;printf("请输入当前的磁道号:");scanf("%d",&SCurrent);printf("\n请输入磁道请求序列(以-999结束):\n");scanf("%d",&n);while(n!=-999){Seek[i]=n;m++;i++;scanf("%d",&n);}/* 初始化置对应的磁道访问位为零 */for(i=0;i<m;i++)Flag[i]=0;/* 冒泡排序使磁道请求序列从小到大排序 */for(j=0;j<m-1;j++){for(i=0;i<m-1-j;i++)if(Seek[i]>Seek[i+1]){t=Seek[i];Seek[i]=Seek[i+1];Seek[i+1]=t;}}printf("\n--------------最短寻道时间优先(SSTF)算法后的磁盘调度序列----------\n");/* 找到当前磁道号在磁道请求序列中的排序位置 */k=0;for(i=0;i<m;i++){if(Seek[i]<SCurrent)k++;elsebreak;}//a. 已排序的磁道请求序列均在当前磁道号的右边//if(k==0){for(i=0;i<m;i++)printf("%5d",Seek[i]);k=-1;}//b. 已排序的磁道请求序列均在当前磁道号的左边//if(k==m){for(i=m-1;i>=0;i--)printf("%5d",Seek[i]);k=-1;}// c. 当前磁道号在已排序的请求序列的中间//if(k>0&&k<m){// 前后数与当前磁道号作差比较,选最近(差值最小)的if(Seek[k]-SCurrent>SCurrent-Seek[k-1])k--;printf("%5d",Seek[k]);SCurrent=Seek[k];Flag[k]=1;}while(k!=-1){i0=k-1;j0=k+1; //i0为当前磁道的靠左边的磁道号,j0为靠右边while(Flag[i0]==1&&i0>=0)i0--;while(Flag[j0]==1&&j0<m)j0++;// 1. 当前磁道号在已排序的磁道序列的最左边 //if(i0<0&&j0<m){for(i=j0;i<m;i++)printf("%5d",Seek[i]);k=-1;}// 2.当前磁道号在已排序的磁道序列的最右边 //if(i0>=0&&j0>=m){for(i=i0;i>=0;i--)printf("%5d",Seek[i]);k=-1;}// 3.当前磁道号在已排序的磁道序列的中间 //if(i0>=0&&j0<m){if(SCurrent-Seek[i0]<Seek[j0]-SCurrent){printf("%5d",Seek[i0]);Flag[i0]=1;SCurrent=Seek[i0];k=i0;}else{printf("%5d",Seek[j0]);Flag[j0]=1;SCurrent=Seek[j0];k=j0;}}}printf("\n");}。
第1篇一、实验目的1. 理解磁盘调度算法的基本原理和重要性。
2. 掌握几种常见的磁盘调度算法,包括先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描(SCAN)和循环扫描(C-SCAN)算法。
3. 通过模拟实验,分析不同磁盘调度算法的性能差异。
4. 优化磁盘调度策略,提高磁盘访问效率。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 磁盘调度算法模拟库:PyDiskScheduling三、实验内容1. FCFS算法:模拟实现先来先服务算法,按照请求顺序访问磁盘。
2. SSTF算法:模拟实现最短寻道时间优先算法,优先访问距离当前磁头最近的请求。
3. SCAN算法:模拟实现扫描算法,磁头从0号磁道开始向0号磁道移动,访问所有请求,然后返回到0号磁道。
4. C-SCAN算法:模拟实现循环扫描算法,与SCAN算法类似,但磁头在到达末尾磁道后返回到0号磁道。
四、实验步骤1. 导入PyDiskScheduling库。
2. 创建一个磁盘调度对象,指定磁头初始位置、请求序列和调度算法。
3. 运行调度算法,获取磁头移动轨迹和访问时间。
4. 分析算法性能,包括磁头移动次数、平均访问时间和响应时间等。
五、实验结果与分析1. FCFS算法:在请求序列较短时,FCFS算法表现较好。
但随着请求序列长度增加,磁头移动次数和访问时间明显增加。
2. SSTF算法:SSTF算法在请求序列较短时表现最佳,平均访问时间和响应时间较低。
但当请求序列较长时,算法性能下降,磁头移动次数增加。
3. SCAN算法:SCAN算法在请求序列较短时性能较好,但随着请求序列长度增加,磁头移动次数和访问时间逐渐增加。
与SSTF算法相比,SCAN算法在请求序列较长时性能更稳定。
4. C-SCAN算法:C-SCAN算法在请求序列较短时表现较好,但随着请求序列长度增加,磁头移动次数和访问时间逐渐增加。
与SCAN算法相比,C-SCAN算法在请求序列较长时性能更稳定,且磁头移动次数更少。
衡阳师范学院操作系统课程设计报告设计题目:驱动调度系别:计算机科学系专业:计算机科学与技术(师范)班级:1001班姓名:XXX学号:XXX指导教师:XXX2012年11月26日目录一、程序设计内容原理及目的·······························1、设计内容················································`2、设计原理·················································3、设计目的·················································二、程序设计过程·········································1、驱动调度中的数据结构设计·································2、程序算法设计··············································三、用户手册··············································1、运行坏境··················································2、执行文件··················································四、程序实现及运行结果····································1、源代码····················································2、代码······················································3、运行结果·················································五、心得总结···············································六、参考文献···············································二、程序设计内容原理及目的1、设计内容模拟电梯调度算法,实现对磁盘的驱动调度。
实验四磁盘驱动调度算法的模拟
一.实验内容:
熟悉磁盘的结构以及磁盘的驱动调度算法的模拟,编程实现简单常用的磁盘驱动调度算法:先来先服务(FIFO)、电梯调度算法、最短寻道时间优先算法、扫描(双向扫描)算法、循环扫描算法等。
编程语言建议采用c/c++或Java。
模拟程序鼓励采用随机数技术、动态空间分配技术,有条件的最好能用图形界面展现甚至用动画模拟。
实验性质:验证型。
二.实验目的和要求
1)掌握使用一门语言进行磁盘驱动调度算法的模拟;
2)编写程序将磁盘驱动调度算法的过程和结果能以较简明直观的方式展现出来。
三.实验原理、方法和步骤
1. 实验原理
磁盘驱动调度对磁盘的效率有重要影响。
磁盘驱动调度算法的好坏直接影响辅助存储器的效率,从而影响计算机系统的整体效率。
常用的磁盘驱动调度算法有:
最简单的磁盘驱动调度算法是先入先出(FIFO)法。
这种算法的实质是,总是严格按时间顺序对磁盘请求予以处理。
算法实现简单、易于理解并且相对公平,不会发生进程饿死现象。
但该算法可能会移动的柱面数较多并且会经常更换移动方向,效率有待提高。
最短寻道时间优先算法:总是优先处理最靠近的请求。
该算法移动的柱面距离较小,但可能会经常改变移动方向,并且可能会发生进程饥饿现象。
电梯调度:总是将一个方向上的请求全部处理完后,才改变方向继续处理其他请求。
扫描(双向扫描):总是从最外向最里进行扫描,然后在从最里向最外扫描。
该算法与电梯调度算法的区别是电梯调度在没有最外或最里的请求时不会移动到最外或最里柱面,二是扫描算法总是移到最外、最里柱面。
循环扫描(单向扫描):从最外向最里进行柱面请求处理,到最里柱面后,直接跳到最外柱面然后继续向里进行处理。
2. 实验方法
1)使用流程图描述演示程序的设计思想;
2)选取c/c++、Java等计算机语言,编程调试,最终给出运行正确的程序。