Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

STXIT - Ausgang für Unterbrechungsereignis spezifizieren

&pagelevel(3)&pagelevel

Allgemeines

Anwendungsgebiet:

STXIT-Verfahren; siehe "STXIT-Verfahren mit Contingency-Verarbeitung";

Starten, Unterbrechen und Beenden; siehe "Starten, Unterbrechen und Beenden";

Kommunikation; siehe "Kommunikation (Programm, Anwender, System)"

Makrotyp:

S-Typ, MF-Format 1: Standardform/L-/E-Form;

siehe "S-Typ-Makroaufrufe"


Während eines Programmlaufs auftretende Ereignisse beeinflussen den weiteren Programmablauf, wie z.B.

  • ungültiger Operationscode, ungültiger SVC

  • Datenfehler, Überlauf

  • Ende Programmlaufzeit, Break-, Escape-Unterbrechungen oder INFORM-PROGRAM-Kommando,

  • Adressfehler (siehe Tabelle 14)

Das STXIT-Verfahren bietet mit den folgenden Makros dem Anwender die Möglichkeit, derartige Programmunterbrechungen mit eigenen (STXIT-) Routinen selbst zu behandeln und damit evtl. einer vorzeitigen Programmbeendigung vorzubeugen:

STXIT

STXIT-Prozess definieren

EXIT

STXIT-Prozess beenden

LEVCO

Verarbeitungsebene (Prozesspriorität) des STXIT-Prozesses ändern

CONTXT

Zugriff zum unterbrochenen Prozess oder zum Basisprozess ermöglichen

SETIC

Zeitgeberintervall setzen (CPU-Zeit oder Realzeit)

Eine STXIT-Routine ist ein Programmabschitt in einem Haupt- oder Unterprogramm, der im Falle einer bestimmten Programmunterbrechung vom Ablaufteil von BS2000 als selbstständiger Prozess (eigener Registersatz (PCB), eigene Prozesspriorität) aktiviert wird. In dem Programmabschnitt reagiert der Anwender auf das von ihm angenommene Unterbrechungsereignis.

Makrobeschreibung

Mit dem Makro STXIT ordnet der Anwender die STXIT-Routinen seines Programms den auftretenden Unterbrechungsereignissen (Tabelle 14) zu.
Die angebenen Zuordnungen werden intern in einen STXIT-Verwaltungsblock eingetragen.

Zwei Modi des STXIT-Aufrufes müssen unterschieden werden:

  1. STXIT-Aufrufe ohne die Operanden STXDNEW/STXDID:Für den ersten STXIT-Aufruf wird ein STXIT-Verwaltungsblock angelegt. In diesen werden die spezifizierten Zuordnungen „STXIT-Ereignisklasse - STXIT-Routine“ eingetragen. Jeder weitere Aufruf modifiziert oder ergänzt die in diesem Verwaltungsblock eingetragenen Zuordnungen (Update des Verwaltungsblockes). Einer STXIT-Ereignisklasse kann somit in einem Programm oder Programmsystem immer nur eine STXIT-Routine zugeordnet sein. Bei Modifizierung einer Zuordnung „STXIT-Ereignisklasse - STXIT-Routine“ ist nur die zuletzt vorgenommene wirksam.

  2. STXIT-Aufruf mit den Operanden STXDNEW/STXDID:Für jeden STXIT-Aufruf mit STXDNEW wird ein eigener STXIT-Verwaltungsblock mit den angegebenen Zuordnungen angelegt. Die Verwaltungsblöcke sind miteinander verkettet, und die STXIT-Routinen für die gleiche STXIT-Ereignisklasse werden nach einem vorgegebenen Reihenfolgenprinzip aktiviert. Dem Aufrufer wird eine Kennung für den Verwaltungsblock übergeben. Mittels dieser Kennung kann er in einem nachfolgenden STXIT-Aufruf (mit STXDID=... ) die in dem betreffenden Verwaltungsblock eingetragenen Zuordnungen ergänzen, modifizieren oder aufheben.

In einem Programmsystem können beide Formen des STXIT-Aufrufs nebeneinander verwendet werden. Maximal können 100 STXIT-Verwaltungsblöcke für ein Programmsystem angelegt werden. Die Verarbeitungsebene eines STXIT-Prozesses kann während seines Ablaufs geändert werden (Makro LEVCO).
Eine STXIT-Routine wird mit EXIT oder TERM beendet. Im Aufruf EXIT kann angegeben werden, ob weitere, der STXIT-Ereignisklasse zugeordnete STXIT-Routinen gestartet werden sollen. Gleichen STXIT-Ereignisklassen zugeordnete STXIT-Prozesse können sich gegenseitig unterbrechen (geschachtelter Ablauf).

Hinweise

  • Der Ereignisklasse „SVC“ kann in einem Programm (-system) nur eine STXIT-Routine zugeordnet werden. Die Zuordnung muss im ersten STXIT-Aufruf erfolgen oder sich auf den zuerst angelegten STXIT-Verwaltungsblock beziehen (die SVC-Nummer wird beim Auftreten des Ereignisses in Register R4 des STXIT-Prozesses übergeben).

  • Für die STXIT-Ereignisklasse „Intervallzeitgeber CPU-Zeit“ bzw. „Intervallzeitgeber Realzeit“ ist zu beachten, dass zu einem Zeitpunkt immer nur ein Zeitintervall für die CPU-Zeit und/oder für die Realzeit gesetzt ist (siehe letzter Aufruf des Makros SETIC).

Makroaufrufformat und Operandenbeschreibung

STXIT

[{STXDNEW={adr / (r)} / STXDID={adr / (r)} }

,MODE=DEFUNCD / DEFMODE / INTMODE

[,STXMSG=adr / (r)]

[,TERM=list]

[,TIMER=list]

[,ERROR=list]

[,ABEND=list]

[,PROCHK=list]

[,RUNOUT=list]

[,RTIMER=list]

[,ESCPBRK=list]

[,HWERROR=list]

[,SVC=list]

[,SVCLIST=adr / (r) / CLOSE]

[,CONTXTL=adr / (r)]

[,INTR=list]

[,INTRBUF=adr / (r) / CLOSE]

,TERMRUN=STD / FORCED

[,MIGRATE=list]

[,PARMOD=24 / 31]

[,MF=L / (E,..)]

Die im Operandenteil stehende Variable list entspricht folgendem Ausdruck:

list entspricht {(adr[,zahl]) / ((r)[,zahl]) / (CLOSE)}

Dabei haben die Operandenwerte folgende Bedeutung:

adr
symbolische Adresse (Name) einer STXIT-Routine.

(r)
r = Register mit dem Adresswert adr.

zahl

maximale Anzahl der an einer Schachtelung beteiligten STXIT-Routinen. 0 <= zahl <= 127. Voreinstellung: zahl = 0.

CLOSE
Die Zuordnung zwischen der STXIT-Ereignisklasse und der STXIT-Routine wird aufgehoben.

STXDNEW=
Ein (neuer) STXIT-Verwaltungsblock wird angelegt. In den Verwaltungsblock werden die Zuordnungen STXIT-Ereignisklasse zu STXIT-Routine eingetragen. Dem Aufrufer wird vom System eine Kennung für den Verwaltungsblock übergeben. Mittels dieser Kennung kann der Aufrufer in nachfolgenden STXIT-Aufrufen die festgelegten Zuordnungen modifizieren.

adr
symbolische Adresse (Name) eines Feldes, in das die Kennung eingetragen wird. Feldlänge = 4 Byte.

(r)
r = Register mit dem Adresswert adr.

STXDID=
Die in einem vorausgegangenen STXIT-Aufruf festgelegten Zuordnungen sollen modifiziert werden. Der entsprechende STXIT-Verwaltungsblock wird über die zurückgegebene Kennung angesprochen.

adr
symbolische Adresse (Name) des Feldes mit der Kennung für den Verwaltungsblock. Feldlänge = 4 Byte.

(r)
r = Register mit dem Adresswert adr.

MODE=
bestimmt den Adressierungsmodus für die STXIT-Routine.
Der Adressierungsmodus wird den STXIT-Ereignisklassen zugeordnet, die im gleichen STXIT-Makroaufruf definiert werden (Wirkung: ereignisklassen-spezifisch). Durch Aufruf mehrerer STXIT-Makros mit unterschiedlichen Ereignisklassen kann also der Adressierungsmodus separat für jede Ereignisklasse eingestellt werden.

DEFUNCD
Die STXIT-Routine wird in demselben Adressierungsmodus gestartet, der zum Zeitpunkt des STXIT-Aufrufs eingeschaltet war. Es wird nicht geprüft, ob zum Zeitpunkt der Unterbrechung der gleiche Adressierungsmodus eingeschaltet ist.

DEFMODE

Die STXIT-Routine wird in demselben Adressierungsmodus gestartet, der zum Zeitpunkt des STXIT-Aufrufs eingeschaltet war. Die STXIT-Routine wird jedoch nicht aktiviert, wenn der Adressierungsmodus zum Zeitpunkt des STXIT-Aufrufs ungleich dem Adressierungsmodus zum Zeitpunkt des Ereigniseintritts ist.

INTMODE
Die STXIT-Routine wird in demselben Adressierungsmodus gestartet, der zum Zeitpunkt der Unterbrechung eingeschaltet ist.

STXMSG=
Bestimmt die Adresse eines 4 Byte langen Feldes, das die STXIT-Meldung enthält. Diese Meldung wird dem STXIT-Contingency-Prozess übergeben (im Register R1).

adr
symbolische Adresse (Name) des Meldungsfeldes.

(r)
r = Register mit dem Adresswert adr.

TERM=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „Programmbeendigung“ (Programmbeendigung durch synchrone Ereignisse).

list
siehe oben: Beschreibung der Variable list.

TIMER=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „Intervallzeitgeber CPU-Zeit“.

list
siehe oben: Beschreibung der Variable list.

ERROR=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „nicht behebbarer Programmfehler“.

list
siehe oben: Beschreibung der Variable list.

ABEND=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „ABEND“ (Programmbeendigung durch asynchrone Ereignisse).

list
siehe oben: Beschreibung der Variable list.

PROCHK=

beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „Programmfehler“.

list
siehe oben: Beschreibung der Variable list.

RUNOUT=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „Ende Programmlaufzeit“.

list
siehe oben: Beschreibung der Variable list.

RTIMER=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „Intervallzeitgeber Realzeit“.

list
siehe oben: Beschreibung der Variable list.

ESCPBRK=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „ESCPBRK“. Zusätzlich zum Ereigniscode in Register R3 wird der Routine der Funktionstastencode im rechten Byte von Register R4 zur Verfügung gestellt (Funktionstastencodes siehe Handbuch „TIAM“ [16] oder die Tabelle im Anhang ab "Tabelle der normierten Funktionstastencodes"). Diese Funktionalität wird nur zur Verfügung gestellt, wenn der TIAM-Partner ein Terminal ist und keine Applikation (z.B. OMNIS).

list
siehe oben: Beschreibung der Variable list.

HWERROR=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „Hardware Error“.

list
siehe oben: Beschreibung der Variable list.

SVC=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „SVC-Unterbrechung“. Zusätzlich zum Ereigniscode in Register R3 wird der Routine die SVC-Nummer im rechten Byte von Register R4 zur Verfügung gestellt. Der überwachte SVC wird nicht ausgeführt. Der unterbrochene PCB läuft nach EXIT hinter dem SVC weiter.

list
siehe oben: Beschreibung der Variable list.

SVCLIST=

beschreibt die Adresse eines Feldes mit SVC-Nummern.

Diese SVC-Nummern sind die Elemente der STXIT-Ereignisklasse.Aufbau:

Byte 0: Anzahl der SVC-Einträge > 0
Byte 1: SVC-Nummer (sedezimal)
...
Byte n: SVC-Nummer (sedezimal)

adr
symbolische Adresse (Name) des Feldes mit SVC-Nummern.

(r)
r = Register mit dem Adresswert adr.

CLOSE
Die Zuordnung zwischen der STXIT-Ereignisklasse „SVC“ und der STXIT-Routine wird aufgehoben.

CONTXTL=
beschreibt die Adresse eines 4 Byte langen Feldes (auf Wortgrenze ausgerichtet), in dem die Länge des Datenaustauschfeldes abgelegt wird. Dieses wird vom Makro CONTXT mit den Operanden SAVE und LAYOUT=FCONTXT für den Datenaustausch mit dem PCB des angegebenen Prozesses benötigt. Es gibt unterschiedliche Längen für /390-Server und x86-Server.

adr
symbolische Adresse (Name) des Längenfeldes

(r)
r = Register mit dem Adresswert adr

INTR=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „Mitteilung an das Programm“.

list
siehe oben: Beschreibung der Variable list.

INTRBUF=
beschreibt die Adresse eines Feldes für eine Mitteilung, die mit dem Kommando INFORM-PROGRAM gesendet wird. Das Feld muss 64 Byte groß sein.
Textlänge < Feldlänge: Ende der Mitteilung = X'00'.
Textlänge > Feldlänge: Mitteilung wird abgeschnitten.
Textlänge = 0: X'00' wird in das erste Byte des Feldes eingetragen.

adr
symbolische Adresse (Name) des Feldes für eine Mitteilung.

(r)
r = Register mit dem Adresswert adr.

CLOSE
Die „INTR-STXIT-Routine“ hat kein Empfangsfeld für eine Mitteilung definiert. Eine Mitteilung wird ignoriert.

TERMRUN=
beschreibt den Ablaufmodus der TERM/ABEND STXIT-Routine.

STD
Mit STD angemeldete STXIT-Routinen laufen nach dem LIFO- und dem Prioritätsprinzip der Einreihung in die Warteschlange ab.

FORCED
Mit FORCED angemeldete STXIT-Routinen laufen immer und als letzte der STXIT-Routinen ab. Die Reihenfolge untereinander wird durch das LIFO-Prinizip bestimmt.

MIGRATE=
beschreibt die Adresse der STXIT-Routine für die STXIT-Ereignisklasse „Live Migration“.

list
siehe oben: Beschreibung der Variable list.

MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.

PARMOD=
steuert die Makroauflösung. Es wird entweder die 24-Bit- oder die 31-Bit-Schnittstelle generiert.
Wenn PARMOD nicht spezifiziert wird, erfolgt die Makroauflösung entsprechend der Angabe für den Makro GPARMOD oder der Voreinstellung für den Assembler (= 24-Bit-Schnittstelle).

24
Die 24-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 24-Bit-Adressen (Adressraum <= 16 MB).

31
Die 31-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 31-Bit-Adressen (Adressraum <= 2 GB).

STXIT-Ereignisklasse, STXIT-Operand und zugeordnete Ereignisse

In der folgenden Tabelle ist dargestellt:

  • welche Unterbrechungsereignisse eine STXIT-Ereignisklasse beinhaltet,

  • nach welchem Prinzip (FIFO/LIFO) die einer Ereignisklasse zugeordneten STXIT-Routinen aktiviert werden (Warteschlangen-Einreihung),

  • die maximal angebbare Schachtelungstiefe und

  • der einem Unterbrechungsereignis zugeordnete Ereigniscode.

STXIT-
Ereignisklasse

STXIT-
Operand

Unterbrechungsergebnis

E
Ereigniscode
in R3

Einreihung
in
Warteschlange

max.
S
Schachtelungs-
tiefe

Programmfehler

PROCHK

unzulässiger SVC

X'04'

LIFO

127

unzulässiger Operationscode

X'58'

Datenfehler

X'60'

Exponentenüberlauf

X'64'

Divisionsfehler oder neg.
Quadratwurzel

X'68'

Mantisse = 0

X'6C'

Exponentenunterlauf

X'70'

Dezimalüberlauf

X'74'

Festpunktüberlauf

X'78'

Intervallzeitgeber
CPU-Zeit

TIMER

„SETIC-Intervall“
abgelaufen für CPU-Zeit

X'20'

FIFO

127

Intervallzeitgeber
Realzeit

RTIMER

„SETIC-Intervall“
abgelaufen für Realzeit

X'A0'

FIFO

127

Sommer-/Winterzeit-umstellung

X'C0'

Ende Programmlaufzeit

RUNOUT

CPU-Zeitgrenze für die Task
bzw. das Programm
überschritten

X'80'

FIFO

0

nicht behebbarer
Programmfehler

ERROR

privilegierter SVC

X'08'

LIFO

127

Zugriff auf nicht vorhandene
Speicherseite

X'48'

privilegierte Operation

X'54'

Adressenfehler (z.B.
Ausrichtungsfehler,
falsches Register)

X'5C'

nicht behebbarer
Programmfehler
(Fortsetzung)

ERROR

XA-Fehler bei SVC-Aufruf
(im 31-Bit-Mode den 24-Bit-
Datenbereich benutzt)

X'9C'

LIFO

127

Realtimer (Condition Error)

X'A4'

Ausrichtungsfehler des
Datenbereichs bei SVC-Aufruf

X'AC'

Validierungsfehler

X'B0'

Ungültige UNIT-Nr. im
Standardheader

X'C4'

Mitteilung an
das Programm

INTR

INFORM-PROGRAM-
Kommando

X'44'

LIFO

127

ESCPBRK

ESCPBRK

BREAK/ESCAPE (über
Tasten)

X'84'

LIFO

127

Programmbeendigung
durch
asynchrone
Ereignisse

ABEND

vom System erkannter
Fehler, z.B. Fehler im System,
Leitungverlust

X'88'

LIFO

0

START-PROGRAM,
LOAD-PROGRAM, ABEND,
EXIT-JOB, CANCEL-JOB

X'8C'

Adress-Übersetzungsfehler
wegen Hardwarefehler

X'94'

Hardwarefehler (CPU)

X'A8'

Erzwungenes Entladen eines
Subsystems (Systembetreu.)

X'B8'

nicht behebbarer DMS-Fehler

X'BC'

Programmbeendigung
durch
synchrone
Ereignisse

TERM

TERM-SVC aus einem
TU-Programm

X'90'

LIFO

0

Programmbeendigung
durch CMD-/LGOFF-Makro

X'98'

SVC-Unterbrechung

SVC

Aufruf eines angegebenen
SVC' s

X'50'

LIFO

127

Hardwarefehler

HWERROR

Ein-/Ausgabefehler bei
Data-In-Virtual-Technik

X'28'

LIFO

0

Live Migration

MIGRATE

Live Migration

X'D0'

FIFO

127

Hinweise zum Makroaufruf

  • FIFO = First In First Out; LIFO = Last In First Out

  • Operand ESCPBRK: Dieses STXIT-Ereignis betrifft nur Programmunterbrechungen über Funktionstasten. Es umfasst nicht Programmunterbrechungen auf Grund eines HOLD-PROCEDURE- bzw. ESCAPE- oder eines HOLD-PROGRAM- bzw. BREAK-Kommandos.

  • Operand INTRBUF: bei Schachtelungstiefe > 0 wird der Meldungstext durch ein nachfolgendes INFORM-PROGRAM-Kommando überschrieben.

  • Operand SVC und SVCLST: die Angabe des SVC 128 (STXIT-Gruppe) als Unterbrechungsereignis kann zu einer Schleife führen.

  • Operand SVC und SVCLST: Der überwachte SVC wird nicht ausgeführt und der unterbrochene PCB läuft nach EXIT hinter dem SVC weiter.

  • ungültige Adresse im STXIT-Aufruf: das Ereignis „Adressfehler“ wird gemeldet und eine in einem vorherigen STXIT-Aufruf zugeordnete STXIT-Routine aktiviert oder das Programm wird mit „Adressfehler“ beendet.

  • Der Aufruf des Makros TERM in einem Programmsystem führt zur Aktivierung aller der STXIT-Ereignisklasse TERM zugeordneten STXIT-Routinen. Ein erneuter TERM-Auf-ruf - auch in einer STXIT-Routine (an Stelle von EXIT) - führt wunschgemäß zur sofortigen Programmbeendigung.

  • Eine STXIT-Routine der Ereignisklasse ABEND oder TERM kann mit der Dialogtesthilfe AID getestet werden.Ausnahme: STXIT-Routine, die durch ein CANCEL-JOB-Kommando aktiviert wurde.

Rückinformation und Fehleranzeigen

In Register R3 des STXIT-Prozesses steht das Unterbrechungsgewicht (Ereigniscode).

In Register R4 des STXIT-Prozesses wird der Funktionstastencode übergeben, wenn ein Unterbrechungsereignis der Klasse ESCPBRK aufgetreten ist, (für die Funktionstastencodes siehe Handbuch „TIAM“ [16] oder im Anhang ab "Tabelle der normierten Funktionstastencodes"). Diese Funktionalität wird nur zur Verfügung gestellt, wenn der TIAM-Partner ein Terminal ist und keine Applikation (z.B. OMNIS).
Beim Autreten eines Unterbrechungsereignisses der Klasse SVC wird die SVC-Nummer im Register R4 des STXIT-Prozesses übergeben.

R15:

+---------------+
|   |   |   |   |
| | | | | | |a|a|
+---------------+

Über die Ausführung des Makros STXIT wird im rechtsbündigen Byte des Register R15 ein Returncode übergeben.

X'aa'

Erläuterung

X'00'

Normale Ausführung.

X'04'

Funktion nicht ausgeführt. Ungültige Operanden.

X'08'

Funktion nicht ausgeführt. Ungültige Kennung für den STXIT-Steuerblock (Operand STX-
DID).

X'0C'

Funktion nicht ausgeführt. Kein Arbeitsspeicherplatz für STXIT-Steuerblock.

X'10'

Funktion nicht ausgeführt. Maximal 100 STXIT-Steuerblöcke können für ein Programmsystem
angelegt werden

X'14'

Funktion nicht ausgeführt. Die STXIT-Ereignisklasse SVC ist nur für den zuerst angelegten
STXIT-Verwaltungsblock erlaubt.

X'1C'

Funktion wird ausgeführt. STXIT-Kontrollblock kann nicht aktualisiert werden, weil der
Speicherschlüssel im PCB nicht mit dem im Kontrollblock übereinstimmt.