Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Module Systèmes d’exploitation
BTS Génie Informatqiue École Normale Supérieure Tétouan Département Informatique Module Systèmes d’exploitation Chapitre 6 Communication Interprocessus Partie I Enseigant : AAMMOU Souhaib
2
Module Systèmes d'exploitation
BTS Génie Informatqiue Revue Quand est-ce que l’on prend des décision d’ordonnancement? Quels sont les buts de l’ordonnancement pour les systèmes interactifs Quels facteurs sont pris en compte quand on veut désigner une grandeur de quantum pour l’algorithme tourniquet? Three choices: User space, kernel, hybrid Advantages: Each process can have its own scheduling algorithm Fast as less TRAPS to the kernel have to be made Can be implemented on an OS without its knowledge Easily scaled as the run-time system can allocate memory for the threads Quantum size: If the quantum size is large then interactive processes will appear sluggish If the quantum size is small then the overhead involved with a context switch becomes unbearable We must consider the average length of CPU burst We must consider the context switch time Enseigant : AAMMOU Souhaib
3
Module Systèmes d'exploitation
BTS Génie Informatqiue Synopsis Introduction Concurrence critique (Race Conditions) Sections critiques Exclusion mutuelle Exclusion mutuelle par attente active 1ère solution: Masquage des interruptions 2ème solution: Variables de verrouillage 3ème solution: Alternance Instruction TSL Synthèse Enseigant : AAMMOU Souhaib
4
Module Systèmes d'exploitation
BTS Génie Informatqiue Introduction Les processus concurrents s’exécutant dans le système d’exploitation peuvent être des processus coopératifs ou indépendants. Un processus est indépendant s’il n’affecte pas les autres processus ou ne peut pas être affecté par eux. Un processus qui ne partagent pas de données avec d’autres processus est indépendant Un processus est coopératif s’il peut affecter les autres processus en cours d’exécution ou être affecté par eux Un processus qui partage des données avec d’autres processus est un processus coopératif. Les données partagées par les processus coopératifs peuvent se trouver en : Mémoire principale (RAM) Fichiers partagés Registres d’unité périphérique Enseigant : AAMMOU Souhaib
5
Module Systèmes d'exploitation
BTS Génie Informatqiue Introduction Les processus d’un se ne s’exécutent pas de manière isolée (indépendant). Certains processus ont besoin de coopérer, et nécessitent donc des moyens de communication et de synchronisation, et d’autres se trouvent en compétition pour les ressources du système, soit à cause de la nature physique de la ressource (non partageabilité), soit parce que les opérations sur cette ressource peuvent provoquer des incohérences ou des interblocages. Enseigant : AAMMOU Souhaib
6
Module Systèmes d'exploitation
BTS Génie Informatqiue Introduction Exemple Considérons la procédure suivante de mise à jour d’un compte bancaire d’un client. Pour simplifier, on considère qu’un compte est implémenté par un simple fichier qui contient le solde courant du client: Procedure crediter_compte( entier numero_client, entier somme) entier solde ; debut solde=lire_dans_fichier(numero_client); /* lecture du solde dans le fichier du client */ solde = solde - somme ; ecrire_dans_fichier(numero_client, solde) ; /* écrire dans le fichier le nouveau solde */ fin; Enseigant : AAMMOU Souhaib
7
Module Systèmes d'exploitation
BTS Génie Informatqiue Introduction Supposons maintenant que cette même procédure est exécutée simultanément par deux processus P0 et P1 dans un système d’exploitation à temps partagé. Sans faire aucune hypothèse sur la durée du quantum, on peut faire les exécution suivantes : P0 : P1 : crediter_compte( 1233, 1000) crediter_compte( 1233, 500) solde = lire_dans_fichier(1233) ; solde = lire_dans_fichier(1233) ; // P0 est bloqué ! solde=solde-1000 ; solde=solde-500 Ecrire_dans_fichier(1233,solde) ; Ecrire_dans_fichier(1233,solde) Supposons que solde vaut 2000 au départ: Si les deux processus s’exécutent normalement le variable solde vaut 500 Par contre ds notre cas le solde vaut 1000 même si en enlève 1500. Conclusion : Le résultat dépend de l’ordre dans lequel chaque processus exécute Résultat ? Enseigant : AAMMOU Souhaib
8
Module Systèmes d'exploitation
BTS Génie Informatqiue Introduction Le problème dans le programme précédent est dû aux conflits d’accès au même fichier (précisément le variable solde). Ces accès sont en lecture et en écriture. Évidemment, il ne peut y avoir de conflit si les accès aux données ne sont qu’en lecture seule. On appelle section critique la partie d’un programme où se produit le conflit d’accès Comment éviter ces conflits d’accès ? Il faut trouver un moyen d’interdire la lecture ou l’écriture des données partagées à plus d’un processus à la fois Il faut une exclusion mutuelle qui empêche les autres processus d’accéder à des données partagées si celles-ci sont en train d’être utilisées par un processus Dans l’exemple précédent, il faut obliger le processus P1 à attendre la terminaison de P0 avant d’exécuter à son tour la même procédure 8 Enseigant : AAMMOU Souhaib
9
Module Systèmes d'exploitation
BTS Génie Informatqiue 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 section critique (ou région critique) Note that this is really for the case where you expected the result to be determinable, but this is more random. Therefore, it doesn’t count as a race condition if you expect the behavior to be non-deterministic. Enseigant : AAMMOU Souhaib
10
Module Systèmes d'exploitation
BTS Génie Informatqiue Sections critiques Idéalement, nous essayons de ne pas avoir des sections 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 section critique (commune) en même temps Les sections critiques doivent être mutuellement exclusive Enseigant : AAMMOU Souhaib
11
Module Systèmes d'exploitation
BTS Génie Informatqiue Sections critiques Pour que les processus qui partagent des objets (données en mémoire centrale ou dans fichiers) puissent coopérer correctement et efficacement, quatre conditions sont nécessaires : Exclusion mutuelle : deux processus ne peuvent être en même temps en section critique ≡ Aucune paire de processus ne doit être dans leurs sections critique en même temps. Famine : aucun processus ne doit attendre trop longtemps avant d’entrer en section critique ≡ Un processus ne devrait pas avoir à attendre indéfiniment pour entrer dans sa section critique. Interblocage (deadlock) : aucun processus suspendu en dehors d’une section critique ne doit bloquer les autres d’y entrer ≡ Un processus qui n’opère pas dans sa section critique ne doit pas bloquer un autre processus Aucun hypothèse ne doit être faite sur les vitesses relatives des processus ou du nombre de CPU. Enseigant : AAMMOU Souhaib
12
Module Systèmes d'exploitation
BTS Génie Informatqiue Exclusion Mutuelle Here two processes, A and B, share a critical region. Meets our requirements: It shows how they’re not in at the same time (no assumptions made about speed/num CPUs) A’s entering of the critical region did not immediately block B B got into the critical region as soon as A was done with it (didn’t wait forever). Une représentation graphique de notre requis pour l’exclusion mutuelle Enseigant : AAMMOU Souhaib
13
Module Systèmes d'exploitation
BTS Génie Informatqiue Exclusion Mutuelle Un processus désirant entrer dans une section critique doit être mis en attente si la section critique n’est pas libre Un processus quittant la section critique doit le signaler aux autres processus L’attente peut être : Active : la procédure entrer_Section_Critique est une boucle dont la condition est un test qui porte sur des variables indiquant la présence ou non d’un processus en section critique Non active : le processus passe dans l’état endormi et ne sera réveillé que lorsqu’il sera autorisé à entrer en section critique Enseigant : AAMMOU Souhaib
14
Module Systèmes d'exploitation
BTS Génie Informatqiue Exclusion Mutuelle Protocole d’accès à une section critique : <entrer_Section_Critique> //attente si SC non libre <Section_Critique> //un seul processus en SC <Quitter_Section_Critique> // signaler la libération de la SC aux autres processus Que contiennent les procédures entrer_Section_Critique et quitter_Section_Critique? Enseigant : AAMMOU Souhaib
15
Exclusion mutuelle par attente active
Module Systèmes d'exploitation BTS Génie Informatqiue Exclusion mutuelle par attente active Trois solution potentielles : Masquer (ou désactiver) les interruptions Utiliser des variables verrous Alternance Enseigant : AAMMOU Souhaib
16
Module Systèmes d'exploitation
BTS Génie Informatqiue Exclusion mutuelle par attente active 1ère solution : Masquage des interruptions Chaque processus désactive les interruptions quand ils entre dans leur section critique. Aucun changement de contexte ne peut arriver. L’exclusion mutuelle est réalisée à travers la mise en œuvre de primitives (appels) du SE : DisableInterrupt() section_critique() EnableInterrupt() Enseigant : AAMMOU Souhaib
17
Module Systèmes d'exploitation
BTS Génie Informatqiue Exclusion mutuelle par attente active 1ère solution : Masquage des interruptions Problème: Si le processus utilisateur entre dans une boucle infinis le SE sera planter Problème: Que ce passe-t-il avec des CPU multiples? Problème: Si la section critique est large, qu’est ce qui ce passe si un périphérique a besoin d’attention Solution viable? Non. Lorsqu’un processus quitte la section critique, doit restaurer les interruptions. Solution dangereuse en mode utilisateur : Si dans un processus, le programmeur a oublié de restaurer les interruptions, c’est la fin du système Alors, il n’est pas possible de laisser le contrôle des interruptions à l’utilisateur, et cette solution doit réserver au noyau (qui l’utilise effectivement lorsque nécessaire) Enseigant : AAMMOU Souhaib
18
Module Systèmes d'exploitation
BTS Génie Informatqiue Exclusion mutuelle par attente active 2ème solution : Variables de verrouillage Un verrou (Lock) est une variable binaire partagée qui indique la présence d’un processus en SC: si verrou = 0 alors la section critique est libre. si verrou = 1 alors la section critique est occupée. Quand un processus veut entrer dans sa section critique il examine le verrou. L’exclusion mutuelle est réalisée dans ce cas : Note that people sometimes think that you can simply test the lock variable again to ensure that a context switch didn’t just result in another process changing the lock variable, but this is an infinitely recursive idea. while (verrou == 1) ; //Attente verrou=1 ; //Verrouillage section_critique() verrou=0 ; //Déverrouillage Enseigant : AAMMOU Souhaib
19
Module Systèmes d'exploitation
BTS Génie Informatqiue Exclusion mutuelle par attente active 2ème solution : Variables de verrouillage Problème: L’exclusion mutuelle n’est assurée que si le test et le positionnement du verrou est ininterruptible (sinon le verrou constitue une section critique). Pour cela il faut disposer d’une instruction (Test and Set) qui teste et modifie le contenu d’un mot en mémoire centrale de façon indivisible. Solution viable? Non. Enseigant : AAMMOU Souhaib
20
Exclusion mutuelle par attente active 3ème solution : Alternance
Module Systèmes d'exploitation BTS Génie Informatqiue Exclusion mutuelle par attente active 3ème solution : Alternance Le problème dans l’algorithme précédent est que les deux processus modifient la même variable en même temps. Pour éviter cela, on peut mettre en œuvre une variable partagée tour (turn) qui mémorise le numéro du processus autorisé à entrer en section critique. Exemple d’utilisation pour N processus : Chaque processus prend son tour pour entrer dans sa section critique, La boucle while est utilisée comme verrou pour empêcher l’entrée dans la section critique. Un verrou qui utilise une attente active (busy waiting) s’appelle un spin lock. while (tour != pid) ; // attente active (son tour) section_critique() tour=(pid +1) % N ; // au suivant! section_non_critique Enseigant : AAMMOU Souhaib
21
Exclusion mutuelle par attente active 3ème solution : Alternance
Module Systèmes d'exploitation BTS Génie Informatqiue Exclusion mutuelle par attente active 3ème solution : Alternance Problème: la 2ème règle est violée (famine), un processus possédant tour, peut ne pas être intéressé immédiatement par la section critique. 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... Put differently: taking turns is not a good idea when one of the processes is much slower than the other. Also: just plain old not practical: Word can’t print until Powerpoint does? What kind of a system is that? Races avoided, but not useful. Enseigant : AAMMOU Souhaib
22
Exclusion mutuelle par attente active 3ème solution : Alternance
Module Systèmes d'exploitation BTS Génie Informatqiue Exclusion mutuelle par attente active 3ème solution : Alternance Solution de Peterson (1981) //Cas de deux processus P0 et P1 : #define N 2 int tour ; // variable tour int interesse[N] ; // initialisé à False void entrer_Section_Critique (pid) //n° de processus : 0 ou 1 { interesse[pid]=True ; // indiquer qu’on est intéressé tour = pid ; //lever le drapeau while (tour == pid && interesse[1-pid] == True) ; } void quitter_Section_Critique(pid) interesse[pid]=False ; Enseigant : AAMMOU Souhaib
23
Exclusion mutuelle par attente active 3ème solution : Alternance
Module Systèmes d'exploitation BTS Génie Informatqiue Exclusion mutuelle par attente active 3ème solution : Alternance Solution de Peterson Section critique est maintenant protégée Considérons la situation où les deux processus appellent entrer_Section_Critique simultanément. Les deux processus sauvegarderont leur numéro dans la variable tour. La valeur sauvegardée en dernier efface la première. Le processus qui entrera en SC est celui qui a positionné la valeur tour en premier 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 entrer_Section_Critique et quitter_Section_Critique, la solution ne marchera pas Before entering their critical region each process will call enter_region and will call leave_region when they’re done Two conditions to enter: if either the other process isn’t interested OR if the other process has changed the variable turn Means that if the context switches occur such that both are interested it’s ok, as as whoever set turn=process last won’t get in! Should draw this one out and make sure they get it! Enseigant : AAMMOU Souhaib
24
Exclusion mutuelle par attente active Instruction TSL
Module Systèmes d'exploitation BTS Génie Informatqiue Exclusion mutuelle par attente active Instruction TSL Cette solution au problème de l’exclusion mutuelle est basée sur un support matériel, à savoir une instruction spécifique du langage machine. TSL veut dire instruction Test and Set Lock Plusieurs ordinateurs supportent cette instruction ou une instruction semblable Comment est-ce utilisé? TSL AX,verrou Charge (TEST) le contenu d’un mot mémoire dans un registre, puis met une valeur non-nulle (SET) à cet emplacement mémoire, ces deux opérations étant garanties comme indivisible. Processeurs multiples aussi Enseigant : AAMMOU Souhaib
25
Exclusion mutuelle par attente active Instruction TSL
Module Systèmes d'exploitation BTS Génie Informatqiue Exclusion mutuelle par attente active Instruction TSL Comment utiliser l’instruction TSL? Solution viable? Oui! (Avec attente active...) entrer_Section_Critique : TSL AX, $verrou //Lecture et positionnement du verrou CMP AX, 0 //Test si verrou non déjà positionné JNZ entrer_Section_Critique //Boucle si verrou déjà positionné RET quitter_Section_Critique: MOV $verrou, 0 Note that there’s no risk in the instruction MOVE LOCK,#0 as the test/set operation is indivisible. The hardware prevents the race condition Ask them to consider multi-processor systems. Will this function work? Only if the CPU locks the memory bus before the TSL instruction Enseigant : AAMMOU Souhaib
26
Module Systèmes d'exploitation
BTS Génie Informatqiue Synthèse Le problème de toutes les approches que nous avons vues est qu’elles mettent en œuvre des mécanismes d’attente active (spin lock): les processus désirant entrer en SC consomment énormément de ressource processeur, et font un usage abusif du bus mémoire. De plus, dans le cas d’un système orienté temps-réel où les priorités relatives des processus sont strictement respectées, si un processus H de haute priorité désire entrer en SC alors q’un processus B de basse priorité s’y trouve déjà, H aura toute la ressource processeur pour boucler et B ne pourra jamais quitter la section critique, d’où blocage des deux processus. Y a t-il des mécanismes d’exclusion mutuelle qui évitent l’attente active ? Enseigant : AAMMOU Souhaib
27
Module Systèmes d'exploitation
BTS Génie Informatqiue Quiz Time! Questions? What are our four conditions for mutual exclusion? The processes must not be in their critical regions at the same time No assumptions may be made about speed/number of CPUs A process should not be prevented from entering its critical region by a process not in its critical region No process should wait forever to enter its critical region Why is strict alternation a bad idea (even if it prevents race conditions) If one process is faster than the other you violate condition 3 Enseigant : AAMMOU Souhaib
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.