Skip to content
Snippets Groups Projects
Commit 10244730 authored by KOEHLE Nicolas's avatar KOEHLE Nicolas
Browse files

update instance and algo / fixed read_instance

parent f99d2ae6
No related branches found
No related tags found
No related merge requests found
...@@ -161,7 +161,7 @@ int event_preceed(const void * a, const void * b) { ...@@ -161,7 +161,7 @@ int event_preceed(const void * a, const void * b) {
{ {
//typej = typek = arrivee et pj = pk et j < k //typej = typek = arrivee et pj = pk et j < k
if(get_event_processing_time(Akey) == get_event_processing_time(Bkey) if(get_event_processing_time(Akey) == get_event_processing_time(Bkey)
&& get_event_task_id(Akey) < get_event_task_id(Bkey)){ && strcmp(get_event_task_id(Akey), get_event_task_id(Bkey)) < 0){
return 1; return 1;
} }
//typej = typek = arrivee et pj < pk //typej = typek = arrivee et pj < pk
...@@ -266,7 +266,7 @@ int ready_task_preceed(const void * a, const void * b) { ...@@ -266,7 +266,7 @@ int ready_task_preceed(const void * a, const void * b) {
struct ready_task_key_t* tb = b; struct ready_task_key_t* tb = b;
int res = get_ready_task_remaining_processing_time(b) - get_ready_task_remaining_processing_time(a); int res = get_ready_task_remaining_processing_time(b) - get_ready_task_remaining_processing_time(a);
if (res == 0) if (res == 0)
return get_ready_task_id(a) < get_ready_task_id(b); return strcmp(get_ready_task_id(ta), get_ready_task_id(tb)) < 0;
else else
return res > 0; return res > 0;
} }
...@@ -298,11 +298,10 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b ...@@ -298,11 +298,10 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b
while(get_tree_size(event_tree) != 0){ while(get_tree_size(event_tree) != 0){
//Extraire de E l’ ́evenement e correspondant a l’instant t le plus petit //Extraire de E l’ ́evenement e correspondant a l’instant t le plus petit
//Partie fausse, a faire //a verfieier ?
struct tree_node_t* event_node = get_node(event_tree); // ? struct tree_node_t* event_node = tree_min(get_root(event_tree)); // recuperation du node a l instant t le plus petit
struct event_key_t* event_key = (struct event_key_t *) get_tree_node_key(event_node); struct event_key_t* event_key = (struct event_key_t*) get_tree_node_key(event_node);
struct task_t* task = tree_remove(event_tree, event_key); //recuperer la data et la cast en tache struct task_t* task = (struct task_t*) get_tree_node_data(event_node); //recuperer la data et la cast en tache
//fin partie fausse
// Si e concerne la libération d'une tache Tj // Si e concerne la libération d'une tache Tj
if (get_event_type(event_key) == EVT_LIBERATION) { if (get_event_type(event_key) == EVT_LIBERATION) {
...@@ -326,8 +325,9 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b ...@@ -326,8 +325,9 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b
if(get_tree_size(ready_tasks) != 0){ ////si la file d’attente Q n’est pas vide if(get_tree_size(ready_tasks) != 0){ ////si la file d’attente Q n’est pas vide
//Extraire de Q la tache Tk avec la duree la plus courte (regle SPT) //Extraire de Q la tache Tk avec la duree la plus courte (regle SPT)
struct event_key_t* shortest_task_key = NULL; struct tree_node_t* shortest_node = tree_min(get_root(ready_tasks)); //pareil qu'en haut, a verifier
struct task_t* shortest_task = NULL; struct ready_task_key_t* shortest_task_key = (struct ready_task_key_t*) get_tree_node_key(shortest_node);
struct task_t* shortest_task = (struct task_t*) get_tree_node_data(shortest_node);
//Affecter Tk a Mi en t dans S //Affecter Tk a Mi en t dans S
int machine = find_empty_machine(ordonnancement, get_event_time(event_key)); int machine = find_empty_machine(ordonnancement, get_event_time(event_key));
...@@ -337,15 +337,19 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b ...@@ -337,15 +337,19 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b
struct event_key_t* end_key = new_event_key(EVT_FIN_EXEC, get_event_time(event_key) + get_event_processing_time(event_key), get_event_processing_time(event_key), get_task_id(task), machine); struct event_key_t* end_key = new_event_key(EVT_FIN_EXEC, get_event_time(event_key) + get_event_processing_time(event_key), get_event_processing_time(event_key), get_task_id(task), machine);
tree_insert(event_tree, end_key, shortest_task); tree_insert(event_tree, end_key, shortest_task);
} if(get_tree_size(ready_tasks) != 0){
tree_remove(ready_tasks, shortest_task_key);
}
}
} }
//delete_event_key(event_key); //pas sur de ça tree_remove(event_tree, event_key);
} }
//delete_tree(event_tree, ); //fin de la fonction, libreation mem des arbres
//delete_tree(ready_tasks, ); delete_tree(event_tree, delete_event_key, NULL);
delete_tree(ready_tasks, delete_ready_task_key, NULL);
return ordonnancement; return ordonnancement;
} }
...@@ -53,7 +53,6 @@ void delete_task(void * task) { ...@@ -53,7 +53,6 @@ void delete_task(void * task) {
********************************************************************/ ********************************************************************/
Instance read_instance(const char * filename) { Instance read_instance(const char * filename) {
// A FAIRE
FILE *fp = fopen(filename, "r"); FILE *fp = fopen(filename, "r");
if(fp == NULL){ if(fp == NULL){
printf("Erreur lors de la lecture du fichier %s\n", filename); printf("Erreur lors de la lecture du fichier %s\n", filename);
...@@ -62,10 +61,9 @@ Instance read_instance(const char * filename) { ...@@ -62,10 +61,9 @@ Instance read_instance(const char * filename) {
Instance I = new_list(view_task, delete_task); Instance I = new_list(view_task, delete_task);
// fscanf("%s %d %d ", &id, &proctime, &reltime);
char tempId[256] = {0}; char tempId[256] = {0};
unsigned long tempProc, tempRel; unsigned long tempProc, tempRel;
while(fscanf(fp, "%255s %d %d ", &tempId, &tempProc, &tempRel) == 3) while(fscanf(fp, "%255s %lu %lu ", &tempId, &tempProc, &tempRel) == 3)
{ {
char* str = malloc(strlen(tempId) + sizeof(char)); char* str = malloc(strlen(tempId) + sizeof(char));
strcpy(str, tempId); strcpy(str, tempId);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment