计算机操作系统磁盘调度算法_2014961712
操作系统-磁盘调度算法
cout<<" ";
for(i=1;i<num;i++)
{
sum+=abs(FCFSQueue[i]-FCFSQueue[i-1]);
cout<<abs(FCFSQueue[i]-FCFSQueue[i-1])<<" ";
}
ave=(float)sum/(num-1);
for(i=count,j=0;i<num,j<num-count;i++,j++)
a[j]=SCANQueue[i];
for(i=count-1,j=num-count;i>=0,j<num;i--,j++)
a[j]=SCANQueue[i];
cout<<endl<<endl;
cout<<"输出访问磁道的顺序:"<<endl;
结
果
总
结
程序主要利用了数组,运算的效率比较的高。用户可以输入或者随机产生所需要的数据,完全可以满足用户的需求。程序最后给出了柱面的调用顺序并且计算了寻道的时间。完成了设计的任务和要求。
附
录
#include<iostream>
#include<algorithm>//排序sort(beg,end)
#include<cmath>//求绝对值abs
}
int start=CSCANQueue[0];
sort(CSCANQueue,CSCANQueue+num);
操作系统课程设计-磁盘调度算法
序止之阳早格格创做纲要:本课程安排的脚段是通过安排一个磁盘调动模拟系统,进而使磁盘调动算法越收局里化,使磁盘调动的特性更简朴明白,那里主要真止磁盘调动的四种算法,分别是:1、先去先服务算法(FCFS)2、最短觅道时间劣先算法(SSTF)3、扫描算法(SCAN)4、循环扫描算法(CSCAN). 开用磁盘真止输进输出支配时,要把移动臂移动到指定的柱里,再等待指定扇区的转动到磁头位子下,而后让指定的磁头举止读写,完毕疑息传递;果此,真止一次输进输出所花的时间有:觅找时间——磁头正在移动臂戴动下移动到指定柱里所花的时间. 延缓时间——指定扇区转动到磁头下所需的时间. 传递时间——由磁头进程读写完毕疑息传递的时间,觅道时间——指估计机正在收出一个觅址下令,到相映目标数据被找到所需时间;其中传递疑息所花的时间,是正在硬件安排时牢固的,而觅找时间战延缓时间是与疑息正在磁盘上的位子有关;而后安排出磁盘调动的安排办法,包罗算法思路、步调,以及要用到的主要数据结构、函数模块及其之间的调用关系等,并给出仔细的算法安排,对付编码举止了尝试与分解. 末尾举止部分归纳与安排体验.关键词汇:最短觅道时间劣先算法、扫描算法、总觅道少度.目录前止22. 课程安排任务及央供42.1 安排任务42.2 安排央供43. 算法及数据结构53.1算法的总体思维(过程)53.2 真止历程中用到的数据结构63.3 真止历程中用到的系统调用114. 步调安排与真止114.1 最短觅道时间劣先算法(SSTF)模块114.1.2 步调证明134.1.3 步调关键代码134.2扫描算法(SCAN)模块144.2.1 步调过程图144.2.2 步调证明164.2.3 步调关键代码164.3 真验截止175. 论断266. 参照文献267. 支获、体验战提议272. 课程安排任务及央供2.1 安排任务1.认识并掌握磁盘调动算法管制系统的安排要领,加强对付所教百般调动算法及相映算法的特性相识.2.掌握磁盘调动的基础观念,深刻体验各个算法的劣缺面,以及算法间的相似面.2.2 安排央供1)定义与算法相关的数据结构,如PCB、行列等;2)真止2种分歧的调动算法(可使用真代码大概过程图举止分解);3)算法真止中断时,应给出总的觅道少度;4)磁道考察序列随机死成,且要谦脚一定的数量央供(很多于100个);5)系统真止必须提供一定的接互性,所需尝试数据应当以文献形式提供大概者由用户正在尝试历程中给出,不可将尝试数据“写死”正在系统真止代码中;6)必须给出脚够的注释,注释量不得少于代码量的一半;7)对付于系统中所使用到的系统调用(API函数),必须给出函数的定义本型、使用要领,参数较为搀纯的,还该当给出参数的简曲形貌;3. 算法及数据结构3.1算法的总体思维(过程)图a SSTF 调动算法示例图用冒泡法对付磁道数组举止排序 返回内侧(中侧)扫描 图b SSTF 算法过程示例图 本磁道号随机组成的数组:cidao[]={55,58,39,18,90,160,150,38,184}; 排序后的数组={18,38,39,5,58,90,150,160,184};输进目前磁道号:now=100;ciidao[]={55,58,39,18,90,160,150,38,184}(可随机死成多个)用户输进目前磁道号now ,比较目前磁道到每个磁道的移动距离,采用最短距离的磁道举止移动.now 指背目前磁道号,将目前磁道号与结余不考察的磁道号举止比较,沉复上述支配.并估计仄衡觅道少度ave.3839 3955 55 5558 58 58 5890 90 90 90 90now值:100 90 58 55 39184160 160150 150 15018 18 18 1838 38 38 3839 39 39 3955 55 55 5558 58 58 5890 90 90 90now值:18 150 160 184图c SSTF算法行列示企图(按磁道考察程序)2.扫描(SCAN)算法图d SCAN算法示例图本磁道号随机组成的数组:cidao[]={55,58,39,18,90,160,150,38,184};排序后的数组={18,38,39,5,58,90,150,160,184};输进目前磁道号:now=100;采用磁道移动目标;以磁道号减少的目标移动为例:5558 5890 90 90184 184 184 184160 160 160 160 160150 150 150 150 150 150now值:100 150 160 184 90 581838 3839 39 3955 55 5558 58 5890 90 90184 184 184160 160 160150 150 150now值:55 39 38图e SCAN算法行列示企图(按磁道考察程序)3.3 真止历程中用到的系统调用系统模块调用关系图4.4.14.1.2①最短②100号柱里上真的柱里为90真止支配的序次时,读写磁头总合移动多个柱里的距离,与先去先服务、算法比较,大幅度天缩小了觅找时间,具备更佳的觅道本能,果而支缩了为各考察者哀供服务的仄衡时间,也便普及了系统效用.但是最短查找时间劣先(SSTF)调动,FCFS 会引起读写头正在盘里上的大范畴移动,SSTF查找距离磁头最短(也便是查找时间最短)的哀供动做下一次服务的对付象.SSTF查找模式有下度局部化的倾背,会推早一些哀供的服务,以至引起无限缓慢(又称饥饥).算法过程:输进磁头初初磁道号,序列少度,磁道号序列.采用磁盘调动算法(最短觅道时间劣先调动(SSTF))大概(扫描调动算法(SCAN))中的任性一个,若采用SSTF,则输出各进程被调动的程序,并估计总的觅道少度战仄衡觅道少度,采用关关则中断磁盘调动.4.1.3 步调关键代码for(i=0;i<m;i++)/*使用冒泡法按从小到大程序排列*/for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}if(array[m-1]<=now) /*若目前磁道号大于哀供序列中最大者,则间接由中背内依次赋予各哀供服务*/ {for(i=m-1;i>=0;i--)cout<<array[i]<<" ";sum=now-array[0];}elseif(array[0]>=now) /*若目前磁道号小于哀供序列中最小者,则间接由内背中依次赋予各哀供服务*/ while((l>=0)&&(r<m)) /*目前磁道正在哀供序列范畴内*/{if((now-array[l])<=(array[r]-now)) /*采用与目前磁道迩去的哀供赋予服务*/{cout<<array[l]<<" ";sum+=now-array[l];now=array[l];l=l-1;}扫描算法(SCAN )模块4.2.1 步调过程图4.2.2 ①消了SSTF ②SCAN 法.3位搭客弛10层;弛二正在55.那里是:100号柱里的③SCAN 4.2.3 if {for {cout<<array[j]<<" "; /*输出背内扫描的序列*/}for(j=r;j<m;j++) /*磁头移动到最小号,则改变目标背中扫描已扫描的磁道*/{cout<<array[j]<<" "; /*输出背中扫描的序列*/}sum=now-2*array[0]+array[m-1];}else/*采用移动臂目标背中,则先背中扫描*/{for(j=r;j<m;j++){cout<<array[j]<<" "; /*输出背中扫描的序列*/}for(j=l;j>=0;j--) /*磁头移动到最大号,则改变目标背内扫描已扫描的磁道*/{cout<<array[j]<<" ";}sum=-now-array[0]+2*array[m-1];}ave=(float)(sum)/(float)(m);4.3真验截止运止界里截图及相映代码1.主界里void display(){cout<<"\n\n\n\n Operating Systems Curriculum Design\n";cout<<"\n ╔———————————————————————————————╗"; cout<<"\n ││";cout<<"\n │称呼: 磁盘调动│"; cout<<"\n ││";cout<<"\n │工具: Visual Studio 2010 │"; cout<<"\n ││";cout<<"\n │班级:1205 │"; cout<<"\n ││";cout<<"\n │做家:施静│"; cout<<"\n ││";cout<<"\n │教号:211214020 │"; cout<<"\n ││";cout<<"\n ╚———————————————————————————————╝\n"; system("pause");system("cls");2.序止提示用户此步调真止的算法cout<<"【载进完毕】"<<endl<<endl;cout<<" 序止"<<endl<<endl;cout<<" 欢迎使用『磁盘调动算法系统』,本步调真止了时常使用的磁盘调动算法如下所示:\n\n";cout<<" ①最短觅道时间劣先(SSTF):最短觅道时间劣先算法央供考察的磁盘与目前磁头天圆的\n";cout<<" 磁盘距离迩去,以使屡屡的觅道时间最短.\n\n";cout<<" ②扫描算法(SCAN)电梯调动:扫描算法不但是思量到欲考察的磁道与目前磁道的距离\n";cout<<" 更劣先思量的是磁头的目前移动目标.\n\n";system("pause");system("cls");//浑屏3.用户采用所使用的算法(先随机死成101个磁道号)void showMenu(int cidao[],int n){int choice;while(true){cout<<"请您采用喜欢的算法去真止调动(输进1-3):";cout<<"\n ╔—————————————╗"; cout<<"\n ││";cout<<"\n │ 1.最短觅道时间劣先(SSTF) |"; cout<<"\n ││";cout<<"\n │ 2.扫描算法(SCAN) │"; cout<<"\n ││";cout<<"\n │ 3.退出(EXIT) │"; cout<<"\n ││";cout<<"\n ╚—————————————╝\n"; cout<<endl;while(true){cout<<"目前您采用的算法号是(1-3):";cin>>choice;switch(choice){ /*case 1:FCFS(a,n);break;*/case 1:SSTF(cidao,n);break;case 2:SCAN(cidao,n);break;case 3:cout<<"\n要退出系统了欢迎使用本系统\n";exit(0);}}}}4.最短觅道时间劣先算法/**********************最短觅道时间劣先调动算法********************/ void SSTF(int cidao[],int m){system("cls");int k=1;int now,l,r;int i,j,sum=0;int a;char str[100];float ave;cidao=bubble(cidao,m); //调用冒泡排序算法排序cout<<"请输进目前的磁道号:";C: cin>>str; //对付输进数据举止灵验性推断a=decide(str);if(a==0){cout<<"输进数据的典型过得,请沉新输进!"<<endl;goto C;}elsenow=trans(str,a); //输进目前磁道号if(cidao[m-1]<=now) //若目前磁道号大于哀供序列中最大者,则间接由中背内依次赋予各哀供服务{cout<<"磁盘扫描序列为:";for(i=m-1;i>=0;i--)cout<<cidao[i]<<" ";sum=now-cidao[0];}if(cidao[0]>=now) //若目前磁道号小于哀供序列中最小者,则间接由内背中依次赋予各哀供服务{cout<<"磁盘扫描序列为:";for(i=0;i<m;i++)cout<<cidao[i]<<" ";sum=cidao[m-1]-now;}if(now>cidao[0]&&now<cidao[m-1]) //若目前磁道号大于哀供序列中最小者且小于最大者{cout<<"磁盘扫描序列为:";while(cidao[k]<now) //决定目前磁道正在已排的序列中的位子,后里的算法皆用到了,不妨间接复制后少量建改,节省时间.{k++;}l=k-1;r=k;while((l>=0)&&(r<m)) //目前磁道正在哀供序列范畴内{if((now-cidao[l])<=(cidao[r]-now)) //采用与目前磁道迩去的哀供赋予服务{cout<<cidao[l]<<" ";sum+=now-cidao[l];now=cidao[l];l=l-1;}else{cout<<cidao[r]<<" ";sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1) //磁头移动到序列的最小号,返回中侧扫描仍已扫描的磁道{for(j=r;j<m;j++){cout<<cidao[j]<<" ";}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍已扫描的磁道{for(j=l;j>=0;j--){cout<<cidao[j]<<" ";}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);//供仄衡觅道少度cout<<endl;cout<<"总的觅道少度: "<<sum<<endl;cout<<"仄衡觅道少度: "<<ave<<endl;cout<<"请按任性键返回系统菜单"<<endl;getch();showMenu(cidao,m); //回到主界里}最短觅道时间劣先(SSTF)算法真止界里(2)扫描(SCAN)算法/*****************************扫描调动算法*******************************/ void SCAN(int cidao[],int n)//先要给出目前磁道号战移动臂的移动目标{int temp;int i,j;int now;int sum;for(i=0;i<n;i++) //给磁道号排序for(j=i+1;j<n;j++){if(cidao[i]>cidao[j]){temp=cidao[i];cidao[i]=cidao[j];cidao[j]=temp;}}cout<<"\n按非递减程序排列佳的磁道: \n";for(i=0;i<n;i++) //输出排佳序的磁道号cout<<cidao[i]<<" ";cout<<endl;cout<<"\n请输进目前的磁道号: ";cin>>now; //用户自定义目前磁道号if(cidao[n-1]<=now){for(i=n-1;i>=0;i--)cout<<cidao[i]<<" ";sum=now-cidao[0];}else//cidao[n-1]>nowif(cidao[0]>=now){for(i=0;i<n;i++)cout<<cidao[i]<<" ";sum=cidao[n-1]-now;}else//cidao[0]<now && cidao[n-1]>now{int pointer;int location=1;int left,right;while(cidao[location]<now)location++;left=location-1;right=location;cout<<"\n请输进目前磁头念要移动的目标(1 磁道号减少目标,0 磁道号减小目标): "; loop:cin>>pointer;cout<<"\n磁盘调动程序为: \n";if(pointer==0 || pointer==1){if(pointer==0)//磁头背左移动到最小号,再改变目标背中扫描已扫描的磁道{for(j=left;j>=0;j--)cout<<cidao[j]<<" ";for(j=right;j<n;j++)cout<<cidao[j]<<" ";sum=now+cidao[n-1]-2*cidao[0];cout<<endl;}if(pointer==1)//磁头背左移动到最大号,再改变目标背内扫描已扫描的磁道{for(j=right;j<n;j++)cout<<cidao[j]<<" ";for(j=left;j>=0;j--)cout<<cidao[j]<<" ";sum=2*cidao[n-1]-now-cidao[0];//供总觅道少度cout<<endl;}}else{cout<<"\n输进分歧法!!请输进0大概1:\n"; goto loop;}}cout<<"\n\n需要移动的总磁道数为: "<<sum<<endl; cout<<"请按任性键返回系统菜单"<<endl;getch();showMenu(cidao,n); //回到主界里5.论断(1)用户界里友佳,采与了采用菜单模式,用户只需按“回车键”即可再现主界里;结构浑晰,支配简朴易懂,界里浑爽整净;(2)统制变量对付比,各磁盘调动算法均对付共一组随机磁道号举止调动,但是本去不会改变随机磁道真质,包管了仄衡觅道少度对付比的真正在性、灵验性. (3)百般算法皆有便宜,也各有缺累,需要权衡利弊,使用才搞达到最佳的效验.6.参照文献《估计机支配系统(建订版)》汤子瀛西安电子科技大教出版社《支配系统教程》圆敏编西安电子科技大教出版社《数据结构(C++版)》王白梅、胡明、王涛编著浑华大教出版社7.支获、体验战提议正在搞本次课程安排之前,对付于磁盘调动,尔真足不观念.通过齐力以及分离教授之前道的真质,尔毕竟深刻明白了磁盘调动算法的内涵.正在钻研自己所选的二种算法的共时,对付磁盘调动的四种算法——先去先服务算法(FCFS)、最短觅道时间劣先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)皆有了更深刻的明白战掌握,使尔不妨为磁盘调动采用适合的算法,普及CPU处事效用.安排历程中逢到的艰易正在教授战共教的助闲下乐成办理并通过了查支,尔深刻认识到算法的逻辑性对付步调的要害做用,算法的准确度对付步调运止截止的要害做用,那对付尔以去正在支配系统的教习中有极大助闲.每一次的课程安排皆是对付自己之前所教知识的加强,是一次罕见的教习机会.正在课程安排的每一个步调、每一段代码的真止,皆要反复去斟酌,反复运止调试,一面面的小偏偏好皆市引导波折.果为乐成阻挡易,所以当调试板上隐现“死成乐成”时,谦背的成便感是不问可知的.通过自己的动脚动脑,不但是减少了知识,还给了尔博业知识以及博业技能上的提下,对付普及自己的思维本领战支配本领也有很大的助闲.共时尔也会越收有自疑心,越收齐力,严肃教习,争与正在以去的课程中搞得更佳!。
操作系统有哪些主要调度算法
操作系统有哪些主要调度算法操作系统调度算法一、磁盘调度1.先来先服务fcfs:是按请求访问者的先后次序启动磁盘驱动器,而不考虑它们要访问的物理位置2.最短一般说来时间优先sstf:使距当前磁道最近的命令访问者启动磁盘驱动器,即是使查找时间最短的那个作业先继续执行,而不考量命令访问者到来的先后次序,这样就消除了先来先服务调度算法中磁臂移动过小的问题3.扫描算法scan或电梯调度算法:总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。
如果沿磁臂的方向无请求访问时,就改变磁臂的移动方向。
在这种调度方法下磁臂的移动类似于电梯的调度,所以它也称为电梯调度算法。
4.循环读取算法cscan:循环读取调度算法就是在读取算法的基础上改良的。
磁臂改成单项移动,由外向里。
当前边线已经开始沿磁臂的移动方向回去挑选距当前磁臂最近的哪个柱面的访问者。
如果沿磁臂的方向并无命令出访时,再返回最外,出访柱面号最轻的作业命令。
操作系统调度算法二、进程调度算法1.先进先出算法fifo:按照进程步入准备就绪队列的先后次序去挑选。
即为每当步入进程调度,总是把准备就绪队列的队首进程资金投入运转。
2.时间片轮转算法rr:分时系统的一种调度算法。
轮转的基本思想是,将cpu的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。
当时间片结束时,就强迫进程让出cpu,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。
3.最低优先级算法hpf:进程调度每次将处理机分配给具备最低优先级的准备就绪进程。
最低优先级算法可以与相同的cpu方式融合构成可以抢占市场式最低优先级算法和不容抢占市场式最低优先级算法。
4.多级队列反馈法:几种调度算法的结合形式多级队列方式。
操作系统调度算法三、常用的批处理作业调度算法1.先来先服务调度算法fcfs:就是按照各个作业进入系统的自然次序来调度作业。
操作系统中的磁盘调度
操作系统中的磁盘调度在计算机系统中,磁盘是一种存储设备,用于保存大量的数据和信息。
然而,由于磁盘的读写速度较慢,为了使系统更快地响应用户请求,操作系统必须对磁盘进行有效的调度和管理,以最大化磁盘的读写效率和响应速度。
磁盘调度是指操作系统通过算法和策略,对不同的磁盘访问请求进行排队和调度,以实现尽快地读取和写入数据。
在操作系统中,有多种磁盘调度算法可供选择,每种算法都有其优缺点,需要根据具体的应用场景和需求进行选择和配置。
常见的磁盘调度算法有以下几种:先来先服务(FCFS)调度算法先来先服务调度算法是最简单的磁盘调度算法,也是最容易实现的一种。
该算法按照磁盘访问请求的到达时间进行排队,先到达的请求先被处理。
然而,这种算法存在“早期请求被占用磁道”的问题,即如果较远的磁道请求先到达,则后续较近磁道的请求需要较长时间等待,影响了系统响应速度。
最短寻道时间优先(SSTF)调度算法最短寻道时间优先调度算法是一种基于当前磁头位置的决策算法。
该算法选择最短路径到达下一个磁道,然后依此处理下一个请求。
该算法通常比FCFS算法更快,因为它能够同时考虑到时间和空间的因素。
然而,该算法可能会导致较远的请求长时间等待,称为“饿死”。
电梯调度算法电梯调度算法是一种非常流行的磁盘调度算法,也是一种比较高效的算法。
该算法是基于电梯的上下运动来模拟磁盘寻道,当磁头从某一端开始找到另一端时,该算法按照一个方向对请求进行排序。
在电梯运行的方向上的请求优先处理,直到到达另一个方向的尽头,然后更改方向继续处理请求。
由于该算法考虑了请求的位置和时间,因此可以实现快速响应和高效利用磁盘。
最佳(SCAN)调度算法最佳调度算法是一种类似于电梯调度算法的算法,也是一种基于电梯寻道模型的算法。
该算法沿着磁盘表面进行扫描,按照磁头运动的方向对请求进行排序,并在到达尽头时更改方向。
该算法在大多数情况下比FCFS算法和SSTF算法更快,但也有可能因为某些操作导致请求长时间等待。
操作系统课程设计磁盘调度算法
操作系统课程设计磁盘调度算法学院专业学号学生姓名指导教师姓名2014年3月20 日目录第1部分课设简介 (3)1.1 课程设计题目 (3)1.2 课程设计目的 (3)1.3 课程设计内容 (3)1.4 时间安排 (3)第2部分实验原理分析 (5)2.1问题描述 (5)2.2流程图 (6)第3部分主要的功能模块 (7)3.1主要的函数 (7)3.2 测试用例及运行结果 (9)第4部分源代码 (12)第5部分总结及参考文献 (18)5.1 总结 (18)5.2 参考文献 (18)第1部分课设简介1.1 课程设计题目磁盘调度算法11.2 课程设计目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
1)进一步巩固和复习操作系统的基础知识。
2)培养学生结构化程序、模块化程序设计的方法和能力。
3)提高学生调试程序的技巧和软件设计的能力。
4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
1.3 课程设计内容设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟程序。
1、先来先服务算法FCFS2、最短寻道时间优先算法SSTF设计要求:1. 磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。
2. 最好能实现磁道号序列中磁道号的动态增加。
3. 磁道访问序列以链表的形式存储4. 给出各磁盘调度算法的调度顺序和平均寻道长度1.4 时间安排1)分析设计贮备阶段(1 天)2)编程调试阶段(7 天)3)写课程设计报告、考核(2 天)第2部分实验原理分析2.1问题描述1.先来先服务算法 FCFS这是一种比较简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
操作系统磁盘调度算法例题讲解
操作系统磁盘调度算法例题讲解1. 磁盘调度算法的背景和意义磁盘调度算法是操作系统中的重要组成部分,它的主要目的是优化磁盘访问,提高磁盘I/O操作的效率。
在计算机系统中,磁盘是一个重要的存储介质,它负责存储和读写数据。
然而,由于磁盘访问具有机械运动延迟和寻道时间等特性,使得磁盘I/O操作成为计算机系统中一个性能瓶颈。
为了解决这个问题,人们提出了各种各样的磁盘调度算法。
这些算法通过优化访问顺序、减少寻道时间、提高数据传输率等方式来提高磁盘I/O操作效率。
因此,深入了解和掌握不同类型的磁盘调度算法对于优化计算机系统性能具有重要意义。
2. 先来先服务(FCFS)调度算法先来先服务(First-Come, First-Served)是最简单、最直观的一种磁盘调度算法。
它按请求顺序处理I/O请求。
当一个请求到达时,在当前位置完成当前请求后再处理下一个请求。
然而,在实际应用中,FCFS存在一些问题。
首先,它无法充分利用磁盘的带宽,因为磁盘的读写头可能在处理当前请求时,其他请求已经到达。
其次,由于磁盘请求的随机性,FCFS可能导致某些请求等待时间过长。
3. 最短寻道时间优先(SSTF)调度算法最短寻道时间优先(Shortest Seek Time First)是一种基于当前位置选择下一个最近请求的调度算法。
在SSTF算法中,选择离当前位置最近的请求进行处理。
SSTF算法相对于FCFS算法来说,在减少寻道时间方面有一定的优势。
它能够充分利用磁盘带宽,并且能够减少某些请求等待时间过长的问题。
然而,SSTF算法也存在一些问题。
首先,在某些情况下,由于选择最近的请求进行处理,可能导致某些较远位置上的请求长期等待。
其次,在高负载情况下,由于大量随机访问导致寻道距离变大,SSTF 算法可能会导致饥饿现象。
4. 扫描(SCAN)调度算法扫描(SCAN)是一种按一个方向依次处理I/O请求,并在到达边界后改变方向的调度算法。
SCAN算法从一个方向开始处理请求,直到到达磁盘的边界。
磁盘调度的算法
磁盘调度的算法
磁盘调度是计算机操作系统中的一个重要功能,用于决定磁盘驱动器上的磁盘访问请求的顺序。
磁盘调度算法的目标是尽可能地减少磁盘的寻道时间和旋转延迟,以提高磁盘的访问效率。
常见的磁盘调度算法包括以下几种:
1. 先来先服务(FCFS):磁盘访问请求按照它们的到达顺序进行处理。
这种算法简单且公平,但是可能导致磁盘的平均寻道时间较长。
2. 最短寻道时间优先(SSTF):选择距离当前磁头位置最近的磁道作为下一个要访问的磁道。
这种算法能够减少磁头的寻道时间,但是可能会导致某些磁道被连续访问,从而降低了磁盘的整体吞吐量。
3. 扫描算法(SCAN):磁头按照一个方向移动,处理磁盘上的请求,直到到达磁盘的边界,然后改变方向继续移动。
这种算法可以减少磁盘的平均寻道时间,并且确保所有的磁道都被访问到,但是可能导致某些磁道的访问延迟较长。
4. 循环扫描算法(C-SCAN):类似于扫描算法,但是在到达磁盘边界后,直接返回到起始位置,而不是改变方向。
这种算法可以进一步降低磁头的寻道时间,并且在某些情况下可以提高磁盘的整体性能。
5. 最佳扫描算法(LOOK):类似于扫描算法,但是在到达磁盘边界后,只改变方向,而不是反向移动。
这种算法可以根据实际的磁盘访问请求动态调整磁头的移动方向,以减少磁头的寻道时间。
需要注意的是,每种磁盘调度算法都有其适用的场景和优缺点,选择
合适的算法取决于具体的应用需求和性能要求。
操作系统-磁盘调度算法
操作系统-磁盘调度算法1 一次磁盘读/写操作需要的时间寻找时间(寻道时间)T s:在读/写数据前,需要将磁头移动到指定磁道所花费的时间。
寻道时间分两步:(1) 启动磁头臂消耗的时间:s。
(2) 移动磁头消耗的时间:假设磁头匀速移动,每跨越一个磁道消耗时间为m,共跨越n条磁道。
则寻道时间T s= s + m * n。
磁头移动到指定的磁道,但是不一定正好在所需要读/写的扇区,所以需要通过磁盘旋转使磁头定位到目标扇区。
延迟时间T R:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。
设磁盘转速为r(单位:转/秒,或转/分),则平均所需延迟时间T R=(1/2)*(1/r) = 1/2r。
1/r就是转一圈所需的时间。
找到目标扇区平均需要转半圈,因此再乘以1/2。
传输时间T R:从磁盘读出或向磁盘中写入数据所经历的时间,假设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N,则传输时间T R= (b/N) * (1/r) = b/(rN)。
每个磁道可存N字节数据,因此b字节数据需要b/N个磁道才能存储。
而读/写一个磁道所需的时间刚好是转一圈的时间1/r。
总的平均时间T a= T s+ 1/2r + b/(rN),由于延迟时间和传输时间都是与磁盘转速有关的,且是线性相关。
而转速又是磁盘的固有属性,因此无法通过操作系统优化延迟时间和传输时间。
所以只能优化寻找时间。
2 磁盘调度算法2.1 先来先服务算法(FCFS)算法思想:根据进程请求访问磁盘的先后顺序进行调度。
假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问55、58、39、18、90、160、150、38、184号磁道。
按照先来先服务算法规则,按照请求到达的顺序,磁头需要一次移动到55、58、39、18、90、160、150、38、184号磁道。
磁头共移动了 45 + 3 + 19 + 21 + 72 + 70 + 10 + 112 + 146 = 498个磁道。
操作系统磁盘调度算法例题讲解
操作系统磁盘调度算法例题讲解磁盘调度算法是操作系统中一个重要的组成部分,其主要任务是根据不同的策略来优化磁盘访问的效率,提高系统的性能。
在现代计算机系统中,磁盘调度算法扮演着至关重要的角色,不仅直接影响到系统的响应速度和吞吐量,同时也对系统的稳定性和可靠性产生着重要影响。
因此,研究和了解磁盘调度算法的原理和实现是非常有必要的。
磁盘调度算法通常可以分为多种类型,每种类型都有自己的特点和适用场景。
在实际应用中,合理选择和使用适合当前系统需求的磁盘调度算法可以有效提升系统的性能和稳定性。
本文将针对几种常见的磁盘调度算法进行详细讲解,包括先进先出(FCFS)、最短寻道时间优先(SSTF)、扫描(SCAN)、循环扫描(C-SCAN)、最短服务时间优先(SSTF)等,并结合实例对其进行深入分析。
先进先出(FCFS)是最简单的磁盘调度算法之一,它按照磁盘请求的顺序进行调度,即先到达的请求先服务。
这种算法的优点是实现简单,适用于小负载情况下。
然而,FCFS算法存在一个明显的缺点,即平均响应时间较长,因为它无法考虑磁头移动的距离而导致延迟较大。
在某些情况下,FCFS算法可能导致磁头频繁在磁道之间移动,降低了系统的效率。
最短寻道时间优先(SSTF)是一种更为优化的磁盘调度算法,它总是选择离当前磁头位置最近的请求进行处理。
SSTF算法可以有效减少磁头的移动距离,从而降低了平均寻道时间和响应时间,提高了系统的性能。
然而,SSTF算法可能导致一些请求长时间等待,造成部分磁道请求的饥饿现象。
因此,在实际应用中,需要权衡考虑不同算法之间的优劣,选择最适合当前系统需求的算法。
扫描(SCAN)算法是一种经典的磁盘调度算法,它模拟磁头在盘面上的扫描运动,按一个方向移动磁头直到碰到磁盘的边界,然后反向继续扫描。
SCAN算法可以有效减少寻道时间,提高磁盘的利用率。
然而,SCAN算法存在一个缺点,即可能导致中间磁道请求长时间等待的问题。
操作系统磁盘调度算法例题讲解
磁盘调度算法的优化策略一、磁盘调度算法概述磁盘调度算法是指决定何时访问磁盘的一种算法。
在操作系统中,磁盘调度算法被用来优化磁盘读写操作的效率,从而提高系统的响应速度和吞吐量。
常见的磁盘调度算法包括先来先服务 (FCFS)、最短时间优先 (SSTF)、单向扫描调度算法和顺序扫描调度算法等。
二、磁盘调度算法的优化策略1. 优先级调度算法优先级调度算法是一种基于优先级的磁盘调度算法。
在该算法中,系统为每个进程设置了一个优先级,优先级高的进程将优先获得磁盘访问权限。
这种算法可以有效地避免进程之间的争用,从而提高系统的响应速度和吞吐量。
2. 负载均衡调度算法负载均衡调度算法是一种基于负载均衡的磁盘调度算法。
在该算法中,系统将根据磁盘访问频率和访问时间等因素,将磁盘访问权限分配给不同的磁盘。
这种算法可以有效地避免磁盘的拥堵和负载不均,从而提高系统的性能和可靠性。
3. 动态优先级调度算法动态优先级调度算法是一种基于进程优先级的动态磁盘调度算法。
在该算法中,系统将根据进程的优先级和当前磁盘负载等因素,动态地调整进程的访问权限。
这种算法可以有效地避免进程之间的争用,从而提高系统的响应速度和吞吐量。
4. 轮询调度算法轮询调度算法是一种基于轮询的磁盘调度算法。
在该算法中,系统将定期对所有磁盘进行访问,以确保所有磁盘都得到充分的利用。
这种算法可以有效地避免磁盘的拥堵和负载不均,从而提高系统的性能和可靠性。
三、总结磁盘调度算法是操作系统中重要的一环,其优化策略可以提高系统的响应速度和吞吐量,从而提高系统的性能和可靠性。
常见的磁盘调度算法包括优先级调度算法、负载均衡调度算法、动态优先级调度算法和轮询调度算法等,其中每种算法都有其优势和劣势,系统管理员需要根据具体情况选择合适的算法。
操作系统课程设计-磁盘调度算法
前言摘要:本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,使磁盘调度的特点更简单明了,这里主要实现磁盘调度的四种算法,分别是:1、先来先服务算法(FCFS) 2、最短寻道时间优先算法(SSTF) 3、扫描算法(SCAN) 4、循环扫描算法(CSCAN)。
启动磁盘执行输入输出操作时,要把移动臂移动到指定的柱面,再等待指定扇区的旋转到磁头位置下,然后让指定的磁头进行读写,完成信息传送;因此,执行一次输入输出所花的时间有:寻找时间——磁头在移动臂带动下移动到指定柱面所花的时间。
延迟时间——指定扇区旋转到磁头下所需的时间。
传送时间——由磁头进程读写完成信息传送的时间,寻道时间——指计算机在发出一个寻址命令,到相应目标数据被找到所需时间;其中传送信息所花的时间,是在硬件设计时固定的,而寻找时间和延迟时间是与信息在磁盘上的位置有关;然后设计出磁盘调度的设计方式,包括算法思路、步骤,以及要用到的主要数据结构、函数模块及其之间的调用关系等,并给出详细的算法设计,对编码进行了测试与分析。
最后进行个人总结与设计体会。
关键词:最短寻道时间优先算法、扫描算法、总寻道长度.目录前言 (2)2. 课程设计任务及要求 (4)2.1 设计任务 (4)2.2 设计要求 (4)3. 算法及数据结构 (5)3.1算法的总体思想(流程) (5)3.2 实现过程中用到的数据结构 (6)3.3 实现过程中用到的系统调用 (11)4. 程序设计与实现 (11)4.1 最短寻道时间优先算法(SSTF)模块 (11)4.1.1程序流程图 (11)4.1.2 程序说明 (13)4.1.3 程序关键代码 (13)4.2扫描算法(SCAN)模块 (14)4.2.1 程序流程图 (14)4.2.2 程序说明 (16)4.2.3 程序关键代码 (16)4.3 实验结果 (17)5. 结论 (26)6. 参考文献 (26)7. 收获、体会和建议 (27)2. 课程设计任务及要求2.1 设计任务1.熟悉并掌握磁盘调度算法管理系统的设计方法,加强对所学各种调度算法及相应算法的特点了解。
计算机操作系统的调度算法
计算机操作系统的调度算法随着计算机技术的飞速发展,操作系统扮演着越来越重要的角色。
操作系统是计算机软件的一部分,负责管理计算机的各种资源,其中之一就是进程的调度算法。
调度算法是操作系统中负责决定进程执行顺序的重要组成部分。
它可以根据某些策略和规则,合理分配计算机的处理器资源,提高系统的性能和效率。
下面将为大家介绍一些常见的计算机操作系统调度算法。
1. 先来先服务(FCFS)调度算法先来先服务是最简单、最直观的调度算法之一。
按照进程到达的顺序依次分配处理器资源,无论进程的优先级和需要执行的时间。
这种算法的优点是简单易实现,但是无法适应不同种类进程的需求,容易导致长作业的执行时间过长而影响其他进程的运行。
2. 短作业优先(SJF)调度算法短作业优先调度算法是根据进程的服务时间来进行排序,并按照时间最短的顺序分配处理器资源。
短作业优先算法可以减少平均等待时间,但会导致长作业饥饿,即长时间等待的作业无法得到执行。
3. 优先级调度算法优先级调度算法根据进程的优先级来分配处理器资源。
每个进程都有一个优先级,优先级高的进程先得到执行。
这种算法可以根据不同作业的需求进行灵活调度,但是可能导致优先级过高的进程占用过多的资源,影响其他进程的执行。
4. 时间片轮转调度算法时间片轮转是一种常见的多任务调度算法。
它将处理器的时间分成若干个时间片,每个进程在一个时间片内得到执行,然后切换到下一个进程。
时间片轮转算法可以保证公平性,每个进程都有机会得到执行,但是对于长时间的作业,可能会导致上下文切换的频繁,降低系统的效率。
5. 多级反馈队列调度算法多级反馈队列调度算法将进程按照优先级划分到不同的队列中,每个队列有不同的时间片大小。
进程按照优先级先执行高优先级队列中的作业,而低优先级的进程则进入下一个队列等待执行。
这种算法结合了优先级调度和时间片轮转调度的特点,可以有效平衡系统的性能和公平性。
6. 最短剩余时间(SRT)调度算法最短剩余时间调度算法是短作业优先调度算法的一种改进。
操作系统课程设计-磁盘调度算法
操作系统课程设计-磁盘调度算法前言摘要:本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,使磁盘调度的特点更简单明了,这里主要实现磁盘调度的四种算法,分别是:1、先来先服务算法(FCFS) 2、最短寻道时间优先算法(SSTF) 3、扫描算法(SCAN) 4、循环扫描算法(CSCAN)。
启动磁盘执行输入输出操作时,要把移动臂移动到指定的柱面,再等待指定扇区的旋转到磁头位置下,然后让指定的磁头进行读写,完成信息传送;因此,执行一次输入输出所花的时间有:寻找时间——磁头在移动臂带动下移动到指定柱面所花的时间。
延迟时间——指定扇区旋转到磁头下所需的时间。
传送时间——由磁头进程读写完成信息传送的时间,寻道时间——指计算机在发出一个寻址命令,到相应目标数据被找到所需时间;其中传送信息所花的时间,是在硬件设计时固定的,而寻找时间和延迟时间是与信息在磁盘上的位置有关;然后设计出磁盘调度的设计方式,包括算法思路、步骤,以及要用到的主要数据结构、函数模块及其之间的调用关系等,并给出详细的算法设计,对编码进行了测试与分析。
最后进行个人总结与设计体会。
关键词:最短寻道时间优先算法、扫描算法、总寻道长度.3.2 实现过程中用到的数据结构1.最短寻道时间优先(SSTF)图a SSTF调度算法示例图ciidao[]={55,58,39,18,90,160,150,38,184}(可随机生成多个)用冒泡法对磁道数组进行排序用户输入当前磁道号now,比较当前返回内侧(外侧)扫描将当前磁道号与剩余没有图b SSTF算法流程示例图原磁道号随机组成的数组:cidao[]={55,58,39,18,90,160,150,38,184};排序后的数组={18,38,39,5,58,90,150,160,184};输入当前磁道号:now=100;3839 39 55 55 55 58 58 58 58 90 90 90 90 90 now值:100 90 58 55 39 184160 160150 150 15018 18 18 1838 38 38 3839 39 39 3955 55 55 5558 58 58 5890 90 90 90now值:18 150 160 184图c SSTF算法队列示意图(按磁道访问顺序)2.扫描(SCAN)算法图d SCAN算法示例图原磁道号随机组成的数组:cidao[]={55,58,39,18,90,160,150,38,184};排序后的数组={18,38,39,5,58,90,150,160,184};输入当前磁道号:now=100;选择磁道移动方向;以磁道号增加的方向移动为例:55 58 58 90 90 90 184 184 184 184 160 160 160 160 160 150 150 150 150 150 150 now值:100 150 160 184 90 58 1838 3839 39 3955 55 5558 58 5890 90 90184 184 184160 160 160150 150 150now值:55 39 38图e SCAN算法队列示意图(按磁道访问顺序)3.3 实现过程中用到的系统调用系统模块调用关系图4. 程序设计与实现4.1 最短寻道时间优先算法(SSTF )模块4.1.1程序流程图磁盘调度算法最短寻道扫描算法退出4.1.2 程序说明算法分析①优点:相较于先来先服务算法(FCFS)有更好的寻道性能,使每次的寻道时间最短。
操作系统课设报告磁盘调度算法
操作系统课设报告磁盘调度算法Document serial number【KK89K-LLS98YT-SS8CB-SSUT-SST108】课程设计报告课程名称: 操作系统课程设计课题名称: 磁盘调度算法学院: 软件学院班级:学生姓名:学号:指导教师:磁盘调度算法一、系统需求分析磁盘存储器不仅容量大,存取速度快,而且可以实现随机存取,是当前存放大量程序和数据的理想设备。
所以在现代计算机中都配备了磁盘存储器,以他为主存放文件,这样对文件的读、写操作都涉及到了对磁盘存储器的访问。
磁盘I/O速度的高低和磁盘系统的可靠性,都直接影响到系统的性能。
因此改善磁盘系统的性能成为现代操作系统的重要任务之一。
磁盘性能有数据的组织、磁盘的类型和访问时间等。
可以通过选择好的磁盘调度算法,以减少磁盘的寻道时间。
为了减少对文件的访问时间,应采用一种最佳的磁盘调度算法,以使各进程对磁盘的平均访问时间最少。
由于在访问磁盘的时间中主要是寻道时间,因此,磁盘调度的目标是使磁盘的寻道时间最少。
所以本课程设计对各个算法进行模拟,进而比较分析了解。
二、实验内容和目的.实验内容模拟电梯调度算法,实现对磁盘的驱动调度。
设计要求:编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度;要求设计主界面可以灵活选择某算法,且以下算法都要实现1、先来先服务算法(FCFS)2、最短寻道时间优先算法(SSTF)3、扫描算法(SCAN)4、循环扫描算法(CSCAN).实验原理模拟电梯调度算法,对磁盘调度。
磁盘是要供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。
当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。
当有多个进程提出输入输出请求处于等待状态,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。
当存取臂仅需移到一个方向最远的所请求的柱面后,如果没有访问请求了,存取臂就改变方向。
三、总体设计及分类简介算法介绍磁盘调度中常用的有四种算法,功能分别如下:1.先来先服务(FCFS)算法。
操作系统磁盘调度算法
操作系统磁盘调度算法磁盘调度算法的作用在计算机系统中,磁盘是一个重要的存储设备,而磁盘调度算法则是管理磁盘读写请求的关键操作之一。
磁盘调度算法可以使磁盘的读写时间最小,提高磁盘的利用率,保证磁盘的可靠性。
常见的磁盘调度算法先来先服务(FCFS)先来先服务是一种简单、易于实现的磁盘调度算法。
它将磁盘请求队列中的请求按照队列顺序进行服务,即磁盘读写请求按照先来先服务的原则被服务。
例如,如果请求队列为1,2,3,4,5,则磁头先会寻找1,完成后再寻找2,以此类推。
当然,这种算法会存在“饥饿”现象,即后面的请求需要等待前面的请求完成后才能获得服务。
最短寻道时间优先(SSTF)SSTF是一种比FCFS更优秀的算法,它选择离当前磁头位置最近的请求为下一个服务对象。
这种算法的好处在于,可以减少磁头的寻道时间。
例如,如果当前磁头在请求队列的3个请求2, 5和8的中间位置,则SSTF会选择请求2,这样会比选择5或8更快地完成磁盘读写。
扫描算法(SCAN)扫描算法,也称电梯算法,是一种沿着磁道的方向移动磁头的算法。
在扫描算法中,磁头在一个方向上移动,直到到达最边缘,然后开始沿着相反的方向移动,直到服务完整个队列。
例如,如果磁头的移动方向是向“外”(即向磁道号增大的方向),磁头将服务最小的请求,然后继续向下寻找。
当磁头到达队列的最大值后,再继续向“内”折回。
这种算法将会循环操作队列,直到完成服务。
循环扫描算法(C-SCAN)循环扫描算法是一种改进版的SCAN算法,它将SCAN算法改进成了一个环形的磁盘,在这个环形的磁盘上磁头运动方向是单向的。
与SCAN算法不同的是,当读写头到达一端时,它不会立即返回而是重新回到另一端继续扫描。
例如,一旦磁头到达队列的最大值,它会马上返回队列的最小值,这样可以更好地利用闲置时间服务队列。
磁盘调度算法的选择在实际应用中,选择适当的磁盘调度算法对于磁盘性能有着至关重要的影响。
FCFS算法简单但性能一般,SSTF算法寻找最近请求可提高系统性能,SCAN和C-SCAN算法可以处理高负载的读写请求。
操作系统中的文件分配与磁盘调度算法
操作系统中的文件分配与磁盘调度算法在操作系统中,文件分配和磁盘调度算法是两个重要的概念,它们对于磁盘的利用和性能优化起着至关重要的作用。
本文将从文件分配与磁盘调度算法的基础概念、常见算法以及优化策略等方面进行探讨和分析。
一、文件分配算法文件分配算法是指操作系统中用于管理存储设备,特别是磁盘存储设备中文件分配的方法和策略。
常见的文件分配算法有顺序分配、链式分配、索引分配和混合分配等。
1.顺序分配算法:顺序分配算法是将磁盘分成固定大小的块,每个块可以分配给一个文件,文件存储时按照顺序将块分配给文件。
这种算法简单高效,但容易出现外部碎片。
2.链式分配算法:链式分配算法是将文件的地址信息记录在文件目录中,每个文件的数据块可以散布在整个磁盘中,通过链表将其连接起来。
这种算法不会产生外部碎片,但是需要有指针字段。
3.索引分配算法:索引分配算法是在磁盘上建立一个索引表,用来记录每个文件所占用的磁盘块号。
这种算法具有较好的查找性能,但是索引表本身需要占用磁盘空间。
4.混合分配算法:混合分配算法是将前面提到的多种分配算法结合起来使用,根据文件的大小、访问模式等因素来选择合适的分配方式。
二、磁盘调度算法磁盘调度算法是指操作系统中用于调度磁盘访问请求的算法,其目的是提高磁盘的性能,减少磁盘访问的平均寻道时间。
常见的磁盘调度算法有先来先服务(FCFS)、最短寻道时间优先(SSTF)、电梯算法(SCAN)等。
1.先来先服务算法(FCFS):FCFS算法是按照磁盘请求的到达顺序进行调度,即先到达的请求先被处理。
这种算法简单直观,但可能会导致某些请求长时间等待。
2.最短寻道时间优先算法(SSTF):SSTF算法是选择最短寻道时间的请求进行调度。
这种算法能够最大程度地减少寻道时间,但可能会导致某些请求长时间等待。
3.电梯算法(SCAN):SCAN算法是模拟电梯的运行方式,磁头按照一个方向移动,直到达到磁盘的一端,然后改变方向继续移动。
操作系统实验三 磁盘调度算法的实现
天津理工大学计算机与通信工程学院实验报告2013 至2014 学年第一学期课程名称操作系统学号学生姓名年级专业教学班号实验地点实验时间2013年月日第节至月日第节主讲教师辅导教师实验(三)实验名称磁盘调度算法的实现软件环境VC++6.0硬件环境PC机实验目的《操作系统》是计算机科学与技术专业和信息与计算科学专业本科教学计划中的一门重要的专业基础课程,是对计算机系统硬﹑软件资源进行管理的系统软件,是计算机系统的管理和指挥中心。
通过本课程实验,使学生综合运用程序设计基础与语言、数据结构、计算机原理与接口等先行课程的知识以及操作系统课程的知识在各种资源管理调度策略下,设计操作系统资源管理的模拟程序,使学生加深了解操作系统的工作机理,对操作系统的功能及结构设计有更加深入的实践,为开发系统软件和应用软件打下基础。
实验内容(应包括实验题目、实验要求、实验任务等)实验内容:1、本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不同来设计磁盘的调度算法。
2、实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和NStepSCAN算法。
3、设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。
4、选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。
5、按算法的寻道效率进行排序,并对各算法的性能进行分析比较。
实验要求:学生应正确地设计有关的数据结构与各个功能模块,画出程序的流程图,编写程序,程序执行结果应正确实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)在VC++6.0编写如下代码#include<iostream>#include<ctime>using namespace std;void FCFS(int a[],int n);void SSTF(int a[],int n);void SCAN(int a[],int n);void CSCAN(int a[],int n);int main(){int n;//磁道的个数int s;//功能号cout<<"请输入磁道的个数:"<<endl;cin>>n;int *a=new int[n];cout<<"生成随机磁道号..."<<endl;srand((unsigned)time(NULL));for(int i=0;i<n;i++){a[i]=(rand()%100)+1;cout<<a[i]<<" "; }cout<<endl;while(1) {cout<<endl;cout<<"1、先来先服务算法(FCFS)"<<endl;cout<<"2、最短寻道时间算法(SSTF)"<<endl; cout<<"3、扫描算法(SCAN)"<<endl;cout<<"4、循环扫描算法(CSCAN)"<<endl;cout<<"0、退出"<<endl;cout<<endl;cout<<"请选择功能号:";cin>>s;if(s>4){cout<<"输入有误!"<<endl;}else{switch(s){ case 0: exit(0);break ; case 1:FCFS(a,n); break;case 2:SSTF(a, n);break;case 3:SCAN(a, n);break;case 4:CSCAN(a,n);break; } }} return 0; }//先来先服务调度算法(FCFS)void FCFS(int a[],int n){int sum=0,j,i,first=0,now;cout<<"请输入当前磁道号:";cin>>now;//确定当前磁头所在位置cout<<"磁盘调度顺序为:"<<endl;for( i=0;i<n;i++)//按访问顺序输出磁道号{cout<<a[i]<<" ";}//计算sumfor(i=0,j=1;j<n;i++,j++){first+=abs(a[j]-a[i]);//外围磁道与最里面磁道的距离}sum+=first+abs(now-a[0]);cout<<endl;cout<<"移动的总磁道数: "<<sum<<endl;}//最短寻道时间算法(SSTF)void SSTF(int a[],int n){int temp;int k=1;int now,l,r;int i,j,sum=0;//将磁道号按递增排序for(i=0;i<n;i++)for(j=i+1;j<n;j++){if(a[i]>a[j]){temp=a[i];a[i]=a[j];a[j]=temp; }}cout<<"按递增顺序排好的磁道:"<<endl;for( i=0;i<n;i++){cout<<a[i]<<" ";//输出排好的磁道顺序}cout<<endl;cout<<"请输入当前的磁道号:";cin>>now;//确定当前磁头所在位置cout<<"磁盘调度顺序为:"<<endl;if(a[n-1]<=now)//当前磁头位置大于最外围欲访问磁道{for(i=n-1;i>=0;i--)cout<<a[i]<<" ";sum=now-a[0];}elseif(a[0]>=now)//当前磁头位置小于最里欲访问磁道{for(i=0;i<n;i++)cout<<a[i]<<" ";sum=a[n-1]-now;}else{while(a[k]<now)//确定当前磁道在已排的序列中的位置{k++;}l=k-1;//在磁头位置的前一个欲访问磁道r=k;//磁头欲访问磁道while((l>=0)&&(r<n)){if((now-a[l])<=(a[r]-now))//选择离磁头近的磁道 {cout<<a[l]<<" ";sum+=now-a[l];now=a[l];l=l-1; }else{cout<<a[r]<<" ";sum+=a[r]-now;now=a[r];r=r+1;} }if(l=-1)//磁头位置里侧的磁道已访问完{for(j=r;j<n;j++)//访问磁头位置外侧的磁道{cout<<a[j]<<" ";}sum+=a[n-1]-a[0];}if(r==n)//磁头位置外侧的磁道已访问完{for(j=k-1;j>-1;j--) //访问磁头位置里侧的磁道{cout<<a[j]<<" ";}sum+=a[n-1]-a[0];} }cout<<endl;cout<<"移动的总道数:"<<sum<<endl;}//扫描算法(SCAN)void SCAN(int a[],int n){int temp;int k=1;int now,l,r;int i,j,sum=0;for(i=0;i<n;i++)//对访问磁道按由小到大顺序排列输出for(j=i+1;j<n;j++){if(a[i]>a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}cout<<"按递增顺序排好的磁道:"<<endl;for( i=0;i<n;i++){cout<<a[i]<<" ";}cout<<endl;cout<<"请输入当前的磁道号:";cin>>now;//以下算法确定磁道访问顺序if(a[n-1]<=now) //磁头位置大于最外围欲访问磁道{for(i=n-1;i>=0;i--)cout<<a[i]<<" ";sum=now-a[0];}elseif(a[0]>=now) //磁头位置小于最里欲访问磁道{for(i=0;i<n;i++)cout<<a[i]<<" ";sum=a[n-1]-now;}else //磁头位置在最里侧磁道与最外侧磁道之间{ int d;while(a[k]<now){ //确定当前磁道在已排的序列中的位置k++;}l=k-1;//在磁头位置的前一个欲访问磁道r=k; //磁头欲访问磁道cout<<"请输入当前磁头移动的方向 (0 表示向内,1表示向外) : "; cin>>d; //确定磁头访问的方向cout<<"磁盘调度顺序为:";if(d==0||d==1){if(d==0) //磁头向内{for(j=l;j>=0;j--){cout<<a[j]<<" ";}for(j=r;j<n;j++){cout<<a[j]<<" ";}sum=now-2*a[0]+a[n-1];}if(d==1) //磁头向外{for(j=r;j<n;j++){cout<<a[j]<<" ";}for(j=l;j>=0;j--){cout<<a[j]<<" ";}sum=2*a[n-1]-now-a[0];}}elsecout<<"请输入0或1!"<<endl;}cout<<endl;cout<<"移动的总道数: "<<sum<<endl;}//循环扫描算法(CSCAN)void CSCAN(int a[],int n){int temp;int now,l,r;int i,j,sum=0;int k=1;for(i=0;i<n;i++)//对访问磁道按由小到大顺序排列输出for(j=i+1;j<n;j++){if(a[i]>a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}cout<<"按递增顺序排好的磁道:"<<endl;for( i=0;i<n;i++){cout<<a[i]<<" ";}cout<<endl;cout<<"请输入当前的磁道号:";cin>>now;//确定当前磁道号if(a[n-1]<=now)//磁头位置大于最外围欲访问磁道{for(i=0;i<n;i++)cout<<a[i]<<" ";sum=now-2*a[0]+a[n-1];}elseif(a[0]>=now)//磁头位置小于最里欲访问磁道{for(i=0;i<n;i++)cout<<a[i]<<" ";sum=a[n-1]-now;}else //磁头位置在最里侧磁道与最外侧磁道之间{ int d;while(a[k]<now){k++;}l=k-1;//在磁头位置的前一个欲访问磁道r=k; //磁头欲访问磁道cout<<"请输入当前磁头移动的方向 (0 表示向内,1表示向外) : "; cin>>d; //确定磁头访问的方向cout<<"磁盘调度顺序为:";if(d==0||d==1){if(d==1) //磁头向外侧访问{for(j=r;j<n;j++)//先访问外侧磁道再转向最里欲访问磁道{cout<<a[j]<<" ";}for(j=0;j<r;j++){cout<<a[j]<<" ";}sum=2*a[n-1]-now-2*a[0]+a[l];}if(d==0) //磁头向内侧访问 {for(j=r-1;j>=0;j--){cout<<a[j]<<" ";}for(j=n-1;j>=r;j--)//{cout<<a[j]<<" ";}sum=2*a[n-1]-2*a[0]+now-a[r];}}elsecout<<"请输入0或1!";}cout<<endl;cout<<"移动的总道数: "<<sum<<endl;}实验结果:1.先来先服务算法(FCFS)测试结果2.最短寻道时间算法(SSTF)测试结果3.循环扫描算法(SCAN)测试结果4.循环扫描算法(CSCAN)测试结果由以上测试结果可知,在相同的实验前提下,SSTF移动的总道数最少,性能最优。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机操作系统
实
验
报
告
院系:兴湘学院
班级:14级计算机科学与技术班学号:2014961712
姓名:胡小庆
指导老师:匡林爱
实验名称:磁盘调度模拟实验日期:2015年12月4号
目录
实验目的: (3)
实验过程: (3)
磁盘调度算法的概念(课本的定义): (3)
1.先来先服务调度算法 (3)
2.扫描调度算法 (3)
3. 循环扫描调度算法 (4)
实验模拟方式 (4)
实验总结: (4)
实验中遇到的问题 (4)
可执行程序(附件) (5)
源代码 (5)
1. 代码截图: (5)
2. 程序截图: (8)
实验题目:磁盘调度实验
实验目的:
编程模拟实现几种常见的磁盘调度算法,通过对几组进程分别使用不同的调度算法,计算进程的磁头移动的磁道数的平均寻道数,比较各种算法的性能优劣。
加深对磁盘调度算法的理解。
实验过程:
磁盘调度算法的概念(课本的定义):
1.先来先服务调度算法
先来先服务调度算法是一种简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
算法的优点是公平、简单,而且每个进程的请求都能依次得到处理,不会出现某一进程请求得不到满足的情况。
2.扫描调度算法
扫描调度算法不近考虑了欲访问的磁道间的距离,更优先考虑的是磁头的移动方向,避免了饥饿。
在这种算法中,磁头移动规律颇似电梯的运行,因而扫描调度算法又称电梯调度算法。
3. 循环扫描调度算法
循环扫描调度算法规定磁头单向移动,减少了进程的请求的延迟时间,解决了扫面调度算法的一些弊端。
4.(还有几种常用的调度算法)
实验模拟方式
/*****************************************************************************/ 为实验所编写的代码并没有真正的实现进程的调度,因为自己对计算机底层的了解还不够,所以只是简单的根据用户的输入模拟调度“进程”.方法:把用户输入的数字当做磁道名。
实验用了“先来先服务调度算法”、“循环扫描算法”、“扫描调度算法”三个调度算法,编写的代码只是实现相应的调度算法的计算规则,可根据课本的149页的数据进行测试。
/*****************************************************************************/ 实验总结:
实验中遇到的问题
1.在模拟后面两个算法的时候,磁头的转向没有控制好,使得结果出现了很多问题,后来经过一步步的调试,找到了问题,更改了数组下标,使输出结果达到了预期结果(可根据课本149页的数据测试)。
2.实验仅仅是模拟了调度算法的书面计算方法,只能说是实现了计算方法。
可执行程序(附件)
磁盘调度算法模拟.exe
源代码
1.代码截图:
2.程序截图:
(注:因为doc文档没有语法高亮,所以直接截图了。
可执行文件在文档的“可执行文件”目录下.)。