Ãcole Polytechnique de Montréal Département de Génie ... - Cours
Ãcole Polytechnique de Montréal Département de Génie ... - Cours
Ãcole Polytechnique de Montréal Département de Génie ... - Cours
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
École <strong>Polytechnique</strong> <strong>de</strong> Montréal<br />
Département <strong>de</strong> Génie Informatique<br />
<strong>Cours</strong> INF3600 : Systèmes d’exploitation<br />
Contrôle périodique – Automne 2001<br />
• Date : 1 er novembre 2001 <strong>de</strong> 18h à 20h<br />
• Professeurs : Kerly Titus, Hanifa Boucheneb<br />
• Documentation : Notes + livre du cours<br />
• Pondération : 30 %<br />
• Nombre <strong>de</strong> questions : 3<br />
• Total : 20 points<br />
Question 1 : (6 pts) Création <strong>de</strong> processus (appels système d’UNIX)<br />
1) Dans le cas d’UNIX, la création <strong>de</strong> processus est réalisée par duplication.<br />
a) Citez un avantage et un inconvénient. (1 pt)<br />
b) Citez en <strong>de</strong>ux ou trois lignes les avantages <strong>de</strong>s processus légers (threads)<br />
par rapport aux processus. (1 pt)<br />
a) Facilite la duplication <strong>de</strong>s processus exécutant un même programme.<br />
Complique la création <strong>de</strong>s processus exécutant <strong>de</strong>s programmes<br />
différents.<br />
b) Meilleur partage <strong>de</strong>s ressources<br />
Gain en temps et en espace<br />
Meilleur réactivité<br />
2) Considérez un fichier nommé COURS. Pour accélérer la recherche du mot<br />
INF3600 dans le fichier COURS, le processus <strong>de</strong> départ crée quatre<br />
processus. Chaque processus fils créé effectue la recherche dans une <strong>de</strong>s<br />
quatre parties du fichier en appelant la fonction Recherche suivante :<br />
bool Recherche (char * Fichier, char * Mot, int Partie) où :<br />
- Fichier est le nom du fichier, c'est-à-dire COURS,<br />
- Mot est le mot recherché, c'est-à-dire INF3600 et<br />
- Partie est la partie 1, 2, 3 ou 4 du fichier.<br />
Cette fonction retourne 1 en cas <strong>de</strong> succès et 0 sinon.<br />
Au retour <strong>de</strong> la fonction Recherche, le processus fils transmet, en utilisant<br />
l’appel système exit, au processus père le résultat <strong>de</strong> la recherche (exit(0)
en cas <strong>de</strong> succès, exit(1) en cas d’échec). Lorsque le processus père est<br />
informé du succès <strong>de</strong> l’un <strong>de</strong> ses fils, il tue tous les autres fils.<br />
……<br />
a) Ecrivez un programme C/C++ qui réalise le traitement ci-<strong>de</strong>ssus. (4 pts)<br />
Attention : n’écrivez pas le co<strong>de</strong> <strong>de</strong> la fonction Recherche.<br />
int main ( )<br />
{ int pid[4], status, x;<br />
for (int i=0; i0)<br />
if ( status>>8 ==0)<br />
{ for(i=0;i
A 0 4 unités <strong>de</strong> CPU, 2 unités d’E/S, 2 unités <strong>de</strong> CPU<br />
B 2 3 unités <strong>de</strong> CPU, 4 unités d’E/S, 2 unités <strong>de</strong> CPU<br />
C 3.5 5 unités <strong>de</strong> CPU<br />
La première ligne signifie que le processus A arrive dans le système à l’instant<br />
0, son exécution nécessite dans l’ordre 4 unités <strong>de</strong> temps CPU, 2 unités <strong>de</strong><br />
temps d’E/S et 2 unités <strong>de</strong> temps CPU. Au départ le processus A est élu par le<br />
processeur CPU1.<br />
Si plusieurs événements surviennent en même temps, vous supposerez les<br />
priorités suivantes :<br />
- Le CPU1 a la priorité d’accès à la file <strong>de</strong>s processus prêts par rapport<br />
au CPU2.<br />
- A la fin d’un quantum, le processus non terminé en cours est<br />
suspendu uniquement si la file <strong>de</strong>s processus prêts n’est pas vi<strong>de</strong>. Le<br />
traitement réalisé à la fin d’un quantum est plus prioritaire que celui d’une fin<br />
d’E/S qui, à son tour, est plus prioritaire que l’arrivée <strong>de</strong> nouveaux processus<br />
dans le système.<br />
a) Donnez les diagrammes <strong>de</strong> Gantt montrant l’allocation <strong>de</strong>s <strong>de</strong>ux<br />
processeurs, <strong>de</strong> l’unité d’E/S et l’évolution <strong>de</strong>s états <strong>de</strong>s files d’attente<br />
(celle <strong>de</strong>s processus prêts et celle <strong>de</strong>s processus en attente <strong>de</strong> l’unité<br />
d’E/S) (3 pts).<br />
CPU1 :(0,A,4) (4,C,7) (7,C,9) (10,B,12)<br />
CPU2 :<br />
(2,B,5) (6,A,8)<br />
File : (3.5,C)(4,vi<strong>de</strong>)<br />
E/S : (4,A,6) (6,B,10)<br />
File E/S : (5,B) (6,vi<strong>de</strong>)<br />
b) Calculez le temps moyen <strong>de</strong> virement (temps moyen <strong>de</strong> séjour) (1 pt).<br />
TVM = (8+(12-2) + (9-3.5))/3 = 7.8<br />
Question 3 : Synchronisation <strong>de</strong> processus (8 pts)<br />
Considérez un système multicouche composé <strong>de</strong> trois couches P0, P1 et P2. Les<br />
couches sont <strong>de</strong>s processus concurrents qui communiquent au moyen <strong>de</strong> <strong>de</strong>ux<br />
tampons T0 et T1 <strong>de</strong> même taille N :<br />
- P0 et P1 partagent le tampon T0 et<br />
- P1 et P2 partagent le tampon T1.<br />
Chaque couche se charge d’un traitement particulier :
- Le processus P0 se charge <strong>de</strong> lire du clavier <strong>de</strong>s messages qu’il traite avant<br />
<strong>de</strong> les déposer dans le tampon T0. Le traitement d’un message par la couche<br />
P1 consiste à l’encrypter. Il est réalisé par la fonction Encrypter suivante :<br />
Message Encrypter (Message);<br />
La fonction Message Lire (); permet <strong>de</strong> lire un message du clavier.<br />
- Le processus P1 se charge <strong>de</strong> transférer directement les messages du<br />
tampon T0 vers le tampon T1.<br />
- Le processus P2 récupère les messages du tampon T1 pour les envoyer à un<br />
<strong>de</strong>stinataire. L’envoi d’un message est réalisé par la fonction Envoyer :<br />
Envoyer (Message );<br />
Clavier<br />
P0<br />
T0<br />
P1<br />
T1<br />
P2<br />
Envoyer(m)<br />
a) Expliquez comment les processus peuvent utiliser les sémaphores pour<br />
contrôler les accès aux tampons partagés (exclusion mutuelle, pas<br />
d’interblocage) (2 pts).<br />
Les sémaphores :<br />
Mutex0 et mutex1 pour contrôler les accès aux tampons.<br />
Vi<strong>de</strong>1, Vi<strong>de</strong>0, Plein1 et Plein0 pour bloquer un processus si le tampon est<br />
vi<strong>de</strong> ou plein.<br />
b) Donnez les pseudoco<strong>de</strong>s <strong>de</strong>s trois processus (6 pts).<br />
Semaphore<br />
mutex1=1, mutex0=1, Vi<strong>de</strong>0=N, Vi<strong>de</strong>1=N, Plein0 = 0, Plein1 = 0;<br />
P0<br />
Message m, mc;<br />
int ip=0;<br />
Répéter<br />
{ m= lire();<br />
mc = Encrypter(m);<br />
P(Vi<strong>de</strong>0);
}<br />
P(mutex0);<br />
T0[ip] = mc;<br />
V(mutex0);<br />
ip = ip+1 mod(N)<br />
V(Plein0);<br />
P1<br />
int icp=0;<br />
Répéter<br />
{<br />
P(Plein0);<br />
P(Vi<strong>de</strong>1)<br />
P(mutex0);<br />
P(mutex1)<br />
T1[icp] = T0[icp];<br />
V(mutex1);<br />
V(mutex0)<br />
icp = icp+1 mod(N)<br />
V(Plein1);<br />
V(Vi<strong>de</strong>0);<br />
}<br />
P2<br />
Message mc;<br />
int ic=0;<br />
Répéter<br />
{<br />
}<br />
P(Plein1)<br />
P(mutex1);<br />
mc = T1[ic];<br />
V(mutex1);<br />
ic = ic+1 mod(N)<br />
V(Vi<strong>de</strong>1);<br />
Envoyer(mc);