Die im Folgenden beschriebene ereignisgesteuerte Verarbeitung sowie die genannten Makroaufrufe sind ausführlich im Handbuch „Makroaufrufe an den Ablaufteil“ [2] dargestellt.
Ereignisgesteuerte Verarbeitung wird von UPAM dazu benutzt, einem Auftrag die Beendigung einer angeforderten Ein-/Ausgabe mitzuteilen. Der Auftrag kann
parallel zur UPAM-Ein-/Ausgabe fortgesetzt werden und bei Eintreten des erwarteten Ereignisses (hier die Beendigung der angeforderten Ein-/Ausgabe) mit einem Contingency-Prozess fortfahren (asynchrone Verarbeitung).
auf die Beendigung der angeforderten Ein-/Ausgabe warten und dann fortfahren (synchrone Verarbeitung, die natürlich auch ohne ereignisgesteuerte Verarbeitung möglich ist).
UPAM gibt nach Vollendung einer Ein-/Ausgabe-Operation eine Meldung an die zugeordnete Ereigniskennung (mit dem Makroaufruf POSSIG). Diese Meldung trifft dann sofort oder später auf die vom Benutzer ausgegebene Anforderung (SOLSIG-Makroaufruf). Liegen sowohl Anforderung als auch Meldung vor (für dieselbe Ereigniskennung), wird ein Contingency-Prozess gestartet oder der Basisprozess fortgesetzt.
Bild 5: Koordinierung von Benutzerauftrag und UPAM-Verarbeitung
Basisprozess
Dem System müssen die zu verwendenden Ereigniskennungen und Contingency-Definitionen mitgeteilt werden (Makroaufrufe ENAEI, ENACO).
Für jede Ein-/Ausgabe muss dem System die Adresse eines FECBs (File Event Control Block) mitgegeben werden. Parallel laufende Ein-/Ausgaben müssen auf verschiedene FECBs verweisen. Die maximale Anzahl paralleler Ein-/Ausgaben wird durch den FCB-Operanden PAMREQS festgelegt; für Banddateien gilt: PAMREQS=1.
Die Zahl der Contingency-Definitionen richtet sich danach, ob unterschiedliches Vorgehen nach einer ausgeführten Ein-/Ausgabe-Operation gewünscht ist. Soll z.B. immer auf die gleiche Weise verfahren werden, genügt es, die Contingency-Definition nur einmal zu codieren.
Für jede Ereigniskennung muss ein 14 Byte langer Steuerblock eingerichtet werden - der FECB = File Event Control Block.
Für jede Datei muss im FCB-Makroaufruf der Operand PAMREQS= korrekt angegeben werden. PAMREQS legt die Höchstzahl gleichzeitig für diese Datei anzufordernder Ein-/ Ausgabe-Operationen fest.
Solange die erste Ein-/Ausgabe-Operation mit einem FECB nicht beendet ist, darf dieser FECB nicht für andere Ein-/Ausgabe-Operationen benutzt werden.
Bei jeder UPAM-Ein-/Ausgabe-Anforderung muss die Adresse des zugeordneten Steuerblocks angegeben werden (Operand FECB= im PAM-Makroaufruf). Es dürfen durch den PAM-Makroaufruf keine Warteoperationen angefordert werden, weder explizit noch implizit. Die Befehlsfolge Lesen (RD) ->
Schreiben (WRT) ->
Warten (WT) auf denselben Block führt demnach zu einem undefinierten Ergebnis. Das Ereignis (Beendigung der Ein-/Ausgabe) muss vor dem WRITE-Aufruf abgewartet werden.
Nach jeder UPAM-Ein-/Ausgabe-Anforderung muss genau eine Anforderung an die zugeordnete Ereigniskennung abgegeben werden (Makroaufruf SOLSIG). Mit dieser Anforderung kann festgelegt werden, ob der Basisprozess parallel zur Ein-/Ausgabe weiterläuft oder deren Beendigung abwartet.
Beim Start eines Contingency-Prozesses werden diesem in den Registern 2 und 3 folgende Informationen übergeben:
bei PARMOD=31: die Ein-/Ausgabe wird über die 31-Bit-Operandenliste angestoßen, die Informationen werden in den Registern 2, 3 und 4 übergeben:
Register | Information |
2 | enthält den Ereignis-Informationscode |
3 | enthält in den beiden rechten Byte einen vom Anwender beim Anstarten der Ein-/Ausgabe mitgelieferten POST-CODE und im linken Byte ein Kennzeichen für UPAM-Event (X'10') |
4 | enthält die Adresse der Operandenliste der beendeten Operation |
bei PARMOD=24: Die Ein-/Ausgabe wird über die „alte“ 24-Bit-Operandenliste angestoßen, die Informationen befinden sich in den Registern 2 und 3:
Register | Information |
2 | enthält den Ereignis-Informationscode |
3 | enthält in den drei rechten Byte die Adresse der Operandenliste der beendeten Operation und im linken Byte den Wert X'10' |
Wird über eine mit PARMOD=31 erzeugte PAM-Operandenliste ein mit PARMOD=24 erzeugter SOLSIG-Makro oder eine 24-Bit-Contingency-Definition angesprochen, enthält der sekundäre Returncode (linkes Byte von Register 15) einen Hinweis auf inkonsistente Längen von Sender und Empfänger.
Aufbau des Steuerblocks FECB (File Event Control Block)
Der FECB muss auf Wortgrenze ausgerichtet werden. Er kann mit dem Makroaufruf IDECB mit symbolischen Namen versehen werden.
Ablaufteil-Markierungsbyte
Feldbedeutung | Feldlänge (Byte) | Feldname |
interne Kurzkennung der Ereigniskennung | 4 | CBEVID |
Adresse des FCB | 4 | CBP1LNK |
Standard-Gerätebyte | 1 | CBSDB |
Fehlerbytes | 3 x 1 | CBSB1, CBSB2, CBSB3 |
Ablaufteil-Markierungsbyte | 1 | CBEFB |
Anzahl übertragener PAM-Seiten | 1 | CBNPA |
Eine UPAM-Ein-/Ausgabe-Operation kann auf verschiedene Arten beendet werden (AMB: Ablaufteil-Markierungsbyte, siehe FECB):
normale Ein-/Ausgabe-Beendigung | AMB=X'80' |
Ein-/Ausgabe-Operation führte zu Sonderbedingung | AMB=X'C0' |
nicht behebbarer Fehler (z.B. Hardwarefehler) | AMB=X'A0' |
In einem Contingency-Prozess kann der Anwender auf die einzelnen Möglichkeiten der Ein-/Ausgabe-Beendigung entsprechend reagieren.