//时间片轮转算法 typedef struct node {
char name[20]; int round; int cputime; int arrivetime; int needtime; char state; int count; struct node *next; }PCB;
PCB *ready=NULL,*run1=NULL,*finish=NULL; int num,i;
void GetFirst(); void Output(); void InsertTime(PCB *in); void InsertFinish(PCB *in); void TimeCreate(); void RoundRun();
void GetFirst() /*取得第一个就绪队列节点*/ {
run1 = ready;
if(ready!=NULL) {
run1 ->state = 'R'; ready = ready ->next; run1 ->next = NULL; }
}
void Output() /*输出队列信息*/ {
PCB *p; p = ready;
printf(\进程名\\tcpu时间\\t需要时间\\t进程状态\\t计数器\\n\ while(p!=NULL) {
printf(\e,p->count); p = p->next; }
p = finish; while(p!=NULL) {
printf(\e,p->count); p = p->next; }
p = run1; while(p!=NULL) {
printf(\e,p->count); p = p->next; } }
void InsertTime(PCB *in) /*将进程插入到就绪队列尾部*/ {
PCB *fst;
fst = ready;
if(ready == NULL) {
in->next = ready; ready = in; } else {
while(fst->next != NULL) {
fst = fst->next; }
in ->next = fst ->next; fst ->next = in; } }
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 = in; } }
void TimeCreate() /*时间片输入函数*/ {
PCB *tmp; int i;
printf(\输入进程名字 到达时间 进程所需时间 时间片大小:\\n\ for(i = 0;i < num; i++) {
if((tmp = (PCB *)malloc(sizeof(PCB)))==NULL) {
perror(\ exit(1); }
scanf(\%d %d %d\->round)); getchar();
tmp ->cputime = 0; tmp ->state ='W'; // tmp->prio=0; tmp ->count = 0; InsertTime(tmp); } }
void RoundRun() /*时间片轮转调度算法*/ {
int flag = 1;