Cliquer ici pour imprimer

Dernière modification : 12/05/2021 à 09:34

Producteur / Consommateur

Dans ce travail, nous allons réaliser un programme permettant de jouer le rôle du producteur ou du consomateur avec échange de données sûre à l'aide de mémoire partagée.

Exercice 1 - on se prépare...

Renseignez vous un peu sur les questions suivantes :

Et maintenant, les commandes à utiliser :

Réfléchir maintenant à l'organisation de l'ensemble : on veut un programme qui produit de la donnée, et un autre qui consomme. Ils ne se connaissent pas vraiment (pas de tubes possible... ou alors tube nommé). Mais on veut aussi contrôler la taille de l'échange. On créé donc un espace mémoire, et on le partage. On a un sémaphore qui nous permet de contrôler qu'on s'arrête de produire si la taille limite de la mémoire partagé est atteinte. D'un autre coté, on a un consommateur qui vide l'espace, tant qu'il y a en a. Il libère le producteur, si celui-ci avait atteint la taille maximum de l'espace partagé. Les deux programmes tournent en même temps, et s'alimentent/se libèrent l'un l'autre. Y a t il besoin d'un autre sémaphore ?

Exercice 2 - Le grand partage

Pour des questions pratiques on mettra dans la mémoire partagée des entiers tirés aléatoirement par le producteur. Utiliser #define pour définir deux constantes MAX_FILE et MAX_RAND fixant respectivement le nombre maximal d'éléments dans la mémoire partagée et la valeur maximale des tirages aléatoire.

Dans un premier temps utiliser les fonctions shm_open, ftruncate et mmap pour créer un tableau d'entiers de taille MAX_FILE en mémoire partagée. (Vous pouvez (devez ?!!) consulter les pages de manuel pour utiliser convenablement ces trois fonctions, en particulier pour déterminer les inclusions nécessaires).

Exercice 3 - Sémaphores

Exercice 4 - ... et ça roule

Rendu

Envoyer votre travail sous forme d'une archive contenant les sources sur blackboard - ce n'est pas grave si vous n'avez pas fini !