#include <stdlib.h>
#include <conio.h>
#include<iostream>
#define closetime 300
#define PERIOD1 20
#define PERIOD2 30
#define PERIOD3 50
#define CPUTIME1 5
#define CPUTIME2 15
#define CPUTIME3 10
using namespace std;
typedef struct TCB {
int period; /*周期*/
int cputime;/*需要的cpu时间*/
int remain; /*剩余的cpu时间*/
int num; /*所处周期数*/
int laxity; /*松弛度*/
} TCB; /*调度*/
TCB tcb[3];
int curtime;/*调度时刻*/
void init(void)
{ int i;
curtime=0;
tcb[0].period=PERIOD1;tcb[0].cputime=CPUTIME1;
tcb[1].period=PERIOD2;tcb[1].cputime=CPUTIME2;
tcb[2].period=PERIOD3;tcb[2].cputime=CPUTIME3;
/*为调度周期及需要cpu时间赋值*/
for(i=0;i<3;++i){
tcb[i].num=1;
/*初始周期号*/
tcb[i].remain=tcb[i].cputime;/*初始剩余时间*/
tcb[i].laxity=tcb[i].period-tcb[i].remain;/*初始松弛度*/
}
}
void schedule(void)/*调度程序*/
{ int i,j;/*i是被调度运行任务,j是未运行任务*/
int duration;/*本次运行持续时间*/
i=tcb[0].laxity<=tcb[1].laxity ?0:1;/*选最小松弛度的任务*/
i=tcb[1].laxity<=tcb[2].laxity ?0:1;
i=tcb[0].laxity<=tcb[2].laxity ?0:1;
if(curtime<tcb[i].period*(tcb[i].num-1))/*尚未进入该周期*/
i=(i+1)%3;/*选另两个个任务*/
j=(i+1)%3;
if(tcb[i].remain<=tcb[j].laxity)
duration=tcb[i].remain; /*让它运行到结束*/
else
duration=tcb[j].laxity;/*只能运行另一任务的松弛度的时间*/
tcb[i].remain-=duration;/*修改剩余时间*/
printf(” 任务名:%-3d所处周期:%-3d调度时刻:%-6d运行持续时间:%-3d\n”,
i,tcb[i].num,curtime,duration);
curtime+=duration;/*时间推进到下一调度时刻*/
if(tcb[i].remain==0){/*本周期的任务已完成*/
tcb[i].num++;
tcb[i].remain=tcb[i].cputime;/*设置初始剩余时间*/
}
for(i=0;i<3;++i)/*重新计算松弛度*/
tcb[i].laxity=tcb[i].num*tcb[i].period-curtime-tcb[i].remain;
}
void main(void)
{ init();
while(curtime<closetime)
schedule();
getch();
}
怎么样把其中任务名从数字123改成字母ABC
80
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include<iostream> #define closetime 300 #define PERIOD1 20 #define PERIOD2 30 #define PERIOD3 50 #define CPUTIME1 5 #define CPUTIME2 15 #define CPUTIME3 10 using namespace std; typedef struct TCB { int period; /*周期*/ int cputime;/*需要的cpu时间*/ int remain; /*剩余的cpu时间*/ int num; /*所处周期数*/ int laxity; /*松弛度*/ } TCB; /*调度*/ TCB tcb[3]; int curtime;/*调度时刻*/ void init(void) { int i; curtime=0; tcb[0].period=PERIOD1;tcb[0].cputime=CPUTIME1; tcb[1].period=PERIOD2;tcb[1].cputime=CPUTIME2; tcb[2].period=PERIOD3;tcb[2].cputime=CPUTIME3; /*为调度周期及需要cpu时间赋值*/ for(i=0;i<3;++i){ tcb[i].num=1; /*初始周期号*/ tcb[i].remain=tcb[i].cputime;/*初始剩余时间*/ tcb[i].laxity=tcb[i].period-tcb[i].remain;/*初始松弛度*/ } } void schedule(void)/*调度程序*/ { int i,j;/*i是被调度运行任务,j是未运行任务*/ int duration;/*本次运行持续时间*/ i=tcb[0].laxity<=tcb[1].laxity ?0:1;/*选最小松弛度的任务*/ i=tcb[1].laxity<=tcb[2].laxity ?0:1; i=tcb[0].laxity<=tcb[2].laxity ?0:1; if(curtime<tcb[i].period*(tcb[i].num-1))/*尚未进入该周期*/ i=(i+1)%3;/*选另两个个任务*/ j=(i+1)%3; if(tcb[i].remain<=tcb[j].laxity) duration=tcb[i].remain; /*让它运行到结束*/ else duration=tcb[j].laxity;/*只能运行另一任务的松弛度的时间*/ tcb[i].remain-=duration;/*修改剩余时间*/ printf(" 任务名:%-3c所处周期:%-3d调度时刻:%-6d运行持续时间:%-3d\n", "A" + i,tcb[i].num,curtime,duration); curtime+=duration;/*时间推进到下一调度时刻*/ if(tcb[i].remain==0){/*本周期的任务已完成*/ tcb[i].num++; tcb[i].remain=tcb[i].cputime;/*设置初始剩余时间*/ } for(i=0;i<3;++i)/*重新计算松弛度*/ tcb[i].laxity=tcb[i].num*tcb[i].period-curtime-tcb[i].remain; } void main(void) { init(); while(curtime<closetime) schedule(); getch(); }