1. Le programme ouvrir ouvre le vaccinodrome. Il admet les arguments n, m et t (exprimé en millisecondes)
et doit créer tous les éléments nécessaires (mémoire partagée, sémaphores, etc.) sauf s’ils existent déjà auquel
cas une erreur doit être générée. Au démarrage, il n’y a encore aucun médecin dans le vaccinodrome.
2. Le programme fermer donne l’ordre de fermer le vaccinodrome : plus aucun patient n’est admis, mais tous
ceux qui sont déjà engagés dans le processus vaccinal doivent le terminer dans les règles. Lorsque ce pro-
gramme termine son exécution, tous les patients et les médecins doivent avoir quitté le vaccinodrome et les
objets (sémaphores, segments de mémoire partagée, etc.) doivent être supprimés.
3. Le programme nettoyer supprime toutes les structures de données rémanentes (sémaphores, segments de
mémoire partagée, etc.) au cas où une précédente exécution aurait laissé de telles structures en place.
4. Le programme medecin simule un médecin. Chaque médecin se voit attribuer un box numéroté dans l’ordre
d’arrivée, à partir de 0 jusqu’à m − 1, que le patient doit connaître. Le programme affiche le nom du patient en
cours de vaccination. Lorsque la fermeture est ordonnée, les médecins doivent attendre que tous les patients
aient été vaccinés pour se terminer.
5. Le programme patient simule un patient. Il admet un argument, le nom du patient, et affiche sur sa sortie
standard les différentes étapes du parcours vaccinal : numéro du siège (0 . . . n − 1) dans la salle d’attente et
identité (numéro) du médecin qui l’a pris en charge. Si tous les sièges de la salle d’attente sont occupés, le
programme doit attendre à l’extérieur. Si le vaccinodrome est fermé avant que le patient ne puisse y rentrer,
le programme se termine avec un code de retour non nul. Le patient ne sait pas combien de temps dure la
vaccination, c’est le médecin qui doit lui indiquer quand il peut partir.
Deux stratégies sont possibles pour la rencontre entre le patient et le médecin : soit le médecin choisit un des patients
en attente, soit le patient choisit un box libre. Bien évidemment, vous éviterez toute attente active, même ralentie.
Pour partager des informations entre plusieurs processus, vous n’utiliserez que la mémoire partagée POSIX, à l’ex-
clusion de tout autre mécanisme tel que fichier, tube, etc. De même, pour la synchronisation, vous n’utiliserez que les
sémaphores POSIX, à l’exclusion de tout autre mécanisme tel que barrière, signal, verrou, etc.
Le code de retour de vos programmes devra indiquer si une erreur s’est produite ou non. En cas d’erreur, vous
adopterez la stratégie simple de terminer l’exécution du programme concerné avec un message explicite.
Pour simplifier l’implémentation, on supposera que les conditions suivantes sont vérifiées. Sauf mention contraire,
on ne vous demande pas de les vérifier vous-mêmes :
— il n’y a qu’un seul vaccinodrome ;
— les noms des patients sont limités à 10 octets (limite à vérifier) ;
— il n’y a pas besoin de vérifier qu’un patient a déjà été vacciné.
Partager