操作系统实验_实验5_第1页
操作系统实验_实验5_第2页
操作系统实验_实验5_第3页
操作系统实验_实验5_第4页
操作系统实验_实验5_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 2015年 12月 15日实验课程名称操作系统实验成绩实验项目名称磁盘管理实验指导老师(*报告只能为文字和图片,老师评语将添加到此处,学生请勿作答*)一、实验目的本实验的目的是通过设计一个磁盘调度模拟系统,以加深对FCFS、最短寻道时间以及电梯等磁盘调度算法的理解。让我们更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强动手能力。二、实验内容1、模拟一个磁盘调度算法; Visual C+ 6.0平台 2、输入为一组作业的磁道请求; 作业的寻到请求可以用一个数组模拟 3、要求能够模拟FCFS、最短寻道时间

2、、电梯算法三个磁盘调度算法; FCFS (First Come First Served )先来先服务,在计算机并行任务处理中,被视为最简单的任务排序策略,即是无论任务大小和所需完成时间,对先到的任务先处理,后到的任务后处理。按照此算法,数组顺序输出即可。 最短寻道时间优先(ShortestSeekTimeFirst,SSTF)要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,确定当前磁道,选择距离当前最近的。 电梯算法,磁臂仅移动到请求的最外道就回转。反方向查找服务。确定当前磁道以及运动方向,排序后的数组当前磁道以后的磁道顺序序输出,在将剩余反向输出。 4、输出为按选择的算

3、法执行时的磁头移动轨迹和移动的总道数。三、实验设备安装了Linux系统的电脑四、实验概要设计系统流程图:五、实验详细设计(1)先来先服务算法(FCFS) 先来先服务(FCFS)调度:按先来后到次序服务,未作优化。 最简单的移臂调度算法是“先来先服务”调度算法,这个算法不必考虑当前移臂所在的位置,而只是考虑访问者提出访问请求的先后次序。先来先服务算法流程图:(2)最短寻道时间优先算法(SSTF) 最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短(距离当前移臂最近)的那个请求先执行的,而不管访问者到来的先后次序。现在仍利用同一个例子来讨论,现在当100号柱面的操作结束后,应该先处理99号

4、柱面的请求,然后到达108号柱面执行操作,随后处理129号柱面请求,后继操作的次序应该是142,156,53,31最短寻道时间优先算法流程图:(3)电梯算法(SCAN) SCAN 算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。 “电梯调度”算法在实现时,不仅要记住读写磁头的当前位置,还必须记住移动臂的当前前进方向。电梯算法流程图:六、实验程序#include<iostream>#include<fstream>#inclu

5、de<iomanip>#include<stdio.h>using namespace std;const int MaxNumber=100;int TrackOrderMaxNumber;int MoveDistanceMaxNumber;double AverageDistance;bool direction;int M;int N;void inputData()cout<<"请输入磁道个数N: "cin>>N;cout<<"n请输入磁盘访问顺序(此部分由文件读入)。"<<

6、endl;fstream fin("F:/磁盘调度文件.txt");for(int i=0;i<N;i+)fin>>TrackOrderi;cout<<"n请输入开始磁盘号M: "cin>>M;void showData()cout<<"n=显示配置信息=n"cout<<"n输入磁道个数N为:"<<N<<",开始磁盘号M:"<<M<<endl;cout<<"n磁

7、盘访问序列为: "for(int i=0;i<N;i+)cout<<TrackOrderi<<" "cout<<endl;void FCFS()int i,j;int sum=0;float avg;int FcfsMaxNumber;int sumArrayMaxNumber;for(i=0;i<N;i+)Fcfsi=TrackOrderi;sumArray0=abs(M-Fcfs0);cout<<"n从"<<M<<"号磁道开始"<&

8、lt;endl;cout<<"被访问的下一个磁道号: "for(i=0;i<N;i+)cout<<Fcfsi<<" "cout<<endl;cout<<"对应移动距离(磁道数): "<<sumArray0<<" "for(i=0,j=1;j<N;i+,j+)sumArrayj=abs(Fcfsj-Fcfsi);cout<<sumArrayj<<" "for(i=0;i<N

9、;i+)sum=sum+sumArrayi;avg=(float)sum/N;cout<<"n总寻道长度:"<<sum;cout<<"n平均寻道长度:"<<setprecision(3)<<avg<<endl<<endl;void SSTF()int i,j;int k=1;int s=0;int temp;int l,r;int sum=0;float avg=0;int SstfMaxNumber;int sumArrayMaxNumber;int Mnow;Mnow

10、=M;for(i=0;i<N;i+)Sstfi=TrackOrderi;for(i=0;i<N;i+)for(j=i+1;j<N;j+)if(Sstfi>Sstfj)temp=Sstfi;Sstfi=Sstfj;Sstfj=temp;cout<<"n从"<<Mnow<<"号磁道开始"<<endl;cout<<"被访问的下一个磁道号: "if(SstfN-1<=Mnow)for(i=N-1,s=0;i>=0;i-,s+)cout<<

11、;Sstfi<<" "sumArrays=Mnow-Sstfi;sum+=Mnow-Sstfi;Mnow=Sstfi;elseif(Sstf0>=Mnow)for(i=0,s=0;i<N;i+,s+)cout<<Sstfi<<" "sumArrays=Sstfi-Mnow;sum+=Sstfi-Mnow;Mnow=Sstfi;elsewhile(Sstfk<Mnow)k+;l=k-1;r=k;if(Mnow-Sstfl<=(Sstfr-Mnow)while(l>=0)cout<<

12、;Sstfl<<" "sumArrays=Mnow-Sstfl;s=s+1;sum=sum+Mnow-Sstfl;Mnow=Sstfl;l=l-1;Mnow=Sstf0;for(j=r;j<N;j+)cout<<Sstfj<<" "sumArrays=Sstfj-Mnow;s=s+1;sum+=Sstfj-Mnow;Mnow=Sstfj;elsewhile(r<N)cout<<Sstfr<<" "sumArrays=Sstfr-Mnow;s=s+1;sum+=Ss

13、tfr-Mnow;Mnow=Sstfr;r=r+1;Mnow=SstfN-1;for(j=1;j>=0;j-)cout<<Sstfj<<" "sumArrays=Mnow-Sstfj;s=s+1;sum+=Mnow-Sstfj;Mnow=Sstfj;cout<<endl;cout<<"对应移动距离(磁道数): "for(i=0;i<N;i+)cout<<sumArrayi<<" "avg=(float)sum/N;cout<<"n

14、总寻道长度:"<<sum;cout<<"n平均寻道长度:"<<setprecision(3)<<avg<<endl<<endl;void SCAN()int i,j;int k=1;int s=0;int temp;int c,l,r;int sum=0;float avg=0;int ScanMaxNumber;int sumArrayMaxNumber;int Mnow;Mnow=M;for(i=0;i<N;i+)Scani=TrackOrderi;for(i=0;i<N;i+

15、)for(j=i+1;j<N;j+)if(Scani>Scanj)temp=Scani;Scani=Scanj;Scanj=temp;cout<<"请选择磁头移动方向1-增加方向、0-减小方向: "cin>>c;cout<<"n从"<<M<<"号磁道开始"<<endl;cout<<"被访问的下一个磁道号: "if(ScanN-1<=Mnow)for(i=N-1,s=0;i>=0;i-,s+)cout<&

16、lt;Scani<<" "sumArrays=Mnow-Scani;sum+=Mnow-Scani;Mnow=Scani;elseif(Scan0>=Mnow)for(i=0,s=0;i<N;i+,s+)cout<<Scani<<" "sumArrays=Scani-Mnow;sum+=Scani-Mnow;Mnow=Scani;elsewhile(Scank<Mnow)k+;l=k-1;r=k;switch(c)case 0:while(l>=0)cout<<Scanl<&l

17、t;" "sumArrays=Mnow-Scanl;s=s+1;sum=sum+Mnow-Scanl;Mnow=Scanl;l=l-1;Mnow=Scan0;for(j=r;j<N;j+)cout<<Scanj<<" "sumArrays=Scanj-Mnow;s=s+1;sum+=Scanj-Mnow;Mnow=Scanj;break;case 1:while(r<N)cout<<Scanr<<" "sumArrays=Scanr-Mnow;s=s+1;sum+=Scanr

18、-Mnow;Mnow=Scanr;r=r+1;Mnow=ScanN-1;for(j=l;j>=0;j-)cout<<Scanj<<" "sumArrays=Mnow-Scanj;s=s+1;sum+=Mnow-Scanj;Mnow=Scanj;break;default:cout<<"输入有误,请重新输入. "cout<<endl;cout<<"对应移动距离(磁道数): "for(i=0;i<N;i+)cout<<sumArrayi<<&q

19、uot; "avg=(float)sum/N;cout<<"n总寻道长度:"<<sum;cout<<"n平均寻道长度:"<<setprecision(3)<<avg<<endl<<endl;int main()char choice;cout<<"n=虚拟内存页面配置算法=nn"inputData();showData();cout<<endl;while(1)cout<<"=1-FCFS 磁盘调

20、度算法=n"cout<<"=2-SSTF 磁盘调度算法=n"cout<<"=3-SCAN 磁盘调度算法=n"cout<<"=其他任意键退出=nn"cout<<"请输入功能键:"cin>>choice;switch(choice)case '1':cout<<"nFCFS磁盘调度算法=>"FCFS();break;case '2':cout<<"nSSTF磁盘调度算法=>"SSTF();break;case '3':cout<<"nSCAN磁盘调度算法=>"SCAN();break;def

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论