Examen final Systèmes d’exploitation Examen SE
Question 1 :
Le code suivant implante une pile partagée. Les fonctions push() et pop() peuvent être appelées
Le code suivant implante une pile partagée. Les fonctions push() et pop() peuvent être appelées
simultanément par plusieurs threads. La fonction push() bloque jusqu’à ce qu’un espace soit libre dans la pile. De son côté, la fonction pop() bloque jusqu’à temps qu’une donnée soit disponible sur la pile. Finalement, les threads doivent s’exclure entre eux. Utilisez les mécanismes de synchronisation par sémaphores pour implanter ce comportement
int stackPointer;
int stack [ Size ];
void push (int a)
{
…
stack[ stackPointer ] = a;
stackPointer++;
…
}
int pop()
{
…
stackPointer--;
int tmp = stack[ stackPointer ];
…
return tmp;
}
main()
{
…
sem_init(mutex, NULL, 1);
}
Question 2 :
Un ensemble de N avec N > 4 processus partagent 3 imprimantes LP0, LP1, LP2. Pour éviter de mélanger les lignes sortie de chaque processus, le processus Pi doit réserver l’imprimante avant de l’utiliser. Pour connaître l’état de chaque imprimante il y a un vecteur global int LP[3];
Il y a deux fonctions : prendre() et liberer() :
int prendre() int liberer(int i)
{ {
int i=0; LP[i]=0;
while(i<3) }
{
if(LP[i]==0)
{ LP[i] = getpid();
break;//quitter while
}
++i;
}
if (i==3)
{ return -1; }
else
{ return i; }
}
Compléter prendre() et liberer() pour synchroniser en utilisant 2 sémaphores :
s_mutex et s_lp avec des seudocode UP() et DOWN().
int stackPointer;
int stack [ Size ];
void push (int a)
{
…
stack[ stackPointer ] = a;
stackPointer++;
…
}
int pop()
{
…
stackPointer--;
int tmp = stack[ stackPointer ];
…
return tmp;
}
main()
{
…
sem_init(mutex, NULL, 1);
}
Question 2 :
Un ensemble de N avec N > 4 processus partagent 3 imprimantes LP0, LP1, LP2. Pour éviter de mélanger les lignes sortie de chaque processus, le processus Pi doit réserver l’imprimante avant de l’utiliser. Pour connaître l’état de chaque imprimante il y a un vecteur global int LP[3];
Il y a deux fonctions : prendre() et liberer() :
int prendre() int liberer(int i)
{ {
int i=0; LP[i]=0;
while(i<3) }
{
if(LP[i]==0)
{ LP[i] = getpid();
break;//quitter while
}
++i;
}
if (i==3)
{ return -1; }
else
{ return i; }
}
Compléter prendre() et liberer() pour synchroniser en utilisant 2 sémaphores :
s_mutex et s_lp avec des seudocode UP() et DOWN().
Question 3 :
Soit un système de mémoire paginée, dans leque l il y a un processus avec la chaîne des références de pages : S={244, 1A1, 244, 363, 244, 268, 244, 1A1, 1A2, 363}. Montrer l’état de la mémoire à chaque instant, si l’on suppose que le système possède 3 cadres de pages et qu’initialement ils sont libres. Utilisez :
a) Algorithme optimal
b) LRU
Le même système de gestion de mémoire paginée à deux niveaux utilise une TLB. On a mesuré les temps suivants :
Temps moyen d’accès au TLB = 4nsg
Temps moyen d’accès au mémoire principale = 33nsg
c) Si le TLB a un taux de réussite de 98%, quel est le temps moyen d’accès au mémoire ?
Question 4 :
Soit un système à multiples partitions de mémoire avec allocation contiguë. A un instant donné les partitions libres sont 100K, 500K, 200K, 300K et 600K (en ordre des adresses croissantes). On a une liste d’arrivé des processus qui demandent 212K, 417K, 112K et 426K. Calcule le comportement des algorithmes First-Fit, Best-Fit et Worst-Fit. Quel est le meilleur algorithme dans ce cas? Justifiez.
Question 5 :
Soit un système de mémoire paginée, dans leque l il y a un processus avec la chaîne des références de pages : S={244, 1A1, 244, 363, 244, 268, 244, 1A1, 1A2, 363}. Montrer l’état de la mémoire à chaque instant, si l’on suppose que le système possède 3 cadres de pages et qu’initialement ils sont libres. Utilisez :
a) Algorithme optimal
b) LRU
Le même système de gestion de mémoire paginée à deux niveaux utilise une TLB. On a mesuré les temps suivants :
Temps moyen d’accès au TLB = 4nsg
Temps moyen d’accès au mémoire principale = 33nsg
c) Si le TLB a un taux de réussite de 98%, quel est le temps moyen d’accès au mémoire ?
Question 4 :
Soit un système à multiples partitions de mémoire avec allocation contiguë. A un instant donné les partitions libres sont 100K, 500K, 200K, 300K et 600K (en ordre des adresses croissantes). On a une liste d’arrivé des processus qui demandent 212K, 417K, 112K et 426K. Calcule le comportement des algorithmes First-Fit, Best-Fit et Worst-Fit. Quel est le meilleur algorithme dans ce cas? Justifiez.
Question 5 :
Un S.E. utilise segmentation paginée avec des adresses logiques de 19 bits:
Quelle est l’adresse physique correspondante à l’adresse logique 234122 ? Justifiez.
a) 547466
b) Il y aurait un défaut de page
c) 236170
d) 65535
e) Aucune n’est correcte
Question 6 :
Considérez le système d’allocation de blocs par indexage à multi-niveaux d’Unix représenté par le diagramme suivant. Supposons que plusieurs disques sont rattachés à la machine, que le même système de fichier Unix s’étant sur tous les disques pour former un volume cohérent, et qu’un bloc de données d’un fichier peut-être alloué sur n’importe quel disque. Aussi, considérez des tailles de blocs de disque de 4 Ko et des pointeurs de taille de 32 bits dans les blocs d’index. Les 24 premiers bits les plus à droite (i.e. positions 0..23) du pointeur de 32 bits contiennent l’adresse d’un bloc de données sur un disque quelconque, et les 8 derniers bits les plus à gauche (i.e. positions 24..31) contiennent l’adresse du disque sur lequel se trouve le bloc de données.
(i) Calculez la taille maximale d’un fichier en unités d’octets.
(ii) Calculez la taille maximale de chaque disque qui compose le volume en unité d’octets.
(iii) Calculez la taille maximale de l’ensemble des disques qui forme le volume en unités d’octets.
Question 7 :
Dans les systèmes d’exploitation traditionnels, les pilotes de périphériques sont directement intégrés dans le noyau alors que les pilotes de périphériques sont hors du noyau (mais en mode système) dans les systèmes d’exploitation contemporains. Étant dans le noyau, les pilotes de périphériques traditionnels avaient directement accès à toutes les ressources du noyau.
(i) Donnez une raison pour laquelle les pilotes de périphériques traditionnels étaient intégrés directement dans le noyau.
(ii) Expliquez si l’intégration des pilotes de périphériques dans le noyau était sécuritaire ou non.
(iii) Expliquez un problème qui pourrait survenir avec les pilotes de périphériques traditionnels, si jamais un périphérique était changé.
Bonjour
RépondreSupprimerJ'aurai un concour de magistére et je veux les solutions de ces questions le plus rapidement possible!!!
J’attends avec impatience vos solutions...
Merci d'avance