Breada-Kernel-Service
Zweck
Liest den angegebenen Block ein und startet dann die Ein-/Ausgabe für den Vorausleseblock.
Syntax
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/buf.h>
struct buf *breada (dev, blkno, rablkno)
dev_t dev;
daddr_t blkno;
daddr_t rablkno;Parameter
| Element | Beschreibung |
|---|---|
| dev | Gibt die Einheit an, die den zu lesenden Block enthält. |
| Blkno | Gibt den zu lesenden Block an. |
| Rablkno | Gibt den zu lesenden Vorausleseblock an. |
Beschreibung
Der Breada -Kernel-Service ordnet dem angegebenen Block einen Puffer zu. Wenn sich der angegebene Block bereits im Puffercache befindet, wird der Service Brot wie folgt aufgerufen:
- Rufen Sie den Block ab.
- Gibt den Pufferheader zurück.
Andernfalls wird der Service Getblk aufgerufen, um dem angegebenen Block einen freien Puffer zuzuordnen und die Daten in den Puffer einzulesen. Der Breada -Service wartet auf die Beendigung der Ein-/Ausgabe und gibt dann den Pufferheader zurück.
Die Ein-/Ausgabe wird auch für den angegebenen Vorausleseblock gestartet, wenn die Liste freier Blöcke nicht leer ist und sich der Block nicht bereits im Cache befindet. Der Breada -Service wartet jedoch nicht auf die Beendigung der Ein-/Ausgabe für diesen Vorausleseblock.
Ausführungsumgebung
Der Breada -Kernel-Service kann nur aus der Prozessumgebung aufgerufen werden.
Rückgabewerte
Der Breada -Service gibt die Adresse des Headers des ausgewählten Puffers zurück. Ein Wert ungleich null für B_ERROR in derb_flagsFeld des Pufferkopfsatzes (StrukturBuf ) gibt einen Fehler an. In diesem Fall sollte der Aufrufende den Puffer, der dem Block zugeordnet ist, über den Brelse -Kernel-Service freigeben.
Auf einer Plattform, die Speicherschlüssel unterstützt, wird der Pufferheader aus dem Speicher zugeordnet, der durch den KKEY_BLOCK_DEW -Kernelschlüssel geschützt ist.