#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
void FCFS(); //先来先服务
void SJF(); //短作业优先
void input(); //输入函数
void operation(); //运算输出函数
int n; //全局变量 作业输入量
double avturn; //平均周转时间
double avdqzz; //平均带权周转时间
double t=0.0,k=0.0; //全局变量用来表示总的周转时间和总的带权周转时间
struct HomeWork {
int num; //作业号
char name; //进程名
double arrivetime; //到达时间
double servetime; //服务时间
double begintime; //开始时间
double endtime; //完成时间
double turntime; //周转时间
double dqzztime; //带权周转时间
double zgxy; //最高响应比
}HW[10];
void input()
{
cout<<"请输入要执行作业的数量:"<<endl;
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"请输入第"<<i<<"个作业的数据:"<<endl;
HW[i].num=i;
cout<<"进程名:";
cin>>HW[i].name;
cout<<"到达时间:";
cin>>HW[i].arrivetime;
cout<<"服务时间:";
cin>>HW[i].servetime;
}
}
void operation()
{
for(int i=1;i<=n;i++)
{
if(i==1)
HW[i].begintime=HW[i].arrivetime; //如果是第一个作业开始时间就是到达时间
else
HW[i].begintime=HW[i-1].endtime;//如果不是,则作业的开始时间是前一个的结束时间
HW[i].endtime=HW[i].begintime+HW[i].servetime;
HW[i].turntime=HW[i].endtime-HW[i].arrivetime;
HW[i].dqzztime=HW[i].turntime/HW[i].servetime;
}
for(i=1;i<=n;i++)
{
t=t+HW[i].turntime;
k=k+HW[i].dqzztime;
}
avturn=t/n;
avdqzz=k/n;
cout<<"作业序号 进程名 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间 "<<endl;
for(i=1;i<=n;i++)
cout<<" "<<HW[i].num<<" "<<HW[i].name<<"\t\t"<<HW[i].arrivetime<<" \t"<<HW[i].servetime<<" \t"<<HW[i].begintime<<" \t"<<HW[i].endtime<<" \t"<<HW[i].turntime<<" \t"<<HW[i].dqzztime<<endl;
cout<<"平均周转时间:"<<avturn<<endl;
cout<<"平均带权周转时间:"<<avdqzz<<endl; }
void FCFS()
{
input();
operation();
t=0.0;
k=0.0;
}
void SJF()
{
input();
int no; //作业号
double tjtime; //提交时间
double zxtime; //执行时间
for(int i=2;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
if(HW[i].servetime>HW[j].servetime)
{
no=HW[i].num;
HW[i].num=HW[j].num;
HW[j].num=no; //作业号互换
tjtime=HW[i].arrivetime;
HW[i].arrivetime=HW[j].arrivetime;
HW[j].arrivetime=tjtime; //作业到达时间互换
zxtime=HW[i].servetime;
HW[i].servetime=HW[j].servetime;
HW[j].servetime=zxtime; //作业服务时间互换
}
}
operation();
t=0.0;
k=0.0;
}
void show()
{
cout<<"\n*********************1.先来先服务(FCFS)算法*********************\n";
cout<<"\n*********************2.短作业优先(SJF)算法*********************\n";
cout<<"\n*********************0. exit *********************\n";
}
void main()
{
show();
int num=0;
char ch;
char y;
cout<<"请选择:"<<endl;
cin>>num;
switch(num)
{
case 1: FCFS();
break;
case 2: SJF();
break;
default:
return;
}
}
操作系统实验之作业调度算法
最新推荐文章于 2024-06-06 16:51:57 发布