112 lines
2.7 KiB
C++
112 lines
2.7 KiB
C++
|
|
#include<iostream>
|
|
using namespace std;
|
|
#define N 3
|
|
struct PCB
|
|
{
|
|
char name[8];
|
|
int arrive_time;
|
|
int run_time;
|
|
int finish_time;
|
|
int zhouzhuan_time;
|
|
float daiquan_time;
|
|
};
|
|
|
|
float sumzhouzhuantime,sumdaiquanzhouzhuantime;
|
|
struct PCB pcb[N],temp;
|
|
|
|
void input(); //输入进程
|
|
void sort(); //对输入的进程按到达时间进行排序执行
|
|
void output(); //输出算法调度时间表
|
|
|
|
int main()
|
|
{
|
|
input();
|
|
sort( );
|
|
output();
|
|
}
|
|
|
|
void input()
|
|
{
|
|
int i;
|
|
cout<<"--------------------------------------"<<endl;
|
|
cout<<" FCFS调度算法 "<<endl;
|
|
cout<<"--------------------------------------"<<endl;
|
|
cout<<" 输入五个进程信息:"<<endl;
|
|
for ( i=0;i<N;i++)
|
|
{
|
|
printf("请输入进程名:\n" );
|
|
scanf("%s",pcb[i].name);
|
|
printf("请输入到达时间:");
|
|
scanf("%d",&pcb[i].arrive_time);
|
|
printf("请输入要运行时间:");
|
|
scanf("%d",&pcb[i].run_time);
|
|
}
|
|
cout<<"各进程:"<<endl;
|
|
for( i=0;i<N;i++)
|
|
{ printf("%s ",pcb[i].name);
|
|
printf("%d ",pcb[i].arrive_time);
|
|
printf("%d \n",pcb[i].run_time);
|
|
}
|
|
}
|
|
|
|
void sort()//按照到达时间对进程进行排序
|
|
{
|
|
for(int i=0;i<N-1;i++)
|
|
{
|
|
for(int j=i+1;j<N;j++)
|
|
{
|
|
if(pcb[i].arrive_time>pcb[j].arrive_time)
|
|
{
|
|
temp=pcb[i];
|
|
pcb[i]=pcb[j];
|
|
pcb[j]=temp;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void output()
|
|
{
|
|
int i;
|
|
cout<<"FCFS调度算法:"<<endl;
|
|
pcb[0].finish_time=pcb[0].arrive_time+pcb[0].run_time;
|
|
pcb[0].zhouzhuan_time=pcb[0].finish_time-pcb[0].arrive_time;
|
|
pcb[0].daiquan_time=(float)pcb[0].zhouzhuan_time/pcb[0].run_time;
|
|
for(i=1;i<N;i++)
|
|
{
|
|
if(pcb[i].arrive_time>pcb[i-1].finish_time)
|
|
{
|
|
pcb[i].finish_time=pcb[i].arrive_time+pcb[i].run_time;
|
|
pcb[i].zhouzhuan_time=pcb[i].run_time;
|
|
pcb[i].daiquan_time=(float)pcb[i].zhouzhuan_time/pcb[i].run_time;
|
|
}
|
|
else
|
|
{
|
|
pcb[i].finish_time=pcb[i-1].finish_time+pcb[i].run_time;
|
|
pcb[i].zhouzhuan_time=pcb[i].finish_time-pcb[i].arrive_time;
|
|
pcb[i].daiquan_time=(float)pcb[i].zhouzhuan_time/pcb[i].run_time;
|
|
}
|
|
|
|
}
|
|
|
|
for(i=0;i<N;i++)
|
|
{
|
|
sumzhouzhuantime+=pcb[i].zhouzhuan_time;
|
|
sumdaiquanzhouzhuantime+=pcb[i].daiquan_time;
|
|
}
|
|
|
|
printf("----------------------------------------------------------------\n");
|
|
printf("进程名 到达时间 运行时间 完成时间 周转时间 带权周转时间 \n");
|
|
printf("----------------------------------------------------------------\n");
|
|
for(i=0;i<N;i++)
|
|
{
|
|
printf(" %s %d %d %d %d %.2f\n",pcb[i].name,pcb[i].arrive_time,pcb[i].run_time,pcb[i].finish_time,pcb[i].zhouzhuan_time,pcb[i].daiquan_time);
|
|
|
|
}
|
|
cout<<"平均周转时间:"<<sumzhouzhuantime/N<<endl;
|
|
cout<<"平均带权周转时间:"<<sumdaiquanzhouzhuantime/N<<endl;
|
|
printf("----------------------------------------------------------------\n");
|
|
}
|
|
|