TP 2 - Ordonnancement Dynamique Pour Programme Flot de Données Multi-Périodes Emilly Raiane Rodrigues Laura Debastiani e Silva 2
TP 2 - Ordonnancement Dynamique Pour Programme Flot de Données Multi-Périodes Emilly Raiane Rodrigues Laura Debastiani e Silva 2
TP 2 - Ordonnancement Dynamique Pour Programme Flot de Données Multi-Périodes Emilly Raiane Rodrigues Laura Debastiani e Silva 2
2.
Dans cette partie du TP on veut faire l’analyse du spent_time_with_WCET. Quand on
change la variable adjust on a une variation dans sa durée. Quand on choisit une valeur trop
grande pour l'adjust il est observé que le temps de duration est très petit, ça se produit car
notre variable m est dépendant de adjust.
Ci-dessous on observe l’influence des valeurs choisis pour adjust pour le
spent_time_with_WCET.
Alors, quand on a adjust plus petit on a le worst case executing time scenario. Quand
on utilise spendtime_phelma.c on observe que notre temps d'exécution plus proche de 100s
est de 80 ms, comme on peut observer dans l’image ci-dessus.
4.
Dans main.c on a changé la variable adjust pour la même qu’on a choisi pour le fichier
spendtime_phelma.c. Et on a obtenu le chronogramme.
5.
On a choisi les valeurs de W10, W20 et W40 de manière qu’ils respectent la formule
ci-dessous:
Dans les activités précédentes (question 3 par exemple) nous avons rencontré des elapse time
différents au pas qu’on faisait l'exécution du programme. Ce comportement est le même ici,
ou la lecture ne sera pas déterministe et donc il faut considérer que des situations ou nous
irons avoir le pire cas, qui est déterminé par la fonction spend_time_with_WCET.
Alors, on observe que quand on utilise les valeurs de temps du worst case toutes les tâches
auront du temps pour être propagées.
ne sera pas déterministe et donc il faut considérer que des situations ou nous irons avoir le
pire cas, qui est déterminé par la fonction spend_time_with_WCET.
Alors, on observe que
6.
/* Schedulability
* 4*W10 + 2*W20 + W40 < TC10_PERIOD
* 2*W10 + W20 < TC20_PERIOD
* W10 < TP40_PERIOD
*/
#define TC10_PERIOD 1000
#define TC20_PERIOD 2000
#define TP40_PERIOD 4000
/* constants, corresponding to WCETs of tasks, to be used in spend_time_with_WCET */
/*#define W10 200
#define W20 900
#define W40 1200
*/
#define W10 300
#define W20 600
#define W40 1200
Dans les activités précédentes (question 3 par exemple) nous avons rencontré des
elapse time différents au pas qu’on faisait l'exécution du programme. Ce comportement est le
même ici, ou la lecture ne sera pas déterministe et donc il faut considérer que des situations ou
nous irons avoir le pire cas, qui est déterminé par la fonction spend_time_with_WCET.
for(;;){
now = xTaskGetTickCount();
val = Buf10_to_20;
spend_time_with_WCET(W20,0);
then = xTaskGetTickCount();
store_trace_elt (2, now, val, now, then);
vTaskDelayUntil( &xLastWakeTime, TC20_PERIOD );
}
}
static void prod40( void * pvParameters ) {
portTickType xLastWakeTime, now, then;
int val = 0;
xLastWakeTime = xTaskGetTickCount();
vTaskDelayUntil(&xLastWakeTime, TP40_PERIOD);
for(;;){
now = xTaskGetTickCount();
spend_time_with_WCET(W40,1);
Buf10_to_20 = val;
Buf10_to_40 = val;
then = xTaskGetTickCount();
store_trace_elt (4, now, val, now, then);
val++;
for(;;){
now = xTaskGetTickCount();
spend_time_with_WCET(W40,1);
Buf10_to_20 = val;
Buf10_to_40 = val;
then = xTaskGetTickCount();
store_trace_elt (4, now, val, now, then);
val++;
execution 2
execution 3
d