Td 2 Processus : relations, synchronisation, communications

Transcription

Td 2 Processus : relations, synchronisation, communications
Cyril FRANCONIE
TD
Architecture des systèmes informatiques
Td 2
Processus : relations, synchronisation, communications
Exercices à réaliser sous linux.
1. Relations entre processus :
Utilisez la commande top pour visualiser dynamiquement l'évolution de l'état des processus.
Combien de processus sont Running simultanément ?
Utilisez la commande pstree (à défaut ps) .
Que constatez vous ?
Réalisez un petit programme qui fork(), et affiche ensuite s'il est le pere ou le fils, et le pid du pere, du
fils et son propre pid (quand il y a lieu).
Exécutez le en boucle ; que constatez vous ?
=> il faut synchroniser des processus même créé par fork();
2. Synchronisation
Compiler le programme thread.c fourni : cc -o thread thread.c -lpthread
exécutez le plusieurs fois; que constatez vous ?
Modifiez le pour y inclure une synchronisation par sémaphore, de façon à ce que la thread main attende
sa fille.
Relancez le. différence ?
CNAM Versailles
1
Cyril FRANCONIE
TD
Architecture des systèmes informatiques
3. Blocage de processus
On considère un système à :
•
4 ressources du même type non partageables
•
3 processus actifs
•
Chaque processus a au plus besoin de 2 ressources simultanément.
Montrer qu'il ne peut pas y avoir de blocage .
4. Communication simple entre processus
Exercice de producteur/consommateur.
On considère un système à 2 processus :
•
un producteur est chargé de calculer des nombres pseudo-aléatoires, et les range dans un
tableau de taille limitée.
Ce tableau est géré en Premier entré, Premier sorti (PEPS ou FIFO).
•
Un consommateur est chargé de récupèrer un numéro, et d'en générer un code barres qu'il
doit ensuite apposer sur une caisse. Ce traitement prends environ une seconde.
Pour lisser l'activité du système, on fera en sorte que lorsque le tableau est plein, le producteur se mette
en attente jusqu'à ce que celui-ci redescende a un seuil d'occupation maxi egal à la moitié de sa taille
(« water-mark »).
Formulez votre algorithme et implémentez le.
5. Communication entre processus (thread ici) :
Exercice des lecteurs / rédacteurs
à réaliser en Java ou C selon préférence. (Je préconise Java , avec l'aide de la classe Sem fournie si vous
choisissez la solution à sémaphores, pour pouvoir utiliser les moniteurs.)
L'énoncé :
Un buffer de taille N est utilisé par :
• des lecteurs : qui vont y lire les données contenues
• des rédacteurs : qui vont y modifier les données, en mettant à jour à chaque fois le nombre
de caractères écrit C.
Plusieurs lecteurs peuvent accéder en même temps au buffer, puisqu'ils ne le modifient pas, mais par
contre un seul rédacteur peut modifier le contenu du buffer à la fois.
Lorsque un rédacteur « travaille », les lecteurs ne peuvent accéder au buffer.
A vous de définir votre algorithme, en donnant la priorité aux lecteurs ou aux rédacteurs par exemple.
CNAM Versailles
2
Cyril FRANCONIE
TD
Architecture des systèmes informatiques
puis implémentez le et testez le .
CNAM Versailles
3