腾讯题目——求磁头平均寻道长度

2018秋招面经 专栏收录该内容
12 篇文章 0 订阅

####题目:
若磁头的当前位置在第100磁道,现在有一磁盘读写请求序列如下:23,376,205,132,19,61,190,398,29,4,18,40。若采用最短寻道时间优先算法,则平均寻道长度是多少?

133

58.3

57.7

70.9


解析:
移臂调度算法在于有效利用磁盘,保证磁盘的快速访问。移臂调度主要有以下几种算法:

**先来先服务算法(FCFS):**该算法只考虑访问请求的先后顺序。如上题当前位置为100,则顺序为(100),23,376,205,132,19,61,190,398,29,4,18,40,因此磁头移动磁道总数为(100-23)+(376-23)+(376-205)+ (205-132)+(132-19)+(61-19)+(190-61)+(398-190)+(398-29)+(29-4)+(18-4)+(40-18) = 1596,平均移动磁道数为1596/12 =133.0;

**最短寻道时间优先算法(SSTF):**从等待的访问者中挑选寻找时间最短的那个请求执行。如上题当前位置为100,则顺序为(100),132,190,205,61,40,29,23,19,18,4,376,398,因此磁头移动磁道总数为(132-100)+(190-132)+(205-190)+(205-61)+(61-40)+(40-29)+(29-23)+(23-19)+(19-18)+(18-4)+(376-4)+(398-376)=700,平均移动磁道数为700/12 =58.3;

**电梯调度(SCAN):**按当前位置找出最近的那个数,当前位置指向最近数决定方向,依次排列数字,排到尽头,再按当位置和最近数的相反方面依次排列数字。如上题当前位置为100,则顺序为(100),132,190,205,376,398,61,40,29,23,19,18,4,因此磁头移动磁道总数为(132-100)+(190-132)+(205-190)+(376-205)+(398-376)+(398-61)+(61-40)+(40-29)+(29-23)+(23-19)+(19-18)+(18-4)=692,平均移动磁道数为692/12 =57.7;

**单向扫描调度算法(CSCAN):**由当前位置到从小到大排列数字,再将剩下的数由小到大排。如上题当前位置为100,则顺序为(100),132,190,205,376,398,4,18,19,23,29,40,61,因此磁头移动磁道总数为(132-100)+(190-132)+(205-190)+(376-205)+(398-376)+(398-4)+(18-4)+(19-18)+(23-19)+(29-23)+(40-29)+(61-40)=749,平均移动磁道数为749/12 =62.4;


#####因此答案选择58.3。

展开阅读全文
  • 15
    点赞
  • 0
    评论
  • 30
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
目录 目录 1 1.课程设计目的 2 1.1编写目的 2 2.课程设计内容 2 2.1设计内容 2 3.课程设计方案 3 3.1模块划分 3 3.2模块调用关系图 6 3.3子模块程序流程图 6 4.测试数据和结果 10 4.1测试数据 10 4.2测试结果 11 4.3测试抓图 11 5.参考文献 14 6.总结 15 6.1设计体会 15 6.2结束语 15 7.程序使用说明书 15 8.程序源代码 15 1.课程设计目的 1.1编写目的 本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务法、最短时间优先法、扫描法以及循环扫描法等磁盘调度法的理解。 2.课程设计内容 2.1设计内容 系统主界面可以灵活选择某种法,法包括:先来先服务法(FCFS)、最短时间优先法(SSTF)、扫描法(SCAN)、循环扫描法(CSCAN)。 1、先来先服务法(FCFS) 这是一种比较简单的磁盘调度法。它根据进程请访问磁盘的先后次序进行调度。此法的优点是公平、简单,且每个进程的请都能依次得到处理,不会出现某一进程的请长期得不到满足的情况。此法由于未对进行优化,在对磁盘的访问请比较多的情况下,此法将降低设备服务的吞吐量,致使平均时间可能较长,但各进程得到服务的响应时间的变化幅度较小。 2、最短时间优先法(SSTF) 该法选择这样的进程,其要访问的磁与当前磁头所在的磁距离最近,以使每次的时间最短,该法可以得到比较好的吞吐量,但却不能保证平均时间最短。其缺点是对用户的服务请的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请很多的情况下,对内外边缘磁的请将会无限期的被延迟,有些请的响应时间将不可预期。 3、扫描法(SCAN) 扫描法不仅考虑到欲访问的磁与当前磁的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描法所选择的下一个访问对象应是其欲访问的磁既在当前磁之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁,在当前磁之内,从而避免了饥饿现象的出现。由于这种法中磁头移动的规律颇似电梯的运行,故又称为电梯调度法。此法基本上克服了最短时间优先法的服务集中于中间磁和响应时间变化比较大的缺点,而具有最短时间优先法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁被访问的频率仍低于中间磁。 4、循环扫描法(CSCAN) 循环扫描法是对扫描法的改进。如果对磁的访问请是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请相对较少。这是由于这些磁刚被处理,而磁盘另一端的请密度相当高,且这些访问请等待的时间较长,为了解决这种情况,循环扫描法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁时,磁头立即返回到最里的欲访磁,即将最小磁号紧接着最大磁号构成循环,进行扫描。 3.课程设计方案 3.1模块划分 本系统划分为四个模块:先来先服务法模块void FCFS(int array[],int m)、最短时间优先法模块void SSTF(int array[],int m)、扫描法模块void SCAN(int array[],int m) 和循环扫描法模块:void CSCAN(int array[],int m) 1 先来先服务法模块:void FCFS(int array[],int m) 输入磁号,按先来先服务的策略输出磁盘请序列,平均长度,输出移动平 均磁数。 主要代码:for(i=0,j=1;j<m;i++,j++) { sum+=abs(array[j]-array[i]); ave=(float)(sum)/(float)(m); } 2 最短时间优先法模块:void SSTF(int array[],int m) 将磁号用冒泡法从小到大排序,输出排好序的磁序列,输入当前磁号,根据前 磁在已排的序列中的位置,选择扫描的顺序,平均长度,输出移动的平均数。 主要代码: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]; } else if(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; } 3 扫描法模块:void SCAN(int array[],int m) 将磁号用冒泡法从小到大排序,输出排好序的序列,输入当前磁号,选择移动臂的移动方向,根据当前磁在已排的序列中的位置,选择扫描的顺序,平均长度,输出移动的平均数。 主要代码:if(d==0) /*选择移动臂方向向内,则先向内扫描*/ { for(j=l;j>=0;j--) { 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 循环扫描法模块:void CSCAN(int array[],int m) 将磁号用冒泡法从小到大排序,输出排好序的序列,输入当前磁号,规定移动臂单向反复的从内向外移动,根据当前磁在已排的序列中的位置,选择扫描的顺序,平均长度,输出移动的平均数。 主要代码:if(array[m-1]<=now) /*若当前磁号大于请序列中最大者,则直接将移动臂移动到最小号磁依次向外给予各请服务 */ { for(i=0;i<m;i++) cout<<array[i]<<" "; sum=now-2*array[0]+array[m-1]; } else if(array[0]>=now) /*若当前磁号小于请序列中最小者,则直接由内向外依次给予各请服务,此情况同最短优先*/ { for(i=0;i<m;i++) cout<<array[i]<<" "; sum=array[m-1]-now; } for(j=0;j<r;j++) /*当扫描完最大号磁磁头直接移动到最小号磁,再向外扫描未扫描的磁*/ { cout<<array[j]<<" "; } sum=2*array[m-1]-now; } ave=(float)(sum)/(float)(m); 3.2模块调用关系图 3.3子模块程序流程图 FCFS法流程图: SSTF法流程图: SCAN法流程图: CSCAN法流程图: 4.测试数据和结果 4.1测试数据 1 先来先服务法 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:100 2 最短时间优先法 (1)当前磁号大于磁序列中的最大的磁号时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:200 (2)当前磁号小于磁序列中的最小的磁号时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:0 (3)当前磁号大于磁序列中的最小的磁号且小于最大磁号时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:100 3 扫描法 (1)当前磁号大于磁序列中的最大的磁号时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:200 (2)当前磁号小于磁序列中的最小的磁号时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:0 (3)当前磁号大于磁序列中的最小的磁号且小于最大磁号(磁头向外)时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:100 (4)当前磁号大于磁序列中的最小的磁号且小于最大磁号(磁头向内)时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:100 4 循环扫描法 (1)当前磁号大于磁序列中的最大的磁号时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:200 (2)当前磁号小于磁序列中的最小的磁号时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:0 (3)当前磁号大于磁序列中的最小的磁号且小于最大磁号时 输入磁序列:55 58 39 18 90 160 150 38 184 当前磁号:100 4.2测试结果 1 先来先服务平均长度:55.3 2 最短时间优先法 (1)当前磁号大于磁序列中的最大的磁号时 平均长度:20.2 (2)当前磁号小于磁序列中的最小的磁号时 平均长度:27.5 (3)当前磁号大于磁序列中的最小的磁号且小于最大磁号时 平均长度:20.4 3 扫描法 (1)当前磁号大于磁序列中的最大的磁号时 平均长度:20.2 (2)当前磁号小于磁序列中的最小的磁号时 平均长度:27.8 (3)当前磁号大于磁序列中的最小的磁号且小于最大磁号(磁头向外)时 平均长度:27.5 (4)当前磁号大于磁序列中的最小的磁号且小于最大磁号(磁头向内)时 平均长度:20.4 4 循环扫描法 (1)当前磁号大于磁序列中的最大的磁号时 平均长度:38.6 (2)当前磁号小于磁序列中的最小的磁号时 平均长度:35.8 (3)当前磁号大于磁序列中的最小的磁号且小于最大磁号时 平均长度:20.4 4.3测试抓图 1 输入磁序列(0结束):55 58 39 18 90 160 150 38 184,输出序列: 2 选择先来先服务法,得出结果: 3 选择最短时间优先法,输入当前磁号100,得出结果: 4 选择扫描法,输入当前磁号100,选择向外移动,得出结果: 5 选择扫描法,输入当前磁号100,选择向内移动,得出结果: 6 选择循环扫描法,输入当前磁号100,得出结果: 7 选择退出: 5.参考文献 《计机操作系统(修订版)》 汤子瀛 西安电子科技大学出版社 《操作系统教程》 方敏编 西安电子科技大学出版社 《操作系统实用教程(第二版)》 任爱华 清华大学出版社 《操作系统原理与实践教程》 周湘贞、曾宪权 清华出版社 《程序设计基础教程》 陈家骏 机械工业出版社 6.总结 6.1设计体会 本系统具有很强的健壮性,当输入错误数据类型时,系统提示用户输入的数据类型错误,让用户重新输入,保证系统的稳定性,不会因为用户的误操作而致使系统瘫痪;虽然是在dos状态下,但是本系统界面还是设计的比较漂亮的,具有比较好的交互性;对于软件中的重用代码,设计成一个函数,实现代码重用。本系统是在dos状态下进行编译执行的,没有图形化界面,可以设计出一个图形化界面,使用户操作更加简单,明了。 6.2结束语 通过此次课程设计,我对操作系统的基础知识了解得更透彻了,同时对磁盘调度的四种法——先来先服务法(FCFS)、最短时间优先法(SSTF)、扫描法(SCAN)、循环扫描法(CSCAN)有了更深刻的理解和掌握,使我能够为磁盘调度选择适当的法,提高CPU工作效率。设计过程中遇到的困难在老师和同学的帮助下顺利解决并通过了验收,我深刻认识到法的逻辑性对程序的重要影响,法的准确度对程序运行结果的重要影响,这对我以后在操作系统的学习中有极大帮助。 7.程序使用说明书 用户使用时请注意: 1、进入系统,用户根据提示依次输入磁号,要结束时输入“0”,回车,输入磁盘号结束; 2、系统输出你输入的磁序列,用户核对输入数据 3、系统显示系统法菜单; 4、用户选择相应法,回车; 5、系统要输入当前磁号,用户输入磁号,回车; 6、系统输出磁头的扫描序列和平均长度; 7、用户继续选择系统菜单中的法; 8、当用户选择扫描法时,需要输入磁方向(1表示扫描磁号大的方向,0表示扫描磁号小的方向); 8.程序源代码 #include<stdio.h> #include<stdlib.h> #include<iostream.h> #include<math.h> #define maxsize 1000 /*********************判断输入数据是否有效**************************/ int decide(char str[]) //判断输入数据是否有效 { int i=0; while(str[i]!='\0') { if(str[i]<'0'||str[i]>'9') { return 0; break; } i++; } return i; } /******************将字符串转换成数字***********************/ int trans(char str[],int a) //将字符串转换成数字 { int i; int sum=0; for(i=0;i<a;i++) { sum=sum+(int)((str[i]-'0')*pow(10,a-i-1)); } return sum; } /*********************冒泡排序法**************************/ int *bubble(int cidao[],int m) { int i,j; int temp; for(i=0;i<m;i++) //使用冒泡法按从小到大顺序排列 for(j=i+1;j<m;j++) { if(cidao[i]>cidao[j]) { temp=cidao[i]; cidao[i]=cidao[j]; cidao[j]=temp; } } cout<<"排序后的磁盘序列为:"; for( i=0;i<m;i++) //输出排序结果 { cout<<cidao[i]<<" "; } cout<<endl; return cidao; } /*********************先来先服务调度法**************************/ void FCFS(int cidao[],int m) //磁号数组,个数为m { int now;//当前磁号 int sum=0; //总长度 int j,i; int a; char str[100]; float ave; //平均长度 cout<<"磁盘请序列为:"; for( i=0;i<m;i++) //按先来先服务的策略输出磁盘请序列 { cout<<cidao[i]<<" "; } cout<<endl; cout<<"请输入当前的磁号:"; B: cin>>str; //对输入数据进行有效性判断 a=decide(str); if(a==0) { cout<<"输入数据的类型错误,请重新输入!"<<endl; goto B; } else now=trans(str,a); //输入当前磁号 sum+=abs(cidao[0]-now); cout<<"磁盘扫描序列为:"; for( i=0;i<m;i++) //输出磁盘扫描序列 { cout<<cidao[i]<<" "; } for(i=0,j=1;j<m;i++,j++) //平均长度 { sum+=abs(cidao[j]-cidao[i]); ave=(float)(sum)/(float)(m); } cout<<endl; cout<<"平均长度:"<<ave<<endl; } /**********************最短时间优先调度法********************/ void SSTF(int cidao[],int m) { 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; } else now=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<<"平均长度: "<<ave<<endl; } /*****************************扫描调度法*******************************/ void SCAN(int cidao[],int m) //先要给出当前磁号和移动臂的移动方向 { int k=1; int now,l,r,d; int i,j,sum=0; int a; char str[100]; float ave; cidao=bubble(cidao,m); //调用冒泡排序法排序 cout<<"请输入当前的磁号:"; D: cin>>str; //对输入数据进行有效性判断 a=decide(str); if(a==0) { cout<<"输入数据的类型错误,请重新输入!"<<endl; goto D; } else now=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]) //若当前磁号大于请序列中最小者且小于最大者 { while(cidao[k]<now) { k++; } l=k-1; r=k; cout<<"请输入当前移动臂的移动的方向 (1 表示向外 ,0表示向内) : "; cin>>d; if(d==0) //选择移动臂方向向内,则先向内扫描 { cout<<"磁盘扫描序列为:"; for(j=l;j>=0;j--) { cout<<cidao[j]<<" "; //输出向内扫描的序列 } for(j=r;j<m;j++) //磁头移动到最小号,则改变方向向外扫描未扫描的磁 { cout<<cidao[j]<<" "; //输出向外扫描的序列 } sum=now-2*cidao[0]+cidao[m-1]; } else //选择移动臂方向向外,则先向外扫描 { cout<<"磁盘扫描序列为:"; for(j=r;j<m;j++) { cout<<cidao[j]<<" "; //输出向外扫描的序列 } for(j=l;j>=0;j--) //磁头移动到最大号,则改变方向向内扫描未扫描的磁 { cout<<cidao[j]<<" "; } sum=-now-cidao[0]+2*cidao[m-1]; } } ave=(float)(sum)/(float)(m); cout<<endl; cout<<"平均长度: "<<ave<<endl; } /************************循环扫描调度法*****************************/ void CSCAN(int cidao[],int m) { int k=1; int now,l,r; int i,j,sum=0; int a; char str[100]; float ave; cidao=bubble(cidao,m); //调用冒泡排序法排序 cout<<"请输入当前的磁号:"; E: cin>>str; //对输入数据进行有效性判断 a=decide(str); if(a==0) { cout<<"输入数据的类型错误,请重新输入!"<<endl; goto E; } else now=trans(str,a); //输入当前磁号 if(cidao[m-1]<=now) //若当前磁号大于请序列中最大者,则直接将移动臂移动到最小号磁依次向外给予各请服务 { cout<<"磁盘扫描序列为:"; for(i=0;i<m;i++) cout<<cidao[i]<<" "; sum=now-2*cidao[0]+cidao[m-1]; } 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; for(j=r;j<m;j++) { cout<<cidao[j]<<" "; //输出从当前磁向外扫描的序列 } for(j=0;j<r;j++) //当扫描完最大号磁磁头直接移动到最小号磁,再向外扫描未扫描的磁 { cout<<cidao[j]<<" "; } sum=2*cidao[m-1]+cidao[l]-now-2*cidao[0]; } ave=(float)(sum)/(float)(m); cout<<endl; cout<<"平均长度: "<<ave<<endl; } void main() { int a; int c; //菜单项 int cidao[maxsize]; int i=0,count; char str[100]; cout<<"请输入磁序列(0结束):"<<endl; A:cin>>str; //对输入数据进行有效性判断 a=decide(str); if(a==0) { cout<<"输入数据的类型错误,请重新输入!"<<endl; goto A;//输入错误,跳转到A,重新输入 } else cidao[i]=trans(str,a); i++; while(cidao[i-1]!=0) { cin>>str; //对输入数据进行有效性判断 a=decide(str); if(a==0) cout<<"输入数据的类型错误,请重新输入!"<<endl; else { cidao[i]=trans(str,a); i++; } } count=i-1; //要访问的磁数 cout<<"你输入的磁序列为:"; for(i=0;i<count;i++) { cout<<cidao[i]<<" "; //输出磁序列 } cout<<endl; while(1) { cout<<endl; cout<<"**********************************************"<<endl; cout<<"****** 系统菜单 ******"<<endl; cout<<"**********************************************"<<endl; cout<<"*** ***"<<endl; cout<<"** 1. 先来先服务 **"<<endl; cout<<"** **"<<endl; cout<<"** 2. 最短时间优先 **"<<endl; cout<<"** **"<<endl; cout<<"** 3. 扫描调度 **"<<endl; cout<<"** **"<<endl; cout<<"** 4. 循环扫描 **"<<endl; cout<<"** **"<<endl; cout<<"** 5. 退出 **"<<endl; cout<<"*** ***"<<endl; cout<<"**********************************************"<<endl; cout<<"**********************************************"<<endl; G:cout<<"请选择法:"; F:cin>>str; //对输入数据进行有效性判断 a=decide(str); if(a==0) { cout<<"输入数据的类型错误,请重新输入!"<<endl; goto F;//输入错误,跳转到F,重新输入 } else c=trans(str,a); if(c==5) break; if(c>5) { cout<<"数据输入错误!请重新输入"<<endl; goto G; } switch(c) { case 1: //使用FCFS法 FCFS(cidao,count); break; case 2: //使用SSTF法 SSTF(cidao,count); break; case 3: //使用SCAN法 SCAN(cidao,count); break; case 4: //使用CSCAN法 CSCAN(cidao,count); break; } } }
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值