Question 1 (5.5 pts) : Généralités Question 2 (3.5 pts) : Barrières et

Transcription

Question 1 (5.5 pts) : Généralités Question 2 (3.5 pts) : Barrières et
Hiver 2011
Noyau du système d’exploitation
Page 1 sur 7
Examen final
INF2610
Question 1 (5.5 pts) : Généralités
Répondez, en 15 lignes maximum par sous-question (attention : les réponses non justifiées
ne seront pas considérées).
a) [1 pt] Expliquez comment le principe « copy-on-write » est utilisé pour créer un
clone d’un processus.
b) [1 pt] Supposez que la file d’attente d’un sémaphore binaire est gérée selon les
priorités (lorsque le sémaphore est libéré, il est alloué au processus le plus prioritaire,
en attente du sémaphore). Peut-on avoir, dans ce cas, des problèmes d’inversion de
priorités, dans le cas d’un ordonnancement préemptif à priorité ?
c) [1 pt] Supposez deux processus A et B qui partagent une ressource R en exclusion
mutuelle :
Semaphore x=1 ;
A
B
P(x)
P(x)
scA(R) scB(R)
V(x)
V(x)
Les processus A et B sont exécutés dans un système temps partagé avec un
ordonnancement circulaire. Le système peut-il suspendre le processus A durant
l’exécution de sa section critique et élire ensuite le processus B ? Si oui, est-ce que B peut
se retrouver en section critique ?
d) [1.5 pt] Considérez le problème des philosophes. Peut-on utiliser l’algorithme du
banquier pour éviter les interblocages ? Si oui, expliquez la définition de l’état, les
traitements des demandes et des libérations de ressources. Donnez l’état de départ
ainsi que l’état atteint suite à la demande de fourchette suivante : le philosophe 4
demande la fourchette f4.
e) [1 pt] Pour gérer l’allocation des processeurs, le système d’exploitation Linux utilise
une file d’exécution (« run queue ») par processeur. Donnez un avantage et un
inconvénient, par rapport à l’utilisation d’une seule et même file d’exécution pour
tous les processeurs.
Question 2 (3.5 pts) : Barrières et compteurs d’événements
Les « Barrières » sont un mécanisme très utile pour synchroniser les phases de traitement de
différents processus : aucun processus ne peut entamer la phase suivante tant que les autres
n’ont pas fini leurs phases courantes. Pour réaliser une telle synchronisation, une barrière est
Hiver 2011
Noyau du système d’exploitation
Page 2 sur 7
Examen final
INF2610
placée à la fin de chaque phase. Lorsqu’un processus atteint une barrière, il est bloqué
jusqu’à ce que tous les autres processus atteignent la barrière. Les processus peuvent alors
exécuter leurs phases suivantes et ainsi de suite.
Par exemple, le traitement de chacun des trois processus A, B et C suivants consistent en
deux phases « acquisition » et « traitement » de paramètres. Avec la barrière X, il ne peut y
avoir un processus à l’étape acquisition de paramètres et un autre à l’étape de traitement.
Cette barrière permet aux trois processus de se synchroniser avant d’entamer une autre phase.
Barrier_t X (3) ; // 3 est le nombre de processus utilisant la barrière X.
Processus A
Processus B
Processus C
{ while (1)
{ while (1)
{ while (1)
{
AcquisParam(1) ;
{
AcquisParam(2) ;
{ AcquisParam(3) ;
X.Barriere( ) ;
X.Barriere( ) ;
X.Barriere( ) ;
TrtParam(1) ;
TrtParam(2) ;
TrtParam(3) ;
X.Barriere( ) ;
X.Barriere( ) ;
X.Barriere( ) ;
}
}
}
}
}
}
a) [2 pts] On veut utiliser les barrières pour exécuter les différents cycles des tâches T1, T2,
T3 et T4 en respectant les contraintes de précédence suivantes :
- le premier cycle de T1 est exécuté en premier ;
- les cycles de T2 et T3 sont exécutés en concurrence après celui de T1 ;
- le cycle de T4 commence lorsque ceux de T2 et T3 sont terminés ;
- le second cycle de T1 est exécuté après celui de T4, et ainsi de suite.
Complétez le pseudo-code suivant de chaque tâche en ajoutant les barrières nécessaires à la
synchronisation des différents cycles. Indiquez clairement les barrières utilisées, leurs valeurs
ainsi que leurs rôles.
Barrier_t
/*0*/
T1( )
{
while (1)
{
/*1*/
cycle(T1) ;
/*2*/
}
}
// CompteurEvenement /*0*/ pour b)
T2( )
{
while (1)
{
/*3*/
cycle(T2) ;
/*4*/
}
}
T3( )
{
while (1)
{
/*5*/
cycle(T3);
/*6*/
}
}
T4( )
{
while (1)
{
/*7*/
cycle(T4 ) ;
/*8*/
}
}
b) [1.5 pt] On veut maintenant refaire le même exercice en utilisant les compteurs
d’événements. Un compteur d’événements est un compteur entier associé à un
événement. Sa valeur indique le nombre d’occurrences de l’événement associé. La valeur
Hiver 2011
Noyau du système d’exploitation
Page 3 sur 7
Examen final
INF2610
initiale du compteur est 0. Trois opérations atomiques sont définies pour un compteur
d’événements E :
- E.Read() : retourne la valeur courante de E au processus appelant.
- E.Advance() : incrémente de 1 la valeur de E et débloque tous les processus en attente
que l’événement E atteigne cette nouvelle valeur.
- E.Await(val) : bloque le processus appelant, si la valeur de E est strictement
inférieure à val. Il n’y a pas de blocage du processus appelant si la valeur de E est
plus grande ou égale à val.
Synchronisez les cycles des tâches précédentes en utilisant les compteurs d’événements.
Indiquez clairement les compteurs d’événements et variables utilisés et leurs rôles.
Question 3 (5 pts) : Moniteurs
On veut utiliser les moniteurs et les variables de condition pour solutionner le problème des
lecteurs-rédacteurs. Pour ce faire, on décide de regrouper, dans un même moniteur, les
fonctions ReadRequest(), WriteRequest(), ReadEnd() et WriteEnd(). Les fonctions
ReadRequest() et ReadEnd() encadrent toute opération de lecture. De même, les fonctions
WriteRequest() et WriteEnd() encadrent toute opération d’écriture.
Moniteur AccesBD
{
/*0*/
ReadRequest( ) { /*1*/}
WriteRequest( ) { /*2*/}
ReadEnd( ) { /*3*/}
WriteEnd( ) { /*4*/}
}
Complétez le moniteur précédent de manière à permettre des accès partagés en lecture et un
accès exclusif en écriture. Vous devez définir et expliquez le rôle de toute variable utilisée. Il
n’est pas demandé de gérer le problème de famine des rédacteurs.
Question 4 (4 pts) : Ordonnancement
Considérez un système monoprocesseur à ordonnancement circulaire. Supposez que 3
producteurs P1, P2, P3 et un consommateur C1 arrivent dans le système et sont insérés dans
la file d'attente du processeur dans l’ordre P1, P2, P3 et C1. Les producteurs et le
consommateur communiquent via un tampon. Les producteurs produisent des items et les
insèrent dans le tampon. Le consommateur retire ces items dans l'ordre FIFO. Chaque item
nécessite 1 quantum de temps pour le produire et 1 quantum de temps pour le consommer. Le
tampon est initialement vide et a une taille maximale de 3. Si le tampon est plein quand un
producteur veut produire, il rentre dans une attente active jusqu’à ce qu’il parvienne à se
réserver une entrée dans le tampon. Si le tampon est vide lorsque le consommateur veut
Hiver 2011
Noyau du système d’exploitation
Page 4 sur 7
Examen final
INF2610
consommer, il rentre également dans une attente active jusqu’à ce qu’un item soit inséré dans
le tampon.
a) [2 pts] Donnez le nombre d’items que chaque processus aura produit ou consommé à la
fin de 10 quanta de temps. Pour répondre, à cette question, vous devez donner le
diagramme de Gantt.
b) [2 pts] Supposez maintenant que les attentes actives sont remplacées par des attentes
passives : si le tampon est plein quand un producteur veut produire, il passe à l’état
bloqué (P(libre)). Si le tampon est vide lorsque le consommateur veut consommer, il
passe également à l’état bloqué (P(occupe)). Les files d’attente des sémaphores sont
gérées FIFO. Supposez aussi, que les temps nécessaires à un producteur ou un
consommateur pour passer à l’état bloqué ou à l’état prêt sont négligeables.
Donnez, dans ce cas, le nombre d’items produits ou consommés par chacun des processus
à la fin de 10 quanta de temps. Pour répondre, à cette question, vous devez aussi donner
le diagramme de Gantt.
Question 5 (2 pts) : Ordonnancement temps réel
Considérez un système composé de n tâches périodiques, A1, A2,…, An, et m=2*n tâches
périodiques B1, B2,…, Bm. Les périodes des tâches Ai valent 12, et leurs durées d’exécution
(temps de calcul) valent 2. Les périodes des tâches Bi valent 6, et leurs durées d’exécution
valent 1. Les échéances des tâches sont leurs périodes.
a) [1 pt] Supposez que pour ordonnancer ces tâches, le système implémente l’algorithme
EDF (Earliest Deadline First). Donnez le nombre maximal de tâches à admettre dans le
système sans compromettre leur ordonnançabilité.
b) [1 pt] Donnez le diagramme de Gantt sur 14 unités de temps, dans le cas où : n=1, les
tâches A1, B1 et B2 arrivent respectivement aux dates 0, 1 et 2, et la politique
d’ordonnancement est EDF.
Bonne fin de session.
Hiver 2011
Noyau du système d’exploitation
Page 5 sur 7
Examen final
INF2610
Solution 1 :
a) La table (les tables) des pages du processus père est (sont) dupliquée(s). Le père
et le fils partageront les mêmes cadres mémoire tant qu’ils y accèdent en lecture.
Si le processus père ou fils veut accéder en écriture à un de ces cadres partagés,
une copie du cadre est créée pour le processus écrivain.
b) Oui, car peu importe la discipline de gestion de la file du sémaphore, si un
processus L, moins prioritaire qu’un autre processus H, demande un sémaphore
binaire libre, il le verrouillera. Si le processus H demande par la suite le
sémaphore, il passera et restera à l’état bloqué jusqu’à la libération du
sémaphore.
c) Oui, si par exemple, A a consommé tout son quantum et c’est le tour de B,
l’ordonnanceur va élire B. Non, car il passera à l’état bloqué dans P(x).
d) Oui, car on connait les besoins de chaque philosophe. E=A=(11111), Alloc(phi,
i=0,4)= (00000), Req(ph0)=(10001), Req(ph1)=(11000), Req(ph2)=(01100),
Req(ph3)=(00110) et Req(ph4)=(00011).
Si le philosophe 4 demande f4, l’état atteint serait :
E=(11111), A=(11110) Alloc(phi, i=0,3)= (00000), Alloc(ph4)=(00001),
Req(ph0)=(10001), Req(ph1)=(11000), Req(ph2)=(01100), Req(ph3)=(00110) et
Req(ph4)=(00010).
e) Avantage : Avec une seule file d’exécution, si un processeur accède à la « run
queue » tous les autres processeurs vont attendre (accès exclusive). Ce qui aura
un impact sur le taux d’utilisation des processeurs.
Inconvénient : Il faut gérer la répartition des processus dans les différentes files
d’exécution.
Solution 2 :
Barrier_t B14(2), B123(3), B234(3) /*0*/
Hiver 2011
Noyau du système d’exploitation
T1( )
{ while (1)
{
/*1*/
cycle(T1) ;
/*2*/
B123.Barriere();
B14.Barriere() ;
}
}
Page 6 sur 7
T2( )
{ while (1)
{
/*3*/
B123.Barriere();
cycle(T2 ) ;
/*4*/
B234.Barriere();
}
}
T3( )
{ while (1)
{
/*5*/
B123.Barriere();
cycle(T3);
/*6*/
B234.Barriere();
}
}
Examen final
INF2610
T4( )
{ while (1)
{
/*7*/
B234.Barriere();
cycle(T4 ) ;
/*8*/
B14.Barriere() ;
}
}
//B123 permet de lancer un cycle de T2 et T3 après chaque cycle de T1. B14 permet de
lancer un cycle de T1 après un cycle de T4. B234 permet de lancer un cycle de T4
après les cycles de T2 et T3.
CompteurEvenement E ;/*0*/
T1( )
{ int n=0 ;
while (1)
{
/*1*/
cycle(T1) ;
/*2*/ n=n+4 ;
E.Advance() ;
E.Await(n) ;
}
}
T2( )
{ int n=1;
while (1)
{
/*3*/
E.Await(n);
cycle(T2 ) ;
/*4*/
n=n+4;
E.Advance() ;
}
}
T3( )
{ int n=1 ;
while (1)
{
/*5*/
E.Await(n);
cycle(T3);
/*6*/ n=n+4;
E.Advance() ;
}
}
Solution 3 :
Moniteur AccesBD
{
/*0*/ int nbl=0, libre=0, nbwait=0;
boolc acces;
ReadRequest( )
{ /*1*/
if(nbl==0)
if(libre)
libre=0;
else { nbwait++, wait(acces);}
nbl++;
}
WriteRequest( )
{ /*2*/ if (libre) libre=0;
T4( )
{ int n=3;
while (1)
{
/*7*/
E.Await(n);
cycle(T4 ) ;
/*8*/ n=n+4;
E.Advance() ;
}
}
Hiver 2011
Noyau du système d’exploitation
Page 7 sur 7
else { nbwait++, wait(acces);}
}
ReadEnd( )
{ /*3*/ nbl--;
if(nbl==0)
if(nbwait>0) { nbwait--; signal(acces);}
else libre=1;
}
WriteEnd( )
{ /*4*/
if(nbwait>0) { nbwait--; signal(acces);}
else libre=1;
}
}
Solution 4 :
P1 P2 P3 C1 P1 P2(AA) P3(AA) C1 P1 P2(AA)
P1 3 productions
P2 1 production
P3 1 production
C1 2 consommations
P1 P2 P3 C1 P1 P2(B) P3(B) C1 P1 P2(B) C1 P1 P3(B) C1
P1 4 productions
P2 1 production
P3 1 production
C1 4 consommations
Solution 5 : n *(2/12) + 2n*(1/6) <=1 => n <= 2
Au maximum, 2 tâches de type A et 4 tâches de type B.
A1B1B2A1---B1B2---A1B1
Examen final
INF2610

Documents pareils