操作系统实验之作业调度算法

来源:互联网 发布:通过淘宝助理的模块 编辑:程序博客网 时间:2024/06/03 19:39
#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;}    }


0 0
原创粉丝点击