210 likes | 292 Views
GEF 435 Principes 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
E N D
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âches • Comment 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 écriture • Mémoire principale (RAM) • Fichiers partagés • Registres d’unité périphérique
Concurrence critique • Exemple: un spouleur d’impression • Quand 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
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 temps • Les 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 interruptions • Utiliser des variables verrous • Alternance 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’attention • Solution 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 Peterson • Région critique est maintenant protégée • Solution 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?