Licence GMI cours de Systèmes d’Exploitation II ( Driss MATROUF )
IUP GMI – Université d’Avignon et des Pays de Vaucluse Page 5
Algorithme de libération
• Algorithme libérer_tampon
Entrée : tampon verrouillé
{
réveiller tous les processus en attente d ’un tampon
relever le niveau d ’exécution du processeur
if(contenu du tampon valide et non ancien)
mettre le tampon à la fin de la LTL;
else mettre le tampon en tête de LTL;
rabaisser le niveau d ’exécution du processeur
déverrouiller le tampon;
}
Quelques remarques
• Verrouillage au début d ’un appel sys et déverrouillage avant la fin.
• Le noyau perd le contrôle sur les tampons seulement dans le cas d ’une E/S.
• En théorie le noyau ne résout pas le problème de famine, mais dans la pratique….
Lecture d ’un bloc
• Algorithme bread /lecture d ’un bloc */
sortie : tampon verrouillé contenant les données
{
obtenir un tampon pour le bloc (getbloc).
If(données valides) return (tampon);
initialiser une lecture disque;
sleep(E);
return(tampon);
} Ecriture d ’un tampon
• Algorithme bwrite /* écriture d ’un bloc */
Entrée : tampon verrouillé
{
initialiser une écriture disque;
if(E/S synchrone){
sleep(E);
libérer le tampon;
}
else
if(écriture différée)
marquer « à mettre en tête de la LTL »
}