Mit dem C-Teilprogramm ADJTCLT (adjust tac class) kann der Anwender steuern, wie die Prozesse (Tasks) auf die TAC-Klassen aufgeteilt werden, und zwar abhängig von der aktuellen Anzahl aller Prozesse und der aktuellen Anzahl der Asynchron-Prozesse. Dazu erstellt der Anwender eine Tabelle mit den gewünschten Einstellungen, siehe Abschnitt „TAC-Klassen-Tabelle erstellen“.
Das Programm wird als vollständiges Dialog- und Asynchron-Teilprogramm ausgeliefert.
ADJTCLT ist auf Unix-, Linux- und Windows-Systemen Bestandteil der Beispiel-Anwendung bzw. des Quick Start Kit.
Das Programm ermöglicht:
Automatische Anpassung der Anzahl Prozesse der TAC-Klassen gemäß Tabelle. Diese Funktion wird immer ausgeführt.
Einlesen einer neuen Tabelle mit Standardnamen, siehe Beispiel-Tabelle. Diese Funktion wird ausgeführt, wenn noch keine Tabelle eingelesen wurde oder wenn der Operationscode RF oder READFILE angegeben wird.
Einlesen einer neuen Tabelle mit beliebigem Namen. Diese Funktion wird ausgeführt, wenn der Operationscode RF oder READFILE und ein Dateiname angegeben wird.
Anpassen der aktuell erlaubten Anzahl Asynchron-Tasks. Diese Funktion wird ausgeführt, wenn der Operationscode MA=ttt oder MAXASYN=ttt angegeben wird, wobei ttt die Anzahl der gewünschten maximalen Anzahl ASYNTASKS ist.
Da die Änderung der Anzahl der erlaubten Tasks für Asynchron-Verarbeitung keine Meldungen erzeugt, darf die Änderung nicht direkt über das Kommando KDCAPPL erfolgen, sondern muss über die durch dieses Programm angebotene Schnittstelle durchgeführt werden, damit die TAC-Klassen-Einstellungen angepasst werden.
Wird für das Teilprogramm nur ein Dialog-TAC generiert, so müssen alle Funktionen manuell angestoßen werden, d.h. wenn sich die Anzahl Tasks oder Asyntasks oder die Tabelle geändert hat, muss das Programm manuell aufgerufen werden.
Wie das Programm automatisch über den Asynchron-TAC aufgerufen werden kann, ist im Abschnitt „ADJTCLT als MSGTAC- oder MSG-DEST-Teilprogramm" beschrieben.
TAC-Klassen-Tabelle erstellen
In der Tabelle legen Sie die Anzahl Tasks pro TAC-Klasse fest, und zwar in Abhängigkeit von:
der Anzahl der laufenden Prozesse
und der momentan eingestellten Anzahl Prozesse, die maximal für die Asynchron-Verarbeitung verwendet werden dürfen.
Die Tabelle muss als Textdatei gespeichert werden. Sie kann z.B. mit Microsoft Excel erstellt und dann als Tabstopp-getrennte Textdatei abgespeichert werden. Als Trennzeichen sind auch Leerzeichen erlaubt.
Beispiel-Tabelle
Auf allen Plattformen wird eine Beispiel-Tabelle mit dem folgenden Standardnamen ausgeliefert:
BS2000-Systeme: ADJTABLE.TXT
Sie finden diese Beispiel-Tabelle in der Bibliothek SYSLIB.UTM.070.EXAMPLE. Damit das Teilprogramm diese Tabelle verwenden kann, müssen Sie sie auf die Benutzer-Kennung kopieren, unter der die UTM-Anwendung läuft. In UTM-Cluster-Anwendungen können alle Knoten- Anwendungen dieselbe Tabelle verwenden, wenn die Datei auf dem Shared Pubset liegt.
Unix-, Linux- und Windows-Systeme: AdjTable.txt
Auf Unix-, Linux- und Windows-Systemen ist die Tabelle Bestandteil der Beispiel-Anwendung bzw. des Quick Start Kit. Die Tabelle ist nach Installation von Beispiel-Anwendung bzw. Quick Start Kit in folgendem Unterverzeichnis von Beispiel-Anwendung bzw. Quick Start Kit zu finden:
utmsample/utm-c
(Unix- und Linux-Systeme)utmsample\utm-c
(Windows-Systeme)
Aufbau der Tabelle
Für den Aufbau der Tabelle gelten folgende Regeln:
Die Werte müssen als abdruckbare Zahlen angegeben werden.
Die Tabelle kann als erste Zeile eine Überschriftenzeile enthalten.
Jede weitere Zeile muss folgenden identischen Aufbau haben:
Spalte 1: Anzahl der laufenden Prozesse. Die maximale Anzahl Prozesse ist 240.
Spalte 2: Anzahl der momentan eingestellten Anzahl Prozesse, die maximal für die Asynchron-Verarbeitung verwendet werden dürfen.
ab Spalte 3: Prozess-Anzahl für jede TAC-Klasse in aufsteigender Reihenfolge, z.B.
17 2 4 3 3 ... 0 0 0 1 1 1
Spalte 3 entspricht TAC-Klasse 1, Spalte 4 TAC-Klasse 2 usw.
Für jede dieser Zeilen gilt:
Die Anzahl der Prozesse in Spalte 1 muss größer sein als die Summe über die Anzahl der Prozesse aller Dialog-TAC-Klassen (1 - 8) plus die Anzahl der Asynchron-Prozesse. Je größer die Differenz ist, desto mehr Prozesse sind für die Erledigung von anderen Aufträgen frei.
Für Dialog-TAC-Klassen, die nicht verwendet werden, darf als Prozess-Anzahl auch 0 angegeben werden, obwohl der Minimalwert der Prozesse für Dialog-TAC-Klassen 1 ist. Der Grund: Ansonsten wäre die Minimalzahl Prozesse für die Anwendung 9 (8 Dialog-TAC-Klassen+ 1).
Bitte beachten Sie, dass das Programm nicht überprüfen kann, ob diese Dialog-TAC-Klassen tatsächlich nicht verwendet werden.
Die Werte für die TAC-Klassen können auch weggelassen werden. Dann wird für Dialog-TAC-Klassen der Standardwert 0 und für Asynchron-TAC-Klassen der Standardwert '-' verwendet. '-' für Asynchron-TAC-Klassen bedeutet, dass die Task-Anzahl für diese TAC-Klasse nicht geändert wird.
Die Prozess-Anzahl (Spalte1) muss innerhalb der Tabelle aufsteigend sortiert sein, während die Anzahl der Asynchron-Prozesse bei gleicher Prozess-Anzahl (Spalte 2) absteigend sortiert sein muss.
Auf die Anzahl benötigter Prozesse hat nur die Anzahl maximal erlaubter Asynchron-Prozesse Einfluss, aber nicht die Anzahl der erlaubten Prozesse der einzelnen Asynchron-TAC-Klassen. Es wird nicht berücksichtigt, wenn die Anzahl der erlaubten Tasks der einzelnen Asynchron-TAC-Klassen kleiner ist als die Anzahl maximal erlaubter Asynchron-Tasks.
Beispiel
Ausschnitt aus einer Tabelle, mittels der bei bis zu 10 Prozessen immer ein Prozess, und ab 12 Prozessen immer zwei Prozesse freigehalten werden sollen, und in der nur die Dialog-TAC-Klassen 1, 2 und 3 verwendet werden.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Das Programm beginnt die Suche mit dem letzten Tabelleneintrag und wählt den Tabelleneintrag aus, für den die beiden nachfolgenden Bedingungen gelten:
Die Anzahl der laufenden Prozesse muss größer oder gleich der Zahl in Spalte 1 sein.
Die Differenz aus der Anzahl der laufenden Prozesse und der aktuell eingestellten Maximalzahl Asynchron-Tasks muss größer oder gleich sein als Spalte 1 - Spalte 2.
Diese Bedingung stellt sicher, dass die Anzahl der Prozesse, die mindestens für Dialogverarbeitung frei sind, tatsächlich größer ist als die Summe über die Anzahl der Prozesse in den Dialog-TAC-Klassen.
Wird ein Eintrag gefunden, dann berechnet das Programm Folgendes:
Anzahl verfügbarer Dialog-Prozesse = Spalte 1(Alle) - Spalte 2 (Asyn)
Beispiel:
Bei 12 Prozessen und 7, 6, 5 oder 4 Asynchron-Prozessen wird folgende Zeile gewählt:
12 7 1 1 1 ... 0 0 0 0 3 4
Bei 12 Prozessen und 8 Asynchron-Prozessen wird folgende Zeile gewählt:
6 2 1 1 1
Von den 12 laufenden Prozessen sind immer 4 frei für Dialog-Verarbeitung, da maximal 8 Prozesse durch Asynchron-Verarbeitung belegt sind. Von diesen 4 Prozessen sind maximal 3 durch Dialog-Verarbeitung belegt (Summe über die Prozesse der Dialog-TAC-Klassen 1+1+1). Somit ist immer ein Prozess frei.
Bei 12 Prozessen und 9 Asynchron-Prozessen wird kein passender Eintrag gefunden.
Wird ein passender Tabelleneintrag gefunden, so wird die Prozess-Anzahl der einzelnen TAC-Klassen gemäß der Tabelle angepasst.
In TAC-Klassen, die mit PGWT=YES generiert sind, darf die Anzahl Prozesse die generierte maximale Anzahl TASKS-IN-PGWT nicht überschreiten.
Überschreitet in TAC-Klassen, die mit PGWT=YES generiert sind, die Anzahl der Prozesse die maximal erlaubte Anzahl TASKS-IN-PGWT, so wird der kleinere Wert verwendet.
ADJTCLT als MSGTAC- oder MSG-DEST-Teilprogramm
Die Asynchron-Programm-Variante von ADJTCLT ist auch als MSGTAC- oder MSG-DEST-Programm nutzbar. Ein bestehendes MSGTAC-Programm kann (ggf. nach Anpassungen) in das Teilprogramm integriert werden. ADJTCLT ist jedoch nicht als Unterprogramm eines bestehenden MSGTAC-Programms verwendbar.
ADJTCLT als MSGTAC-Programm
Wird das ADJTCLT nur als MSGTAC-Programm generiert, dann stehen nur die Funktionen zur Verfügung, die keinen Operationscode benötigen, da das MSGTAC-Programm ausschließlich ereignisgesteuert abläuft und nicht über einen TAC aufgerufen werden kann.
In diesem Fall muss ein eigener Anwendungs-Meldungsmodul existieren und die Meldungen K052, K056 und K058 müssen das Meldungsziel MSGTAC haben.
ADJTCLT als MSGDEST-Programm
Für meldungsgesteuerte Verarbeitung kann der Asynchron-TAC auch als MSG-DEST generiert (MSG-DEST USER-DEST-1/2/3/4, NAME=, DEST-TYPE=TAC, ...) und im Anwender- Meldungsmodul als USER-DEST für die Meldung K052, K056, K058 verwendet werden.
Allerdings läuft ein meldungsgesteuertes Teilprogramm nur dann unabhängig von der Anzahl Asynchron-Prozesse und der TAC-Klassen-Steuerung, wenn es als MSGTAC-Programm generiert ist. Ansonsten gilt:
Für Asynchron-Verarbeitung muss immer mindestens ein Prozess zugelassen sein.
In der TAC-Klasse des Teilprogramms muss mindestens ein Prozess zugelassen sein.
Hinweise zur Generierung:
Das Teilprogramm muss im KDCDEF-Lauf wie folgt definiert werden:
PROGRAM ADJTCLT, COMP=ILCS
(BS2000-Systeme)PROGRAM ADJTCLT, COMP=C
(Unix-, Linux- und Windows-Systeme)
Generierung als Dialog- und Asynchron-TAC:
TAC ADJTCLT, PROGRAM=ADJTCLT, ADMIN=YES, TYPE=D
TAC ADJTCLTA, PROGRAM=ADJTCLT, ADMIN=YES, TYPE=A
Generierung als MSGTAC:
TAC KDCMSGTC, PROGRAM=ADJTCLT, ADMIN=YES, TYPE=A
Der Asynchron-TAC ADJTCLTA kann wie folgt als MSG-DEST für z.B. USER-DEST-1 generiert werden:
MSG-DEST USER-DEST-1, NAME=ADJTCLTA, DEST-TYPE=TAC , MSG-FORMAT=PRINT
Auf Unix-, Linux- und Windows-Systemen können Sie die KDCDEF-Anweisungen auch aus der Beispiel-Anwendung bzw. dem Quick Start Kit in die Generierung der UTM-Anwendung übernehmen.
Hinweise zum Binden:
Auf BS2000-Systemen kann das Teilprogramm ADJTCLT über eine RESOLVE-BY-AUTO-Anweisung in das Anwendungsprogramm eingebunden werden. Dadurch wird auch die Routine ERRCHCK implizit mit eingebunden.
Auf Unix-, Linux- und Windows-Systemen wird das Teilprogramm ADJTCLT automatisch in die Beispiel-Anwendung bzw. in das Quick Start Kit eingebunden.