File partagée

Ce sujet s'inspire d'un problème qui se pose au concepteurs d'un serveur X Window (et d'une discussion avec Juliusz Chroboczek). Le serveur doit exécuter des requêtes, qui sont stockées par les différents clients sur une file d'attente. Une approche utilise la mémoire partagée.

On programmera en C.
NB: les commandes ipcs et ipcrm peuvent être utilisées pour faire le ménage manuellement.

  1. En utilisant de la mémoire partagée et des sémaphores, faire une file (de taille maximum fixée) où un processus enfile et l'autre défile.
    Rappel d'algorithmique : on utilise un tableau de taille fixée, plus un pointeur de début de file et un pointeur de fin de file. L'enfilage se fait en fin de file, et le pointeur avance d'une case (modulo la taille). Le défilage se fait en début de file, et le pointeur avance d'une case.
    [corrigé, sans mémoire partagée]
    [corrigé, avec un sémaphore qui verrouile l'accès à toute la mémoire partagée]
    [corrigé, sans sémaphore, ce qui est possible avec un seul enfileur]
  2. Faire de même en utilisant une structure chaînée pour une file, ce qui permet d'avoir une file de taille a priori quelconque.
    [corrigé]
  3. Améliorer l'un ou l'autre programme précédent pour que plusieurs processus aient la possibilité d'enfiler.
    [corrigé, avec une file de taille limitée]
  4. Optimiser le programme précédent en minimisant le nombre d'appels système.