16.04.2014 Views

É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

SHOW MORE
SHOW LESS

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);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!