操作系统短进程优先算法

/**短进程优先算法**/

 

#include <cstdlib>

#include <iostream>

#include <iomanip>

 

using namespace std;

 

//定义结构体

struct spf{   

char name[10];   

float arrivetime;   

float servicetime;   

float starttime;   

float finishtime;   

float zztime;   

float dqzztime;   

};  

 

spf a[100];  

 

//输入

void input(spf *p,int N)   

{

int i;   

cout<<endl;

cout<<"请输入进程的         名字   到达时间   服务时间:  (例如: a 0 100)"<<endl;

 

for(i=0;i<=N-1;i++)   

{   

cout<<"请输入进程"<<i+1<<"的信息";

cin>>p[i].name;

cin>>p[i].arrivetime;

cin>>p[i].servicetime;

 

}   

}   

  

 

//排序   

void sort(spf *p,int N)   

{  

/****按照到达时间排序****/

for(int i=0;i<N-1;i++)   

for(int j=i+1;j<=N-1;j++)   

if(p[i].arrivetime>p[j].arrivetime)   

             {   

                 spf temp;   

                 temp=p[i];   

                 p[i]=p[j];   

                 p[j]=temp;   

             }

for(int m=0;m<N-1;m++)      

{

if(m==0)   

p[m].finishtime=p[m].arrivetime+p[m].servicetime;   

         else  

            p[m].finishtime=p[m-1].finishtime+p[m].servicetime;

 

 /****查找当前进程执行过程中进入系统的进程****/

 int i=0;

         for(int n=m+1;n<=N-1;n++)   

 {

 if(p[n].arrivetime<=p[m].finishtime)              

 i++;   

 }   

 /****选择最短的为接下来执行的****/

 float min=p[m+1].servicetime;   

 int next=m+1;//m+1=n   

        

 for(int k=m+2;k<=m+i;k++)          

 {   

         

 if(p[k].servicetime<min)   

 {

 min=p[k].servicetime;              

 next=k;}                             

 }   

           

 spf temp;               

 temp=p[m+1];              

 p[m+1]=p[next];              

 p[next]=temp;           

}    

}   

  

//运行,计算周转时间和带权周转时间   

void run(spf *p,int N)   

{ int k;   

    for(k=0;k<=N-1;k++)   

     {            

if(k==0)             

{       

p[k].starttime=p[k].arrivetime;       

p[k].finishtime=p[k].arrivetime+p[k].servicetime;}   

         

else      

{       

p[k].starttime=p[k-1].finishtime;               

p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}        

}   

 

for(k=0;k<=N-1;k++)   

     

{        

p[k].zztime=p[k].finishtime-p[k].arrivetime;   

p[k].dqzztime=p[k].zztime/p[k].servicetime;   

 

     }   

}   

 

//显示

void Print(spf *p,int N)   

{

int k;      

cout<<"调用最短进程优先算法以后进程运行的顺序是: ";

    cout<<p[0].name;   

 

for(k=1;k<N;k++)   

 

{

cout<<"-->";

cout<<p[k].name;   

}    

    

cout<<endl;

cout<<"具体进程调度信息:"<<endl;

cout<<"进程名  到达时间  服务时间  开始时间  结束时间  周转时间  带权周转时间"<<endl;

 

for(k=0;k<=N-1;k++)        

{  

cout<<setw(4)<< p[k].name

 <<setw(8)<< p[k].arrivetime

 <<setw(10)<< p[k].servicetime

 <<setw(10)<< p[k].starttime

 <<setw(10)<< p[k].finishtime

 <<setw(10)<< p[k].zztime

 <<setw(10)<< p[k].dqzztime<<endl;

}         

 

}    

    

//最短进程优先 计算平均周转时间和平均带权周转时间

void SPF(spf *p,int N)   

{  

sort(p,N);                 

run(p,N);         

Print(p,N);  

 

 int k;

 float Attime=0;

 float AQttime=0;

 for(k=0;k<=N-1;k++)    

     {   

 Attime+=p[k].zztime;  

 AQttime+=p[k].dqzztime;  

     }  

 Attime=Attime/N;

 AQttime=AQttime/N;

 cout<<"调用最短进程算法的平均周转时间为: ";

 cout<<Attime<<endl;

 cout<<"调用最短进程算法的平均带权周转时间为: ";

 cout<<AQttime<<endl;     

}   

  

  

int main(void)   

{

int N;                          

cout<<endl;                          

cout<<endl;

cout<<"<<----------!!!@@@最短进程优先调度算法@@@!!!---------->>"<<endl;                            

cout<<endl;  

cout<<"输入进程数目:"<<endl;

cin>>N;                      

input(a,N);  

SPF(a,N);

}   

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wd520521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值