I La piscine
Transcription
I La piscine
ILapiscine........................................................................................................................................................1 IILecteur/rédacteur..................................................................................................................................2 A.Utilisationd’ununiquesémaphoreenexclusionmutuelle(Mut)..................................2 B.Utilisationdeplusieurssémaphores...........................................................................................2 IIILedinerdesphilosophes......................................................................................................................3 A.Premièresolution:...............................................................................................................................4 B.Deuxièmesolution:............................................................................................................................4 C.Troisièmesolution...............................................................................................................................4 D.Quatrièmesolution.............................................................................................................................4 ILapiscine Dans cet exercice nous allons vous demander de modéliser le fonctionnement d'une piscine.Lesclientsdelapiscinesontdesthreads,nousvousdemandonsdoncd'écrirele codedecesthreadscorrespondantaucomportementdécritdanslasuitedel'énoncé. Unbaigneurdoit: • Arriveràlapiscine; • Prendreunpanier; • Trouvercabineetentrerdedansafindesedéshabiller; • Libérerlacabine; • Allernager • Prendreunecabineets’habiller; • Rendresonpanier; • Quitterlapiscine; Ressources critiques : certaines phases de ces activités mettent en jeu des ressources critiques,pourlesquelleslesthreadsrentrentencompétitions: • lapiscinedisposed'uncertainnombreNbPaniersdepaniersdanslesquelsles baigneurslaissentleurshabitspendantletempsdelabaignade; • chaque baigneur se déshabille et se rhabille dans une cabine individuelle. La piscinedisposed'unnombreNbCabinesdecabines. Les phases de déshabillage et de rhabillage ne peuvent commencer que si certaines conditionssontréalisées: • chaquebaigneurdoitdisposerd'unpanieretd'unecabinepourcommenceràse déshabiller; • chaque baigneur ne doit disposer que d'une cabine pour commencer à se rhabiller. Cesdeuxconditionssontdoncéventuellementbloquantes. Les fins des phases de déshabillage et de rhabillage ne sont pas bloquantes mais correspondentàlalibérationderessourcescritiques: • chaquebaigneurrendsacabinequandilafinidesedéshabiller; • chaquebaigneurrendsacabineetsonpanierquandilafinideserhabiller. Lecodedubaigneurpeutêtrelesuivant: //arrivée sleep (XXX) ; // déshabillage DebutDeshabiller(); sleep(XXX); FinDeshabiller(); //baignade sleep (XXX) ; // rhabillage DebutRhabiller() ; sleep(XXX) ; FinRhabiller() ; //départ sleep (XXX) ; Ecrirelecorpsdesfonctions: DebutDeshabiller (), FinDeshabiller (), DebutRhabiller () et FinRhabiller () selonlesspécificationsprécédentes. IILecteur/rédacteur A.Utilisationd’ununiquesémaphoreenexclusionmutuelle(Mut) Cotélecteur: T info Lire () Mut.P(); T info = RetirerInfo (); Mut.V (); return info; Cotérédacteur: void Ecrire (T info) Mut.P(); PoserInfo (info); Mut.V(); Montrerquel’onpeutobteniruninterblocagedeprocessus. B.Utilisationdeplusieurssémaphores Lasolutionci-dessousestinspiréedecellevueencours,malheureusementellen’estpas fonctionnelle.Ditespourquoietcorrigezla. Indication:ondonneratoujoursprioritéauxlecteursparrapportauxrédacteurs. Init : MutRedPresent = 0 ; MutRedEcr = 0 ; MutLect = 0; Cotélecteur: MutRedPresent.P (); MutLect.P(); T info = RetirerInfo (); MutLect.V (); return info ; Cotérédacteur: MutRedEcr.P(); PoserInfo (info) ; MutRedEcr.V(); MutRedPresent.V (); IIILedinerdesphilosophes Problème: Lasituationestlasuivante: • cinqphilosophes(initialementmaisilpeutyenavoirbeaucoupplus)setrouvent autourd'unetable; • chacundesphilosophesadevantluiunplatdespaghetti; • àgauchedechaqueplatdespaghettisetrouveunefourchette. Unphilosophen'aquetroisétatspossibles: • penserpendantuntempsindéterminé; • êtreaffamé(pendantuntempsdéterminéetfinisinonilyafamine); • mangerpendantuntempsdéterminéetfini. Descontraintesextérieuress'imposentàcettesituation: • quandunphilosopheafaim,ilvasemettredansl'état«affamé»etattendreque lesfourchettessoientlibres; • pourmanger,unphilosopheabesoindedeuxfourchettes:cellequisetrouveà gauchedesapropreassiette,etcellequisetrouveàdroite(c'est-à-direlesdeux fourchettesquientourentsapropreassiette); • si un philosophe n'arrive pas à s'emparer d'une fourchette, il reste affamé pendantuntempsdéterminé,enattendantderenouvelersatentative. Leproblèmeconsisteàtrouverunordonnancementdesphilosophestelqu'ilspuissent tousmanger,chacunàleurtour.Cetordreestimposéparlasolutionquel'onconsidère commecelledeDijkstraavecsémaphoresouCourtoisavecdescompteurs. Lecorpsduprocessusphilosophepeutêtrelesuivant: Philo(i) { while(true) { pense( ); prendre_fourchette( i ); manger ( ); poser_fourchette( i ); } } Conséquence,ilfautécrirelesfonctionsprendre_fouchette ()et poser_fourchette (). A.Premièresolution Onprendunsémaphoreparfourchette(unmutexfaitaussil’affaire),chaquesémaphore estinitialiséà1. semfourch[N]={1,........1} prendre_fourchette (int i) { fourch[i].P() ; fourch[(i+1)% N].P() ; } poser_fourchette (int i) { fourch[i].V() ; fourch[(i+1)% N].V() ; } Monterquecettesolutionpeutprovoqueruninterblocagedeprocessus. B.Deuxièmesolution On modifie la solution 1 de sorte que les philosophes ne puissent pas prendre tous en même temps la fourchette de droite. On introduit pour cela un sémaphore dont le compteur est égal à N-1 Implémentercettesolution. C.Troisièmesolution C'estlamêmechosequelapremièresolutionsaufqu'unphilosopheestgaucheretceci afind'éviterl'interblocage. Implémentercettesolution. D.Quatrièmesolution Onsecentreicisurlesphilosophes.Unsémaphoreestattribuéàchaquephilosophe. Etat={PENSE,MANGE,A_FAIM} Unphilosophequiveutprendrelesfourchettes(doncmanger)déclarequ'ilafaim.Si l'undesesdeuxvoisinsestentraindemanger,ilnepeutdoncpasprendrelesdeux fourchettespourl'instantetdoncsemetenattente.Silesdeuxphilosophesàcoténe mangentpasalorsilpeutprendrelesdeuxfourchettesetdéclarerqu'ilmange.Quandle philosopheafinidemanger,ildéclaredoncqu'ilpenseetregardesisesdeuxvoisinsqui forcémentnepouvaientpasmanger,enontdèslorsl'opportunité.Sic'estlecasilles réveille. Implémentercettesolution.