Vous êtes sur la page 1sur 12

Ecole Nationale des Sciences de l’Informatique A. U.

: 2017/2018

EXAMEN
Systèmes d’exploitation &Programmation Concurrente

Classes : II2 Date : 03/01/2018


Durée : 2h00 Nb. Pages : 4
Documents, calculatrices, et Smartphones : Non autorisés
Enseignants: F. Najjar, N. Chakchouk, M. Nasri, & A. Channouf

Note: Prière de lire attentivement l’énoncé, de respecter les notations du texte!


On demande des réponses concises mais claires et précises.

Exercice 1: Questions diverses (6 points – 1,5+3*1+1,5)

1) Dans un algorithme d’ordonnancement MLFQ (Multi-Level Feedback Queues),


a) dire si un processus termine quand il n’y a plus de processus plus prioritaire?
b) dire si les processus scientifiques (’’CPU bound’’) sont affectés toujours de la plus haute
priorité ? Justifiez votre réponse
2) A quoi sert le bit de présence dans une table des pages ? et dire qui s’en sert ?
3) Pourquoi a-t-on intérêt à diminuer le nombre de défauts de pages ?.
4) L’adresse logique peut-elle avoir une taille inférieure à l’adresse physique ? justifiez votre réponse.
5) Soit un ordinateur avec un processeur multicores. Le processeur contient 4 cœurs 64 bits. La
taille de la mémoire physique est de 4 Go. La taille d’une case mémoire est de 8 Ko. Il y a une
seule mémoire centrale dans le système. La taille du swap est de 6 Go. Décrivez et calculez ce
qui suit :
a) L’espace virtuel adressable par le processeur multi-cœurs.
b) Le nombre de cases mémoire.
c) Le nombre total de pages de la mémoire virtuelle pouvant être allouées sur le système.

Exercice 2: Interblocage (3 points 1,5+1,5)


Note : Les questions suivantes sont indépendantes
a) Considérons une vue d’un système disposant de 5 processus (P0-P4) et 3 classes de ressources
(R1-R3). Le graphe d’allocation de ressources associé à ce système est donné comme suit:

1/4
2) En donnez les matrices d’allocation et de demandes des ressources. (0,5 pt)
3) Est-ce que ce système est dans un état sécurisant ? si oui donnez les séquences d’exécution
possibles des processus sinon en donnez les processus en deadlock? En précisant quel
algorithme vous avez appliqué ? (1 pt)

b) Les threads thread_p1, thread_p2, et thread_p3 d’un même processus s'exécutent en parallèle.
Dites si ce processus cause nécessairement un interblocage, ne peut causer un interblocage ou
peut parfois causer un interblocage ?. Donnez, le cas échéant, un ordonnancement des actions
qui mène à un interblocage et un qui parvient à compléter sans interblocage. Un
ordonnancement est représenté par la séquence des énoncés (chacun identifié par un tid_lettre)
exécutés. (1,5 pts)

void *thread_p1(void *arg) void *thread_p2(void *arg) void *thread_p3(void *arg)


{ { {
A: pthread_mutex_lock(&m2); A: pthread_mutex_lock(&m4); A: pthread_mutex_lock(&m1);
B: pthread_mutex_lock(&m3); B: pthread_mutex_lock(&m5); B: pthread_mutex_lock(&m2);
C: /* do something */ C: pthread_mutex_lock(&m1); C: /* do something */
D pthread_mutex_unlock(&m3); D:/* do something */ D: pthread_mutex_unlock(&m2);
E: pthread_mutex_lock(&m4); E: pthread_mutex_unlock(&m1); E: pthread_mutex_unlock(&m1);
F: /* do something */ F: pthread_mutex_unlock(&m5); return NULL;
G: pthread_mutex_unlock(&m4); G: pthread_mutex_unlock(&m4); }
H:pthread_mutex_unlock(&m2); return NULL;
return NULL; }
}

2/4
Exercice 3: Synchronisation par pipe (4 points)

On souhaite disposer d’un processus qui crée un fils et un petit fils et qui se synchronisent
par différents pipes selon le schéma comme suit :

Figure 1: Synchronisation par différents pipes

Le père T1 communique des entiers aléatoires à son fils T2 via B1 et puis le fils les multiplient par
soi-même et ensuite les communique au fils T3 via B2. Enfin T3 effectue le même traitement que
T2 et communiquent ses résultats au grand père T1.
Ecrire le programme C correspondant en bien spécifiant/commentant chaque déclaration/création
et utilisation de pipe spécifique au schéma donné en Figure 1.

Exercice 4 : Translation d’adresse (3 points –1,5+1,5)


On considère une machine avec une mémoire physique pouvant contenir (en plus du SE) 12 cases
de 4Ko. Deux processus P1 et P2 sont chargés en mémoire. Les tables des pages pour ces deux
processus sont :

La ligne état contient des bits décrivant l'état de la page :


 R : page accessible en lecture seule ;
 RW : page accessible en lecture et écriture ;
 N : page invalide et non allouée ;
 S : page invalide en zone de swap (sur le disque), dans ce cas le numéro de case indique le
numéro du bloc (sur le disque) contenant la page (en réalité ce numéro de bloc figure dans
une autre table).
Toutes les pages au-delà de la 9 ont un bit N.

3/4
a) Indiquez sur un schéma le contenu de chacune des 12 cases de la mémoire physique (c-à-d
les pages qu'elles contiennent). Quelles cases sont partagées? Quelle peut être leur utilité?
Comment interprétez-vous leurs bits d'état ? Quelles cases sont libres ? (1,5 pts)
2) Traduire les adresses virtuelles suivantes en adresses physique (indiquées en hexadécimal).

a) Pour le processus P1 : 0x44EF, 0x83CC et 0x700B (0,75 pts)

b) Pour le processus P2 : 0x44EF, 0x83CC et 0x 700B (0,75 pts)

Exercice 5: Remplacement de page (4 points—1+2+1)

On s'intéresse à l’algorithme de remplacement horloge (ou encore appelé de seconde de chance),


qui est une amélioration de FIFO avec un bit de référence R, et décrit comme suit :

 Le bit R est mis à 1 au premier chargement dans la mémoire ou encore à chaque


référencement.
 Lors du remplacement de page, on sélectionne la page la plus ancienne :
 Si R=0, cette page est choisie comme victime.
 Si R= 1 alors R est remis à 0 et cette page est déplacée en fin de la liste (elle devient jeune
comme si elle venait d’être chargée), et la recherche continue jusqu’à trouver une page
ayant le bit R à 0, qui sera retirée.

On souhaite appliquer cet algorithme de remplacement dans un cache capable de contenir 5 pages,
et on suppose que le gestionnaire de mémoire accède successivement aux pages suivantes :
7, 1, 8, 2, 3, 1, 6, 1, 2, 7, 3, 5, 6
Initialement, le cache est vide.
1) Déroulez l'algorithme de remplacement FIFO sur cette séquence de pages. En déduire le
nombre de défauts de pages.
2) Déroulez l'algorithme de remplacement horloge sur cette séquence de pages et indiquez la
valeur de bit de référence. En déduire le nombre de défauts de pages et puis le comparer avec
FIFO?.
3) Quel est le nombre de défauts de page minimal sur cet exemple ainsi que le nombre d’entrées
sorties? Justifiez sans dérouler l’algorithme optimal.

Bon travail

4/4
Proposition de Correction
exam SE&PC 3/01/2017

Exercice 1: Questions diverses (6 points – 1,5+3*1+1,5)

1) Dans un algorithme d’ordonnancement MLFQ (Multi-Level Feedback Queues),


a) dire si un processus termine quand il n’y a plus de processus plus prioritaire?
Faux, car un processus peut attendre dans une même FA FCFS/RR d’autres

processus de même priorité mais de date d’arrivée différente. (0,75pt)


b) dire si les processus scientifiques (’’CPU bound’’) sont affectés toujours de la plus haute
priorité ? Justifiez votre réponse
Bien au contraire, ils démarrent avec une priorité qui se retrouve après baisser

jusqu’à une faible priorité si le temps CPU est long avec différents

morcellements. (0,75pt)
2) A quoi sert le bit de présence dans une table des pages ? et dire qui s’en sert ?

Bit de présence (BP) sert à la protection d’accès à une page

(présente/absente) en mémoire physique; la MMU s’en sert, si BP=1 alors

générer l’@ physique et puis la transférer sur le bus d’@ sinon DP. (1 pt)
3) Pourquoi a-t-on intérêt à diminuer le nombre de défauts de pages ?.

Les défauts de page engendrent des entrées/sorties qui sont plus coûteuses

que les communications MC-Processeur ainsi on a intérêt à les diminuer au

moins aux swaps in et éviter les swaps out au maximum possible. (1 pt)
4) L’adresse logique peut-elle avoir une taille inférieure à l’adresse physique ? justifiez votre
réponse.
Jamais ! C’est plutôt supérieure ou égale car chaque processus en exécution

doît avoir son image sur le swap (@ logique). (1 pt)


5) Soit un ordinateur avec un processeur multicores. Le processeur contient 4 cœurs 64 bits.
La taille de la mémoire physique est de 4 Go. La taille d’une case mémoire est de 8 Ko. Il
y a une seule mémoire centrale dans le système. La taille du swap est de 6 Go. Décrivez et
calculez ce qui suit :
a) L’espace virtuel adressable par le processeur multi-cœurs.

5/4
 2taille_adresse_mémoire= 264 (0,5pt)
b) Le nombre de cases mémoire.
 Taille_mémoire/taille_page = 4 Go/8Ko= 232/213=219 (0,5pt)
c) Le nombre total de pages de la mémoire virtuelle pouvant être allouées sur le système.
 Taille_swap/taille_page = 6 Go/8 Ko= 3* 218 (0,5pt)

Exercice 2: Interblocage (3 points 1,5+1,5)


Note : Les questions suivantes sont indépendantes
1) Considérons une vue d’un système disposant de 5 processus (P0-P4) et 3 classes de ressources
(R1-R3). Le graphe d’allocation de ressources associé à ce système est donné comme suit:

a) En donnez les matrices d’allocation et de demandes des ressources. (0,5 pt)

Allocation Demande
R1 R2 R3 R1 R2 R3
P0 1 0 0 0 0 0 Disponible <0, 0, 0>
P1 0 2 0 0 2 2 Existant <2, 7, 6>
P2 0 3 3 0 0 0
P3 1 2 1 0 1 0
P4 0 0 2 0 0 1

b) Est-ce que ce système est dans un état sécurisant ? si oui donnez les séquences d’exécution
possibles des processus sinon en donnez les processus en deadlock? En précisant quel
algorithme vous avez appliqué ? (1 pt --0,5 pt+0,5 pt)

6/4
Ce n’est pas un état en deadlock. Il existe plusieurs séquences qui mènent à
l’état sain. e.g.
p0, p2, p1, p3, p4
p2, p0, p3, p1, p4
p2, p1, p4, p3, p0
p2, p4, p1, p3, p0

2) Les threads thread_p1, thread_p2, et thread_p3 d’un même processus s'exécutent en parallèle.
Dites si ce processus cause nécessairement un interblocage, ne peut causer un interblocage
ou peut parfois causer un interblocage ?. Donnez, le cas échéant, un ordonnancement des
actions qui mène à un interblocage et un qui parvient à compléter sans interblocage. Un
ordonnancement est représenté par la séquence des énoncés (chacun identifié par un
tid_lettre) exécutés. (1,5 pts)

void *thread_p1(void *arg) void *thread_p2(void *arg) void *thread_p3(void *arg)


{ { {
A: pthread_mutex_lock(&m2); A: pthread_mutex_lock(&m4); A: pthread_mutex_lock(&m1);
B: pthread_mutex_lock(&m3); B: pthread_mutex_lock(&m5); B: pthread_mutex_lock(&m2);
C: /* do something */ C: pthread_mutex_lock(&m1); C: /* do something */
D pthread_mutex_unlock(&m3); D:/* do something */ D: pthread_mutex_unlock(&m2);
E: pthread_mutex_lock(&m4); E: pthread_mutex_unlock(&m1); E: pthread_mutex_unlock(&m1);
F: /* do something */ F: pthread_mutex_unlock(&m5); return NULL;
G: pthread_mutex_unlock(&m4); G: pthread_mutex_unlock(&m4); }
H:pthread_mutex_unlock(&m2); return NULL;
return NULL; }
}

Il existe beaucoup d'ordonnancements qui ne causeront pas d'interblocage, comme

l’exemple trivial thread_p1 ; thread_p2 ; thread_ p3, soit tid1.A … tid1.H ; tid2.A

…tid2.G ; tid3.A …tid3.E. (0,75pt)

Un interblocage se produira si on a par exemple la séquence tid1.A(m2);


tid2.A(m4) ; tid2.B(m5) ; tid3.A(m1) ; tid3.B(blocage tread_p3 sur m2) ; tid2.C
(blocage de thread_p2 sur m1) ; tid1.B … tid1.E (blocage de thread_p1 sur m4) 
interblocage. D’autres séquences sont possibles là où on a alloué (en possession) de
mutex et d’autres les demandent ! (0,75pt)

7/4
Exercice 3: Synchronisation par pipe (4 points)

On souhaite disposer d’un processus qui crée un fils et un petit fils et qui se synchronisent
par différents pipes selon le schéma comme suit :

Figure 2: Synchronisation par différents pipes

Le père T1 communique des entiers aléatoires à son fils T2 via B1 et puis le fils les multiplient par
soi-même et ensuite les communique au fils T3 via B2. Enfin T3 effectue le même traitement que
T2 et communiquent ses résultats au grand père T1.
Ecrire le programme C correspondant en bien spécifiant/commentant chaque déclaration/création
et utilisation de pipe spécifique au schéma donné en Figure 1. (15*0,25pt +2*0,125)

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#define MAX 5

char *B3 = "nom_pf"; //pipe nommé

int main(void)
{ //Descripteurs de pipes (0,25pt)

int B1[2], B2[2], d_ecriture, d_lecture;

int nb, nb_R ; //nb_R = nb*nb

mkfifo(B3, S_IRUSR | S_IWUSR); (0,25pt)


pipe(B1); (0,25pt)

if (fork()) { //Processus père (W(B1),R(B3)) (0,25pt)


close(B1[0]); (0,125pt)
for (int i=0; i<MAX; i++)
{
nb = rand();
write(B1[1], nb, sizeof(nb)); (0,25pt)
}
close(B1[1]);

int d_lecture = open(nom_pf, O_RDONLY); (0,25pt)

8/4
while ((nb_lu = read(d_lecture, nb_R, sizeof(nb_R)>0)
(0,25pt)
{
write(1, nbR, sizeof(nb_R)); (0,25pt)
}
wait(NULL); }

else { // Je suis le processus fils (R(B1), W(B2))


pipe(B2); (0,125pt)
if (fork()) (0,25pt)
{
close(B1[1]); close(B2[0]); (0,25pt)
while ((nb_lu =read(B1[0], nb, sizeof(nb))>0) (0,25pt)
{ nb_R = nb * nb;
write(B2[1], nb_R, sizeof(nb_R)); (0,25pt)
}
close(B1[0]); close(B2[1]);
wait(NULL);
}
else /* Je suis le petit fils (R(B2), W(B3))*/
{
close(B2[1]) ; (0,25pt)
while ((nb_lu =read(B2[0], nb, sizeof(nb))>0) (0,25pt)
{
Nb_R = nb*nb;
d_ecriture = open(nom_pf, O_WRONLY); (0,25pt)
write(d_ecriture, nb_R, sizeof(nb_R)); (0,25pt)
}
close(B2[0]); close(d_lecture);
}
exit(0);
}

Exercice 4 : Translation d’adresse (3 points –1,5+1,5)


On considère une machine avec une mémoire physique pouvant contenir (en plus du SE) 12 cases
de 4Ko. Deux processus P1 et P2 sont chargés en mémoire. Les tables des pages pour ces deux
processus sont :

La ligne état contient des bits décrivant l'état de la page :


 R : page accessible en lecture seule ;
 RW : page accessible en lecture et écriture ;

9/4
 N : page invalide et non allouée ;
 S : page invalide en zone de swap (sur le disque), dans ce cas le numéro de case indique le
numéro du bloc (sur le disque) contenant la page (en réalité ce numéro de bloc figure dans
une autre table).
Toutes les pages au-delà de la 9 ont un bit N.
1) Indiquez sur un schéma le contenu de chacune des 12 cases de la mémoire physique (c-à-d les
pages qu'elles contiennent). Quelles cases sont partagées? Quelle peut être leur utilité? Comment
interprétez-vous leurs bits d'état ? Quelles cases sont libres ? (1,5 pts)
Case 0 1 2 3 4 5 6 7 8 9 10 11
Ppage P26 P17 P10/P20 P11/P21 P12/P22 -- P14 P15 P24 P25 P27 P28

Les pages 2, 3, 4 sont partagées par les deux processus P1 et P2 ; comme l’état

indique R c’est-à-dire que c’est la partie code qui est partagée en lecture seule.

La case libre c’est la case 5


2) Traduire les adresses virtuelles suivantes en adresses physique (indiquées en hexadécimal).
a) Pour le processus P1 : 0x44EF, 0x83CC et 0x700B (0,75 pts)

Taille (page) = 4Ko (212)  12 bits pour le déplacement c-à-d 3 chiffres

héxadécimals

@virtuelle P1 0x44EF 0x83CC 0x700B

@Physique P1 0x64EF DP 0x100B

b) Pour le processus P2 : 0x44EF, 0x83CC et 0x 700B (0,75 pts)

@virtuelle P2 0x44EF 0x83CC 0x700B

@Physique P2 0x84EF 0xB3CC 0xA00B

Exercice 5: Algo. de remplacement de page (4 points—1+2+1)

On s'intéresse à l’algorithme de remplacement horloge (ou encore appelé de seconde de chance),


qui est une amélioration de FIFO avec un bit de référence R, et décrit comme suit :

 Le bit R est mis à 1 au premier chargement dans la mémoire ou encore à chaque


référencement.
 Lors du remplacement de page, on sélectionne la page la plus ancienne :
 Si R=0, cette page est choisie comme victime.

10/4
 Si R= 1 alors R est remis à 0 et cette page est déplacée en fin de la liste (elle devient jeune
comme si elle venait d’être chargée), et la recherche continue jusqu’à trouver une page
ayant le bit R à 0, qui sera retirée.
On souhaite appliquer cet algorithme de remplacement dans un cache capable de contenir 5 pages,
et on suppose que le gestionnaire de mémoire accède successivement aux pages suivantes :
7, 1, 8, 2, 3, 1, 6, 1, 2, 7, 3, 5, 6
Initialement, le cache est vide.
1) Déroulez l'algorithme de remplacement FIFO sur cette séquence de pages. En déduire le

nombre de défauts de pages. (1 pt)

1 2 3 4 5 6 7 8 9 10 11 12 13
7 1 8 2 3 1 6 1 2 7 3 5 6
C1 7 1 6 7

C2 1 2 7 10
C3 8 3 5 12

C4 2 4

C5 3 5
DP * * * * * * * *
 8 DP
2) Déroulez l'algorithme de remplacement horloge sur cette séquence de pages et indiquez la
valeur de bit de référence. En déduire le nombre de défauts de pages et puis le comparer avec
FIFO?. (1,5 pt)
1 2 3 4 5 6 7 8 9 10 11 12 13
7 1 8 2 3 1 6 1 2 7 3 5 6
C1 7 1 1 61 1

0 0
C2 1 1 1 5 1

0 0
C3 8 1 7 1

0 0
C4 2 1

0 1 0

C5 3 1

0 1 0
DP * * * * * * * *

Total de défauts de pages: 8  8<=#E/S<=11 (5 charg. + 2*3 remplacement) (0,5 pt)

11/4
3) Quel est le nombre de défauts de page minimal sur cet exemple ainsi que le nombre d’entrées
sorties? Justifiez sans dérouler l’algorithme optimal.
Total de défaut de pages (optimal): 7 qui n’est autre que le nombre de pages référencées

dans la séquence (1-3 5-8) (1 pt)

12/4

Vous aimerez peut-être aussi