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