进程调度 短作业优先代码
2019-07-14 06:56发布
生成海报
#include
#include
struct PCB
{
char name[10];
float arrivetime;
float runtime;
float starttime;
float finishtime;
float zztime;
float dqzztime;
};
PCB a[100];
void input(PCB *p,int N)
{
int i;
printf("请输入进程的名称、到达时间和运行时间:
for example:a 0 100
");
for(i=0;i<=N-1;i++)
{
printf("请输入第%d个进程的信息:
",i+1);
scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].runtime);
}
}
void output(PCB *p,int N)
{
int k;
printf("优先运行顺序:");
printf("%s",p[0].name);
for(k=1;k {
printf("-->%s",p[k].name);
}
printf("
各个进程的信息:
");
printf("
名称 到达 运行 开始 完成 周转 带权周转
");
for(k=0;k {
printf("%s %-.2f %-.2f %-.2f %-.2f %-.2f %-.2f
",p[k].name,p[k].arrivetime,p[k].runtime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);
}
}
void sort(PCB *p,int N)
{
for(int i=0;i for(int j=0;j if(p[i].arrivetime {
PCB t;
t=p[i];
p[j]=p[i];
p[j]=t;
}
}
void deal(PCB *p,int N)
{
int k;
for(k=0;k {
if(k==0)
{
p[k].starttime=p[k].arrivetime;
p[k].finishtime=p[k].starttime+p[k].runtime;
}
else
{
p[k].starttime=p[k-1].finishtime;
p[k].finishtime=p[k].starttime+p[k].runtime;
}
}
for(k=0;k {
p[k].zztime=p[k].finishtime-p[k].arrivetime;
p[k].dqzztime=p[k].zztime/p[k].runtime;
}
}
void sjff(PCB *p,int N)
{
float arrivetime=0,runtime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;
sort(p,N);//调用sort函数
for(int m=0;m {
if(m==0)
p[m].finishtime=p[m].arrivetime+p[m].runtime;
else
{
if(p[m-1].finishtime >=p[m].arrivetime )
{
p[m].starttime=p[m-1].finishtime;}
else
{
p[m].starttime =p[m].arrivetime;}
p[m].finishtime=p[m].starttime+p[m].runtime;
}
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].runtime;
int next=m+1;//m+1=n
for(int k=m+1;k {
if(p[k+1].runtime {
min=p[k+1].runtime;
next=k+1;
}
}
PCB temp;
temp=p[m+1];
p[m+1]=p[next];
p[next]=temp;
}
deal(p,N);
output(p,N);
}
void main()
{
int M;
printf("----短作业优先调度算法----
");
printf("请输入进程数目:");
scanf("%d",&M);
input(a,M);
sjff(a,M);
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮