Vous êtes sur la page 1sur 5

Exercice 1

a) Vérifier l’ordonnançabilité, construire et discuter l’ordonnancement selon l'algorithme RM


pour l'ensemble des tâches périodiques suivantes:
Tâche Ci Ti
τ1 1 4
τ2 2 6
τ3 3 10

b) Vérifier l’ordonnançabilité, construire et discuter l’ordonnancement selon l'algorithme RM


puis l’algorithme EDF pour l'ensemble des tâches périodiques suivantes:

Tâche Ci Ti
τ1 1 4
τ2 2 6
τ3 3 8
c) Vérifier l’ordonnançabilité, construire et discuter l’ordonnancement selon l'algorithme RM
puis l’algorithme EDF pour l'ensemble des tâches périodiques suivantes:
Tâche Ci Ti
τ1 2 5
τ2 4 7
Exercice 2

Soient les deux fonctions C ci-dessous, write et read, et la structure ‘tampon_cir’.


1Donner l’organigramme des deux fonctions .

2 On dispose d’une mémoire tampon de 8 mots. Donner la valeur de ‘tail’ et ‘head’ à


chaque étape, si on appelle les fonctions read et write (à partir d’une fonction main, supposée
déjà écrite, en affectant les valeurs indiquées à data) successivement :
data instruction hea tail 0 1 2 3 4 5 6 7
d
----- Read(data,buffer*s)
5 write(data,buffer*s)
9 write(data,buffer*s)
3 write(data,buffer*s)
8 write(data,buffer*s)
0 Read(data,buffer*s)
----- Read(data,buffer*s)
4 write(data,buffer*s)
4 write(data,buffer*s)
1 write(data,buffer*s)

3 Donner le contenu final de la mémoire tampon et les valeurs finales de head, et tail. Cette
mémoire tampon est-elle de type LIFO, FIFO ou RING ?

typedef struct /*buffer*/ void write(int data, buffer * s) void read(int data,buffer * s)
{ { {
int contents[n]; /* buffer area */ int head; int head;
int head; /* head index */ int tail; int tail;
int tail; /* tail index */ if (s->tail+1 % n == s->head) if (s ->head ==s ->tail)
}buffer; printf("erreur : \n"); data =NULL;
else { else {
s->contents[s->tail] = data; data =s->contents[head];
s->tail =(s->tail)+1 % n; s ->head=(s->head+1) % n;
} }
} }
4 1 (a) (b) EDF τ 15 τ 2 τ 1 τ 2 0 5 10 20 25 30 35 0 7 14 21 28 35 15 time overflow 0 5 10 20 25 30 35 0
7 14 21 28 35 RM Figure 4.13 Schedule produced by RM (a) and EDF (b) on the same set of periodic
tasks. 4.4.2

Considérez l'ensemble de tâches périodiques illustré à la Figure 4.13, pour lequel le facteur d'utilisation du
processeur est

U = 2/5 + 4/7 = 34/35 = 0,97.

Cela signifie que 97% du temps processeur est utilisé pour exécuter les tâches périodiques, tandis que le
processeur est inactif dans les 3% restants. Etant U> 2 (√2−1) ≅ 0,83, l'ordonnancabilité de l'ensemble de tâches
ne peut pas être garantie sous RM, alors qu'elle est garantie sous EDF. En effet, comme le montre la figure
4.13a, RM génère une échéance manquée au temps t = 7, alors qu'EDF réalise toutes les tâches dans leurs délais
Une autre différence importante entre RM et EDF concerne le nombre de préemptions intervenant dans
l'échéancier. Comme le montre la Figure 4.13, sous RM, chaque instance de la tâche τ2 est préemptée, pour un
nombre total de cinq préemptions dans l'intervalle T = T 1T2. Sous EDF, la même tâche n'est préemptée qu'une
seule fois dans le même intervalle. Le plus petit nombre de préemptions dans EDF est une conséquence directe
de l’affectation dynamique des priorités, qui à tout instant privilégie la tâche avec le délai le plus proche,
indépendamment des périodes des tâches.
Considérez trois tâches périodiques τ1, τ2 et τ3, ayant une priorité décroissante) et partageant trois
ressources, A, B et C, accessibles à l'aide du protocole d'héritage de priorité. Calculez le temps de
blocage maximal Bi pour chaque tâche, sachant que la durée la plus longue δi, R pour une tâche τi sur
la ressource R est donnée dans le tableau suivant:

Vous aimerez peut-être aussi