MIT-Curricular/OS/C/Week12/rtos.c
2025-08-05 07:23:18 +05:30

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;}