Méhodes de Programmaon sysème 2001-2002 EXERCICES DIRIGES 7 e 8 Synchronsaon de processus CORRECTION Exercce 1 Acquson Exécuon Impresson Boucle Boucle Boucle Acquérr Requêe Déposer Requêe REQUETE M cases Prélever Requêe Exécuer Requêe Déposer Ordre Impresson AVIS N cases Acquérr Ordre Imprmer Queson 1 On denfe un schéma produceur/consommaeur sur chacun des ampon. On ulse pour chacun de ces schéma un couple de sémaphores : MVIDE nalsé à M e MPLEIN nalsé à 0 (ampon requêe) NVIDE nalsé à N e NPLEIN nalsé à 0 (ampon avs) Processus prncpal déclaraons globales : requêe : ampon (0..M-1) de messages; avs : ampon (0..N-1) de messages; M, N : ener; MVIDE, NVIDE, MPLEIN, NPLEIN : sémaphores; INIT(MVIDE, M); INIT (NVIDE, N); INIT(MPLEIN, 0); INIT(NPLEIN, 0); lancer fls_acquson; lancer fls_exécuon; lancer fls_mpresson; aendre mes fls processus acquson : ndex depo requêe = 0; enregsrer_raval(mess); P(MVIDE); processus exécuon j : ndex rera requêe k : ndex depo avs mess, res : message; j = 0; k = 0; P(MPLEIN); processus mprmeur l : ndex rera avs l = 0; P(NPLEIN); mess = avs(l); 1
Méhodes de Programmaon sysème 2001-2002 requee() = mess; = + 1 mod M; V(MPLEIN); ; mess = requee(j); j = j + 1 mod M; V(MVIDE); exécuer_raval(mess, res); P(NVIDE); avs(k) = res; k = k + 1 mod N; V(NPLEIN); ; l = l + 1 mod N; V(NVIDE); mprmer_resula(mess); ; Queson 2 Il fau manenan gérer les accès concurrens aux ampons avs e requêe. En effe : - les dfférens processus Acquson se paragen l'ndex - les dfférens processus exécuon se paragen l'ndex j e k - les dfférens processus Impresson se paragen l'ndex k les varables, j, k, l son manenan globales e les accès à ces varables doven se fare en excluson muuelle. On ajoue donc quare sémaphores d'excluson muuelle nalsés à 1 (un sémaphore par ndex). Processus prncpal déclaraons globales : requêe : ampon (0..M-1) de messages; avs : ampon (0..N-1) de messages; M, N : ener;, j, k, l : ndex sur les ampons; MVIDE, NVIDE, MPLEIN, NPLEIN, MUTI, MUTJ, MUTK, MUTL : sémaphores; INIT(MVIDE, M); INIT (NVIDE, N); INIT(MPLEIN, 0); INIT(NPLEIN, 0); INIT(MUTI, 1); INIT(MUTJ, 1); INIT(MUTK, 1); INIT(MUTL, 1); = j= k = l = 0; lancer fls_acquson; lancer fls_exécuon; lancer fls_mpresson; aendre mes fls processus acquson enregsrer_raval(mess); P(MVIDE); P(MUTI); requee() = mess; = + 1 mod M; V(MUTI); V(MPLEIN); ; processus exécuon mess, res : message; P(MPLEIN); P(MUTJ) mess = requee(j); j = j + 1 mod M; V(MUTJ); V(MVIDE); exécuer_raval(mess, res); P(NVIDE); processus mprmeur P(MUTL); P(NPLEIN); mess = avs(l); l = l + 1 mod N; V(NVIDE); V(MUTL); mprmer_resula(mess); ; 2
Méhodes de Programmaon sysème 2001-2002 P(MUTK); avs(k) = res; k = k + 1 mod N; V(MUTK); V(NPLEIN); ; remarque : l'ordre d'appel des sémaphores d'excluson muuelle par rappor à ceux du schéma produceur consommaeur n' pas d'mporance. Exercce 2 Queson 1 Lorsque l'employé sas une commande, l'écrure sur dsque d'une lgne à la fos, mplque que, à un nsan donné, le dsque ne conen qu'une pare de la commande. S le processus de facuraon es lancé, l ne rouvera pas oues les lgnes de la commande pour éder la facure, qu sera donc parelle. Au momen où on crée une commande, l fau donc nerdre au processus de facuraon d'accéder aux commandes. Par alleurs, l'employé éde les commandes sases sur la même mprmane que le processus de facuraon. Ces édons se fon lgne par lgne, mas oues les lgnes concernan le même bon de commande ou la même facure doven se rouver regroupées, e non enremêlées. Il fau donc que l'mprmane so en excluson muuelle enre les deux processus. Queson 2 queson 3 La soluon proposée garan ben l'accès en excluson muuelle à l'mprmane par les deux processus. Le processus de facuraon réserve l'mprmane pendan le raemen des facures d'une pérode. Ces facures seron donc ben édées de manère consécuve. Par alleurs, comme le processus réserve égalemen le fcher des commandes, aucune commande ne peu êre en cours de sase pendan l'édon des facures. Queson 4 L'nerblocage es une suaon où un ensemble de processus son bloqués en aene d'une ressource possédée par un aure processus de l'ensemble. Chacun aend qu'un aure veulle ben lbérer la ressource qu'l aend. Cec ne peu se fare sans une nervenon exéreure, pusqu'ls son ous bloqués. Or on ne peu débloquer un processus qu'en lu donnan oues les ressources nécessares, e donc en réqusonnan celle qu'l aend e qu es possédée par un aure processus de l'ensemble. Dans la soluon proposée, on peu magner que le processus employé réserve le fcher COM e commence à sasr la commande. A ce momen le processus de facuraon es acvé, e réserve l'mprmane, pus se bloque en aene du fcher COM. Lorsque l'employé a ermné la sase, l réserve l'mprmane, mas comme celle-c es déjà réservée par le processus de facuraon, l se bloque en aene de la lbéraon. Nous avons deux processus qu aenden muuellemen la lbéraon d'une ressource possédée par un aure processus de l'ensemble : ces deux processus son en nerblocage. 3
Méhodes de Programmaon sysème 2001-2002 Queson 5 Pour ne plus avor d'nerblocage, une des soluons es de réserver les ressources dans le même ordre, pusque, dans ce cas, l ne peu plus y avor de crcularé dans les aenes de ressources. Dans le processus de facuraon, l fau donc réserver le fcher COM en premer. processus facuraon; débu répéer ndémen réserver (COM); réserver (IMP); an qu'l y a des commandes à facurer dans COM fare lre la prochane commande dans COM; éder la facure correspondane sur IMP; fa; lbérer(imp); lbérer(com); aendre la prochane pérode de facuraon; fa; ; Exercce 3 Procedure CredDeb_Compe (Numero_Compe, operaon, somme) /* lecure dans le fcher Fcher_Numero_Compe du solde du compe Numero_Compe, solde_compe */ concaener ("Fcher", Numero_Compe); Lre (Fcher_Numero_Compe, Numero_Compe, solde_compe); S (operaon = "deber") solde_compe := solde_compe - somme; snon solde_compe := solde_compe + somme; fs /* ecrure dans le fcher Fcher_Numero_Compe du nouveau solde du compe Numero_Compe */ Ecrre (Fcher_Numero_Compe, Numero_Compe, solde_compe); Procedure Donner_Solde (Numero_Compe, var Solde) /* lecure dans le fcher Fcher_Numero_Compe du solde du compe Numero_Compe, solde_compe */ concaener ("Fcher", Numero_Compe); Lre (Fcher_Numero_Compe, Numero_Compe, solde_compe); Solde := solde_compe; Queson 1 Deux processus P1 e P2 exécuen chacun de leur côé, la même opéraon CredDeb_Compe(10, Creder,100). le déroulemen de ces opéraons peu êre le suvan. le solde al sera alemen de 1100 à la place de 1200. P1 lecure du compe 10 le solde es égal à 1000 --------------------! P2 lecure compe 10 le solde es égal à 1000 4
Méhodes de Programmaon sysème 2001-2002 créd de 100 : solde = 1100 écrure du compe 10 le solde sur le dsque es poré à 1100 créd de 100 : solde = 1100 écrure du compe 10 le solde sur le dsque es poré à 1100 Queson 2 Il suff de placer l'exécuon de la procédure CredDeb_Compe en excluson muuelle, so avec ACCES sémaphore nalsé à 1. : Procedure CredDeb_Compe (Numero_Compe, operaon, somme) /* lecure dans le fcher Fcher_Numero_Compe du solde du compe Numero_Compe, solde_compe */ concaener ("Fcher", Numero_Compe); P(ACCES); Lre (Fcher_Numero_Compe, Numero_Compe, solde_compe); S (operaon = "deber") solde_compe := solde_compe - somme; snon solde_compe := solde_compe + somme; fs /* ecrure dans le fcher Fcher_Numero_Compe du nouveau solde du compe Numero_Compe */ Ecrre (Fcher_Numero_Compe, Numero_Compe, solde_compe); V(ACCES); Queson 3 Cee fos, l fau mere en place un schéma leceurs/rédaceurs. La procédure CredDeb_Compe rese comme en Q2. La procédure Donner_Solde deven : Procedure Donner_Solde (Numero_Compe, var Solde) /* lecure dans le fcher Fcher_Numero_Compe du solde du compe Numero_Compe, solde_compe */ concaener ("Fcher", Numero_Compe); P(MUTEX); NL = NL + 1; S (NL == 1) P(ACCES) Fs V(MUTEX) Lre (Fcher_Numero_Compe, Numero_Compe, solde_compe); Solde := solde_compe; P(MUTEX); NL = NL - 1; S (NL == 0) V(ACCES) Fs V(MUTEX) 5
Méhodes de Programmaon sysème 2001-2002 Exercce 4 Lors de l ulsaon d une ressource crque par une âche, l es habuel d ajouer aux paramères de descrpon de la âche ceux supplémenares suvan : C α : séquence d nsrucons précédan l appel de la ressource, C β : séquence d nsrucon de la secon crque, C γ : séquence d nsrucon suvan la lbéraon de la ressource avec C = C α + C β + C γ. Toue âche en cours d ulsaon d une ressource crque peu êre préempée par une âche plus prorare qu elle, e qu n a pas beson de cee ressource. On consdère l exemple d une confguraon de ros âches pérodques. Les âches Tp 1 e Tp 3. Queson 1 Tâche r 0, C D P C α C β C γ Tp 1 0 2 6 6 1 1 0 Tp 2 0 2 8 8 2 0 0 Tp 3 0 4 12 12 0 4 0 Comme le monre la fgure, à l nsan =8, la âche 3 es bloquée par la âche 2 parce qu elle es plus prorare qu elle. Mas comme la âche 1 es en aene de la ressource crque (occupée par la âche 3) depus l nsan =7, on observe donc que la âche 2 es exécuée avan la âche 1 : c es le phénomène d nverson de proré. Demande de ressource e blocage drec Tp 1 Tp 2 Inverson de proré Tp 3 R S Queson 2 Pour éver ce problème d nverson de proré, à l nsan =7, lorsque la âche 1 se me en aene de la ressource occupée par la âche 3, la âche 3 prend la proré de la âche 1. Par conséquen, à l nsan =8, la âche 3 es plus prorare que la âche 2 e connue à s exécuer. L exécuon de la âche 2 se rouve ans repoussée à l nsan =10 après la âche 1 (cf. fgure 3.15). 6
Méhodes de Programmaon sysème 2001-2002 Demande de ressource e blocage drec Tp 1 Tp 2 Blocage par hérage de proré Tp 3 R S 7