17.01.2015 Views

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Non ou alors il faut un mécanisme matériel ou logiciel qui fait qu'ils soient tous à la même valeur.<br />

2 - b) On va utiliser UC3 comme serveur de sémaphore : le sémaphore est <strong>sur</strong> UC3 et il n'est accessible<br />

que par P i(S) et V i(S) à partir de l'unité centrale i. Comment peut-on modifier <strong>les</strong> deux tâches T 1 et T 2 pour<br />

<strong>les</strong> rendre déterministes Quel est le graphe de précédence correspondant <br />

Réponse :<br />

Ti' : début Pi(S) Ti Vi(S) fin Graphe de précédence : T1' T2'<br />

2 - c) Si deux tâches sont en compétition pour une ressource et que la première des deux qui est lancée<br />

obtient systématiquement la ressource en premier, on dira qu'el<strong>les</strong> respectent la règle : premier lancé<br />

premier servi. Avec le serveur de sémaphore précédent respecte-t-on la règle premier lancé premier servi.<br />

Expliquez.<br />

Réponse :<br />

Non car Pi(S) contient un aspect communication qui prend plus ou moins de temps.<br />

3) Programmation avec sockets (n'était pas dans le sujet de 1998)<br />

On désire réaliser de manière pratique le serveur précédent en utilisant <strong>les</strong> sockets. Si on utilise un mode<br />

connecté, écrire l'algorithme des processus et du moniteur. Quels sont <strong>les</strong> problèmes que l'on rencontre <br />

Réponse :<br />

Algorithme du serveur :<br />

créer un socket s1 <strong>sur</strong> le port défini<br />

attendre la première demande de connexion <strong>sur</strong> ce socket bloqué<br />

quand la première demande arrive, accepter la connexion <strong>sur</strong> un socket s2 et faire un fork();<br />

le père :<br />

• mémorise que la ressource critique est inaccessible<br />

• ferme la connexion socket s2<br />

• se remet à l'écoute des demande de connexion, indique aux clients que la ressource est occupée<br />

le fils :<br />

• traite la connexion<br />

• ferme la connexion et libère la ressource critique<br />

• fin du fork();<br />

La ressource critique étant libérée il faut soit l'accorder aux clients en attente soit se mettre à l'écoute de<br />

demandes de connexion.<br />

Algorithme des processus clients :<br />

• ouvrir une connexion socket <strong>sur</strong> le serveur distant et <strong>sur</strong> le port défini,<br />

• demander l'accès à la ressource critique,<br />

• tant que l'accès n'a pas été accordé : attendre<br />

• travailler avec la ressource critique,<br />

• libérer la ressource critique<br />

• fermer la connexion socket<br />

Le problème est un problème de partage de donnée entre le fils et le père. Comment le fils qui traite la<br />

connexion en cours va-t-il indiquer à son père que celle-ci est libérée On peut imaginer soit une variable à<br />

travers un pipe ou soit le protocole suivant :<br />

i) lorsqu'un client demande l'accès à la ressource critique, il ouvre une socket pour signifier au moniteur sa<br />

requête. A partir de cet instant :<br />

- soit la ressource est libre et le serveur ouvre une socket pour lui envoyer l'autorisation. Cette socket est<br />

aussitôt fermée.<br />

- soit la ressource est occupée et le serveur ouvre une socket pour signifier au processus qu'il doit<br />

attendre. Cette socket est aussitôt fermée ;<br />

ii) le serveur peut alors se remettre en écoute d'autres connexions ;<br />

iii) lorsqu'un client indique qu'il en a terminé avec la ressource critique, il ouvre une socket pour envoyer<br />

une indication de fin de connexion au serveur. Cette socket est aussitôt fermée le message de<br />

déconnexion étant traité par le serveur.<br />

Exercice 5<br />

Sous UNIX quand un fichier ouvert est détruit, il reste accessible en lecture et écriture par le (ou <strong>les</strong>)<br />

processus qui l'a (l'ont) ouvert, mais ne peut plus être ouvert par un autre processus. Cette sémantique estelle<br />

respectée dans NFS <br />

Réponse : Non car c'est un protocole sans mémoire. Il ne mémorise pas <strong>les</strong> processus qui l'ont ouvert...<br />

21 / 51 Travaux Dirigés LO 14

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

Saved successfully!

Ooh no, something went wrong!