Ressource partagée

On souhaite maintenant rajouter une tâche supplémentaire qui envoie en boucle le caractère "!" sur le port série. Ceci nécessite donc de gérer l'accès concurrent au port série entre deux tâches.

Vous allez mettre en place un mécanisme simplifié de sémaphores permettant d'assurer l'accès en exclusion mutuelle au port série. Pour cela :

  1. Il faut désormais trois états possibles pour une tâche : CREATED (la tâche n'a encore jamais été exécutée), ACTIVE (la tâche est disponible) et SUSPENDED (la tâche attend l'accès à une ressource partagée).
  2. Ecrivez une primitive take_serial (similaire au P/Wait des sémaphores), qui vérifie si le port série est disponible, si oui le prend, si non la tâche l'exécutant est suspendue.
  3. Écrivez une primitive release_serial (similaire au V/Signal des sémaphores), qui rend le port série et, si besoin, rend active la tâche suspendue.
  4. Modifiez le code des tâches et de l'ordonnanceur en conséquence.

Notez bien que les primitives take_serial et release_serial doivent être ininterruptibles !



thomas 2013-11-21