Voraussetzung für diese Funktionen ist generell, dass das Subsystem aktiv ist.
Das Deaktivieren eines Subsystems erfolgt durch eine der folgenden Möglichkeiten:
explizit bei Eingabe des Kommandos STOP-SUBSYSTEM (bei HOLD-SUBSYSTEM wird das Subsystem angehalten)
explizit bei Aufruf privilegierter Makros an der Programmschnittstelle ($ESMDEL und $ESMHLD)
implizit bei Eingabe des Kommandos START-SUBSYSTEM mit dem Operanden VERSI-ON-PARALLELISM=*EXCHANGE-MODE
automatisch bei Shutdown für alle Subsysteme, bei deren Definition dies vereinbart wurde (STOP-AT-SHUTDOWN=*YES)
Das Deaktivieren eines Subsystems (STOP-SUBSYSTEM) läuft in folgenden Stufen ab:
Prüfen des Auftrags, insbesondere der Abhängigkeiten zu anderen Subsystemen (synchron)
Starten der CLOSE-CTRL-Routine, sofern eine solche definiert ist (asynchron)
Schließen des Subsystems für neue Benutzer (asynchron); so können keine Tasks mehr an das Subsystem angeschlossen werden;
Ausnahme: Einsprungstellen mit CONNECTION-SCOPE=*FREE oder SVC/ISL-Aufrufe für Subsysteme mit Einsprungstellen mit CREATION-TIME=*AT-SUBSYSTEM-CALL. Auf Code, dessen Einsprungstellen mit CONNECTION-SCOPE=*OPTIMAL definiert wurde, kann von diesem Moment an nicht mehr zugegriffen werden.Starten der Auftragsbeendigungs-Routine (STOPCOM-Routine), falls definiert (asynchron)
Warten, bis das Subsystem auftragslos ist, d.h. der subsystemspezifische Anschlusszähler gleich null ist und keine Task auf Code zugreift, dessen Einsprungstellen mit CONNECTION-SCOPE=*OPTIMAL definiert wurde (asynchron); Ausnahme: Wenn im DSSM-Kommando der Operand FORCED=*YES angegeben ist, wird die Deinitialisierung sofort gestartet.
Starten der Deinitialisierung, falls definiert (asynchron)
Entladen aus der Holdertask (asynchron)
Das Anhalten eines Subsystems (HOLD-SUBSYSTEM) besteht aus den Stufen 1 bis 6. Wenn die Deaktivierung bzw. das Anhalten eines Subsystems explizit durch ein Kommando (STOP-/HOLD-SUBSYSTEM) erfolgte, kann an Stelle des asynchronen der synchrone Verarbeitungsmodus gewählt werden.