Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
ProjetSyntheseL2
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
GOLINELLI Mathias
ProjetSyntheseL2
Commits
10244730
Commit
10244730
authored
2 years ago
by
KOEHLE Nicolas
Browse files
Options
Downloads
Patches
Plain Diff
update instance and algo / fixed read_instance
parent
f99d2ae6
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/algo.c
+18
-14
18 additions, 14 deletions
src/algo.c
src/instance.c
+1
-3
1 addition, 3 deletions
src/instance.c
with
19 additions
and
17 deletions
src/algo.c
+
18
−
14
View file @
10244730
...
@@ -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
(
t
a
)
,
get_ready_task_id
(
t
b
)
)
<
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
;
}
}
This diff is collapsed.
Click to expand it.
src/instance.c
+
1
−
3
View file @
10244730
...
@@ -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
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment