Documente Academic
Documente Profesional
Documente Cultură
des processus
1
Communication inter-processus
Jusqu'à maintenant nous avons considéré les processus
comme des entités isolées n'ayant pour seul objectif que leur
exécution sur le processeur, et n'interagissant pas avec le
système ou avec d'autres processus.
Pourtant, des processus concurrents partagent des données (zones
de la mémoire, des fichiers, des ressources communes …) entre
eux, dans lesquels ils peuvent tous lire et écrire.
2
Communication inter-processus
Si l’accès concurrent à une ressource commune n’est pas
contrôlé, le résultat de l’exécution du programme pourra
dépendre de l’ordre d’entrelacement de l’exécution des
instructions
3
Communication inter-processus
4
Communication inter-processus
5
Communication inter-processus
6
Communication inter-processus
Si, au même moment, deux processus A et B souhaitent lancer l’impression d’un fichier,
8
Exemple 2-corruption de données
Deux processus P1 et P2 Procédure:
exécutent cette même procédure
et partagent la même base de * M. X demande une
données
réservation d’avion
Ils peuvent être interrompus * Base de données dit que
n’importe où fauteuil A est disponible
* Fauteuil A est assigné à X
Le résultat de l’exécution et marqué occupé
concurrente de P1 et P2 dépend
de l’ordre de leur entrelacement
9
Vue globale d'une exécution possible
P1 interruptions
P2
M. X demande une réservation
d’avion
M. Y demande une
réservation d’avion
Base de données dit à X que fauteuil
30A est disponible
Base de données dit à Y que fauteuil
30A est disponible
Fauteuil 30A est assigné à X et
marqué occupé
Fauteuil 30A est assigné à Y et marqué
occupé
10
Communication inter-processus
Objets et sections critiques
11
Communication inter-processus
Objet critique Section critique
Objet auquel ne peuvent Suite d'instructions d'un
accéder deux processus programme qui vont
simultanément. manipuler des objets
critiques.
12
Communication inter-processus
Structure d'un programme
Chaque processus doit donc demander une permission avant d’entrer dans une
section critique (SC)
La section de code qui effectue cette requête est la section d’entrée
La section critique est normalement suivie d’une section de sortie
Le code qui reste est la section restante
section d’entrée
section critique
section de sortie
section restante
13
Application
14
Communication inter-processus
Race conditions (conditions de course)
Les situations dans lesquelles des processus peuvent être en ''course'' pour
accéder à certaines ressources et dont le résultat dépend de l'ordre d'accès
sont appelées conditions de course ( race conditions) .
=> Non déterminisme: le résultat est aléatoire avec les mêmes données.
Solution: une section critique SC ne doit être exécutée que par un seul
processus à la fois ( on dira que le processus est dans sa SC)
15
Critères nécessaires pour solutions valides
Deux processus ne peuvent pas être en même temps en section critique
relative à une ressource commune.
Aucune hypothèse ne doit être faite sur les vitesses relatives des
processus et sur le nombre de processeurs.
Non interférence: Si un processus s’arrête dans sa section restante ( en
dehors de sa section critique ) , ceci ne devrait pas affecter les autres
processus = ne doit pas les bloquer.
Progrès: absence d'inter-blocage; c-à-d: si un processus demande
d’entrer dans une section critique à un moment où aucun autre processus
n'en fait la requête, il devrait être en mesure d’y entrer.
16
Types de solutions
Solutions logiciel
des algorithmes dont la validité ne s’appuie pas sur l’existence
d’instructions spéciales.
Solutions fournies par le matériel
s’appuient sur l’existence de certaines instructions spéciales (du
processeur).
Solutions fournies pas le SE
procure certains appels systèmes au programmeur.
17
Remarques
Atomicité = indivisibilité
18
Solutions logicielles
1- l'alternance stricte:
On utilise une variable tour partagée qui va contenir le numéro du
processus à entrer en section critique.
Algorithme pour 2 processus:
entrer_SC(int NumProcess) sortir_SC()
{ {
While ( tour != NumProcess) /* attente active */ tour=(autreProcess);
}
}
19
Solutions logicielles
Alternance stricte
20
Solutions logicielles
4- Algorithme de Peterson (1981):
On va introduire une nouvelle variable par processus pour
savoir s'il est intéressé ou non par la SC.
21
Algorithme de Peterson
#define N 2 /* nombre de processus */
23 23
Algorithme de Peterson
24
Algorithme de Peterson
Lorsqu'un processus veut entrer en section critique, il notifie les autres de
ses intentions en positionnant correctement son entrée dans le tableau
interesse[ ], puis il s'approprie le prochain tour.
25 25
Solutions logicielles
Lacunes des solutions logiciel
Difficiles a programmer!
Les processus qui requièrent l’entrée dans leur SC sont
occupés à attendre (busy waiting); consommant ainsi du
temps processeur
26
Solution matérielles
En étudiant de près les problèmes liés à l'exclusion mutuelle et
la corruption de données qui peut en découler, on constate
que le point critique se trouve entre la lecture d'une variable
et son écriture.
27
Solution matérielles
28
Solution matérielles
L'instruction: TSL RX, LOCK
Test and Set Lock, ( tester et définir le verrou ) qui fonctionne
ainsi:
Elle charge le contenu du mot mémoire LOCK dans le registre
RX, et en même temps, elle met la valeur LOCK à 1.
Cette instruction est garantie comme étant atomique, c'est-à-dire
que l'arrivée d'une interruption ne sera acquittée par le processeur
que lorsque l'opération du TSL sera terminée
29 29
Avantage de l’instruction TSL
elle occupe le bus pendant toute son exécution. De ce simple
fait, elle empêche d'éventuels autres processeurs d'accéder en
même temps au mot mémoire LOCK.
30 30
Solution matérielles
entrer_region:
Label:
TSL Reg, Verrou | copier verrou dans Reg, et mettre lock à 1
CMP Reg, #0 | verrou était-elle à 0 ?
JNE Label | si différent boucler ( aller au début et refaire l
|le test
RET | Retourne à l’appelant, entre en section
|Critique
quitter_region:
MOVE Verrou, #0 | écrire 0 dans lock
RET
31 31
Problème:
Attente active: Consommation des ressources du processeur. Un
processus qui est en attente, effectue une boucle while, gaspillant
ainsi du temps processeur inutilement.
Exemple: supposons qu'on a 2 processus H avec une haute priorité
et B avec une basse priorité.
Si H est entrain de réaliser une opération d' E/S et B entre en SC. H
termine son E/S élu (prioritaire) va être exécuté avant que B
ne sorte de sa SC donc H va boucler indéfiniment.
32
Solutions avec attente passive (SE)
Solution:
Endormir un processus en attente et le réveiller dès que la
ressource est libre, pour cela , il y a 2 appels système:
Sleep() pour endormir le processus appelant
Wakeup(...) pour réveiller le processus passé en
argument
33
Solutions avec attente passive
Exemple: problème producteur/consommateur
34
Solutions avec attente passive
Problèmes:
35
Solutions avec attente passive
Algorithme
Soit N la taille du tampon.
On va jouer sur le nombre d'éléments dans le tampon qu'on va
stocker dans une variable compteur
#define N 100 /* nbre d’emplacement ds tampon */
37
Sémaphores
Pour contrôler les accès à un objet partagé E. W. Dijkstra
proposa en 1965 un nouveau type de variables appelées:
sémaphores. Ils sont maintenant largement utilisés dans les
systèmes d'exploitation modernes.
Définition:
Un sémaphore est un compteur entier qui désigne le nombre
d'accès disponible à une certaine ressource.
Chaque sémaphore à un nom et une valeur initiale.
Les sémaphores sont manipulés par des opérations:
P() (désigné aussi par down() ou wait ) décrémente le
sémaphore.
V() ( désigné par up() ou signal ) incrémente la sémaphore.
38
Sémaphores
La commande V(), incrémente le sémaphore.
39
Sémaphores
Solution du problème producteur /consommateur
40
Sémaphores
#define N 100 /* nombre de places dans le tampon */
Int element ;
}
41
}
Sémaphores
void consommateur (void)
{
int element ;
while (TRUE) {
P (occupe) ; /* déc. nb emplacements occupés */
P (mutex) ; /* entrée section critique */
prelever_element () ; /* retire un élement du tampon */
V (mutex) ; /* sortie de la section critique */
V (libre) ; /* inc. nb emplacements libres */
}
}
42
Sémaphores
Remarque
semaphore S;
P(S) décrémente le sémaphore S si S>0 sinon blocage
du processus appelant.
V(S) incrémente le sémaphore S si aucun processus
n'est bloqué par P(S), sinon l'un d'entre eux sera choisi
pour être élu
43