Vous êtes sur la page 1sur 3

Module : Systèmes d'Exploitation 2 Institut Supérieur d'Informatique

Niveau : 2ème année Licence (SIL/ARS/SE) Année Universitaire : 2010-2011


Enseignants : W. Youssef, L. Sfaxi, A. Gazdar, S. Naïmi, A. Ben Chikha

SYSTÈMES D'EXPLOITATION 2
DEVOIR SURVEILLÉ

Questions de Cours
1- Est-ce que le problème de synchronisation de processus se pose dans le cas d’un système
d’exploitation monotâche ? Justifiez votre réponse.

2- Qu’est ce qu’une section critique ? Quelles conditions faut il vérifier afin d’assurer une
bonne coopération entre les processus concernés par cette section critique?

3- Citez deux techniques de synchronisation de processus concurrents se basant sur l’attente


active. Dans quel état (Prêt, Elu ou bloqué) doit se trouver un processus qui vient d’être élu
et tente d’entrer dans sa section critique alors que son concurrent s’y exécute ?

Exercice 1
Soit l'algorithme suivant pour la gestion de la synchronisation des processus:

enum BOOLEEN {FAUX, VRAI};


enum BOOLEEN interesse[2] = {FAUX, FAUX};
void entrer_SC(int nbProc){
int autre = 1 – nbProc;
while (interesse[autre] == VRAI);
interesse[nbProc] = VRAI;
return;
}
void liberer_SC(int nbProc){
interesse[nbProc] = FAUX;
return;
}

1. Quelle est la propriété qui n'est pas satisfaite par cet algorithme?

2. Proposez une correction à la méthode entrer_SC pour résoudre ce problème.

Systèmes d'Exploitation 2 Page 1/3


TP3 : Synchronisation des Threads en Java 2010-2011

Exercice 2
1- Rappeler l’algorithme de Peterson pour synchroniser deux processus concurrents

2- On se propose de synchroniser le passage des piétons sur un pont qui ne supporte qu’une
seule personne allant d’un coté à un autre. On vous demande d’écrire le programme du
piéton nommé passer(...) qui va lui permettre de passer d’un côté à un autre à travers le pont.
Vous devez utiliser les deux fonctions entrer_SC et liberer_SC implémentées dans la
première question afin de synchroniser les piétons.

Exercice 3
Soit l'algorithme suivant:

#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
int main() {
int compt=0 ;
pid_t pid_fils1, pid_fils2 ;
printf("1-Compteur= %d \n",compt) ;
pid_fils1 = fork() ;
if (pid_fils1 == -1) {
printf("Erreur") ;
return(1) ;
}
if (pid_fils1 == 0) {
compt++ ;
printf("2-Compteur %d\n",compt) ;
pid_fils2 = fork() ;
if (pid_fils2 == -1) {
printf(" Erreur ") ;
return(1) ;
}

Systèmes d'Exploitation 2 Page 2/3


TP3 : Synchronisation des Threads en Java 2010-2011

if (pid_fils2 == 0) {
compt++ ;
printf("3-Compteur %d\n",compt) ;
}
}else {
compt-- ;
printf("4-Compteur %d\n",compt) ;
}
}

1. Donner le nombre de processus créés par ce programme

2. Donner, pour chaque processus, l'affichage effectué.

Bon Travail

Systèmes d'Exploitation 2 Page 3/3

Vous aimerez peut-être aussi