操作系统的磁盘调度算法C语言

磁盘调度算法通常有FCFS、SSTF、SCAN、CSAN这四种算法,以下是这种四种方法的总和:

#include<iostream>
using namespace std;
#include<math.h>
#include<iomanip>

int FF[10]={55,58,39,18,90,160,150,38,184};
int F[10];
int z[10]={100};
int Y[9];
float a_l=0;

void FCFS()
{    
    int i=0;    
    int temp=100;
    
    while(i<9)        
    {        
        Y[i]=fabs(temp-F[i]);        
        temp=F[i];        
        i++;        
    }
    
    cout<<"从100#磁道开始"<<endl;    
    cout<<"访问到的磁道号"<<setw(10)<<"移动距离"<<endl;
    
    for(i=0;i<9;i++)        
    {        
        cout<<setw(10)<<F[i]<<setw(10)<<Y[i]<<endl;        
        a_l+=Y[i];        
    }
    cout<<"平均寻道距离:"<<setw(10)<<a_l/9<<endl;}

void SSTF()
{    
    int temp,temp1,k,w;    
    int j=9;    
    int a=0;    
    int i;
    
    while(j>0)        
    {
        temp=fabs(z[a]-F[0]);        
        k=temp;        
        int c=0;
        
        for(i=0;i<j;i++)            
        {            
            temp1=fabs(z[a]-F[i]);            
            if((k-temp1)<0)                
            {k=k;w=c;}            
            else                
            {k=temp1;w=i;c=i;}            
        }        
        Y[a]=k;        
        a++;        
        z[a]=F[w];        
        for(w;w<9;w++)            
        {            
            F[w]=F[w+1];            
        }        
        j--;        
    }
    
    int zz[9];    
    for(a=0;a<9;a++)        
    {zz[a]=z[a+1];}    
    cout<<"从100#磁道开始"<<endl;    
    cout<<"访问到的磁道号"<<setw(10)<<"移动距离"<<endl;
    a_l=0;
    for(a=0;a<9;a++)        
    {cout<<setw(10)<<zz[a]<<setw(10)<<Y[a]<<endl;a_l+=Y[a];}    
    cout<<"平均寻道距离:"<<setw(10)<<a_l/9<<endl;}

void SCAN()
{    
    int aa[9],bb[9];    
    int start=z[0];    
    int i=0,j=0;    
    int ii=0,jj=0;    
    int temp;    
    int FF[9];while(i<9)        
    {        
        if((F[i]-start)>0)            
        {aa[ii]=F[i];ii++;i++;}        
        else {bb[jj]=F[i];jj++;i++;}        
    }    
    for(i=0;i<(ii-1);i++)        
    { for(j=i;j<ii;j++)    
    {        
        if(aa[i]>aa[j])
        {
            
            temp=aa[i];            
            aa[i]=aa[j];
            aa[j]=temp;}        
    }    
    }    
    for(i=0;i<(jj-1);i++)        
    {        
        for(j=i;j<jj;j++)            
        { if(bb[i]<bb[j])        
        {temp=bb[i];        
        bb[i]=bb[j];        
        bb[j]=temp;}        
        }        
    }    
    temp=z[0];    
    for(i=0;i<ii;i++)        
    {        
        Y[i]=aa[i]-temp;        
        temp=aa[i];        
        FF[i]=aa[i];}    
    for(j=0;j<jj;j++)        
    {        
        Y[i]=fabs(bb[j]-temp);        
        temp=bb[j];        
        FF[i]=bb[j];        
        i++;        
    }    
    cout<<"从100#磁道开始,磁头方向为自外向里"<<endl;    
    cout<<"访问到的磁道号"<<setw(10)<<"移动距离"<<endl;    
    a_l=0;
    for(i=0;i<9;i++)        
    {        
        cout<<setw(10)<<FF[i]<<setw(10)<<Y[i]<<endl;        
        a_l+=Y[i];        
    }    
    cout<<"平均寻道距离:"<<setw(10)<<a_l/9<<endl;}    

void CSCAN()        
{        
    int aa[9],bb[9];        
    int start=z[0];        
    int i=0,j=0;        
    int ii=0,jj=0;        
    int temp;        
    int FF[9];        
    while(i<9)
    {            
        if((F[i]-start)>0)                
        {aa[ii]=F[i];ii++;i++;}            
        else {bb[jj]=F[i];jj++;i++;}            
    }        
    for(i=0;i<(ii-1);i++)            
    { for(j=i;j<ii;j++)        
    {            
        if(aa[i]>aa[j])                
        {                
            temp=aa[i];                
            aa[i]=aa[j];                
            aa[j]=temp;}            
    }        
    }        
    for(i=0;i<(jj-1);i++)            
    {            
        for(j=i;j<jj;j++)                
        { if(bb[i]>bb[j])            
        {temp=bb[i];            
        bb[i]=bb[j];            
        bb[j]=temp;}            
        }            
    }        
    temp=z[0];        
    for(i=0;i<ii;i++)            
    {            
        Y[i]=aa[i]-temp;            
        temp=aa[i];            
        FF[i]=aa[i];}        
    for(j=0;j<jj;j++)            
    {            
        Y[i]=fabs(bb[j]-temp);            
        temp=bb[j];            
        FF[i]=bb[j];            
        i++;            
    }
    
    cout<<"从100#磁道开始,磁头方向为自外向里"<<endl;        
    cout<<"访问到的磁道号"<<setw(10)<<"移动距离"<<endl;
        a_l=0;
    for(i=0;i<9;i++)            
    {            
        cout<<setw(10)<<FF[i]<<setw(10)<<Y[i]<<endl;            
        a_l+=Y[i];            
    }
    
    cout<<"平均寻道距离:"<<setw(10)<<a_l/9<<endl;}

void main()

{
    int n,i;

   do
   { 
    for(i=0;i<9;i++)
        F[i]=FF[i];
        cout<<"请求访问的磁道号依次为:";
    for(i=0;i<9;i++)
        cout<<F[i]<<"   ";
    cout<<endl;
    cout<<"请选择算法"<<endl;
    cout<<" 1-FCFS "<<endl;
    cout<<" 2-SSTF "<<endl;
    cout<<" 3-SCAN "<<endl;
    cout<<" 4-CSCAN "<<endl;
    cout<<" 0-exit "<<endl;            
    cin>>n;    
    switch(n)        
    {
    case 1:{FCFS();break;}
    case 2:{SSTF();break;}
    case 3:{SCAN();break;}
    case 4:{CSCAN();break;}
    //case 0:exit;        
    }
   }while(n!=0);
}
 

上一篇:MySQL存储过程的使用


下一篇:大河向东流