0% ont trouvé ce document utile (0 vote)
11 vues10 pages

TP 2 - Ordonnancement Dynamique Pour Programme Flot de Données Multi-Périodes Emilly Raiane Rodrigues Laura Debastiani e Silva 2

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1/ 10

TP 2 - Ordonnancement dynamique pour programme flot de données multi-périodes

Emilly Raiane Rodrigues


Laura Debastiani e Silva

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.

volatile int m= wcet_time*100000 - adjust;

volatile int adjust = 0.000000001;


Time elapsed in ms: 108.322000
volatile int adjust = 100;
Time elapsed in ms: 81.581000
volatile int adjust = 1000000000;
Time elapsed in ms: 0.003000

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:

4*W10 + 2*W20 + W40 < TC40_PERIOD

Comme on avait un période de 4000, pour le premier cas on a fait:

4*300+ 2*600 + 1*1200 = 3600 < 4000

Starting p10 at priority 9 with WCET = 300 and period = 1000


Starting c20 at priority 8 with WCET = 600 and period = 2000
Starting c40 at priority 7 with WCET = 1200 and period = 4000
Notre tâche 1 est définie comme le producteur, donc on a un période spécifique pour faire la
confection du message. Mais on a une causalité pour les autres deux tâches consommateurs du
contenu, son temps de consommation n’est pas déterministe et peut varier en dépendant des
autres processus.
Mais, on peut aussi percevoir que quand on fait un bon choix en regardant les valeurs de W,
toutes les tâches ont l’opportunité d’être terminées.
On a fait aussi deux autres exemples avec d’autres valeurs de W pour s’assurer de la véracité
de la formule.

Starting p10 at priority 9 with WCET = 200 and period = 1000


Starting c20 at priority 8 with WCET = 200 and period = 2000
Starting c40 at priority 7 with WCET = 1200 and period = 4000

4*200+ 2*200 + 1*1200 = 3000 < 4000

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.

Starting p10 at priority 9 with WCET = 200 and period = 1000


Starting c20 at priority 8 with WCET = 1500 and period = 2000
Starting c40 at priority 7 with WCET = 1200 and period = 4000

4*200+ 2*1500 + 1*1200 = 4000 <= 4000

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.

/* Task priorities. configMAX_PRIORITIES has type ( unsigned portBASE_TYPE ) */


#define prod40_task_PRIORITY (configMAX_PRIORITIES - 3)
#define cons20_task_PRIORITY (configMAX_PRIORITIES - 2)
#define cons10_task_PRIORITY (configMAX_PRIORITIES - 1)

#define TP40_OFFSET 1000


#define TC20_OFFSET 1000
#define TC10_OFFSET 1000

/* 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.

static void cons20( void * pvParameters ) {

portTickType xLastWakeTime, now, then;


int val;
xLastWakeTime = xTaskGetTickCount();
vTaskDelayUntil(&xLastWakeTime, TC20_OFFSET);

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

vTaskDelayUntil( &xLastWakeTime, TP40_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++;

vTaskDelayUntil( &xLastWakeTime, TP40_PERIOD );


}
}

execution 2

execution 3
d

Starting p40 at priority 7 with WCET = 200 and period = 4000


Starting c20 at priority 8 with WCET = 1699 and period = 2000
Starting c10 at priority 9 with WCET = 1000 and period = 1000

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy