Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Standard-Job-Scheduler

Der Standard-Job-Scheduler entscheidet, welcher der Jobs der ihm zugeordneten Job-Klassen zum Start freigegeben wird.

Dabei bedient sich der Standard-Job-Scheduler einer festgelegten Job-Scheduling-Strategie, die bei der statischen Definition mit dem Dienstprogramm JMU festgelegt und mit dem Kommando MODIFY-JOB-STREAM dynamisch verändert werden kann.
Gleichzeitig können maximal 16 Standard-Job-Scheduler mit unterschiedlichen Scheduling-Strategien installiert sein.
Ein Standard-Job-Scheduler läuft in einem eigenen Job (Job-Stream) ab. Es sind Benutzerprogramme im Funktionszustand TU unter der Kennung der Systemverwaltung.

Sollten die Auftragssteuerungs-Möglichkeiten des Standard-Job-Schedulers für die Belange des Data Centers nicht ausreichen, lässt sich ein selbst entwickelter Job-Scheduler zum Einsatz bringen (siehe hierzu Abschnitt „Job-Steuerung im Data Center").

In beiden Fällen wird der Scheduler unter der Kennung der Systemverwaltung gestartet (automatisch oder mit dem Kommando START-JOB-STREAM, je nachdem was für den Operanden START in der Streamdefinition des Schedulers im SJMSFILE angegeben wurde).

Job-Scheduling-Parameter

Bei der Stream-Definition mit der JMU-Anweisung DEFINE-JOB-STREAM werden mit dem Operanden STREAM-PARAMETER (kurz S-PAR) Scheduler-spezifische Parameter definiert.

Dieser Parameter bleibt von BS2000 unberücksichtigt; er wird lediglich vom Job-Scheduler ausgewertet und liefert die Basis für die Berechnung des Scheduling-Algorithmus.

Für den Standard-Job-Scheduler werden mit dem S-PAR-Operanden folgende Parameter vereinbart:

S-PAR =

'JOB-PRIORITY = YES / NO


,CPU-TIME = NO / YES


,WAIT-TIME = NO / YES


,JOB-QUOTA = 1 / no<256


,LOGGING = YES / NO


,CATID-LIST = (catid1,...)


,CAT-TIME = min'

Hinweise

  1. Die Definitionsvarianten der ersten drei Parameter entsprechen den in Tabelle 26 aufgeführten Scheduling-Strategien.

  2. Aus der Reihe der Jobs werden die Jobs ausgewählt, für die bei der Berechnung des Scheduling-Algorithmus die niedrigste Rangfolge ermittelt wird.
    Die Anzahl der ausgewählten Jobs wird vom Parameter JOB-QUOTA bestimmt.
    Der Job-Scheduler versucht nun, diese Jobs gemäß ihrer Reihenfolge in der Warteschlange zu starten. Nach erfolgtem Start werden wiederum Jobs aus der Reihe der Jobs ausgewählt. Dies wiederholt sich so lange, bis alle Jobs gestartet sind oder das Job-Klassen-Limit erreicht ist.

  3. Der LOGGING-Parameter steuert die Protokollausgabe des Standard-Job-Schedulers. Außerdem legt der LOGGING-Parameter fest, ob eventuell vom Job-Scheduler erzeugte Meldungen an der Konsole ausgegeben werden sollen.

    Zu diesen Meldungen zählen:

    • JMS0302:   Fehler beim Ausführen eines ASSIGN-SYSFILE-Kommandos

    • JMS0303:   Protokollausgabe wegen Speicherplatzmangel abgebrochen

    • JMS0304:   Nicht behebbarer Fehler

    • JMS0305:   Ungültiger Stream-Parameter

    • JMS0306:   Job-Stream wartet auf die Verfügbarkeit der angegebenen Pubsets

    • JMS0307:   Job-Stream wird wegen fehlender Pubsets beendet

    • JMS0308:   Job-Stream wartet auf Verfügbarkeit des Subsystems GET-TIME

  4. Der Parameter CATID-LIST vereinbart die Pubsets, die vor der Inbetriebnahme des Job-Schedulers importiert sein müssen. Der Parameter wird nur zum Zeitpunkt des Stream-Starts berücksichtigt und verzögert das Starten des Job-Schedulers, bis sämtliche, bei CATID-LIST angegebenen Pubsets verfügbar sind. Fehlt der Parameter CATID-LIST, so startet der Job-Scheduler unabhängig davon, welche Pubsets importiert sind.
    Zur Steuerung dieser Wartezeit dient der Parameter CAT-TIME.
    Kann ein Pubset innerhalb der bei CAT-TIME angegebenen Zeit nicht importiert werden, wird der Job-Scheduler nicht gestartet.
    Fehlt der Parameter CAT-TIME in der Stream-Definition, wartet das System beliebig lange auf das Importieren der benötigten Pubsets. Die Zeitangabe erfolgt beim Parameter CAT-TIME in Minuten.

  5. Über die Kommandoschnittstelle kann die Systembetreuung die Einstellung des Operanden S-PAR dynamisch ändern (siehe Kommando MODIFY-JOB-STREAM im Handbuch „Kommandos“ [27]).

Job-Scheduling-Algorithmus

Die Job-Scheduler übergeben ihre zum Start freigegebenen Jobs an den Klassen-Scheduler. Die Reihenfolge, innerhalb der die Jobs zum Start weitergegeben werden, wird mit folgender Formel errechnet:

M= (Sa * Pc * Rd) / (Wb + S(a*b))

Dabei bedeutet:

M

Rangfolge

SCPU-Zeit in Sekunden, die der Job angefordert hat
PJob-Scheduling-Priorität
WWartezeit des Auftrags in Minuten nach Job-Annahme
RZeit in Minuten, die beim Starten des Jobs noch verbleibt, bis der späteste Startzeitpunkt erreicht ist. Voraussetzung ist die Verwendung des Start-Attributes START=WITHIN oder START=LATEST.

a,b,c

Job-Scheduler-Parameter, die den Wert 0 oder 1 annehmen können, werden von der Systembetreuung bei der Stream-Beschreibung festgelegt. Dabei entspricht:

  • CPU-TIME der Variablen a

  • WAIT-TIME der Variablen b

  • OB-PRIORITY der Variablen c

d

d=1, wenn der Job vom Benutzer mit den Start-Attributen START=WITHIN oder START=LATEST bereitgestellt wird.
Ansonsten gilt: d=0.

Je kleiner der Wert für M ist, desto besser ist die Position des Jobs, dies gilt unabhängig von der Job-Klasse.

Wird für mehrere Jobs der gleiche Wert M ermittelt, dann wird die Reihenfolge der zum Start freigegebenen Jobs nach dem FIFO-Prinzip bestimmt.

Im Folgenden werden die einzelnen Scheduling-Verfahren erläutert, die sich aus den verschiedenen Kombinationen der Exponentenwerte ergeben. Die Wertzuweisung für die Exponenten a, b, c erfolgt bei der Stream-Definition durch den Operanden S-PAR.

Die Scheduling-Strategien sind in der Tabelle nur mit der jeweiligen Abkürzung angegeben. Die dazu gehörende Langform ist im Anschluss an die Tabelle vermerkt. 

Scheduling-
Strategie

CPU-TIME
(a)

WAIT-TIME
(b)

JOB-PRIORITY
(c)

(1) FIFO

NO

YES

NO

(2) HPF

NO

NO

YES

(3) HPA

NO

YES

YES

(4) SJF

YES

NO

NO

(5) SJP

YES

NO

YES

(6) HRN

YES

YES

NO

(7) HRP

YES

YES

YES

Tabelle 26: Scheduling-Strategien

(1) Auswahl nach Ankunftszeit (FIFO)

Die Strategie empfiehlt sich, wenn die CPU-Zeitanforderung der freizugebenden Jobs nicht stark voneinander abweicht.
Ist dies nicht der Fall, dann führt die ausschließliche Verwendung dieser Strategie dazu, dass langlaufende Jobs bevorzugt werden.

Auswahl der Jobs, die mit der Option START=WITHIN bzw. START=LATEST beim ENTER-JOB-Kommando versehen wurden (FIFO und R (Wartezeit)):

Basierend auf dem FIFO-Auswahlprinzip wird der STREAM-Parameter WAIT-TIME=YES ausgewertet.
Sind die Jobs mit der Start-Option START=WITHIN in das System gekommen, dann werden die Jobs erst ab Beginn des Startintervalls in die Auswahlentscheidung einbezogen. Für Jobs mit START=LATEST wächst die Wahrscheinlichkeit, gestartet zu werden, mit der Annäherung an die späteste gewünschte Startzeit.

FIFO kann bei WAIT-TIME=YES nicht garantiert werden, wenn ein Stream-Start läuft und ein TSN-Überlauf aufgetreten ist. Wurden zwei Jobs in derselben Minute gestartet und tritt gerade dann ein TSN-Überlauf auf, wird der Job mit der TSN 0AAA vor dem Job mit der letzten vergebbaren TSN (9999) gestartet.

(2) Auswahl nach Priorität (HPF)

Die Jobs werden gemäß ihrer extern zugewiesenen Job-Scheduling-Priorität ausgewählt. Da immer der Job zum Start freigegeben wird, der die beste Priorität nachweisen kann, ist die Bevorzugung privilegierter Jobs gewährleistet.

Auswahl der Jobs, die mit der Option START=IMMEDIATE bzw. START=AT beim ENTER-JOB-Kommando versehen wurden:
Diese Funktionen bewirken, dass der Scheduling-Algorithmus den Wert M (Rangfolge) für Jobs mit der Option START=IMMEDIATE automatisch auf 0 setzt. Für Jobs mit der Option START=AT wird M auf 0 gesetzt, wenn die angegebene Startzeit erreicht wurde. Jobs für die M=0 ermittelt wird, werden sofort zum Starten freigegeben und können von Jobs mit M>0 nicht überholt werden.

(3) Auswahl nach Priorität und Alterung (HPA)

Durch Einbeziehung der Wartezeit in die Auswahlstrategie wird erreicht, dass selbst bei permanentem Angebot hochpriorer Jobs auch solche mit niedriger Priorität zum Klassen-Scheduler weitergeleitet werden.

(4) Auswahl nach Laufzeit (SJF)

Diese Strategie bevorzugt kurzlaufende Jobs und verkürzt im Gegensatz zur FIFO-Methode die mittlere Wartezeit. Da Batch-Jobs bei Ablauf der angeforderten CPU-Zeit abgebrochen werden, kann die Strategie nicht unterlaufen werden. SJF verzögert den Start von langlaufenden Jobs und kann im Extremfall – nämlich bei genügend kurzlaufenden Jobs – dazu führen, dass langlaufende Jobs gar nicht zum Start freigegeben werden.

(5) Auswahl nach CPU-Zeit und Priorität (SJP)

Bei dieser Strategie werden die Methoden „Auswahl nach Laufzeit“ und „Auswahl nach Priorität“ kombiniert.
Bei Jobs mit gleicher CPU-Zeit-Anforderung ist die Priorität maßgebend; bei Jobs mit gleicher Job-Scheduling-Priorität entscheidet die angeforderte CPU-Zeit.

(6) Auswahl nach Response Ratio (HRN)

Response Ratio ist das Verhältnis (Wartezeit + CPU-Zeit) / CPU-Zeit und kombiniert die beiden Verfahren HPA und SJF. Obwohl wiederum die kurzlaufenden Jobs bevorzugt werden, wird jedoch die Wartezeit der Jobs berücksichtigt.

(7) Auswahl nach Durchsatz und Priorität (HRP)

Im Vordergrund steht die Bevorzugung von kurzlaufenden Jobs. Die Rangfolge der Jobs ist festgelegt über die jeweilige Job-Scheduling-Priorität.

Protokoll des Standard-Job-Schedulers

Der Standard-Job-Scheduler protokolliert bestimmte Ereignisse der Stream-Tasks in die Protokolldatei SYS.SCHEDLOG.<yyyy.mm.dd>.<hh.mm.ss>.<streamname>, wenn in der Stream-Definition die Protokollierung eingeschaltet ist
(in der JMU-Anweisung DEFINE-JOB-STREAM oder im Kommando MODIFY-JOB-STREAM, Operand S-PAR='...,LOGGING=YES').
Das Protokoll gibt einen Überblick über die Aktivitäten des Schedulers während eines Systemlaufs. Darüber hinaus dient es als Unterlage bei einer evtl. erforderlichen Fehleranalyse.

Ausschnitt aus einer Protokolldatei (die Nummern sind nicht Teil der Protokolldatei, sondern dienen der Zuordnung zum erläuternden Text):

FTS BS2000   JOB SCHEDULER JSSTD1 VERSION <version> <date> <time>    PAGE 1 
**               STREAM STARTED 
** JSSTD1        JSATTCH  1.
**               EVENT         10    (JS_HOLD)       16.
**               EVENT         11    (JS_RELEASE)    17.
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCDSTD  
**               JSWAKE   4.                              WAKE-TIME=2147483647 
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCDSTD
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCDSTD 
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCDSTD
**               EVENT               (J_INTRODUCTION) 6.  TSN=0FSM 
**               JSRUNJB  3.                              TSN=0FSM, JCLASS=JCBSTD, 
                                                          WAIT-TIME=0, JOB-PRIO=9, 
                                                          CPU-TIME=32000,
                                                          MERIT=45DBBA000000000000000001 
**               EVENT          1    (J_TERMINATION)  7.  TSN=0FSM 
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCBSTD 
**               EVENT               (J_INTRODUCTION) 6.  TSN=0FSN 
**               JSRUNJB  3.                              TSN=0FSN, JCLASS=JCBSTD, 
                                                          WAIT-TIME=0, JOB-PRIO=9, 
                                                          CPU-TIME=32000,
                                                          MERIT=45DBBA000000000000000002 
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCDSTD 
**               EVENT          1    (J_TERMINATION)  7.  TSN=0FSN 
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCBSTD 
**               EVENT               (J_INTRODUCTION) 6.  TSN=0FSQ 
**               JSRUNJB  3.                              TSN=0FSQ, JCLASS=JCBSTD, 
                                                          WAIT-TIME=0, JOB-PRIO=9, 
                                                          CPU-TIME=32000,
                                                          MERIT=45DBBA000000000000000003
**               EVENT               (J_INTRODUCTION) 6.  TSN=0FSR 
**               JSRUNJB  3.                              TSN=0FSR, JCLASS=JCBSTD, 
                                                          WAIT-TIME=0, JOB-PRIO=9, 
                                                          CPU-TIME=32000, 
                                                          MERIT=45DBBA000000000000000004
**               EVENT               (J_INTRODUCTION) 6.  TSN=0FSS 
**               JSWAKE   4.                              WAKE-TIME=0 
** JOB_HOLD      JOB HELD                                 TSN=0FSS 
**               EVENT          2    (J_HOLD)         8.  TSN=0FSS 
**               JSWAKE   4.                              WAKE-TIME=10111560 
**               EVENT          4    (J_CANCEL)      10.  TSN=0FSS 
**               JSWAKE   4.                              WAKE-TIME=2147483647 
**               EVENT               (J_INTRODUCTION) 6.  TSN=0FSS 
**               JSWAKE   4.                              WAKE-TIME=0 
**               EVENT         16    (JS_TIMER)      21.  DATE=<date>, TIME=<time> 
**               JSWAKE   4.                              WAKE-TIME=10111500 
**               EVENT          3    (J_RELEASE)      9.  TSN=0FSS 
**               EVENT          1    (J_TERMINATION)  7.  TSN=0FSQ 
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCBSTD 
**               EVENT          1    (J_TERMINATION)  7.  TSN=0FSR 
**               EVENT          9    (JC_AVAILABLE)  15.  JCLASS=JCBSTD 
**               EVENT          4    (J_CANCEL)      10.  TSN=0FSS 
**               JSWAKE   4.                             WAKE-TIME=2147483647 
**               EVENT         13    (JS_CLOSE_IMMEDIATE) 19.
**               STREAM CLOSED 
** JSSTD1        JSDETCH  2.

Erläuterung der Funktionen des Job-Schedulers (über die Protokollierung sichtbare Schritte sind in fett dargestellt):

  1. JSATTCH
    Der Job-Stream informiert mit einer Meldung über seine abgeschlossene Inbetriebnahme.

  2. JSDETCH
    Der angegebene Job-Stream befindet sich in der Beendigungsphase. Die Job-Steuerung unterstützt den Job-Scheduler nicht mehr. Darüber hinaus wird auch die Task, in der der Job-Stream realisiert ist, beendet.

  3. JSRUNJB
    Der Job-Scheduler fordert den Klassen-Scheduler auf, den angegebenen Job zu starten.
    Falls für die Job-Klasse das CLASS-LIMIT erreicht ist, erhält der Standard-Job-Scheduler eine entsprechende Rückinformation.

  4. JSWAKE
    Der Job-Scheduler teilt der Job-Steuerung mit, wann er wieder aktiviert werden will.

  5. JSEXPCT

    Die Job-Steuerung erhält die Aufforderung, dem Job-Scheduler das nächste vorliegende Ereignis zu übergeben. Dazu zählen dann (siehe Nummern 6 - 21):

  6. J_INTRODUCTION
    Der Job-Scheduler wird aufgefordert, einen Job in die Menge der von ihm verwalteten Jobs aufzunehmen. Dabei werden dem Job-Scheduler folgende Informationen zur Verfügung gestellt:
    Auftragsnummer, Name der Job-Klasse, Wiederholungsanzeige, CPU-Zeit, Job-Sche-duling-Priorität, Ankunftszeit des Jobs, Start-Attribut, Job-Parameter.

  7. J_TERMINATION
    Ein vom betreffenden Job-Scheduler verwalteter Job wird nach seiner Laufzeit beendet.

  8. J_HOLD
    Ein Job wird angehalten und steht in der entsprechenden Warteschlange.

  9. J_RELEASE
    Ein angehaltener Job wird wieder freigegeben. Der Job-Scheduler ist aufgefordert, den Job zu berücksichtigen.

  10. J_CANCEL
    Ein vom Job-Scheduler noch nicht gestarteter Job wird abgebrochen.

  11. J_EXPRESS
    Annahme eines Jobs, der sobald wie möglich gestartet werden soll. Der Job erhält die Rangfolge M=0 (siehe „Job-Scheduling-Algorithmus").

  12. J_RESCHEDULE
    Eine mit dem Kommando MODIFY-JOB vorgenommene Änderung der Job-Eigenschaften wird angezeigt.

  13. JC_HOLD
    Die angegebene Job-Klasse wird in den Wartezustand versetzt. Der Job-Scheduler ist aufgefordert, keine Jobs der angehaltenen Job-Klasse weiter zu berücksichtigen.

  14. JC_RELEASE
    Die angehaltene Job-Klasse und damit implizit alle Jobs dieser Job-Klasse werden wieder freigegeben.

  15. JC_AVAILABLE
    Für die angegebene Job-Klasse ist der bei CLASS-LIMIT festgelegte Wert unterschritten worden.

  16. JS_HOLD
    Der angegebene Job-Stream wird in den Wartezustand versetzt.

  17. JS_RELEASE
    Der angehaltene Job-Stream wird wieder freigegeben. Er ist angewiesen, alle von ihm zu verwaltenden Jobs zu bearbeiten.

  18. JS_CLOSE QUIET
    Anzeige, dass sich das Betriebssystem in der Beendigungsphase befindet. Dieses Ereignis hat die gleiche Wirkung wie JS_HOLD, d.h. es werden keine weiteren Jobs gestartet.

  19. JS_CLOSE IMMEDIATE
    Nach Bearbeitung des Kommandos STOP-JOB-STREAM wird der Job-Scheduler sofort beendet.

  20. JS_CHANGE
    Es werden Informationen über geänderte STREAM-PARAMETER ausgegeben.

  21. JS_TIMER
    In Minutenabständen wird der Job-Scheduler angewiesen, die Start-Attribute seiner Jobs zu überprüfen.