时间片轮转调度算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

#include

/*进程控制块数据结构*/

typedef struct node

{

char name[10];/*进程名*/

int prio; /*进程优先级*/

int round; /*循环轮转法进程每次轮转的时间片*/

int cputime; /*进程累计消耗的CUP时间*/

int needtime; /*进程到完成还需要的CUP时间*/

int count; /*循环轮转法一个时间片内进程运行时间*/

char state; /*进程的状态:'R':运行,'W':等待,'F':结束*/

struct node *next;/*指向下一个进程的链指针*/

}PCB;

PCB *finish,*ready,*tail,*run;/*指向三个队列的队首的指针,

finish为完成队列头指针,

ready为就绪队列头指针,

tail为就绪队列的队尾指针,

run为当前运行进程头指针*/

int N;/*定义进程的数目*/

void firstin(void); //调度就绪队列的第一个进程投入运行;

void print1(char a); //打印表头行信息

void print2(char chose,PCB *p); //打印每一行的状态信息

void print(char chose); //打印每执行一次算法后所有的进程的状态信息

void insert_prio(PCB *q); //在优先数算法中,将尚未完成的PCB按优先数顺序插入到就绪队列中;

void prior_init(char chose); //进程优先级法初始化将进程按优先级插入到就绪队列里

void priority(char chose); //进程优先级算法总函数

void insert_rr(PCB *q); //在轮转法中,将执行了一个时间片单位(为2),但尚未完成的进程的PCB,插到就绪队列的队尾;

void roundrun_init(char chose); //循环轮转法初始化将就绪队列保存为FIFO队列

void roundrun(char chose); //循环轮转法总算法

void main()//主函数

{

char chose=' ';

while((chose!='e')&&(chose!='E'))

{

fflush(stdin);

system("cls");

/*printf("\t\t\t两种进程调度算法的模拟\n\n");

printf("\tP.进程优先级算法模拟\n\n");*/

printf("\tR.循环轮转算法模拟\n\n");

printf("\tE.退出程序\n\n");

printf("\t请输入你的选择:");

scanf("%c",&chose);

if((chose!='e')&&(chose!='E'))

{

system("cls");

/*if((chose=='P')||(chose=='p'))

{

prior_init(chose);

priority(chose);

system("cls");

} */

/*else */if((chose=='r')||(chose=='R'))

{

roundrun_init(chose);

roundrun(chose);

system("cls");

}

}

}

printf("\n\t\t谢谢使用!!!\n");

}

void firstin(void)//调度就绪队列的第一个进程投入运行;{

if(ready!=NULL)

{

run=ready;

ready=ready->next;

run->state='R';

run->next=NULL;

}

else

{

run=NULL;

}

}

void print1(char a)//打印表头行信息

{

if(toupper(a)=='P')

{

printf("name cputime needtime priority state \n");

}

else

{

printf("name cputime needtime count round state \n");

}

}

void print2(char chose,PCB *p)//打印每一行的状态信息

{

if(toupper(chose)=='P')

{

printf("%s\t%d\t%d\t%d\t %c\n",p->name,p->cputime,p->needtime,p->prio,p->state);

}

else

{

printf("%s\t%d\t%d\t%d\t%d\t%c\n",p->name,p->cputime,p->needtime,p->count,p->round,p->sta te);

}

}

相关文档
最新文档