Allgemeines
Anwendungsgebiet: | Starten, Unterbrechen und Beenden; siehe "Starten, Unterbrechen und Beenden"; Testhilfe; siehe "Testhilfe" |
Makrotyp: | S-Typ, MF-Format 1: Standardform/E-/L-Form; siehe "S-Typ-Makroaufrufe" |
Makrobeschreibung
Mit dem Makro TINF kann der Anwender
die Runpriorität der Task
das Taskattribut
die Operanden für ein Deaktivierungsverbot der Task
lesen oder modifizieren (gemäß der im Benutzerkatalog festgelegten Werte).
Außerdem ist es möglich, dass sich die aufrufende Task an eine Affinitäts-Taskgruppe anschließt oder sich davon abmeldet.
Tasks, die häufig auf gemeinsame Daten schreibend zugreifen, werden als zueinander affin bezeichnet. Diese gemeinsamen Daten können sowohl im Systemadressraum (der von allen Tasks gemeinsam benutzt wird) als auch im Benutzeradressraum innerhalb von Common Memory Pools liegen. Solche Tasks können in einer Affinitäts-Taskgruppe zusammengefasst werden.
Dabei kann eine Task immer nur einer (oder keiner) Taskgruppe zugeordnet werden. Die Funktionalität der affinen Taskgruppen wird von dem Subsystem TANGRAM realisiert (siehe dazu auch im Handbuch „Systembetreuung“ [10]).
Makroaufrufformat und Operandenbeschreibung
TINF |
ACCESS=R / W [,DEACT=Y / N] [,DWTR=Y / N] [,DSSR=Y / N] [,TPRYAD=adr / (r)] [,TTYPAD=adr / (r)] [,TGAFF=Y / N,TGIDAD=adr / (r)] [,PROCNAD=adr / (r)] [,PARMOD=24 / 31] [,MF=L / (E,..)] |
ACCESS=
steuert die Lese/Schreib-Funktion der Operanden TPRYAD und TTYPAD.
R
Die Daten werden in die angegebenen Felder übertragen.
W
Die Daten werden von den angegebenen Feldern in den TCB übertragen.
DEACT=
gibt an, ob die Task in folgenden Fällen deaktiviert werden kann:
Die System-Auslastung (CPU, Speicher, Paging-Rate) ist sehr hoch.
Die Task nimmt bestimmte Wartezustände ein oder verweilt darin (siehe Operand DWTR). Ist der Operand DWTR ebenfalls angegeben, hat seine Einstellung Vorrang.
Die Task steht auf Grund ihrer bisher verbrauchten Systemleistungen zur Deaktivierung an (siehe Operand DSSR). Ist der Operand DSSR ebenfalls angegeben, hat seine Einstellung Vorrang.
Y
Die Task kann deaktiviert werden.N
Die Task soll nicht deaktiviert werden. Eine Deaktivierung aus anderen Gründen (z.B. Makro VPASS mit mehr als 500 ms Wartezeit) ist weiter möglich.
DWTR=
gibt an, ob die Task in folgenden Fällen deaktiviert werden kann:
Sie nimmt bestimmte, länger andauernde Wartezustände ein, z.B. aufgrund eines PASS
Sie verweilt länger in einem aktiven Wartezustand, z.B. nach einem SOLSIG mit COND=UNCOD oder nach einem MSG7X/TYPIO mit REPLY.
Y
Die Task kann deaktiviert werden.N
Die Task soll nicht deaktiviert werden.
DSSR=
gibt an, ob die Task deaktiviert werden kann, wenn sie eine bestimmte Menge an Systemleistungen erhalten hat (z.B CPU-Zeit).
Y
Die Task kann deaktiviert werden.
N
Die Task soll nicht deaktiviert werden.
TPRYAD=
bezeichnet die Runpriorität der Task.
adr
Adresse eines 1 Byte langen Feldes mit dem Wert für die Runpriorität.
Für ACCESS=R wird die Runpriorität der Task aus dem TCB in das angegebene Feld übertragen. Für ACCESS=W wird die Runpriorität aus dem angegebenen Feld in den TCB übertragen.
(r)
r = Register mit dem Adresswert von adr.
TTYPAD=
bezeichnet das Taskattribut. Werte für das Taskattribut:
TTYPTP EQU X'81' Transaktionsauftrag TTYPIACT EQU X'40' Dialogauftrag TTYPPB EQU X'20' Batch-Auftrag
Für ACCESS=R wird die Auftragsart in das angegebene Feld übertragen. Für ACCESS=W wird das Taskattribut aus dem angegebenen Feld in den TCB übertragen.
adr
Adresse eines 1 Byte langen Feldes mit dem Wert für das Taskattribut.
(r)
r = Register mit dem Adresswert von adr.
TGAFF=
gibt an, ob sich die aufrufende Task bei einer Affinitäts-Taskgruppe an- oder abmelden will.Dieser Operand muss zusammen mit TGIDAD angegeben werden.
Y
Die Task meldet sich zu der Taskgruppe an, deren Taskgruppen-ID in dem durch TGIDAD adressierten Feld steht, oder zu einer neu einzurichtenden Taskgruppe, wenn das Feld mit Null belegt ist. Wird eine Taskgruppe eingerichtet, wird die neue Taskgruppen-ID im durch TGIDAD adressierten Feld zurückgegeben.
N
Die Task meldet sich von der Gruppe ab, deren Taskgruppen-ID im durch TGIDAD adressierten Feld steht. Ist die abzumeldende Task die letzte ihrer Taskgruppe, wird diese Taskgruppe gelöscht und die Taskgruppen-ID im durch TGIDAD adressierten Feld auf Null gesetzt.
TGIDAD=
bezeichnet die Adresse der Taskgruppen-ID für die aufrufende Task.
Die Angabe dieses Operanden ist nur zusammen mit TGAFF zulässig.
adr
symbolische Adresse eines 4 Byte langen Feldes, das die Taskgruppen-ID enthält.
(r)
r = Register mit dem Adresswert von adr.
PROCNAD=
gibt folgende Informationen aus:
Ist die aufrufende Task einer Affinitäts-Taskgruppe zugeordnet?
Wenn ja, wie viele CPUs sind momentan dieser Task zugeordnet?
Wie viele CPUs werden zurzeit vom System genutzt?
adr
symbolische Adresse eines 4 Byte langen Feldes.
Die ersten 2 Byte enthalten die Anzahl der CPUs, auf denen die Task momentan laufen darf.
Die zweiten 2 Byte enthalten die Anzahl der CPUs, die zurzeit überhaupt zur Verfügung stehen.
Ist die aufrufende Task keiner Taskgruppe zugeordnet oder ist das Subsystem TANG-RAM nicht geladen, stimmen die Zahlen in beiden Teilfeldern überein.(r)
r = Register mit dem Adresswert von adr.
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). Datenlisten beginnen mit dem Standardheader.
Hinweise für Affinitäts-Taskgruppen
Zum Zeitpunkt des Anmeldens einer Task an eine Taskgruppe muss bereits ein Memory Pool eingerichtet sein, sodass es möglich ist, das mit TGIDAD bezeichnete Feld in einen Bereich zu legen, der allen Tasks der Anwendung zugänglich ist. Dieses Feld muss mit Null initialisiert werden. Die erste Task richtet dann beim Anmelden die Gruppe ein, alle anderen Tasks schließen sich nur noch der bestehenden Gruppe an.
Die Synchronisation der Anmeldevorgänge wird von BS2000 übernommen.Die (zeitlich gesehen) zweite Anmeldung wird erst dann bearbeitet, wenn die erste Anmeldung abgeschlossen ist und die neue Gruppen-ID zurückgeschrieben wurde.
Rückinformation und Fehleranzeigen
Während der Makrobearbeitung enthält Register R1 die Adresse des Datenbereichs.
R15:
+---------------+ | | | | | | | | | | | |a|a| +---------------+
Über die Ausführung des Makros TINF wird im rechtsbündigen Byte des Registers R15 ein Returncode übergeben.
X'aa' | Erläuterung |
X'00' | Der Aufruf wurde erfolgreich durchgeführt. |
X'04' | Es wurden ungültige Operanden angegeben. Mindestens eine geforderte Funktion wurde |
X'08' | Das mit TGIDAD bezeichnetet Feld enthält keine für die Task gültige Gruppen-ID. |
X'10' | Für mindestens eine Funktion ist keine Berechtigung vorhanden. |
X'0C' | Die Task, die sich zu einer Taskgruppe anmelden will, gehört bereits einer anderen |
X'14' | Die abzumeldende Task (Operand TGAFF=N) gehört keiner Gruppe an. |
X'18' 1 | Es dürfen max. 65535 Taskgruppen angemeldet werden. Dieses Limit ist überschritten. |
X'1C' 1 | Interner TANGRAM-Fehler. Funktion wurde unvollständig ausgeführt. |
X'20' 1 | Interne TANGRAM-Administrationsfunktion (Subsystem TANGBAS) nicht verfügbar. |
1Beim Auftreten dieser Returncodes können die Anwendungen (z.B. das Hochfahren einer Datenbank) fortgesetzt werden
Beispiel
Der Makro TINF überträgt Runpriorität, Taskattribut und Informationen über die Taskgruppe in je einen Bereich des Anwenderprogramms:
TINF START PRINT NOGEN TINF AMODE ANY BALR 3,0 USING *,3 CHKOUT1 TINF TPRYAD=PRI,TTYPAD=TYPE,PROCNAD=INFO, * TGAFF=N,TGIDAD=AFFINI,PARMOD=31 -------------------------(1) CHKIN TINF TGAFF=Y,TGIDAD=AFFINI,PARMOD=31 -------------------------(2) CHKOUT2 TINF TGAFF=N,TGIDAD=FALSE,PARMOD=31 --------------------------(3) CHKOUT3 TINF TGAFF=N,TGIDAD=AFFINI,PARMOD=31 -------------------------(4) END TERM * **** Definitions **** PRI DS L1 TYPE DS L1 INFO DS F AFFINI DC X'00000000' FALSE DC X'08150815' END
Ablaufprotokoll:
/start-assembh % BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED % ASS6010 <ver> OF BS2000 ASSEMBH READY //compile source=*library-element(macexmp.lib,tinf), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,tinf)), - // test-support=*aid % ASS6011 ASSEMBLY TIME: 283 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 79 MSEC //end % ASS6012 END OF ASSEMBH /load-executable-program library=macexmp.lib,element-or-symbol=tinf, - / test-options=*aid % BLS0523 ELEMENT 'TINF', VERSION '@' FROM LIBRARY ':2OSG:$QM212.MACEXMP.LIB' IN PROCESS % BLS0524 LLM 'TINF', VERSION ' ' OF '<date> <time>' LOADED /%in chkin /%in chkout2 /%in chkout3 /%in end /%r STOPPED AT LABEL: CHKIN , SRC_REF: 40, SOURCE: TINF , PROC: TINF /%d %15 %xl, pri %xl1, type %xl1, affini %xl;%r -------------------------(1) *** TID: 00AF0265 *** TSN: 6WPP ********************************************* CURRENT PC: 00000024 CSECT: TINF **************************************** %15 = 00000014 .... V‘0000007A‘ = PRI + #‘00000000‘ 0000007A (00000000) D2 K V‘0000007B‘ = TYPE + #‘00000000‘ 0000007B (00000000) 40 V‘00000080‘ = AFFINI + #‘00000000‘ 00000080 (00000000) 00000000 .... STOPPED AT LABEL: CHKOUT2 , SRC_REF: 59, SOURCE: TINF , PROC: TINF /%d %15 %xl, affini %xl;%r ----------------------------------------------(2) CURRENT PC: 00000038 CSECT: TINF **************************************** %15 = 00000000 .... V‘00000080‘ = AFFINI + #‘00000000‘ 00000080 (00000000) E3C70021 TG.. STOPPED AT LABEL: CHKOUT3 , SRC_REF: 78, SOURCE: TINF , PROC: TINF /%d %15 %xl, false %xl;%r -----------------------------------------------(3) CURRENT PC: 0000004C CSECT: TINF **************************************** %15 = 00000008 .... V‘00000084‘ = FALSE + #‘00000000‘
00000084 (00000000) 08150815 .... STOPPED AT LABEL: END , SRC_REF: 96, SOURCE: TINF , PROC: TINF /%d %15 %xl, affini %xl;%r ----------------------------------------------(4) CURRENT PC: 00000060 CSECT: TINF **************************************** %15 = 00000000 .... V‘00000080‘ = AFFINI + #‘00000000‘ 00000080 (00000000) 00000000 ....
(1) | Die Task soll von der Affinitäts-Taskgruppe mit der im Feld |
(2) | Die Task meldet sich zu einer neu einzurichtenden Affinitäts-Taskgruppe an (Feld |
(3) | Die Task soll von der Affinitäts-Taskgruppe mit der im Feld |
(4) | Die Task soll von der Affinitäts-Taskgruppe mit der im Feld |