DEROULEMENT DES TRAVAUX ACTIFS NIVEAU D'ACTIVITE & PRIORITE MACHINE Paramètres rentrant en ligne de compte: 1/ le niveau d'activité des pools QBASACTLVL pour *BASE (cf CHGSYSVAL) Niveau d'activité pour pools partagés (cf WRKSHRPOOL) Niveau d'activité pour pools privés (cf CHGSBSD) 2/ la classe de chaque travail indiquée à l'entrée dans le sous-système elle donne TIMESLICE et RUNPTY |
notion de niveau d'activité: Le niveau d'activité machine est la somme de tous les niveaux d'activité des sous-systèmes actifs. Un travail occupant un niveau d'activité est un travail pouvant prétendre (immédiatement ou très prochainement) à un traitement CPU. notion d'attente: un travail actif peut être traité par la CPU (il n'est pas en attente) Mais il ne peut y avoir qu'un travail traité par la CPU à un instant T. OU SONT LES AUTRES TRAVAUX ACTIFS ? |
2 possibilités: 1/ Il occupe un niveau d'activité. 2 files d'attente pour ces travaux, COMMUNES à tous les pools 1.1 'ACTIF-PRET' Les travaux sont en attente de traitement (classés par RUNPTY puis FIFO) C'est la file d'attente "lue" par la CPU. 2 voies de sortie: 1/ Time Slice atteint ou dépassé (n'est "testé" qu'en fin d'instruction) ==> le job perd son niveau d'activité s'il y a un job en attente avec une Runpty < ou = à la sienne. 2/ attente d'une action système Si action longue durée (long wait) ==> le job perd son niveau d'activité ==> sinon passage en 'ACTIF-NON PRET' |
2 possibilités: 1/ Il occupe un niveau d'activité. 2 files d'attente pour ces travaux, COMMUNES à tous les pools 1.2 'ACTIF-NON PRET' (Short Wait) Les travaux sont en attente d'une action système rapide (écriture écran avec DFRWRT(*NO), chargement d'une page mémoire..) Cette file d'attente n'est PAS "lue" par la CPU 2 voies de sortie: 1/ action système réalisée avant 2 secondes ==> transfert vers 'ACTIF-PRET' 2/ action système non réalisée avant 2 secondes ==> le job perd son niveau d'activité (passage en Long Wait) |
2 possibilités: 2/ Il n'occupe pas de niveau d'activité. 2 files d'attente pour ces travaux, SPECIFIQUES A CHAQUE POOL 2.1 'LONGUE ATTENTE' (Long Wait) Les travaux sont en attente d'une action système longue (lecture unité (écran,bande ...), attente BD,MSG,DTAQ ..) 2 voies de sortie: 1/ action système réalisée et niveau disponible ==> transfert vers 'ACTIF-PRET' 2/ action système réalisée et pas de niveau disponible (fonction du nombre reservé à ce pool) ==> transfert vers 'INELIGIBLE' |
2 possibilités: 2/ Il n'occupe pas de niveau d'activité. 2 files d'attente pour ces travaux, SPECIFIQUES A CHAQUE POOL 2.2 'INELIGIBLE' Les travaux sont en attente d'un niveau d'activité disponible (classement par RUNPTY puis FIFO) 1 voie de sortie: un niveau d'activité se libère pour ce pool ==> transfert vers 'ACTIF-PRET' |
REMARQUES: a/ le pool machine n'a pas de niveau d'activité fixe. une instruction machine occupe toujours un niveau d'activité (le "déblocage" de la situation dépend de l'exécution de ces instructions) b/ un travail perdant un niveau d'activité ne retrouve pas toujours son pool d'origine. Pour un travail interactif se trouvant dans un pool privé: quand il perd son niveau d'activité parce que son Time Slice est dépassé, le système analyse la valeur du paramètre TSEPOOL (donné par la JOBD) Si la valeur est *BASE le travail est alors transféré dans le pool de base (libération d'un niveau d'activité pour le pool privé) Ce travail retrouvera son pool d'origine à la prochaine longue attente. Cela permet de "pénaliser" un travail exécutant du pseudo-batch dans un pool privé interactif par exemple. |
NOUS ALLONS ESSAYER D'ANALYSER TOUT CELA DE MANIERE VISUELLE: QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : ° ° : : ° ° ° ° : : ° ° : : ° ° : : ° QBA2 ° ° QCT2 ° : : ° QIN3 ° : : ° ° : : °°°°°°°° °°°°°°°° : : °°°°°°°° : : ° ° : : (inel) (long : : (inel) : : °°° : : wait) : : : :longW: : : : ° ° : : °Q° : : : : ° QIN5 ° : : °S° : :....................................: : ° QIN2 ° : : °P° : : °°°°°°°° : : °1° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx | :..............: | ° QBA1 ° xQCT1x ° ° | | ° QIN1 ° xxxxxx ° QBA3 ° | | ° QSP2 ° ° QIN4 ° | 00 | °°°°°°°° °°°°°°°° | Entrée = suite.. |
NOUS ALLONS ESSAYER D'ANALYSER TOUT CELA DE MANIERE VISUELLE: QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : ° ° : : ° ° ° ° : : ° ° : : ° ° : : ° QBA2 ° ° QCT2 ° : : ° QIN3 ° : : ° ° : : °°°°°°°° °°°°°°°° : : °°°°°°°° : : ° ° : : (inel) (long : : (inel) : : °°° : : wait) : : : :longW: : : : ° ° : : °Q° : : : : ° QIN5 ° : : °S° : :....................................: : ° QIN2 ° : : °P° : : °°°°°°°° : : °1° : VOICI TOUT D'ABORD LES POOLS SYSTEME : (long : : °°° : *BASE POOL DE BASE : wait) : :.....: QSPL POOL PRIVE :..............: QINTER POOL PRIVE les niveaux d'activité sont indiqués entre parenthèses le nom des travaux commence par 3 lettres du sous-système 01 suivies d'un n° dans le sous-système (QBA1 = 1er job/QBATCH) |
NOUS ALLONS ESSAYER D'ANALYSER TOUT CELA DE MANIERE VISUELLE: PUIS VOILA LES TRAVAUX OCCUPANT UN NIVEAU D'ACTIVITE. QCT1 est en cours de traitement CPU QBA1, QIN2 et QSP2 en attente d'action machine (Short Wait) QBA3 et QIN4 en attente de traitement CPU VOUS remarquerez que le nombre de travaux de chaque pool est égal au niveau d'activité indiqué pour ce pool *BASE = 3 (QCT1 + QBA3 + QBA1) QSPL = 1 (QSP2) QINTER = 2 (QIN1 + QIN4) ###################################### | ACTIF ACTIF PRET | | NON PRET xxxxxx | | ° QBA1 ° xQCT1x ° ° | | ° QIN1 ° xxxxxx ° QBA3 ° | | ° QSP2 ° CPU ° QIN4 ° | 02 | °°°°°°°° °°°°°°°° | |
VOILA L'ENSEMBLE QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : ° ° : : ° ° ° ° : : ° ° : : ° ° : : ° QBA2 ° ° QCT2 ° : : ° QIN3 ° : : ° ° : : °°°°°°°° °°°°°°°° : : °°°°°°°° : : ° ° : : (inel) (long : : (inel) : : °°° : : wait) : : : :longW: : : : ° ° : : °Q° : : : : ° QIN5 ° : : °S° : :....................................: : ° QIN2 ° : : °P° : : °°°°°°°° : : °1° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx | :..............: | ° QBA1 ° xQCT1x ° ° | | ° QIN1 ° xxxxxx ° QBA3 ° | | ° QSP2 ° ° QIN4 ° | 03 | °°°°°°°° °°°°°°°° | |
DANS L'ESPACE "NIVEAU D'ACTIVITE" CA TOURNE (QBA3 est en traitement CPU) QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : ° ° : : ° ° ° ° : : ° ° : : ° ° : : ° QBA2 ° ° QCT2 ° : : ° QIN3 ° : : ° ° : : °°°°°°°° °°°°°°°° : : °°°°°°°° : : ° ° : : (inel) (long : : (inel) : : °°° : : wait) : : : :longW: : : : ° ° : : °Q° : : : : ° ° : : °S° : :....................................: : ° QIN2 ° : : °P° : : °°°°°°°° : : °1° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx <------ | :..............: | ° QBA1 ° xQBA3x ° ! ° | | ° QIN1 ° xxxxxx ° QIN4 ° | | ° QSP2 ° !----> ° QCT1 ° | 04 | °°°°°°°° °°°°°°°° | |
DANS L'ESPACE "NIVEAU D'ACTIVITE" CA TOURNE (maintenant QIN4 en CPU) (QBA1 est devenu 'ACTIF-PRET'/page chargée par ex) QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : ° ° : : ° ° ° ° : : ° ° : : ° ° : : ° QBA2 ° ° QCT2 ° : : ° QIN3 ° : : ° ° : : °°°°°°°° °°°°°°°° : : °°°°°°°° : : ° ° : : (inel) (long : : (inel) : : °°° : : wait) : : : :longW: : : : ° ° : : °Q° : : : : ° ° : : °S° : :....................................: : ° QIN2 ° : : °P° : : °°°°°°°° : : °1° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx <-----! | :..............: | ° ----- xQIN4x ° QCT1 ° | | ° QIN1 ° !- xxxxxx --> QBA1 ° | | ° QSP2 ° ° QBA3 ° | 05 | °°°°°°°° °°°°°°°° | |
En fin de traitement CPU le système se rend compte que QIN4 a dépassé son TIME SLICE, alors celui ci retourne dans QINTER QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : ° ° : : ° ° ° ° : --> °QIN4 ° : : ° ° : : ° QBA2 ° ° QCT2 ° : / : ° QIN3 ° : : ° ° : : °°°°°°°° °°°°°°°° / : °°°°°°°° : : ° ° : : (inel) (long / : : (inel) : : °°° : : wait) / : : : :longW: : / : : ° ° : : °Q° : : / : : ° ° : : °S° : :......................... / ........: : ° QIN2 ° : : °P° : / : °°°°°°°° : : °1° : ###################################### : (long : : °°° : | ACTIF / ACTIF PRET | : wait) : :.....: | NON PRET xxxx / | :..............: | ° ° x / x ° QCT1 ° | | ° QIN1 ° xxxxxx ° QBA1 ° | | ° QSP2 ° ° QBA3 ° | 06 | °°°°°°°° °°°°°°°° | |
Ce qui libère un niveau d'activité pour QINTER (attribué à QIN3) QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : ° ° : : ° ° ° ° : : ° QIN4 ° : : ° ° : : ° QBA2 ° ° QCT2 ° : /---- °QIN3 ° : : ° ° : : °°°°°°°° °°°°°°°° / : °°°°°°°° : : ° ° : : (inel) (long / : : (inel) : : °°° : : wait) / : : : :longW: : ! : : ° ° : : °Q° : : ! : : ° ° : : °S° : :............................... ! ..: : ° QIN2 ° : : °P° : ! : °°°°°°°° : : °1° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx ! | :..............: | ° ° xQCT1x ° QBA1 ° ! | | ° QIN1 ° xxxxxx ° QBA3 ° ! | | ° QSP2 ° ° <---! | 07 | °°°°°°°° °°°°°°°° | |
Pendant ce temps (cette nano-seconde) QSP1 a fini d'attendre, mais il n'y a pas de niveau d'activité disponible ( = 1 et il y a déja QSP2) QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : °Q° : : ° ° ° ° : : ° ° : : °S° <-- : ° QBA2 ° ° QCT2 ° : : ° QIN4 ° : : °P° : ! : °°°°°°°° °°°°°°°° : : °°°°°°°° : : °1° : ! : (inel) (long : : (inel) : : °°° : ! : wait) : : : :longW: ! : : : ° ° : : ° ° : ! : : : ° ° : : ° ° : ! :................................ ...: : ° QIN2 ° : : ° ° --! : °°°°°°°° : : ° ° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx | :..............: | ° ° xQCT1x ° QBA1 ° | | ° QIN1 ° xxxxxx ° QBA3 ° | | ° QSP2 ° ° QIN3 ° | 08 | °°°°°°°° °°°°°°°° | |
Puis QCT1 attend une réponse écran (Long Wait) ==> retour dans *BASE cela va libérer un niveau pour QBA2 qui attendait. QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : °Q° : : ° ° ----> QCT1 ° : : ° ° : : °S° : : <-- QBA2 ° ! ° QCT2 ° : : ° QIN4 ° : : °P° : : ! °°°°°°°° ! °°°°°°°° : : °°°°°°°° : : °1° : : ! (inel) ! (long : : (inel) : : °°° : : ! ! wait) : : : :longW: : ! ! : : ° ° : : ° ° : : !--->------- ! -------->------ : : ° ° : : ° ° : :............... ! ............. ! ..: : ° QIN2 ° : : ° ° : ! ! : °°°°°°°° : : ° ° : ###################################### : (long : : °°° : | ACTIF ! ACTIF PRET | : wait) : :.....: | NON PRET xx ! x ! | :..............: | ° ° x ! x ° QBA1 ° ! | | ° QIN1 ° xxxxxx ° QBA3 ° ! | | ° QSP2 ° ° QIN3 <--- | 09 | °°°°°°°° °°°°°°°° | |
Voila (QBA1 est passé en traitement CPU) QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : °Q° : : ° ° ° QCT1 ° : : ° ° : : °S° : : ° ° ° QCT2 ° : : ° QIN4 ° : : °P° : : °°°°°°°° °°°°°°°° : : °°°°°°°° : : °1° : : (inel) (long : : (inel) : : °°° : : wait) : : : :longW: : : : ° ° : : ° ° : : : : ° ° : : ° ° : :....................................: : ° QIN2 ° : : ° ° : : °°°°°°°° : : ° ° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx <-----! | :..............: | ° ° xQBA1x ° QBA3 ° | | ° QIN1 ° xxxxxx ° QIN3 ° | | ° QSP2 ° ° QBA2 ° | 10 | °°°°°°°° °°°°°°°° | |
QBA1 devenant en attente Base de Données va perdre son niveau d'activité (non occupé personne n'étant prêt) QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ---> QBA1 ° : : ° ° : : °Q° : : ° ° ! ° QCT1 ° : : ° ° : : °S° : : ° ° ! ° QCT2 ° : : ° QIN4 ° : : °P° : : °°°°°°°° ! °°°°°°°° : : °°°°°°°° : : °1° : : (inel) ! (long : : (inel) : : °°° : : ! wait) : : : :longW: : ! : : ° ° : : ° ° : : ! : : ° ° : : ° ° : :............... ! ..................: : ° QIN2 ° : : ° ° : ! : °°°°°°°° : : ° ° : ###################################### : (long : : °°° : | ACTIF ! ACTIF PRET | : wait) : :.....: | NON PRET xx ! x | :..............: | ° ° x ! x ° QBA3 ° | | ° QIN1 ° xxxxxx ° QIN3 ° | | ° QSP2 ° ° QBA2 ° | 11 | °°°°°°°° °°°°°°°° | |
En bas "ca tourne" QBA3 en traitement CPU QSP2 ayant reçu l'info attendue devient 'ACTIF-PRET' QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° QBA1 ° : : ° ° : : °Q° : : ° ° ° QCT1 ° : : ° ° : : °S° : : ° ° ° QCT2 ° : : ° QIN4 ° : : °P° : : °°°°°°°° °°°°°°°° : : °°°°°°°° : : °1° : : (inel) (long : : (inel) : : °°° : : wait) : : : :longW: : : : ° ° : : ° ° : : : : ° ° : : ° ° : :....................................: : ° QIN2 ° : : ° ° : : °°°°°°°° : : ° ° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx <-----! | :..............: | ° ° xQBA3x ° QIN3 ° | | ° QIN1 ° xxxxxx ° QBA2 ° | | ° --------------> QSP2 ° | 12 | °°°°°°°° °°°°°°°° | |
QBA3 en attente de page devient 'ACTIF-NON PRET' QIN3 passe en traitement CPU, QCT2 devient actif (<ENTREE> écran par ex) QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° QBA1 ° : : ° ° : : °Q° : : ° ° ° QCT1 ° : : ° ° : : °S° : : ° ° ° QCT2 ----- : : ° QIN4 ° : : °P° : : °°°°°°°° °°°°°°°° ! : : °°°°°°°° : : °1° : : (inel) (long ! : : (inel) : : °°° : : wait) ! : : : :longW: : ! : : ° ° : : ° ° : : ! : : ° ° : : ° ° : :............................... ! ..: : ° QIN2 ° : : ° ° : ! : °°°°°°°° : : ° ° : ###################################### : (long : : °°° : | ACTIF ACTIF PRET | : wait) : :.....: | NON PRET xxxxxx <-----! ! | :..............: | ° ° !- QIN3x ° QBA2 ° ! | | ° QBA3 <--- xxxxxx ° QSP2 ° ! | | ° QIN1 ° ° <---- | 13 | °°°°°°°° °°°°°°°° | |
QIN3 a dépassé son TIME SLICE, il perd son niveau d'activité, MAIS il est dans un pool privé et TSEPOOL = '*BASE': il est donc transféré dans *BASE QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : °Q° : : ° ° ° QBA1 ° : : ° ° : : °S° : : ° QIN3 <-! ° QCT1 ° : : ° QIN4 ° : : °P° : : °°°°°°°° ! °°°°°°°° : : °°°°°°°° : : °1° : : (inel) ! (long : : (inel) : : °°° : : ! wait) : : : :longW: : ! : : ° ° : : ° ° : : ! : : ° ° : : ° ° : :.............. ! ...................: : ° QIN2 ° : : ° ° : ! : °°°°°°°° : : ° ° : ###################################### : (long : : °°° : | ACTIF ! ACTIF PRET | : wait) : :.....: | NON PRET x ! xx | :..............: | ° ° x ! x ° QBA2 ° | | ° QBA3 ° xxxxxx ° QSP2 ° | | ° QIN1 ° ° QCT2 ° | 14 | °°°°°°°° °°°°°°°° | |
Il retrouvera son pool d'origine au prochain LONG WAIT (there's a long wait from home). QIN4 devient 'ACTIF-PRET' ETC ETC ... QSPL(1) *BASE(QBATCH,QCTL,...)(3) QINTER(2) ....... ...................................... ................ : : : : : : :inel : : ° ° ° ° : : ° ° : : °Q° : : ° ° ° QBA1 ° : : ° ° : : °S° : : ° QIN3 ° ° QCT1 ° : ----- QIN4 ° : : °P° : : °°°°°°°° °°°°°°°° : ! : °°°°°°°° : : °1° : : (inel) (long : ! : (inel) : : °°° : : wait) : ! : : :longW: : : ! : ° ° : : ° ° : : : ! : ° ° : : ° ° : :....................................: ! : ° QIN2 ° : : ° ° : ! : °°°°°°°° : : ° ° : ###################################### ! : (long : : °°° : | ACTIF ACTIF PRET | ! : wait) : :.....: | NON PRET xxxxxx | ! :..............: | ° ° xQBA2x ° QSP2 ° | ! | ° QBA3 ° xxxxxx ° QCT2 ° | ! | ° QIN1 ° ° <----------! 15 | °°°°°°°° °°°°°°°° | |