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.