操作系统 SSTF磁盘调度算法.docx
操作系统 SSTF磁盘调度算法 /SSTF磁盘调度算法 #include<stdio.h> #include<stdlib.h> #include<iostream.h> 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(cidaoi>cidaoj) temp=cidaoi; cidaoi=cidaoj; cidaoj=temp; cout<<"排序后的磁盘序列为:" for( i=0;i<m;i+) /输出排序结果 cout<<cidaoi<<" " cout<<endl; return cidao; void SSTF(int cidao,int m) int k=1; int now,l,r; int i,j,sum=0; float ave; cidao=bubble(cidao,m); /调用冒泡排序算法排序 while(1) cout<<"请输入当前的磁道号:" cin>>now; if(cidaom-1<=now) /若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务 cout<<"磁盘扫描序列为:" for(i=m-1;i>=0;i-) cout<<cidaoi<<" " sum=now-cidao0; if(cidao0>=now) /若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务 cout<<"磁盘扫描序列为:" for(i=0;i<m;i+) cout<<cidaoi<<" " sum=cidaom-1-now; if(now>cidao0&&now<cidaom-1) /若当前磁道号大于请求序列中最小者且小于最大者 cout<<"磁盘扫描序列为:" while(cidaok<now) /确定当前磁道在已排的序列中的位置,后面的算法都用到了,可以直接复制后少量修改,节省时间。 k+; l=k-1; r=k; while(l>=0)&&(r<m) /当前磁道在请求序列范围内 if(now-cidaol)<(cidaor-now) /选择与当前磁道最近的请求给予服务 cout<<cidaol<<" " sum+=now-cidaol; now=cidaol; l=l-1; else if(now-cidaol)=(cidaor-now) cout<<cidaol<<" " sum+=now-cidaol; now=cidaol; l=l-1; else cout<<cidaor<<" " sum+=cidaor-now; now=cidaor; r=r+1; if(l=-1) /磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道 for(j=r;j<m;j+) cout<<cidaoj<<" " sum+=cidaom-1-cidao0; else /磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道 for(j=l;j>=0;j-) cout<<cidaoj<<" " sum+=cidaom-1-cidao0; ave=(float)(sum)/(float)(m); cout<<endl; cout<<"平均寻道长度: "<<ave<<endl; int main int a,b,N; int cidao10; cout<<"请输入进程数量:" cin>>N; cout<<"请输入"<<N<<"个磁道号:" for(a=0;a<N;a+) cin>>b; cidaoa=b; SSTF(cidao,N);