GEF 435 Principes des systèmes dexploitation Communication Interprocessus (Tanenbaum 2.3)

Preview:

Citation preview

GEF 435Principes des systèmes d’exploitation

Communication Interprocessus(Tanenbaum 2.3)

Revue

• Quels sont nos trois choix pour implémenter les threads?

• Donner des avantages d’implémenter les threads dans l’espace utilisateur.

Synopsis

• Synopsis de la communication interprocessus• Concurrence critique (Race Conditions)• Régions critiques• Exclusion mutuelle• Méthodes d’exclusion mutuelle

Synopsis de la CIP

• Les processus doivent communiquer ensemble souvent pour être capable d’achever certaines tâchesComment est-ce que les processus envoient de

l’information entre eux?Comment est-ce que l’on empêche les processus

d’interférer entre eux?Comment fait-on attendre un processus pour que

d’autres finissent leurs activités? (ie: Processus A produit des données utilisées par le Processus B)

Concurrence critique

• S’applique aux processus qui travaillent ensemble mais qui partagent de la mémoire commune pour la lecture et écritureMémoire principale (RAM)Fichiers partagésRegistres d’unité périphérique

Concurrence critique

• Exemple: un spouleur d’impressionQuand un processus veut imprimer, il place le nom du

fichier dans une case du répertoire de l’imprimante

•Chaque case contient un nom de fichier•Deux variables partagées:

•out pointe au prochain fichier à être imprimé•in pointe à la prochaine case

•Un démon vérifie périodiquement si il y a un fichier à imprimer•Y a t-il un problème avec ça?

Concurrence critique

• Exemple du spouleur d’impression

• Un changement de processus à un moment inopportun cause le processus B à perdre sa job d’impression

Process A Process B

freeSlot = in;

writeName(freeSlot);

in = freeSlot+1;

doMoreStuff();

freeSlot = in;

writeName(freeSlot);

in = freeSlot+1;

doMoreStuff();

Concurrence critique

• Une Concurrence critique est une situation où deux processus ou plus essaient de partager des données et le résultat dépend de l’ordre dans lequel chaque processus exécute

• Donc la place dans le code où une condition de concurrence critique peut arriver est d’intérêt particulier et s’appelle une Région critique (ou section critique)

Régions critiques

• Idéalement, nous essayons de ne pas avoir des régions dans le code où la concurrence critique peut arriver, mais cela n’est pas toujours possible

• Les programmes doivent être arrangés ou dessinés de tel façon à ce qu’aucun groupe de processus n’opère dans leurs région critique (commune) en même tempsLes régions critiques doivent être mutuellement

exclusive

Exclusion mutuelle• C’est évident que les régions critiques doivent opérer en

exclusion mutuelle mais ce n’est pas une définition suffisante pour nos besoins.

• La solution pour prévenir la concurrence critique doit rencontrer ces requis:

1) Aucune paire de processus ne doit être dans leurs régions critique en même temps

2) Aucune supposition ne peut être fait à propos de la vitesse ou du nombre de CPU

3) Un processus qui n’opère pas dans sa région critique ne doit pas bloquer un autre processus

4) Un processus ne devrait pas avoir à attendre indéfiniment pour entrer dans sa région critique

Exclusion Mutuelle

Une représentation graphique de notre requis pour l’exclusion mutuelle

Méthodes pour implémenter l’exclusion mutuelle

• Trois solution potentielles :Désactiver les interruptionsUtiliser des variables verrousAlternance stricte

Méthodes pour l’exclusion mutuelle

• Désactiver les interruptions:Chaque processus désactive les interruptions quand ils

entre dans leur région critique. Aucun changement de contexte ne peut arriver

Problème: Si le thread utilisateur barre ou entre dans une boucle infinis le SE barre ou plante

Problème: Que ce passe-t-il avec des CPU multiples?Problème: Si la région critique est large, qu’est ce qui

ce passe si un périphérique a besoin d’attentionSolution viable? Non.

Méthodes pour l’exclusion mutuelle

• Variables verrous:Partage d’une variable verrou (lock)Quand un processus veut entrer dans sa région critique

il examine le verrou, si la valeur est 0 il le met à 1 et entre dans la région critique

Problème: Cette solution déplace la concurrence critique de place. Un changement de processus à un moment inopportun peut résulter dans les deux processus dans la région critique en même temps

Solution viable? Non.

Méthodes pour l’exclusion mutuelle

• Alternance stricte

• Notez que le point-virgule après les instructions while() – crée une mini boucle

• Vérifier une variable continuellement jusqu’à ce qu’une valeur apparaisse s’appelle de l’attente active (Busy Waiting)

Process A Process B

Méthodes pour l’exclusion mutuelle

• Alternance stricte opère d’après son nom: Chaque processus prend son tour pour entrer dans sa région critique

• La mini boucle while est utilisée comme verrou pour empêcher l’entrée dans la région critique. Un verrou qui utilise une attente active (busy waiting) s’appelle un spin lock

• Problème: la 3ème règle est violée – si A exécute plus vite que B, A attend pour entrer dans sa région critique pendant que B exécute du code non critique

• Solution viable? Non. Mais c’est proche...

Méthodes pour l’exclusion mutuelle• Solution de Peterson

Méthodes pour l’exclusion mutuelle

• Solution de PetersonRégion critique est maintenant protégéeSolution viable? Oui!

• Par contre l’attente active est encore requise… une perte de temps du CPU

• Notez aussi que le processus ne peut pas tricher: si les processus n’appelle pas enter_region et leave_region, la solution ne marchera pas

• Aussi fonctionne seulement pour deux processus. Algorithme du boulanger est utilisé dans ce cas

Méthodes pour l’exclusion mutuelle

• De l’aide du matériel: TSL• TSL veut dire instruction Test and Set Lock

Plusieurs ordinateurs supportent cette instruction ou une instruction semblable

Comment est-ce utilisé? TSL RX,LOCK• Lis le contenue de la variable en mémoire, LOCK dans le

registre RX et entrepose une valeur non zéro dans la variable LOCK

• Les actions de lire le mot LOCK et d’entreposer la valeur non zéro sont indivisibles c’est garantie!

Méthodes pour l’exclusion mutuelle

• Comment utiliser l’instruction TSL?

• Comme la solution de Peterson, on entoure la région critique avec les appels enter_region et leave_region

• Solution viable? Oui! (Avec attente active...)

Quiz Time!

Questions?

Recommended