52 lines
1.6 KiB
C
52 lines
1.6 KiB
C
#include <stdio.h>
|
|
typedef struct {
|
|
int id,p,et,re,ad,ta;
|
|
} Task;
|
|
|
|
Task tasks[]={{1,5,2,0,0,0},{2,8,3,0,0,0}};
|
|
int nt=sizeof(tasks)/sizeof(Task);
|
|
int st=40;
|
|
|
|
void simulate_rm(){
|
|
printf("--- RM ---\n");
|
|
for(int i=0;i<nt;i++){tasks[i].re=tasks[i].ad=tasks[i].ta=0;}
|
|
for(int t=0;t<st;t++){
|
|
for(int i=0;i<nt;i++){
|
|
if(!tasks[i].ta){
|
|
if(tasks[i].re>0)printf("!T%d:Task%d missed!\n",t,tasks[i].id);
|
|
tasks[i].re=tasks[i].et;
|
|
tasks[i].ad=t+tasks[i].p;
|
|
tasks[i].ta=tasks[i].p;
|
|
}
|
|
tasks[i].ta--;
|
|
}
|
|
int r=-1,hp=10000;
|
|
for(int i=0;i<nt;i++)
|
|
if(tasks[i].re>0&&tasks[i].p<hp){hp=tasks[i].p;r=i;}
|
|
if(r>=0){printf("T%d:Task%d run\n",t,tasks[r].id);tasks[r].re--;}
|
|
else printf("T%d:Idle\n",t);
|
|
}
|
|
}
|
|
|
|
void simulate_edf(){
|
|
printf("\n--- EDF ---\n");
|
|
for(int i=0;i<nt;i++){tasks[i].re=tasks[i].ad=tasks[i].ta=0;}
|
|
for(int t=0;t<st;t++){
|
|
for(int i=0;i<nt;i++){
|
|
if(!tasks[i].ta){
|
|
if(tasks[i].re>0)printf("!T%d:Task%d missed!\n",t,tasks[i].id);
|
|
tasks[i].re=tasks[i].et;
|
|
tasks[i].ad=t+tasks[i].p;
|
|
tasks[i].ta=tasks[i].p;
|
|
}
|
|
tasks[i].ta--;
|
|
}
|
|
int r=-1,ed=10000;
|
|
for(int i=0;i<nt;i++)
|
|
if(tasks[i].re>0&&tasks[i].ad<ed){ed=tasks[i].ad;r=i;}
|
|
if(r>=0){printf("T%d:Task%d run\n",t,tasks[r].id);tasks[r].re--;}
|
|
else printf("T%d:Idle\n",t);
|
|
}
|
|
}
|
|
|
|
int main(){simulate_rm();simulate_edf();return 0;}
|