Professional Documents
Culture Documents
Devoir Système D'exploitation Session Principale Groupe INGTA-1-I
Devoir Système D'exploitation Session Principale Groupe INGTA-1-I
Page 1 sur 7
6. Parmi lesquels sont considérés des algorithmes de remplacement de mémoire :
a. FIFO
b. Worst Fit
c. Best Fit
d. Least Recently Used
e. Lastly Used
9. Le DMA :
a. est un protocole d’E/S
b. est un accès direct à la Mémoire
c. est un dialogue entre la RAM et le périphérique d’E/S sans passer par la CPU
11. Quel est le niveau le plus rapide en temps d’accès au niveau de la mémoire cache ?
a. Niveau L1
b. Niveau L2
c. Niveau L3
d. Niveau L4
Page 2 sur 7
Partie B : EXERCICES (14 pts)
Exercice 1 : (Gestion d’Ordonnancement des Processus) (07 pts)
Soit un Système monoprocesseur qui ordonnance l’exécution des processus suivants :
Temps Temps
Processus
d'Arrivée CPU
A 0 2
B 2 5
C 4 4
D 5 3
E 7 2
a. Supposons qu’on travaille en mode monoprocesseur, donnez les diagrammes de Gantt des
algorithmes suivants : FIFO, SJF, SRTF et le Tourniquet (Quantum = 2ms) montrant
l’allocation de ces processus et l’évolution de leurs états. (Tracer un diagramme pour
chaque algorithme)
(NB : Veuillez utiliser 2 stylos de couleurs différentes afin de distinguer les états des
processus).
b. Calculer le temps moyen d’attente, le temps moyen de séjour et le temps de réponse moyen
pour les algorithmes SJF, SRTF et le Tourniquet. Interpréter le résultat.
Page 3 sur 7
La table est mise avec cinq fourchettes qui sont disposés entre chacun des philosophes.
De temps en temps, un philosophe a faim et essaye de prendre les fourchettes qui sont
immédiatement à côté de lui (ceux qui sont entre lui et son voisin de gauche et de droite). Un
philosophe a besoin de deux fourchettes pour manger, et ne peut évidemment pas prendre un couvert
qui est dans la main d'un voisin.
Quand un philosophe affamé a ses deux fourchettes dans les mains en même temps, il mange sans les
libérer. Dans le cas contraire, il doit attendre que ceux-ci deviennent libres (voir figure2).
Enfin, quand il finit de manger, il repose ses deux fourchettes et commence à penser à nouveau.
Précisons que les philosophes mangent et pensent durant des temps aléatoires différents, leur
changements d'état, se produisent donc de manière totalement asynchrone.
Le problème même du dîner des philosophes consiste donc à réguler les changements d'état de ces
derniers suivant la disponibilité des fourchettes, qui dépend bien entendu de l'état des voisins du
philosophe concerné.
Question 1 : Soit l’algorithme ci-dessous, d’après-vous quelles sont problèmes rencontrées suite à son
implémentation.
Void philosophe()
{
While(1)
{
Sleep();
Prendre_fourchette_droite();
Prendre_fourchette_gauche();
Manger();
Deposer_fourchette_droite();
Deposer_fourchette_gauche();
}
}
Page 4 sur 7
Question 2 :
Compléter le script par les types/fonctions correspondant(e)s à l’aide du Tableau Annexe ci-dessous
mentionné :
#define NB_PHILO 5
T_etat etatPhilo[NB_PHILO];
static sem_t fourchettes[NB_PHILO]; // sémaphore privé, sémaphore pour les ressources fourchettes
(1 par philosophe)
static sem_t SemaPublic; // pour l'affichage (il faut pas que ça change pendant qu'on affiche)
void changeEtaffiche ( int* id, T_etat nouvelEtat) // fonction affichant les états des différents
philosophes sur une ligne
{
int i;
……………(&SemaPublic); // Variable Sémaphore
etatPhilo[*id] = nouvelEtat;
for (i = 0; i<NB_PHILO; i++)
{
switch(etatPhilo[i]){
case Pense: printf(" P "); break;
case Mange: printf(" M "); break;
case Attend: printf(" A "); break;
}
}
sem_post(……………….);
}
// il attend
changeEtaffiche(id,Attend);
if(left<right) {
sem_wait(…………………);
…………..(&fourchettes[right]);
}
else {
sem_wait(&fourchettes[right]);
sem_wait(&fourchettes[left]);
Page 5 sur 7
}
// il mange
changeEtaffiche(id,Mange);
//sleep(2);
// il pense (important: avant de relacher ses fourchette, parce que s'il le fait après, l'affichage
mettrait que 2 voisins mange en même temps)
changeEtaffiche(id,Pense);
………..….(&fourchettes[left]);
sem_post(&fourchettes[right]);
//sleep(2);
return (NULL);
}
srand(getpid());
………….(&SemaPublic,0,1); // Initialisation
sem_destroy(…………..);
return (EXIT_SUCCESS);
}
Question 3 : Quel mécanisme de synchronisation doit-on implémenter pour régulariser la section critique
afin de la protéger des conditions et manipulations non structurées ?
Page 6 sur 7
Tableau Annexe des fonctions de la Bibliothèque pthread.h selon le standard POSIX
/. Bon travail ./
Page 7 sur 7