Aller au contenu
Gestion des travaux · 2 / 6

Les sous-systèmes IBM i, QINTER, QBATCH et les autres

Tous les travaux d'IBM i, sauf ceux du système, tournent dans un sous-système. Voici à quoi servent QINTER, QBATCH, QCTL ou QSPL, comment un sous-système reçoit le travail, lui donne sa mémoire et sa priorité, et comment créer le vôtre.

8sous-systèmes dans la configuration QCTL d'IBM
11sous-systèmes actifs sur notre IBM i 7.5
20priorité d'exécution de la classe QINTER
50priorité d'exécution de la classe QBATCH

En une phrase

Un sous-système est un environnement d'exécution : il reçoit des travaux par ses portes d'entrée (écrans, files d'attente…), leur donne de la mémoire et une priorité, et les contrôle jusqu'à leur fin. Ses règles sont rangées dans un objet *SBSD, la description de sous-système.

À quoi sert un sous-système ?

Un IBM i fait tourner en même temps des sessions d'utilisateurs, des traitements de nuit, des serveurs et des impressions. Les sous-systèmes séparent ces familles de travail, pour que chacune ait ses propres règles :

  • sa mémoire : les sessions interactives ne se battent pas pour la même mémoire que les gros traitements ;
  • sa priorité : une saisie reste rapide pendant qu'un batch tourne ;
  • son débit : on limite le nombre de travaux qui tournent à la fois ;
  • son interrupteur : on arrête les sessions des utilisateurs (ENDSBS QINTER) sans arrêter les traitements, par exemple pour un week-end de batch sans connexion.

Chaque sous-système actif est piloté par un travail du même nom, son moniteur (type SBS dans WRKACTJOB), qui démarre les travaux, les contrôle et les arrête. Seuls les travaux système (type SYS) vivent hors de tout sous-système.

Les sous-systèmes livrés par IBM

IBM livre deux configurations prêtes à l'emploi. La valeur système QCTLSBSD choisit celle qui démarre : QBASE, qui réunit dans un même sous-système l'interactif, le batch et les communications, ou QCTL, qui répartit le travail en plusieurs sous-systèmes. Sur notre IBM i 7.5, QCTLSBSD vaut QCTL QSYS. Voici les sous-systèmes de cette configuration, avec le nombre de travaux que nous y avons comptés sans aucune session ouverte :

Sous-systèmeSon rôleTravaux actifs
QCTL Le sous-système de contrôle. Il démarre le premier, porte la console, et son travail autostart démarre les autres. 1
QINTER Les sessions interactives des écrans 5250, sauf la console. 1
QBATCH Les travaux batch, en particulier ceux soumis dans la file QGPL/QBATCH. 1
QSPL Les éditeurs (writers) qui impriment les spools, et les lecteurs. 1
QCMN Les travaux de communication, hors TCP/IP. 8
QSYSWRK Les fonctions du système démarrées automatiquement avec IBM i. Sur notre système : Telnet (QTVTELNET), NTP (QTOTNTP), le serveur d'historiques (QJOBLOGSVR)… 66
QUSRWRK Les travaux que des serveurs démarrent pour le compte d'un utilisateur, comme QZDASOINIT, qui traite les connexions SQL (ODBC, JDBC). 23
QSERVER Le serveur de fichiers (travaux QPWFSERV). 15

Le compte inclut le moniteur du sous-système : un QINTER sans session compte 1 travail, son moniteur. Les logiciels ajoutent leurs propres sous-systèmes. Sur notre système, on trouve aussi QHTTPSVR (serveur HTTP) et Q1ABRMNET (BRMS), et DEMOSBS, celui que nous avons créé pour cette rubrique. WRKSBS les liste :

Écran 5250 Gestion des sous-systèmes : DEMOSBS, QBATCH, QCMN, QCTL, QHTTPSVR, QINTER, QSERVER, QSPL, QSYSWRK, QUSRWRK et leurs pools
WRKSBS : les sous-systèmes actifs et les pools de mémoire du système qu'ils utilisent. QINTER en utilise deux (2 et 3), QSPL aussi (2 et 4).

Qui démarre les sous-systèmes ?

Au démarrage d'IBM i (l'IPL), le système démarre le sous-système de contrôle désigné par QCTLSBSD. Celui-ci a un travail autostart qui appelle le programme de démarrage, désigné par la valeur système QSTRUPPGM (par défaut QSTRUP de QSYS). C'est ce programme qui démarre les autres sous-systèmes et les imprimantes. Nous l'avons vérifié dans le source d'origine de QSTRUP : il démarre QSERVER, QUSRWRK, QINTER, QBATCH, QCMN et QSPL, mais pas QSYSWRK, qui est actif dès la fin du démarrage du système.

Le démarrage des sous-systèmes Au démarrage d'IBM i, le sous-système de contrôle QCTL démarre ; son travail autostart appelle le programme QSTRUPPGM, qui démarre QINTER, QBATCH, QSPL, QCMN, QSERVER et QUSRWRK. QSYSWRK n'est pas démarré par ce programme. Démarrage d'IBM i (IPL) valeur système QCTLSBSD QCTL : sous-système de contrôlela console y tourne travail autostart : programme QSTRUPPGM QINTERsessions QBATCHtraitements QSPLimpressions QCMNcommunications QSERVERfichiers QUSRWRKserveurs QSYSWRK : fonctions systèmeactif sans passer par QSTRUP
La configuration QCTL d'IBM. Le cadre en pointillé : les sous-systèmes que démarre le programme de démarrage.

Le programme de démarrage se remplace : on en écrit une copie qui démarre aussi ses propres sous-systèmes ou serveurs, puis on change QSTRUPPGM, une valeur système que seul un responsable sécurité peut modifier et qui ne compte qu'au démarrage suivant. Sur notre système, c'est une copie rangée dans QGPL.

La description de sous-système (*SBSD)

Un sous-système est entièrement décrit par un objet *SBSD : d'où vient son travail, combien de travaux il accepte, quelle mémoire il utilise, et comment chaque travail est aiguillé. DSPSBSD en montre toutes les parties :

Écran 5250 Description de sous-système QINTER : menu des attributs opérationnels, pools, postes autostart, postes écrans, postes files d'attente, postes de routage, postes communications, postes prédémarrés
DSPSBSD QINTER : chaque option affiche une partie de la description.
Ce que contient une description de sous-système Les postes de travail (écrans, files d'attente, autostart, prédémarrés, communications) font entrer les travaux dans le sous-système. Le sous-système compare les données de routage du travail à ses postes de routage ; le poste trouvé donne le programme, la classe et le pool de mémoire. Les portes d'entrée : les postes de travail Postes écranssessions 5250 Postes filestravaux en JOBQ Autostartau démarrage Prédémarrésserveurs prêts Communicationsdemandes distantes Sous-système (*SBSD)nombre maximal de travaux, pools de mémoire données de routage comparées Poste de routagele premier qui correspond, par numéro de séquence ProgrammeQCMD en général Classepriorité, tranche Pool mémoire*BASE, *INTERACT…
Une description de sous-système : les postes de travail font entrer les travaux, le routage leur donne un programme, une classe et une mémoire.
PartieCe qu'elle ditCommande
AttributsLe nombre maximal de travaux actifs à la fois, l'écran d'ouverture de session.CHGSBSD
PoolsLa mémoire que le sous-système utilise, numérotée de 1 à 10 dans le sous-système.CHGSBSD
Postes écransLes écrans dont il accepte les sessions, par nom ou par type.ADDWSE
Postes files d'attenteLes files d'attente de travaux qu'il lit, et combien de travaux de chacune il exécute à la fois.ADDJOBQE
Postes autostartLes travaux à lancer à chaque démarrage du sous-système.ADDAJE
Postes prédémarrésLes travaux à démarrer à l'avance pour répondre vite, ceux des serveurs.ADDPJE
Postes de routagePour chaque valeur de routage : le programme, la classe et le pool.ADDRTGE

Un sous-système sans poste pour un type de travail ne peut pas l'exécuter : un sous-système sans poste écran n'accepte aucune session, un sous-système sans poste file d'attente n'exécute aucun batch. QINTER, par exemple, accepte les écrans de tout type grâce à son poste *ALL :

Écran 5250 Postes écrans par type du sous-système QINTER : *CONS, 5555 et *ALL
Les postes écrans par type de QINTER (option 5). Le poste *CONS concerne la console, qu'IBM laisse dans le sous-système de contrôle.

Le routage : comment un travail reçoit sa priorité

Quand un travail entre dans un sous-système, celui-ci compare ses données de routage, une courte chaîne de caractères, aux valeurs de comparaison de ses postes de routage, dans l'ordre des numéros de séquence. Le premier poste qui correspond donne au travail son programme, sa classe et son pool de mémoire. Si aucun ne correspond, le travail s'arrête.

Nous avons suivi les deux chemins sur notre IBM i 7.5 :

Le routage d'une session et d'un travail batch Une session 5250 reçoit les données de routage QCMDI de la description de travail QDFTJOBD ; dans QINTER, le poste 10 de valeur QCMDI lui donne le programme QCMD, la classe QINTER de priorité 20 et le pool *INTERACT. Un travail soumis par SBMJOB reçoit QCMDB, valeur par défaut de SBMJOB ; QBATCH n'a pas de poste QCMDB, c'est le poste 9999 *ANY qui lui donne QCMD, la classe QBATCH de priorité 50 et le pool *BASE. Une session Un travail batch Ouverture de sessionécran QPADEV0001 SBMJOBcommande de soumission JOBD QDFTJOBDdonnées de routage QCMDI RTGDTA(QCMDB)la valeur par défaut de SBMJOB QINTER, poste 10valeur 'QCMDI' : trouvé QBATCH, poste 9999aucun poste 'QCMDB' : *ANY QCMD, classe QINTERpriorité 20, pool *INTERACT QCMD, classe QBATCHpriorité 50, pool *BASE
Chaque étape a été lue sur notre IBM i 7.5 : description de travail, postes de routage et classes ci-dessous.

La session : QCMDI, poste 10 de QINTER

Le profil qui ouvre la session utilise la description de travail QGPL/QDFTJOBD, dont les données de routage valent QCMDI. Le premier poste de routage de QINTER attend justement 'QCMDI' :

Écran 5250 Postes de routage de QINTER : séquences 10 QCMDI, 15 QIGC, 20 QS36MRT, 40 525XTEST, 700 QCMD38 et 9999 *ANY
Les postes de routage de QINTER (option 7), dans l'ordre de leur numéro de séquence.
Écran 5250 détail du poste de routage 10 de QINTER : programme QCMD de QSYS, classe QINTER de QGPL, ID pool 2, valeur de comparaison QCMDI
Le poste 10 en détail : programme QCMD, classe QGPL/QINTER, pool 2 du sous-système.

Le pool 2 de QINTER est *INTERACT, la mémoire réservée à l'interactif, et la classe QINTER donne une priorité d'exécution de 20 avec une tranche de temps de 2 secondes :

Écran 5250 Définitions de pools de QINTER : pool 1 *BASE, pool 2 *INTERACT
Les pools de QINTER : 1 = *BASE, 2 = *INTERACT.
Écran 5250 Informations de classe QINTER de QGPL : priorité d'exécution 20, tranche de temps 2000 millisecondes
DSPCLS QGPL/QINTER : priorité 20, tranche de 2 000 ms.

Le batch : QCMDB, et le poste *ANY de QBATCH

Un travail soumis par SBMJOB reçoit par défaut les données de routage QCMDB (paramètre RTGDTA). Or QBATCH n'a aucun poste dont la valeur soit 'QCMDB' : c'est son dernier poste, 9999 *ANY, qui accepte tout, qui prend le travail.

Écran 5250 Postes de routage de QBATCH : séquences 15 QIGC, 300 QS36EVOKE, 700 QCMD38 et 9999 *ANY
Les postes de routage de QBATCH : pas de QCMDB.
Écran 5250 détail du poste de routage 9999 de QBATCH : programme QCMD, classe QBATCH de QSYS, ID pool 1, valeur de comparaison *ANY
Le poste 9999 : QCMD, classe QSYS/QBATCH, pool 1.
Écran 5250 Informations de classe QBATCH de QSYS : priorité d'exécution 50, tranche de temps 5000 millisecondes
DSPCLS QSYS/QBATCH : priorité 50, tranche de 5 000 ms. Plus le nombre est grand, moins le travail est prioritaire.
Un poste *ANY en dernier. Sans poste qui accepte toute valeur, un travail dont les données de routage ne correspondent à rien ne démarre pas. Dans vos propres sous-systèmes, terminez le routage par un poste CMPVAL(*ANY) de numéro élevé, comme le 9999 de QBATCH.

La mémoire : les pools

La mémoire centrale est découpée en pools. Deux sont spéciaux : *MACHINE, réservé au système (aucun travail utilisateur n'y tourne), et *BASE, qui reçoit toute la mémoire non attribuée et sert au batch. Les pools partagés *INTERACT (l'interactif), *SPOOL (les éditeurs) et *SHRPOOL1 à *SHRPOOL60 sont à la disposition des sous-systèmes.

Attention aux deux numérotations. Dans un sous-système, les pools sont numérotés de 1 à 10 : pour QINTER, 1 = *BASE et 2 = *INTERACT. Le système, lui, numérote tous les pools en service : *MACHINE est le 1, *BASE le 2, les autres suivent dans l'ordre où ils sont alloués. C'est pourquoi WRKSBS affiche « 2 3 » pour QINTER : le pool 3 du système est son *INTERACT.

Ne confondez pas non plus le nombre maximal de travaux d'un sous-système et le niveau d'activité d'un pool, le nombre d'unités d'exécution qui peuvent y tourner en même temps. Un travail peut être actif dans le sous-système et attendre son tour dans le pool.

Créer son propre sous-système

Pour notre démonstration, nous avons créé le sous-système DEMOSBS dans la bibliothèque JOBITRV. Il faut trois choses : la description, une source de travail (ici une file d'attente, qui n'exécute qu'un travail à la fois) et un poste de routage :

CRTSBSD    SBSD(JOBITRV/DEMOSBS) POOLS((1 *BASE)) +
             TEXT('Sous-système de démonstration')
ADDJOBQE   SBSD(JOBITRV/DEMOSBS) JOBQ(JOBITRV/DEMOJOBQ) MAXACT(1) +
             SEQNBR(10)
ADDRTGE    SBSD(JOBITRV/DEMOSBS) SEQNBR(9999) CMPVAL(*ANY) +
             PGM(QSYS/QCMD) CLS(QGPL/QBATCH)
STRSBS     SBSD(JOBITRV/DEMOSBS)

La classe QGPL/QBATCH est nommée explicitement : par défaut, ADDRTGE cherche une classe du même nom que le sous-système (CLS(*SBSD)), qui n'existe pas ici. Une fois démarré, DEMOSBS apparaît dans WRKSBS et WRKACTJOB, et sa file d'attente est bien rattachée :

Écran 5250 Postes files d'attente de travaux de DEMOSBS : file DEMOJOBQ de JOBITRV, activité maximale 1
Le poste file d'attente de DEMOSBS : DEMOJOBQ, un seul travail actif à la fois.

Pour l'arrêter : ENDSBS SBS(DEMOSBS) OPTION(*CNTRLD) DELAY(60) laisse une minute aux travaux pour finir, OPTION(*IMMED) les arrête tout de suite. La suite, avec la file d'attente et la description de travail, est sur la page JOBQ et JOBD.

Toutes les commandes de la démonstration
/* La bibliothèque de démonstration                                  */
CRTLIB     LIB(JOBITRV) TEXT('Démonstration gestion des travaux')

/* Une file d'attente de travaux et une file d'attente de sortie     */
CRTJOBQ    JOBQ(JOBITRV/DEMOJOBQ) +
             TEXT('File d''attente des travaux de démonstration')
CRTOUTQ    OUTQ(JOBITRV/DEMOOUTQ) +
             TEXT('File d''attente de sortie de démonstration')

/* La description de travail qui relie les deux                      */
CRTJOBD    JOBD(JOBITRV/DEMOJOBD) JOBQ(JOBITRV/DEMOJOBQ) JOBPTY(5) +
             OUTPTY(5) OUTQ(JOBITRV/DEMOOUTQ) +
             INLLIBL(JOBITRV QGPL QTEMP) LOG(4 00 *SECLVL) +
             TEXT('Description de travail de démonstration')

/* Le sous-système : un pool, une file, un poste de routage          */
CRTSBSD    SBSD(JOBITRV/DEMOSBS) POOLS((1 *BASE)) +
             TEXT('Sous-système de démonstration')
ADDJOBQE   SBSD(JOBITRV/DEMOSBS) JOBQ(JOBITRV/DEMOJOBQ) MAXACT(1) +
             SEQNBR(10)
ADDRTGE    SBSD(JOBITRV/DEMOSBS) SEQNBR(9999) CMPVAL(*ANY) +
             PGM(QSYS/QCMD) CLS(QGPL/QBATCH)
STRSBS     SBSD(JOBITRV/DEMOSBS)

/* Cinq travaux soumis depuis une session 5250                       */
SBMJOB     CMD(DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)) JOB(EDITION) +
             JOBD(JOBITRV/DEMOJOBD) OUTQ(*JOBD)
SBMJOB     CMD(DLYJOB DLY(3600)) JOB(CALCUL1) JOBD(JOBITRV/DEMOJOBD)
SBMJOB     CMD(DLYJOB DLY(3600)) JOB(CALCUL2) JOBD(JOBITRV/DEMOJOBD)
SBMJOB     CMD(DLYJOB DLY(3600)) JOB(CALCUL3) JOBD(JOBITRV/DEMOJOBD)
SBMJOB     CMD(DLYJOB DLY(3600)) JOB(CALCUL4) JOBD(JOBITRV/DEMOJOBD) +
             HOLD(*YES)

Les commandes des sous-systèmes

WRKSBSLes sous-systèmes actifs, leurs pools, et l'accès à leurs travaux.
DSPSBSDAfficher une description de sous-système : pools, postes, routage.
STRSBSDémarrer un sous-système.
ENDSBSArrêter un sous-système, en douceur (*CNTRLD) ou tout de suite (*IMMED).
CRTSBSDCréer une description de sous-système.
CHGSBSDModifier ses attributs : pools, nombre maximal de travaux.
ADDJOBQERattacher une file d'attente de travaux.
ADDWSEAjouter un poste écran.
ADDAJEAjouter un travail autostart.
ADDPJEAjouter un poste de travaux prédémarrés.
ADDRTGEAjouter un poste de routage.
CRTCLSCréer une classe (priorité, tranche de temps).
DSPCLSAfficher une classe.
WRKSHRPOOLLes pools de mémoire partagés et leur taille.

Et en SQL :

QSYS2.SUBSYSTEM_INFOLes sous-systèmes, actifs ou non, et leurs travaux.
QSYS2.SUBSYSTEM_POOL_INFOLes pools de mémoire de chaque sous-système.
QSYS2.ACTIVE_JOB_INFOLes travaux actifs, filtrables par sous-système.

À retenir

  • QINTER pour les sessions, QBATCH pour le batch, QSPL pour l'impression, QCTL pour piloter.
  • Une description de sous-système dit d'où vient le travail, combien et avec quelle mémoire.
  • Le routage relie les données de routage du travail à un programme, une classe et un pool.
  • La priorité vient de la classe : 20 pour QINTER, 50 pour QBATCH.

Sources

Les exemples ont été créés et relevés sur un IBM i 7.5 (voir la méthode). Les définitions et les règles viennent de ces sources, consultées le 14 octobre 2026 :

  1. IBM i 7.3 Systems management : Work management, IBM (PDF, 212 pages). La vie d'un travail batch (SBMJOB, JOBQ, sous-système, pool mémoire, OUTQ) ; nom qualifié d'un travail à 6 chiffres ; types de travaux ; démarrage d'un travail interactif et d'un travail batch ; routage, classe et priorité d'exécution (0 à 99) ; pools *MACHINE, *BASE, *INTERACT, *SPOOL ; ordre d'une JOBQ (priorité 0 à 9, MAXACT, une file par sous-système) ; QSTRUPPGM ; OUTQ, spools, éditeurs et repli sur QGPL/QPRINT ; planning des travaux (objet QDFTJOBSCD, QJOBSCD, exemples d'ADDJOBSCDE, SBMJOB à heure fixe, reprise après arrêt).
  2. Subsystems shipped with the system, IBM, documentation IBM i 7.5. Les configurations QBASE et QCTL, la valeur système QCTLSBSD, le rôle de QINTER, QBATCH, QCMN, QSPL, QSYSWRK, QUSRWRK et QSERVER.
  3. ACTIVE_JOB_INFO table function, IBM, documentation IBM i 7.5. Les codes de type de travail (ASJ, BCH, BCI, INT, PJ, SBS, SYS, WTR…) et d'état (RUN, DSPW, MSGW, DEQW, DLYW, LCKW…).
  4. L'aide en ligne des commandes citées, livrée avec IBM i 7.5 et reprise en français dans les fiches des commandes CL de ce site. Valeurs par défaut de SBMJOB, CRTJOBD, CRTPF (WAITRCD), CPYSPLF et DLTSPLF.

Questions fréquentes

Qu'est-ce qu'un sous-système IBM i ?

Un sous-système est un environnement d'exécution dans lequel le système gère les ressources des travaux. Il est décrit par un objet *SBSD qui dit d'où vient le travail (écrans, files d'attente, travaux autostart ou prédémarrés), quelle mémoire il utilise et comment chaque travail est routé. Tous les travaux, sauf les travaux système, tournent dans un sous-système.

À quoi servent QINTER, QBATCH, QCTL et QSPL ?

QINTER reçoit les sessions interactives, sauf la console. QBATCH exécute les travaux batch. QCTL est le sous-système de contrôle : son travail autostart démarre les autres. QSPL héberge les éditeurs qui impriment les spools.

Comment démarrer ou arrêter un sous-système ?

STRSBS démarre un sous-système, ENDSBS l'arrête : OPTION(*CNTRLD) laisse aux travaux un délai pour finir, OPTION(*IMMED) les arrête tout de suite. WRKSBS liste les sous-systèmes actifs. Arrêter QINTER coupe les sessions des utilisateurs, sauf celle de la console.

Pourquoi créer son propre sous-système ?

Pour isoler une application : lui donner sa propre mémoire, limiter le nombre de travaux qui tournent à la fois, ou pouvoir l'arrêter sans toucher au reste. Il faut une description de sous-système (CRTSBSD), une source de travail (une JOBQ avec ADDJOBQE) et un poste de routage (ADDRTGE).