SE-2-CH2 Page 1
L3-Informatique 2014
SE-2-CH2 Page 2
L3-Informatique 2014
II.1) Définition
On appelle tâche une unité élémentaire de traitement ayant une cohérence logique. Si
l'exécution du processus P est constituée de l'exécution séquentielle des tâches T1, T2,..., Tn, on
écrit : P = T1 T2...Tn
A chaque tâche Ti, on associe sa date de début ou d'initialisation di (lecture des paramètres
d’entrée, acquisition de ressources nécessaires, chargement d’information) et sa date de
terminaison ou de fin fi (écriture des résultats, libération des ressources, sauvegarde
d’information).
Une relation de précédence, notée "<", sur un ensemble E est une relation vérifiant :
La relation Ti < Tj entre tâches signifie que fi inférieur à dj entre dates. Si on n'a ni Ti < Tj
ni Tj < Ti, alors on dit que Ti et Tj sont exécutables en parallèle.
Une relation de précédence peut être représentée par un graphe orienté. Par exemple, la
chaîne de tâches S = ((T1, T2, T3), (Ti < Tj , pour i inférieur à j)) a pour graphe :
SE-2-CH2 Page 3
L3-Informatique 2014
1 2 3
Qu’on peut simplifier, en représentant le graphe de la plus petite relation qui a même
fermeture transitive que la relation de précédence : c'est le graphe de précédence:
1 2 3
Le graphe de précédence est une représentation graphique de la relation " → " qui est
trouvée à partir de "<" en retirant les transitivités. "<" et " → " ont même fermeture transitive.
G2*G2 T6
II.4) Construction du graphe de taches
Considérons un algorithme composé de 8 taches T1, …, T8 ; dont le système de précédence associé est le
suivant :
T1<T3 T1<T4 T1<T5 T1<T6 T1<T7 T1<T8
T2<T3 T2<T4 T2<T5 T2<T6 T2<T7 T2<T8
T3<T7 T3<T8
T4<T6 T4<T7 T4<T8
T5<T7
T6<T8
SE-2-CH2 Page 4
L3-Informatique 2014
En éliminant les contraintes redondantes, on obtient l’ensemble de relations suivantes :
T6 T7
T8
(S0)
Soit le système de tache (S0) suivant :
T1 lire X
T2 lire Z
T3 X<-X + Z
T4 Y<- X + Z
T5 afficher Y
(S1)
Le système S1 répartit les 5 tâches en 2 processus P1 P2
parallèles organisés chacun séquentiellement : T1 T2
T3 T4
T5
(S2)
T1 T2
T3
T4
Et S2 ? T5
SE-2-CH2 Page 5
L3-Informatique 2014
Soit : début
parbegin
Exemple 1: Lire a Lire b
lire a ;
lire b ;
parend
parbegin
c a*b d a*b c a*a ;
d b*b ;
parend
e c+d e c+d ;
fin
1 2
Exemple 2 : peut-on représenter le graphe ci-contre
de tâches par un programme parallèle utilisant
parbegin et parend ? 3 4
Il y a donc non déterminisme, La raison exacte du non déterminisme est que T3 et T2 lisent et
écrivent dans N (partage d'une case mémoire en lecture et écriture). Il suffit en fait qu'une écrive
et que l'autre lise pour que le résultat dépende de l'ordre d'exécution.
SE-2-CH2 Page 6
L3-Informatique 2014
d1 f1 d2 f2 d3 f3 d4 f4 d5 f5
x 0 0 α α α α α +γ α +γ α +γ α +γ α +γ
y 0 0 0 0 0 0 0 0 α +2γ α +2γ α +2γ
z 0 0 0 0 γ γ γ γ γ γ γ
0 1 2 3 4 5 6 7 8 9 10
Chaque tâche utilise certaines cellules soit pour les consulter soit pour les modifier.
A une tâche T, on associe :
- son domaine de lecture : L = {C'1, …, C'p} ou ensemble des cellules lues (consultées) par T.
- son domaine d'écriture : E = {C"1,…, C"p} ou ensemble des cellules écrites (modifiées) par T.
SE-2-CH2 Page 7
L3-Informatique 2014
Définition 1: un système de tâches S est déterminé si pour tous comportements w et w' et pour
toute cellule C de M, on a : V (C, w) = V (C, w')
Définition 2 : deux tâches T et T', sont non-interférentes vis à vis du système de tâches S si :
1) T est un prédécesseur ou un successeur de T', ou
2) LT ∩ E T' = L T' ∩ ET = ET ∩ ET' = Ø.
Avec l'exemple que nous développons, dans le système S1, T3 et T4 sont interférentes car T3
n'est ni prédécesseur, ni successeur de T4 et d'autre part L4 ∩ E3 ≠ Ø (vaut {X})
L’instruction fork L produit deux exécutions parallèles dans le programme, dont l’une
commence à l’instruction étiquetée à L et l’autre est la continuation de l’exécution après
l’instruction fork.
L’instruction join n permet de joindre n exécutions parallèles en une seule exécution. Les (n-
1) premières exécutions se terminent tant disque la neme exécution continuera en séquence.
Les deux instructions ParBeginet, ParEnd permettent de délimiter les blocs d’instructions
parallèles. La syntaxe de l’utilisation est la suivante : ParBegin I1, I2,…... In ParEnd.
Exemple1:(voir ci-dessus)
Remarque : fork et join sont des outils de spécification plus puissants que ParBegin et ParEnd.
P1
P1 ; P5;
P2
P3
N1=2 ; Goto L3;
Fork L1 ; L1: p3;
P2 ; L2: join N1;
P4
P4 ; P6;
P6 N2=2 L3: join N2;
P5 Fork L2; P7;
P7
IV) Quelques primitives de manipulation des processus sous linux :(voir les transparent)
SE-2-CH2 Page 9