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:
|
| 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. |