Structure de buf

Objectif

Décrit les transferts de données de mise en mémoire tampon entre un programme et l'unité périphérique

Présentation des tampons du noyau

Pour les périphériques de bloc, les tampons de noyau sont utilisés pour mettre en mémoire tampon les transferts de données entre un programme et le périphérique périphérique. Ces mémoires tampons sont allouées en blocs de 4096 octets. A tout moment, chaque bloc de mémoire est membre de l'une des deux listes liées que le pilote de périphérique et le noyau maintiennent:

Liste Descriptif
File d'attente de mémoire tampon disponible (avlist) Liste de toutes les mémoires tampon disponibles pour utilisation. Ces mémoires tampons ne contiennent pas de données en attente de transfert vers ou depuis un périphérique.
File d'attente de mémoire tampon occupée (blist) Liste de toutes les mémoires tampons qui contiennent des données en attente de transfert vers ou depuis un périphérique.

Chaque mémoire tampon possède un en-tête de tampon associé appelé la structure F pointant vers lui. Chaque en-tête de mémoire tampon comporte plusieurs parties:

  • Informations sur le bloc
  • Indicateurs pour afficher les informations d'état
  • Busy liste des pointeurs vers l'avant et vers l'arrière
  • Liste des pointeurs vers l'avant et vers l'arrière

Le pilote de périphérique maintient laav_forwetav_backLes pointeurs (pour les blocs disponibles), tandis que le noyau maintient lab_forwetb_backPointeurs (pour les blocs occupés).

Variables de structure de buf pour les E-S de bloc

La structure buf , qui est définie dans le fichier /usr/include/sys/buf.h , inclut les zones suivantes:

Article Descriptif
b_flags Marquer les bits. La valeur de cette zone est construite en OR logiquement 0 ou plus des valeurs suivantes:
ECRIT_B_ÉCRITURE
Cette opération est une opération d'écriture.
B_READ
Cette opération est une opération de lecture de données, plutôt que d'écriture.
B_TERMINÉ
Les E-S sur la mémoire tampon ont été effectuées, de sorte que les informations de la mémoire tampon sont plus récentes que les autres versions.
ERREUR B_ERREUR
Une erreur de transfert s'est produite et la transaction a été abandonnée.
B_OCCUPÉ
Le bloc n'est pas sur la liste libre.
B_INFLIGHT
Cette demande d'entrée-sortie a été envoyée au pilote de périphérique physique pour traitement.
B_AGE
Il est peu probable que les données soient réutilisées rapidement, de sorte que cette mémoire tampon puisse être réutilisée. Ce drapeau suggère que le tampon passe à la tête de la liste libre plutôt qu'à la fin.
B_ASYNC
Les E-S asynchrones sont exécutées sur ce bloc. Lorsque des E-S sont effectuées, relâchez le bloc.
B_DELWRI
Le contenu de cette mémoire tampon doit encore être écrit avant que la mémoire tampon ne puisse être réutilisée, même si ce bloc peut être sur la liste libre. Cette opération est utilisée par le sous-programme écrire lorsque le système attend une autre écriture dans le même bloc.
B_NOHIDE
Indique que la page de données ne doit pas être masquée lors du transfert DMA (direct memory access).
B_SETMOD
Permet à un système de fichiers d'E-S amélioré de provoquer la modification d'une page.
B_STALE
Les données sont en conflit avec les données sur le disque en raison d'une erreur d'E-S.
B_ XREADONLY
Indique une page en lecture seule dans la liste des mémoires tampon de radiomessagerie externe.
B_MORE_DONE
Lorsqu'il est défini, indique au récepteur de cette structure F que davantage de structures sont mises en file d'attente au niveau IODONE . Cela permet aux pilotes de périphérique de traiter toutes les demandes terminées avant de traiter toute nouvelle demande.
B_FRACTIONNEMENT
Lorsqu'il est défini, indique que le transfert peut commencer n'importe où dans la mémoire tampon de données.
b_forw Pointeur de bloc occupé vers l'avant.
b_back Pointeur de bloc occupé vers l'arrière.
av_forw Pointeur avant d'une file d'attente de demande de pilote.
av_back Pointeur arrière pour une file d'attente de demande de pilote.
b_iodone Toute personne appelant la routine Stratégie doit définir cette zone pour qu'elle pointe vers sa routine d'entrée-sortie. Cette routine est appelée sur le niveau INTIODONE Interruption lorsque les E-S sont terminées.
b_dev Numéro de l'unité principale et mineure.
b_bcount Nombre d'octets pour le transfert de données.
b_un.b_addr Adresse mémoire de la mémoire tampon de données.
b_blkno Numéro de bloc de l'unité.
b_resid Quantité de données non transférées après erreur.
b_event Ancou pour la liste d'événements.
b_xmemd Descripteur de mémoire croisée.