Académique Documents
Professionnel Documents
Culture Documents
Extrait du cours CNAM-ACCOV Samia Bouzefrane Matre de Confrences CEDRIC CNAM samia.bouzefrane@cnam.fr http://cedric.cnam.fr/~bouzefra
NFP137 C14
NFP137 C14
NFP137 C14
Les moniteurs
NFP137 C14
Les moniteurs
Les
moniteurs proposent une solution de "haut-niveau" pour la protection de donnes partages (Hoare 1974) Ils simplifient la mise en place de sections critiques Ils sont dfinis par des donnes internes (appeles aussi variables d'tat) des primitives d'accs aux moniteurs (points d'entre) des primitives internes (uniquement accessibles depuis l'intrieur du moniteur) une ou plusieurs files d'attentes
NFP137 C14
Type m = moniteur Dbut Dclaration des variables locales (ressources partages); Dclaration et corps des procdures du moniteur (points dentre); Initialisation des variables locales; Fin
NFP137 C14
Seul
un processus (ou tche ou thread) peut tre actif un moment donn l'intrieur du moniteur La demande d'entre dans un moniteur (ou d'excution d'une primitive du moniteur) sera bloquante tant qu'il y aura un processus actif l'intrieur du moniteur =>L'accs un moniteur construit donc implicitement une exclusion mutuelle
NFP137 C14 9
processus actif au sein d'un moniteur ne peut progresser dans son travail (une certaine condition est fausse), il libre l'accs au moniteur avant de se bloquer. Lorsque des variables internes du moniteur ont chang, le moniteur doit pouvoir rveiller un processus bloqu.
NFP137 C14
10
NFP137 C14
11
NFP137 C14
12
La primitive Wait bloque systmatiquement le processus qui l'excute La primitive Signal rveille un processus de la file d'attente de la condition spcifie, si cette file d'attente n'est pas vide; sinon elle ne fait absolument rien.
NFP137 C14
13
Selon les langages (ou les normes), ces mcanismes peuvent tre implments de diffrentes faons mthodes wait / notify / notifyAll en Java et mthodes synchronized primitives pthread_cond_wait / pthread_cond_signal en Posix et variables conditionnelles objets protgs en Ada La smantique des rveils peut varier : Qui rveille t-on ? le plus ancien, le plus prioritaire, un choisi au hasard, Quand rveille t-on ? ds la sortie du moniteur, au prochain ordonnancement,
NFP137 C14
15
NFP137 C14
16
NFP137 C14
17
NFP137 C14
18
NFP137 C14
19
NFP137 C14
21
NFP137 C14
22
NFP137 C14
23
Rfrences
Samia Bouzefrane, Les Systmes dexploitation: Cours et Exercices corriges Unix, Linux et Windows XP avec C et JAVA (566 pages), Dunod Editeur, Octobre 2003, ISBN : 2 10 007 189 0. Jean-Franois Peyre, supports de cours sur linformatique industrielle-systmes temps rel, CNAM(Paris).
NFP137 C14
24
Exercice Moniteurs
Comptition daccs pour deux classes de processus
Les rgles de circulation sur la voie unique sont les suivantes : 1. Le tronon ne doit jamais tre emprunt simultanment par deux trains allant en sens inverse ; 2. le tronon peut tre emprunt par un ou plusieurs trains allant tous dans le mme sens ; 3. il ny a pas de sens de parcours prioritaire.
NFP137 C14 25
Pour tudier la rentabilit de cette ligne, on dsire effectuer une simulation du trafic, pour cela, on introduit deux classes de processus : les trains PONTOISE-ORLEANS et les trains ORLEANS-PONTOISE, qui se dcrivent comme suit :
NFP137 C14
26
Tche PONTOISE-ORLEANS : Dbut Parcours (PONTOISE, VERSAILLES) ; Entre_nord ; Parcours (VERSAILLES,CHEVREUSE) ; Sortie_sud ; Parcours (CHEVREUSE, ORLEANS) ; Fin Tche ORLEANS-PONTOISE: Dbut Parcours (ORLEANS, CHEVREUSE) ; Entre_sud ; Parcours (CHEVREUSE, VERSAILLES) ; Sortie_nord; Parcours (VERSAILLES, PONTOISE) ; NFP137 C14 Fin
27
Question : On considre le cas o toute coalition est autorise. crire un moniteur contenant les 4 points dentre Entre_nord , Sortie_sud, Entre_sud , Sortie_nord On pourra utiliser les conditions Accs_Nord, Accs_Sud et des variables dtat : NS, SN nombres de trains sur le tronon dans chaque sens, AttNS, AttSN nombre de trains en attente dans chaque sens. Dautres solutions sont possibles !
NFP137 C14
28
Type Troncon = moniteur {Variables locales} Var NS, SN, AttNS, AttSN : entier ; Accs_Nord , Accs_Sud : condition ; {points dentre} Procdure Entry Entre_Nord ; Dbut Si SN>0 alors AttNS=AttNS+1 ; Accs_Nord.Wait ; finsi ; {blocage si trains dans lautre sens} NS=NS+1 ; Si AttNS>0 alors AttNS=AttNS-1 ; Accs_Nord.Signal ; finsi ; {si des trainsNS sont en attente, alors rveil du prochain train en attente ; le premier train en attente est rveill par le dernier train SN} Fin
NFP137 C14
29
Procdure Entry Sortie_Sud ; Dbut NS=NS-1 ; Si NS==0 alors {dernier train NS} Si AttSN>0 alors AttSN = AttSN -1 ; Accs_Sud.Signal ; {si des trains SN sont en attente, alors rveil du premier train } finsi ; finsi ; Fin
NFP137 C14
30
Procdure Entry Entre_Sud ; Dbut Si NS>0 alors AttSN=AttSN+1 ; Accs_Sud.Wait ; finsi ; {blocage si trains dans lautre sens} SN=SN+1 ; Si AttSN>0 alors AttSN=AttSN-1 ; Accs_Sud.Signal ; finsi ; {si des trains SN sont en attente, alors rveil du prochain train en attente ; le premier train en attente est rveill par le dernier train NS} Fin
NFP137 C14
31
Procdure Entry Sortie_Nord; Dbut SN=SN-1; Si SN==0 alors {dernier train SN} Si AttNS>0 alors AttNS = AttNS -1; Accs_Nord.Signal; {si des trains NS sont en attente, alors rveil du premier train } nsi; nsi; Fin Dbut {initialisations des variables locales} NS=0; SN=0; AttNS=0; AttSN=0; Fin
NFP137 C14
32