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