Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

MFCB (Mini File Control Block)

Aufbau des MFCB

Die Feldeinteilung des MFCB und die Auswertung der MFCB-Felder in Abhängigkeit von der gewählten Operation sind aus der folgenden Tabelle zu ersehen.

IDMFOPC
(Operations
schlüssel)

IDM
FUNIT*
Funktions
einheit

IDM
VERS*
Versions
angabe

IDM
RETCO
Return
Code

IDMFO
Zusatz
byte

IDMFLB
Logische
Block
nummer

IDMFF
Datei
name

IDMFE
Fehler
Byte

IDMFS
Status
Byte

IDMFIO
A1*
Adresse
IOAREA1

IDMFNHP
Anzahl
zu übertr.
Blöcke

IDMFIO
A2*
Adresse
IOAREA2

Eröffnen neue
Datei (IDMFO)

A

A

S

A

(+)

S

S

-

-

(A)

-

Wiederer
öffnen
(IDMFRO)

A

A

S

A

S

A(+)

S

-

-

(A)

-

Lesen
(IDMFRD)

A

A

S

A

A

A

S

S

(A)

-

(A)

Schreiben
(IDMFWR)

A

A

S

A

A

A

S

S

(A)

-

(A)

Prüfen
(IDMFCK)

A

A

S

-

-

A

S

S

-

-

-

Prüfen und
Warten
(IDMFCW)

A

A

S

-

-

A

S

S

-

-

-

Datei
schließen
(IDMFCL)

A

A

S

-

S

A

S

S

-

-

-

Datei löschen
(IDMFER)

A

A

S

-

-

A

S

-

-

-

-

*: gilt nur für PARMOD=31

A: Feldinhalt wird ausgewertet

S: Feldinhalt wird vom System gesetzt

+: Ausnahmen für Bindemoduldateien (siehe „Behandlung von Bindemoduldateien durch EAM“)

Beschreibung des MFCB

Die Feldeinteilung des MFCB und die Auswertung der MFCB-Felder in Abhängigkeit von der gewählten Operation sind aus der Tabelle zu ersehen.

Der MFCB ist der Verständigungsbereich zwischen EAM und Anwender; der MFCB muss auf Wortgrenze ausgerichtet sein. Vor Aufruf des EAM-Makros müssen die für die gewählte Operation benötigten Felder versorgt werden.

Der MFCB kann mit dem Makro IDMCB mit symbolischen Namen versehen werden.

Funktionseinheit (IDMFUNIT)

Gilt explizit oder implizit PARMOD=31, muss IDMFUNIT mit dem Wert „DMFEAM“ versorgt sein.

Operationsschlüssel (IDMFOPC)

Schlüssel

Bedeutung

IDMFO

Einrichten und Eröffnen einer neuen Datei (OPEN) - EAM wertet das Bit im Zusatzbyte IDMFOO aus und eröffnet danach entweder die Bindemoduldatei oder eine neue auftragsspezifische Datei.
Der Name einer neuen Bindemoduldatei wird im TCB (Task Control Block) festgehalten; ist bereits eine Bindemoduldatei vorhanden, wird diese wieder eröffnet (d.h. für die Bindemoduldatei gilt OPEN=REOPEN; siehe „Behandlung von Bindemoduldateien durch EAM").

Einer neuen EAM-Datei wird ein binärer Dateiname zwischen 1 und 14000 zugewiesen und in das Feld „Dateiname“ geschrieben.

Außerdem wird das Bit IDMFCI des Zusatzbytes ausgewertet.
Falls dieses Bit gesetzt ist, d.h. im geketteten Ein-/Ausgabemodus, wird überprüft, ob das Feld IDMFNHP (= Anzahl der zu übertragenden Blöcke) eine Zahl zwischen 1 und 16 enthält.

Die Adressen der Ein-/Ausgabebereiche werden nicht überprüft.

IDMFRO

Wiedereröffnen einer bestehenden Datei (REOPEN) - im Zusatzbyte werden die Bits IDMFOO, IDMFSBR und IDMFCI ausgewertet. Für IDMFCI und damit für das Feld IDMFNHP gilt das Gleiche wie bei der OPEN-Operation.

Entsprechend der Auswertung von IDMFOO wird entweder die auftragsspezifische Bindemoduldatei oder eine im Feld „Dateiname“ (IDMFFN) genannte Datei eröffnet (siehe auch „Behandlung von Bindemoduldateien durch EAM").

IDMFRD

Lesen (READ) - EAM wertet im Zusatzbyte das Bit IDMFI1 aus und überprüft die über dieses Bit ausgewählte Adresse eines Eingabebereichs (Feld IDMFIO1 oder IDMFIO2). Die Eingabe erfolgt an die entsprechende Adresse, auch wenn der Inhalt von IDMFIO1/2 unmittelbar nach Aufruf der Operation verändert wurde.

Wird bei einem Lesevorgang das Dateiende erkannt, wird das Bit IDMFEF des Fehlerbytes gesetzt.

War zum OPEN/REOPEN-Zeitpunkt das Bit IDMFCI des Zusatzbytes gesetzt, erfolgt die Eingabe gekettet. Die Anzahl der zu übertragenden Blöcke wird dem Feld IDMFNHP ebenfalls zum OPEN/REOPEN-Zeitpunkt entnommen (siehe „Anzahl zu übertragender Blöcke (IDMFNHP)").
Das Feld „Logische Blocknummer“ (IDMFLBN) enthält die Nummer des nächsten zu lesenden Blocks oder den Wert null für sequenzielles Lesen.

Die Lese-/Schreiboperation ist bei EAM asynchron, d.h. der Benutzer erhält sofort nach Aufruf des EAM-Makros die Steuerung zurück, es sei denn, eine vorhergehende
Ein-/Ausgabe-Operation ist noch nicht abgeschlossen. Im MFCB eingetragene diesbezügliche Fehlerinformationen (IDMFERR, IDMFSB) beziehen sich immer auf die vorhergehende Operation, daher muss bei unmittelbar aufeinander folgenden Ein-/Ausgabe-Operationen die Zweite warten.
Überlappte Ein-/Ausgabe bzw. Doppelpufferung kann über die Angabe von zwei verschiedenen Ein-/Ausgabebereichsadressen erreicht werden (siehe „Überlappte Ein-/Ausgabe").

IDMFWR

Schreiben (WRITE) - wie beim Lesen wird in Abhängigkeit vom Bit IDMFI1 entweder das Feld IDMFIO1 oder das Feld IDMFIO2 auf Gültigkeit der dort enthaltenen Adresse eines Ausgabebereichs überprüft.

Ist der Inhalt des Feldes „Logische Blocknummer“ (IFMFLBN) null, wird sequenziell im Anschluss an das Dateiende geschrieben. Ist der Inhalt not equal 0 wird der zu übertragende Block an die so bezeichnete Stelle der Datei gebracht.
Für den Ablauf einer Schreiboperation gilt im Übrigen das Gleiche wie für Leseoperationen (siehe oben).

IDMFCK

Prüfen der Beendigung einer Ein-/Ausgabeoperation (CHECK) - es wird überprüft, ob eine ausstehende Ein-/Ausgabeoperation abgeschlossen ist; der Benutzer erhält in jedem Fall die Steuerung sofort zurück. Ist die überprüfte Operation noch nicht abgeschlossen, erhält Register 15 den Wert 8. Ist die Operation beendet, werden die Statusbytes in den MFCB (IDMFSB) übertragen und Register 15 erhält den Wert 0.

IDMFCW

Prüfen einer Ein-/Ausgabe und Warten (CHECK WAIT) - die Beendigung der letzten Ein-/Ausgabeoperation wird abgewartet, anschließend werden die Statusbytes übertragen.
Wurde die Übertragung der Statusbytes bereits durch eine andere Operation veranlasst, ist dieser EAM-Aufruf wirkungslos.

IDMFCL

Datei schließen (CLOSE) - nach Beendigung der letzten noch ausstehenden
Ein-/Ausgabeoperation wird die Datei als geschlossen markiert. Die Blocknummer des letzten Blocks der Datei wird in das Feld „Logische Blocknummer“ (IDMFNLB) übertragen.

IDMFER

Datei löschen (ERASE) - die Datei wird gelöscht, gleichgültig, ob sie eröffnet ist oder nicht.

Versionsnummer (IDMVERS)

Gilt explizit oder implizit PARMOD=31, muss IDMVERS mit dem Wert DMEAMV versorgt sein. Dies ist wichtig im Hinblick auf zukünftige BS2000-Versionen, da so verschiedene Versionen dieser Schnittstelle ohne Neuübersetzung unterstützt werden können.

Return-Information (IDMRETCO)

In der 31-Bit-Version wird der Return-Code im Feld IDMRETCO des MFCB hinterlegt.
Dieser Return-Code entspricht dem des Registers 15.

Return-Code

Bedeutung

0

Operation erfolgreich abgeschlossen

4

Operation nicht erfolgreich abgeschlossen Fehlerbytes (IDMFEB) überprüfen

8

nach Prüfoperationen: geprüfte Ein-/Ausgabe-Operation noch nicht abgeschlossen

Zusatzbyte (IDMFOC)

IDMFOO

Bindemoduldatei eröffnen - dieses Bit wird bei allen Operationen ausgewertet.
Ist das Bit gesetzt, wird die auftragsspezifische Bindemoduldatei bearbeitet (siehe „Behandlung von Bindemoduldateien durch EAM"). Ist das Bit nicht gesetzt, wird in der OPEN-Funktion eine neue Datei eröffnet und der Dateiname in das Feld „Dateiname“ (IDMFFN) gebracht. In der Funktion REOPEN = Wiedereröffnen wird die in „Dateiname“ genannte Datei eröffnet.

IDMFCI

gekettete Ein-/Ausgabe - das Bit wird zum OPEN-/REOPEN-Zeitpunkt ausgewertet und sein Inhalt sichergestellt. Das heißt, ist beim (Wieder-)Eröffnen einer Datei dieses Bit gesetzt, erfolgen spätere Ein-/Ausgabeoperationen gekettet. Die Länge der Übertragungskette ist durch den Inhalt des Feldes IDMFNHP (=Anzahl der zu übertragenden Blöcke) festgelegt, das ebenfalls beim Öffnen der Datei ausgewertet wird. Ist das Bit nicht gesetzt, wird keine gekettete Ein-/Ausgabe verwendet.

IDMFSBR

Startpunkt der Ein-/Ausgabe in der Datei - über dieses Bit wird gesteuert, wo die Ein-/Ausgaben in der Datei „aufsetzen“ sollen.
Das Bit wird beim Wiedereröffnen einer Datei ausgewertet. Ist es gesetzt, wird der Wert 0 in das Feld „Logische Blocknummer“ gebracht, sonst die höchste bisher vergebene Blocknummer der Datei (siehe Beschreibung des Feldes IDMFLBN, "MFCB (Mini File Control Block)").

IDMFI1

Steuerung des Ein-/Ausgabebereichs - dieses Bit wird bei aktuellen Ein-/Ausgabeoperationen ausgewertet. Ist das Bit gesetzt, wird die im Feld IDMFIO2 angegebene Adresse des Ein-/Ausgabebereichs-2 überprüft und dieser Bereich für die anstehende Ein-/Ausgabeoperation verwendet. Ist das Bit nicht gesetzt, wird die im Feld IDMFIO1 enthaltene Adresse des Ein-/Ausgabebereichs-1 überprüft, Ein-/Ausgaben erfolgen dann in diesen bzw. von diesem Bereich aus (siehe Abschnitt „Überlappte Ein-/Ausgabe").

Logische Blocknummer (IDMFLBN)

Die logische Blocknummer ist eine 2 Byte lange Binärzahl (0 <= n <= 65535). Hat sie den Wert 0, erfolgt die Verarbeitung sequenziell: Beim Lesen wird der Block übertragen, der unmittelbar auf den letzten in einer Lese-/Schreiboperation angesprochenen Block folgt. Beim Schreiben wird ein Block an das Dateiende angefügt.

Ist die logische Blocknummer not equal 0, so verweist sie direkt auf den Block der Datei, der gelesen oder geschrieben werden soll.

Bei geketteter Ein-/Ausgabe gelten die Angaben für den ersten Block der Übertragungskette.

Dateiname (IDMFFN)

Der Dateiname ist eine 2 Byte lange Binärzahl (dezimal: 1 <= n <= 14000), die beim Eröffnen einer neuen Datei von EAM in das Feld „Dateiname“ übertragen wird. Diese Zahl ist dort bei jeder späteren Bezugnahme auf die Datei anzugeben. 

Fehlerbyte (IDMFEB)

Ist bei einer vom EAM-Makro angestoßenen Operation ein Fehler aufgetreten, werden je nach Ursache entsprechende Bits, die über symbolische Namen ansprechbar sind, gesetzt; gleichzeitig erhält Register 15 den Wert X'00000004'.

IDMFIC

Unzulässige Operation - zum Beispiel unzulässiger Operationsschlüssel, Zugriff auf eine nicht geöffnete Datei, bei geketteter Ein-/Ausgabe liegt der Wert im Feld IDMFNHP nicht zwischen 1 und 16, MFCB ist nicht auf Wortgrenze ausgerichtet usw.

IDMFIF

Unzulässiger Dateiname - Die im Feld „Dateiname“ (IDMFFN) angegebene Zahl bezeichnet keine in diesem Auftrag existente EAM-Datei.

IDMFIB

Ungültige Blocknummer - Die im Feld IDMFLBN (Logische Blocknummer) angegebene Blocknummer liegt außerhalb der Datei (beim Lesen) oder ist größer als die Nummer des zuletzt geschriebenen Blocks + 1 (beim Schreiben).

IDMFIA

unzulässige Adresse eines Ein- oder Ausgabebereichs - Die in den Feldern IDMFIO1 oder IDMFIO2 enthaltene Adresse für Ein-/Ausgabebereich-1/2 ist ungültig.

IDMFNS

Kein EAM-Speicherplatz mehr verfügbar - Z.B.: Der Benutzer hat 14000 EAM-Dateien erzeugt oder der gesamte für EAM-Dateien im System zur Verfügung stehende Speicherplatz ist ausgeschöpft.

IDMFNP

Unzulässiger Zugriff auf eine privilegierte Datei - Ein nichtprivilegierter Benutzer versuchte auf eine privilegierte Datei zuzugreifen.

IDMFEF

Dateiende - Bei einem Lesevorgang wurde das Dateiende erreicht: Überstreicht bei geketteter Eingabe eine Übertragungskette das Dateiende, wird soweit wie möglich ausgelesen und das Bit für Dateiende gesetzt.

IDMFERR

Statusbytes überprüfen - Die vorhergehende Lese- oder Schreiboperation ist nicht erfolgreich abgeschlossen worden. Es sollten die Statusbytes überprüft werden, um die Fehlerursache festzustellen.

Statusfeld (IDMFSB)

Dieses Feld wird vom System versorgt, wenn gleichzeitig folgende Bedingungen erfüllt sind:

  • die vorausgehende Operation war eine Lese- oder Schreiboperation;

  • die aktuelle Operation ist eine der Operationen Lesen, Schreiben, Prüfen, Prüfen und Warten oder Schließen.

Es werden folgende Bytes aus dem CCB (Channel Control Block) übertragen: das Standard-Gerätebyte, 3 Fehlerbytes, das Ablaufteil-Markierungsbyte.

Adresse von Ein-/Ausgabebereich-1 (IDMFIO1/IDMFIOA1)

Dieses Feld enthält die virtuelle Adresse des ersten Bytes von Ein-/Ausgabebereich-1. Beim Schreiben wird von dieser Adresse ein Block bzw. eine Übertragungskette übertragen, beim Lesen wird der gelesene Block/die Blockfolge an diese Adresse übertragen.

Hat der Ein-/Ausgabebereich Blockgröße (2048 Byte), sollte er innerhalb einer Seite (4096 Byte) liegen und auf Wortgrenze ausgerichtet sein. Bei geketteter Ein-/Ausgabe sollte der Bereich auf Seitengrenze ausgerichtet sein; er muss mindestens so viele Blöcke aufnehmen können, wie mit einer Ein-/Ausgabeanforderung übertragen werden.

Wenn diese Ausrichtungsbedingungen nicht erfüllt werden, kann es bei bestimmter Hardware zu Zwischenpufferung und dadurch zu Performance-Einbuße kommen.

Anzahl zu übertragender Blöcke (IDMFNHP)

Dieses Feld wird zum Zeitpunkt des Eröffnens oder Wiedereröffnens einer Datei ausgewertet, wenn im Zusatzbyte gekettete Ein-/Ausgabe (IDMFCI) verlangt wird. Es enthält eine 1-Byte-Binärzahl <= 16.

Bei geketteter Ein-/Ausgabe und Erreichen des Dateiendes im Lesemodus übergibt das System hier die Anzahl der übertragenen Blöcke.

Adresse von Ein-/Ausgabebereich-2 (IDMFIO2/IDMFIOA2)

Dieses Feld enthält die virtuelle Adresse des ersten Bytes von Ein-/Ausgabebereich-2. Die Adresse kann mit der von Ein-/Ausgabebereich-1 übereinstimmen. Soll jedoch zeitlich überlappte Verarbeitung durchgeführt werden, ist hier die Adresse eines Bereichs anzugeben, der sich mit Ein-/Ausgabebereich-1 nicht überschneidet.

Es gelten die Bedingungen für Ein-/Ausgabebereich-1.

Gekettete Ein-/Ausgabe

Ist im MFCB das Bit IDMFCI für gekettetete Verarbeitung gesetzt, ist die Ein-/Ausgabe schneller. Dabei müssen die gekettet zu schreibenden Blöcke nicht nebeneinander liegen. Beim Schreiben werden immer Gruppen von 3 PAM-Seiten gekettet geschrieben, beim Lesen werden nebeneinander liegende Seiten gekettet gelesen. Daher sollte das Feld IDMFNHP (= Anzahl der zu übertragenden Blöcke) ein Vielfaches von 3 enthalten.
Außerdem sollten Ein-/Ausgabeoperationen immer bei Blocknummern beginnen, die in der Form (3 * n) + 1 darstellbar sind, d.h. 1, 4, 7, ...

Hinweis

Zur Unterstützung der NK4-Pubsets wird vom EAM-Anwender gefordert, die gekettete Verarbeitung auf den Blockungsfaktor 2 oder ein Vielfaches von 2 umzustellen. In diesem Fall sollten bei direkten Ein-/Ausgabeoperationen ungerade Blocknummern (BLOCK#) angegeben werden, also 1, 3, 5, ...

Durch eine Erhöhung des Blockungsfaktors auf Kosten des Hauptspeicherplatzes (Ein/Ausgabepuffer) werden die CPU-Zeit (Anstoß und Beendigung der Ein- und Ausgabeanforderung) die Kanal- und Gerätezeit (Seek- und Searchzeiten) durch das Lesen bzw. Schreiben von mehreren Blöcken mit einer physikalischen Ein-/Ausgabe) eingespart. Diese Optimierung kann vom System nicht beeinflusst werden, da sie primär in der Verantwortung des EAM-Anwenders liegt.