定义
对预计执行时间短的作业(进程)优先分派处理机.通常后来的短作业不抢先正在执行的作业.
代码为:
#include<stdio.h>
#include <iostream>
#include<iomanip>
using namespace std;
struct PCB
{
char name[10];//进程名
float arrivetime;//标志进程到达时间
float needtime;//进程所需的时间
float starttime;//开始时间
floatfinishtime;//完成时间
float alltime;//总共所用的时间,即周转时间
floatdqalltime;//带权周转时间
};
PCB a[200];
void Pinput(PCB *p,int N)
{
cout<<"*-----------------------输入部分------------------------*"<<endl;
cout<<"进程名称"<<"\t"<<"到达时间"<<"\t"<<"所需时间"<<endl;
for(int i=0;i<N;i++)
{
cout<<"输入第"<<i<<"个进程的信息"<<endl;
cin>>p[i].name;
cin>>p[i].arrivetime;
cin>>p[i].needtime;
}
}
void Poutput(PCB *p,int N)
{
float arrivetime;
float needtime;
float starttime;
float finishtime;
float alltime;
float dqalltime;
intj;
cout<<"*------------------输出部分-------------------*"<<endl;
cout<<"具体进程调度信息:"<<endl;
cout<<"进程名 到达时间 所需时间 开始时间 结束时间 周转时间 带权周转时间"<<endl;
for(j=0;j<N;j++)
{
cout<<setw(4)<<p[j].name<<setw(8)<<p[j].arrivetime<<setw(10)<<p[j].needtime<<setw(10)
<<p[j].starttime<<setw(10)<<p[j].finishtime<<setw(10)<<p[j].alltime<<setw(10)
<<p[j].dqalltime<<endl;
}
}
//排序
void Psort(PCB *p,int N)
{
for(inti=0;i<N;i++)
for(int j=0;j<i;j++)
if(p[i].arrivetime<p[j].arrivetime)
{
PCBtemp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
intk;
for(k=0;k<N-1;k++)
{
if(k==0)
{
p[k].starttime=p[k].arrivetime;
p[k].finishtime=p[k].arrivetime+p[k].needtime;
}
else
{
p[k].starttime=p[k-1].finishtime;
p[k].finishtime=p[k].starttime+p[k].needtime;
}
//选择最短作业执行
intm=0;
for(intt=k+1;t<=N-1;t++)
{
if(p[t].arrivetime<=p[k].finishtime)
m++;
}
floatmin=p[k+1].needtime;
intnext=k+1;
for(int q=k+1;q<k+m;q++)
{
if(p[q+1].needtime<min)
{
min=p[q+1].needtime;
next=q+1;
}
PCBtemp;
temp=p[k+1];
p[k+1]=p[next];
p[next]=temp;
}
}
}
//运行,计算周转时间和带权周转时间
void Pdeal(PCB *p,float arrivetime,floatneedtime,float starttime,float finishtime,float &alltime,float&dqalltime,int N)
{
intk;
for(k=0;k<N;k++)
{
if(k==0)
{
p[k].starttime=p[k].arrivetime;
p[k].finishtime=p[k].arrivetime+p[k].needtime;
}
else
{
p[k].starttime=p[k-1].finishtime;
p[k].finishtime=p[k].starttime+p[k].needtime;
}
}
for(k=0;k<N;k++)
{
p[k].alltime=p[k].finishtime-p[k].arrivetime;
p[k].dqalltime=p[k].alltime/p[k].needtime;
}
}
voidPCB(PCB *p,int N)
{
float arrivetime=0;
float needtime=0;
float starttime=0;
float finishtime=0;
float alltime=0;
float dqalltime=0;
Psort(p,N);
Pdeal(p,arrivetime,needtime,starttime,finishtime,alltime,dqalltime,N);
Poutput(p,N);
}
int main()
{
intm;
cout<<"*------------------短作业优先-------------------*"<<endl;
cout<<"输入进程数:"<<endl;
cin>>m;
Pinput(a,m);
PCB(a,m);
}