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.