• 大小: 8KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: C/C++
  • 标签: 操作系统  

资源简介

用C语言实现的多级反馈队列调度算法,操作系统课程作业。用VC6.0调试通过。

资源截图

代码片段和文件信息

#include    
#include    
#include    
typedef struct node                         /*进程节点信息*/  
{   
char name[20];                             /*进程的名字*/  
int prio;                                  /*进程的优先级*/  
int round;                                 /*分配CPU的时间片*/  
int cputime;                               /*CPU执行时间*/  
int needtime;                            /*进程执行所需要的时间*/  
char state;              /*进程的状态,W——就绪态,R——执行态,F——完成态*/  
int count;                             /*记录执行的次数*/  
struct node *next;                      /*链表指针*/  
}PCB;   
typedef struct Queue                 /*多级就绪队列节点信息*/  
{   
PCB *linkPCB;                      /*就绪队列中的进程队列指针*/  
int prio;                            /*本就绪队列的优先级*/  
int round;                           /*本就绪队列所分配的时间片*/  
struct Queue *next;                  /*指向下一个就绪队列的链表指针*/  
}ReadyQueue;   
PCB *run=NULL*finish=NULL;     /*定义三个队列,就绪队列,执行队列和完成队列*/  
ReadyQueue *Head = NULL;                   /*定义第一个就绪队列*/  
int num;                                   /*进程个数*/  
int ReadyNum;                           /*就绪队列个数*/  
void Output();                           /*进程信息输出函数*/  
void InsertFinish(PCB *in);       /*将进程插入到完成队列尾部*/  
void InsertPrio(ReadyQueue *in);     /*创建就绪队列,规定优先数越小,优先级越低*/  
void PrioCreate();                       /*创建就绪队列输入函数*/  
void GetFirst(ReadyQueue *queue);     /*取得某一个就绪队列中的队头进程*/  
void InsertLast(PCB *inReadyQueue *queue);   /*将进程插入到就绪队列尾部*/  
void ProcessCreate();                       /*进程创建函数*/  
void RoundRun(ReadyQueue *timechip);     /*时间片轮转调度算法*/  
void MultiDispatch();             /*多级调度算法,每次执行一个时间片*/  
  
int main(void)   
{   
PrioCreate();                         /*创建就绪队列*/  
ProcessCreate();                      /*创建就绪进程队列*/  
MultiDispatch();                      /*算法开始*/  
Output();                             /*输出最终的调度序列*/  
return 0;   
}   
void Output()                        /*进程信息输出函数*/  
{   
ReadyQueue *print = Head;   
PCB *p;   
printf(“进程名\t轮数\tcpu时间\t需要时间\t进程状态\n“);   
while(print)   
{   
  if(print ->linkPCB != NULL)   
  {   
   p=print ->linkPCB;   
   while(p)   
   {   
    printf(“%s\t%d\t%d\t%d\t\t%c\n“p->namep->round-1p->cputimep->needtimep->state);      
    p = p->next;   
   }   
  }   
  print = print->next;   
}   
p = finish;   
while(p!=NULL)   
{   
  printf(“%s\t%d\t%d\t%d\t\t%c\n“p->namep->round-1p->cputimep->needtimep->state);   
  p = p->next;   
}   
p = run;   
while(p!=NULL)   
{   
  printf(“%s\t%d\t%d\t%d\t\t%c\n“p->namep->round-1p->cputimep->needtimep->statep->count);   
  p = p->next;   
}   
  
  
}   
void InsertFinish(PCB *in)           /*将进程插入到完成队列尾部*/  
{   
PCB *fst;   
fst = finish;   
  
if(finish == NULL)   
{   
  in->next = finish;   
  finish = in;   
}   
else  
{   
  while(fst->next != NULL)   
  {   
   fst = fst->next;   
  }   
  in ->next = fst ->next;   
  fst ->next = i

评论

共有 条评论