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.
-
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]
-
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é]
-
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]
-
Optimiser le programme précédent en minimisant le nombre
d'appels système.