Free考研资料 - 免费考研论坛

 找回密码
 注册
打印 上一主题 下一主题

求助

[复制链接]
跳转到指定楼层
楼主
tyzqjz 发表于 06-4-18 15:34:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<string.h>
#include<iostream.h>
#include<stdlib.h>
#define m 10
typedef struct jcb  //定义作业控制块结构
{ char name[4];                //作业名
  int  length;                //作业长度,所需主存大小
  int  printer;                //作业执行时所需打印机数量
  int  tape;                        //作业执行时所需磁带机数量
  int  runtime;        //作业估计执行时间
  int  waittime;        //作业在系统中的等待时间
  int  next;                        //指向下一个作业控制块指针
}JCB;
  int    head;
  int    tape,printer;
  long   memory;
  JCB   jobtable[m];  //定义作业表
  Int    jobcount=0;                //作业计数器,初值为0

//作业调度函数
  void shedule()
  {float xk,k;
   int p,q,s,t;
   do                                        //查找响应比最高的作业
   {p=head;                //从作业控制块队首开始查找
   q=s=-1;                        //用-1表示队列为空
   k=0;                //用于保存响应比
   while(p!=-1)
   {                //系统可用资源是否满足作业需求
   if (jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p].printer<=printer)
   {                                                        //计算响应比XK,找出响应比较高者
           xk=(float)(jobtable[p].waittime)/jobtable[p].runtime;
           if (q==0||xk>k)
           {k=xk;
           q=p;                //q记住当前响应比较高者
           t=s;
           }//if
   }//if
   s=p;                //s记住当前的p
   p=jobtable[p].next;  //p指向下队列中一个作业控制块
   }//while,继续比较响应比
//响应比最高者出队
   if (q!=-1)
   {if (t==-1)
        head=jobtable[head].next;
   else
jobtable[t].next=jobtable[q].next;
//为作业q分配资源,分配主存空间、磁带机,打印机
   memory=memory-jobtable[q].length;
   tape=tape-jobtable[q].tape;
   printer=printer-jobtable[q].printer;
   cout<<"选中作业的作业名:"<<jobtable[q].name<<endl;
   }
  }while (q!=-1);  //如q!=-1继续查找下一个响应比最高者
        if (head!=0)
        cout<<"选中作业的作业名:"<<jobtable[q].name<<endl;
  }

//主函数
  void main()
  {char name[4];
  int size,tcount,pcount,wtime,rtime;
  int p;
  size=0;
  tcount=0;
  pcount=0;
  wtime=0;
  rtime=0;
  memory=65536;
  tape=4;
  printer=2;
  head=-1;
  cout<<"输入作业相关数据(以作业大小为负数停止输入):"<<endl;
  cout<<"输入作业名,作业大小,磁带机数,打印机数,等待时间,估计执行时间"<<endl;
  cin>>name>>size>>tcount>>pcount>>wtime>>rtime;
  while (size!=-1)
  {
          if (jobcount<m) p=jobcount;  
          else {cout<<"无法再创建进程"<<endl;
          break;}
          jobcount++;
          strcpy(jobtable[p].name,name);
          jobtable[p].length=size;
          jobtable[p].printer=pcount;
          jobtable[p].tape=tcount;
          jobtable[p].runtime=rtime;
          jobtable[p].waittime=wtime;
          jobtable[p].next=head;
          head=p;
          cout<<"输入作业名,作业大小,磁带机数,打印机数,等待时间,估计执行时间"<<endl;
      cin>>name>>size>>tcount>>pcount>>wtime>>rtime;
  }//while
  shedule();
  }//main
请问
用这个程序
怎么修改可以是优先作业调度法???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|Free考研资料 ( 苏ICP备05011575号 )

GMT+8, 24-11-22 14:58 , Processed in 0.257525 second(s), 11 queries , Gzip On, Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表