Verwendung von Prüfoperationen
Nach einem Lese- oder Schreibaufruf erhält der Benutzer die Steuerung zurück, sobald die angeforderte Operation akzeptiert wird. Diese Operation braucht also noch nicht beendet zu sein.
Bevor eine Lese- oder Schreiboperation angestoßen wird, wird die Beendigung einer eventuell vorhergehenden Lese- oder Schreiboperation abgewartet (mit einer impliziten Prüf- und Warteoperation). Ebenso wird die Beendigung der letzten Lese- oder Schreiboperation abgewartet, wenn eine Schließoperation angefordert wurde.
Eine Prüfoperation ist also nur notwendig nach der letzten einer Reihe von Lese- oder Schreiboperationen, wenn die Datei nicht sofort wieder geschlossen wird oder wenn mit geketteter Ein-/Ausgabe bis zum Erreichen der Dateiendebedingung gelesen wird (im Fehlerbyte: IDMFIB oder IDMFEF = 1) und die Anzahl der übertragenen Blöcke not equal 0 ist.
Beispiel
In einer EAM-Datei werden 3 Leseoperationen durchgeführt. Die Datei wird danach nicht wieder geschlossen, weil sie für spätere Ein-/Ausgaben noch benötigt wird. Diese Ein-/ Ausgabeoperationen werden jedoch erst nach der Verarbeitung der gelesenen Blöcke angefordert:
LESEN PRÜFEN/WARTEN Die Beendigung der letzten Ein-/Ausgabe- . operation wird abgewartet. . Verarbeitung der gelesenen Blöcke . weitere Ein-/Ausgabeoperationen
Änderung von Verarbeitungseigenschaften
Beim Eröffnen oder Wiedereröffnen einer Datei werden folgende Angaben berücksichtigt:
gekettete/nichtgekettete Ein-/Ausgabe
Anzahl der zu übertragenden Blöcke
Soll eine dieser Angaben während der Dateiverarbeitung geändert werden, ist folgendes Vorgehen erforderlich:
Datei schließen
Felder im MFCB modifizieren
Datei wieder eröffnen
Die Anzahl der zu übertragenden Blöcke ist z.B. dann zu ändern, wenn mit der letzten Schreiboperation weniger Blöcke übertragen werden sollen, als beim Eröffnen der Datei angegeben wurde.
Beispiel
In eine EAM-Datei sind 99 Blöcke zu schreiben. Es sollen jeweils 15 Blöcke gekettet übertragen werden (Byte IDMFNHP im MFCB). Folgende Operationen werden dann angefordert:
ÖFFNEN (neue Datei) -> SCHREIBEN -> SCHREIBEN -> SCHREIBEN -> SCHREIBEN -> SCHREIBEN -> SCHREIBEN -> SCHLIESSEN *) -> WIEDERERÖFFNEN -> SCHREIBEN -> SCHLIESSEN
*) Nach Ausführung der sechs Schreiboperationen sind noch 9 Blöcke zu schreiben. Deshalb muss die Datei geschlossen und wieder eröffnet werden mit dem Wert 9 für die Anzahl zu übertragender Blöcke.
Überlappte Ein-/Ausgabe
Die Verarbeitungszeit kann durch asynchrone Ein-/Ausgaben verkürzt werden. Nach Anstoßen einer Ein-/Ausgabeoperation wird die Steuerung sofort an das Programm zurückgegeben, wo parallel zur physikalischen Ein-/Ausgabe weitere Verarbeitung stattfindet.
Die nächste Ein-/Ausgabeoperation wird angestoßen für einen zweiten, sich mit dem ersten Bereich nicht überschneidenden Ein-/Ausgabebereich ... usw. Bild 1 zeigt die Überlappung von Verarbeitung und Eingabeoperationen.
Sequenzielles Lesen mit geketteter Eingabe
Gekettete Eingabe wird bei sequenziellem Lesen am wirkungsvollsten eingesetzt, wenn
als Anzahl der zu übertragenden Blöcke ein Vielfaches von 3 gewählt wird (3 n);
als Blocknummer eine Zahl der Form: (3n) + 1 (z.B. 1, 4, 7 ...) gewählt wird.
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, ...
Das so umgestellte Programm ist abwärtskompatibel und damit auch ablauffähig in Vorgängerversionen.
Bild 1: EAM - Überlappte Ein-/Ausgabe
Behandlung von Bindemoduldateien durch EAM
Jeder Auftrag kann genau eine Bindemoduldatei bearbeiten. Ist das Bit IDMFOO des Zusatzbytes gesetzt, beziehen sich alle Operationen auf die Bindemoduldatei. Folgendes Diagramm zeigt die Aktionen beim Eröffnen oder Wiedereröffnen einer Datei:
Bild 2: Aktionen bei EAM-Dateieröffnung
Bild 3: EAM - Ablauf beim Eröffnen der Bindemoduldatei