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;