4.9. A propos d’interblocage
Dans le service de gestion d'un magasin, un employé est
chargé d'enregistrer les commandes des clients dans un fichier COM, et
d'éditer les bons de commandes correspondants, sur une imprimante IMP.
D'autre part, un processus facturation, lancé périodiquement lit
les commandes à facturer dans COM et édite les factures
correspondantes sur l'imprimante IMP. Notons qu’une commande peut
concerner plusieurs articles, et donc qu’un bon de commande ou une facture
peut comporter plusieurs lignes.
A- Sachant que l'opération de transfert
élémentaire (lecture, écriture) concerne une ligne de
commande, montrer que l'état de COM peut être incohérent, de
même que les impressions sur IMP. En déduire les règles
d'accès à COM et à IMP.
B- Afin de résoudre le problème
précédent, on fournit deux procédures qui garantissent un
accès exclusif à une ressource
R:
réserver(R)
autorise l'accès à R par le
demandeur si R est libre ou bloque le
demandeur si R est
occupée.
libérer(R)
autorise l'accès à un autre demandeur s'il y en a en attente,
sinon indique que R est libre.
On propose la solution suivante :
processus employé :
début tant qu'il y a des commandes à enregistrer faire
réserver(COM);
enregistrer une commande dans COM;
réserver(IMP);
éditer un bon de commande sur IMP;
libérer(COM);
libérer(IMP);
fait;
fin;
processus facturation;
début répéter indéfiniment
réserver (IMP);
réserver (COM);
tant qu'il y a des commandes à facturer dans COM faire
lire la prochaine commande dans COM;
éditer la facture correspondante sur IMP;
fait;
libérer(IMP);
libérer(COM);
attendre la prochaine période de facturation;
fait;
fin;
B.1- Montrer
que cette programmation permet d'éditer de manière
consécutive, toutes les factures pour une période
donnée.
B.2- Donner une définition de l'interblocage.
Montrer que la programmation risque de conduire à un
interblocage.
B.3- Modifier le processus de facturation pour supprimer
le risque d’interblocage.
Solution de l’exercice
4.9
4.9.1. Question A
Lorsque l’employé saisit une commande,
l'écriture sur disque d'une ligne à la fois, implique que,
à un instant donné, le disque ne contient qu’une partie de
la commande. Si le processus de facturation est lancé, il ne trouvera pas
toutes les lignes de la commande pour éditer la facture, qui sera donc
partielle. Au moment où on crée une commande, il faut donc
interdire au processus de facturation d’accéder aux
commandes.
Par ailleurs, l’employé édite les
commandes saisies sur la même imprimante que le processus de facturation.
Ces éditions se font ligne par ligne, mais toutes les lignes concernant
le même bon de commande ou la même facture doivent se trouver
regroupées, et non entremêlées. Il faut donc que
l’imprimante soit en exclusion mutuelle entre les deux
processus.
4.9.2. Question B
4.9.2.1. Question B.1
La solution proposée garantit bien l’accès
en exclusion mutuelle à l’imprimante par les deux processus. Le
processus de facturation réserve l’imprimante pendant le traitement
des factures d’une période. Ces factures seront donc bien
éditées de manière consécutive. Par ailleurs, comme
le processus réserve également le fichier des commandes, aucune
commande ne peut être en cours de saisie pendant l’édition
des factures.
4.9.2.2. Question B.2
L’interblocage est une situation où un ensemble
de processus sont bloqués en attente d’une ressource
possédée par un autre processus de l’ensemble. Chacun attend
qu’un autre veuille bien libérer la ressource qu’il attend.
Ceci ne peut se faire sans une intervention extérieure, puisqu’ils
sont tous bloqués. Or on ne peut débloquer un processus
qu’en lui donnant toutes les ressources nécessaires, et donc en
réquisitionnant celle qu’il attend et qui est
possédée par un autre processus de l’ensemble.
Dans la solution proposée, on peut imaginer que le
processus employé réserve le fichier COM et commence à
saisir la commande. À ce moment le processus de facturation est
activé, et réserve l’imprimante, puis se bloque en attente
du fichier COM. Lorsque l’employé a terminé la saisie, il
réserve l’imprimante, mais comme celle-ci est déjà
réservée par le processus de facturation, il se bloque en attente
de la libération. Nous avons alors deux processus qui attendent
mutuellement la libération d’une ressource possédée
par un autre processus de l’ensemble : ces deux processus sont en
interblocage.
4.9.2.3. Question B.3
Pour ne plus avoir d’interblocage, une des solutions est
de réserver les ressources dans le même ordre, puisque, dans ce
cas, il ne peut plus y avoir de circularité dans les attentes de
ressources. Dans le processus de facturation, il faut donc réserver le
fichier COM en premier.
processus facturation;
début répéter indéfiniment
réserver (COM);
réserver (IMP);
tant qu'il y a des commandes à facturer dans COM faire
lire la prochaine commande dans COM;
éditer la facture correspondante sur IMP;
fait;
libérer(IMP);
libérer(COM);
attendre la prochaine période de facturation;
fait;
fin;