Licence GMI cours de Systèmes d’Exploitation II ( Driss MATROUF )
IUP GMI – Université d’Avignon et des Pays de Vaucluse Page 1
Diagramme bloc du noyau
Le buffer Cache
• Le noyau pourrait lire et écrire directement
• la relative lenteur de transfert du disque
=> faible capacité de traitement
• L ’utilisation d ’une réserve de tampons
• => minimisation de la fréquence d ’accès
• Le buffer Cache = réserve de tampons
Implantation du buffer-Cache
• Lors de l’initialisation le noyau alloue de l ’espace pour les tampons
• Un tampon = un en-tête + un tableau contenant les données d ’un bloc
• un tampon représente un bloc disque (temporaire).
• Les données d ’un bloc se trouvent dans au plus un tampon
Licence GMI cours de Systèmes d’Exploitation II ( Driss MATROUF )
IUP GMI – Université d’Avignon et des Pays de Vaucluse Page 2
En-tête d ’un tampon
En-tête d ’un tampon
• Le noyau gère les tampons en utilisant :
– des files à adressage calculé
– une liste de tampons libres
– files et liste doublement chaînées
• L ’état d ’un tampon :
– verrouillé (occupé) ou déverrouillé (libre)
– contient des données valides
– marqué en écriture différée
– En train d ’être charger ou transférer
– attendu par un processus
Licence GMI cours de Systèmes d’Exploitation II ( Driss MATROUF )
IUP GMI – Université d’Avignon et des Pays de Vaucluse Page 3
La liste des tampons libres
• l ’extraction se fait en tête et la remise en queue (en général).
Les files à adressage calculé
Licence GMI cours de Systèmes d’Exploitation II ( Driss MATROUF )
IUP GMI – Université d’Avignon et des Pays de Vaucluse Page 4
Extraction d ’un tampon
• Algorithme getbloc{ /* (retourne un tampon verrouillé) */
while(T non trouvé){
if(bloc dans une file){
if(T occupé){ sleep (E); continue;}
marquer T occupé; extraire T de la LTL; return(T);
}
else{ /* le bloc n ’est pas dans la réserve */
if(LTL est vide){ sleep(E); continue; }
extraire un T de la LTL;
if(T marqué écriture différée){
écriture asynchrone du tampon; continue; }
extraire T et le mettre dans la bonne file;
return T verrouillé;
}
}
Libération de tampons
• Un tampon retourné par getbloc reste verrouillé --> libération HN explicite
• Le tampon est mis à la fin sauf :
• une erreur E/S
• marqué ancien
• Pas de libérations imbriquées
• la procédure de libération est invoquée aussi à la fin d ’une E/S asy
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 »
}
1 / 13 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!