• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: C/C++
  • 标签: 进程调度  

资源简介

基于C语言的进程调度算法(优先权)(包括:就绪队列,完成队列,运行队列)

资源截图

代码片段和文件信息

#include
#include
#include
#include
typedef struct node
{
   char name[10];  /*进程标识符*/
   int prio;   /*进程优先数*/
   int cputime; /*进程占用CPU时间*/
   int needtime; /*进程到完成还要的时间*/
   char state; /*进程的状态*/
   struct node *next; /*链指针*/
}PCB;
PCB *finish*ready*run; /*队列指针*/
int N; /*进程数*/
/*将就绪队列中的第一个进程投入运行*/
void firstin()
{
   run=ready;   /*就绪队列头指针赋值给运行头指针*/
   run->state=‘R‘;   /*进程状态变为运行态*/
   ready=ready->next;  /*就绪对列头指针后移到下一进程*/
}
void prt1()    /*标题输出函数*/
{
     printf(“  name     cputime  needtime  priority  state\n“);
}
void prt2(PCB *q)  /*进程PCB输出*/
{
   printf(“  %-10s%-10d%-10d%-10d %c\n“q->name
       q->cputimeq->needtimeq->prioq->state);
}

void prt()    /*输出函数*/
{
   PCB *p;
   prt1();  /*输出标题*/
   if(run!=NULL) /*如果运行指针不空*/
      prt2(run); /*输出当前正在运行的PCB*/
   p=ready;  /*输出就绪队列PCB*/
   while(p!=NULL)
   {
      prt2(p);
      p=p->next;
   }
   p=finish;  /*输出完成队列的PCB*/
   while(p!=NULL)
   {
      prt2(p);
      p=p->next;
   }
   getch();  /*按任意键继续*/
}

void insert(PCB *q)   /*优先数的插入算法*/
{
   PCB *p1*s*r;
   int b;
   s=q;  /*待插入的PCB指针*/
   p1=ready; /*就绪队列头指针*/
   r=p1; /*r做p1的前驱指针*/
   b=1;
   while((p1!=NULL)&&b)  /*根据优先数确定插入位置*/
      if(p1->prio>=s->prio)
      {
         r=p1;
         p1=p1->next;
      }
      else
         b=0;
   if(r!=p1)  /*如果条件成立说明插入在r与p1之间*/
   {
      r->next=s;
      s->next=p1;
   }
   else
   {
      s->next=p1;  /*否则插入在就绪队列的头*/
      ready=s;
   }
}

void create()    /*优先数创建初始PCB信息*/
{
   PCB *p;
   int itime;
   char na[10];
   ready=NULL; /*就绪队列头指针*/
   finish=NULL;  /*完成队列头指

评论

共有 条评论