SCH TITLE 'DMKSCH (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 00002000
*. 00003000
* MODULE NAME - 00004000
* 00005000
* DMKSCH 00006000
* 00007000
* FUNCTION - 00008000
* 00009000
* TO MAINTAIN QUEUES OF RUNNABLE AND ELIGIBLE USERS, TO ALTER 00010000
* USERS DISPATCHING STATUS, AND TO PERIODICALLY RECALCULATE 00011000
* USERS WORKING SET AND DISPATCHING PRIORITY, AND TO MAINTAIN 00012000
* STATISTICS ON UTILIZATION AND CONTENTION FOR MAJOR RESOURCES 00013000
* 00014000
* DMKSCH ALSO CONTAINS THE ROUTINES THAT MAINTAIN THE SYSTEM TOD 00015000
* CLOCK COMPARATOR REQUEST QUEUE AND THE CODE THAT MONITORS FAV- 00016000
* ORED EXECUTION USERS 00017000
* 00018000
* ATTRIBUTES - 00019000
* 00020000
* SERIALLY REUSABLE, RESIDENT, CALLED VIA BALR 00021000
* 00022000
* ENTRY POINTS - 00023000
* 00024000
* DMKSCHDL - ALTER A USER'S DISPATCHING STATUS 00025000
* DMKSCHST - ESTABLISH A CLOCK COMPARATOR INTERRUPT REQUEST 00026000
* DMKSCHRT - RESET A CLOCK COMPARATOR INTERRUPT REQUEST 00027000
* DMKSCHAE - INTERRUPT ENTRY POINT WHEN FAVORED EXECUTION 00028000
* MEASUREMENT INTERVAL EXPIRES 00029000
* DMKSCH80 - INTERRUPT ENTRY POINT FOR "REAL" LOCATION 80 TIMER 00030000
* DMKSCHCP - INTERRUPT ENTRY POINT FOR "REAL" CPU TIMER 00031000
* DMKSCHMD - INTERRUPT ENTRY POINT FOR MIDNITE DATE CHANGE 00032000
* DMKSCHTI - TIMER INTERRRUPT TO UPDATE CPU UTILIZATION 00033000
* 00034000
* ENTRY POINTS - NON-EXECUTABLE 00035000
* 00036000
* DMKSCHN1 - CURRENT NUMBER OF USERS IN Q1 (INTERACTIVE) 00037000
* DMKSCHN2 - CURRENT NUMBER OF USERS IN Q2 (NON-INTERACTIVE) 00038000
* DMKSCHQ1 - Q1 TIME SLICE 00039000
* DMKSCHQ2 - Q2 TIME SLICE 00040000
* DMKSCHRL - ANCHOR FOR LIST OF DISPATCHABLE USERS 00041000
* DMKSCHTQ - ANCHOR FOR LIST OF OUTSTANDING CLOCK COMPARATOR 00042000
* INTERRUPT REQUESTS 00043000
* DMKSCHPG - DESIRABLE PAGING OVERHEAD PERCENTAGE (<=99) 00044000
* DMKSCHAP - ASSURED EXECUTION PERCENTAGE FOR CURRENT FAVORED 00045000
* EXECUTION USER 00046000
* DMKSCHAU - POINTER TO VMBLOK OF FAVORED USER 00047000
* DMKSCHCU - SMOOTHED CPU UTILIZATION FIELD 00048000
* DMKSCHCA - SMOOTHED APU UTILIZATION FIELD 00048100
* DMKSCHS1 - SMOOTHED Q1 VALUE 00049000
* DMKSCHS2 - SMOOTHED Q2 VALUE 00050000
* DMKSCHCO - SMOOTHED CORE UTILIZATION FIELD 00051000
* DMKSCHSC - SCHEDULER CONTENTION RATIO FIELD 00052000
* DMKSCHLI - WAIT TIME SAMPLING INTERVAL 00053000
* 00054000
* ENTRY CONDITIONS - 00055000
* 00056000
* FOR DMKSCHDL - 00057000
* GPR11 = ADDRESS OF VMBLOK FOR CURRENT USER 00058000
* GPR15 = ADDRESS OF DMKSCHDL 00059000
* 00060000
* FOR DMKSCHST - 00061000
* GPR1 = ADDRESS OF TRQBLOK FOR REQUESTED TIMER INTERRUPT 00062000
* GPR11 = ADDRESS OF CURRENT USER 00063000
* GPR15 = ADDRESS OF DMKSCHST 00064000
* 00065000
* FOR DMKSCHRT - SAME AS DMKSCHST 00066000
* 00067000
* FOR OTHER ENTRY POINTS - 00068000
* GPR10 = ADDRESS OF TRQBLOK FOR INTERRUPT 00069000
* GPR11 = ADDRESS OF VMBLOK OF INTERRUPTS OWNER 00070000
* GPR15 = ADDRESS OF INTERRUPT ENTRY POINT 00071000
* 00072000
* EXIT CONDITIONS - 00073000
* 00074000
* NONE 00075000
* 00076000
* CALLS TO OTHER ROUTINES - 00077000
* 00078000
* DMKMIDNT - CALLED TO ALTER DATE AT MIDNIGHT 00079000
* DMKFRET - TO RELEASE STORAGE 00080000
* DMKQCNWT - TO WRITE OVERLOAD DIAGNOSTICS TO OPERATOR. 00081000
* DMKPTRRS COUNT REF. PAGES AND ADD TO FLUSH LIST 00081100
* DMKLOKSP - TO OBTAIN SPIN LOCKS 00081200
* 00082000
* EXTERNAL REFERENCES - 00083000
* 00084000
* DMKPTRFL - ADDRESS OF FLUSHED PAGE LIST 00085000
* DMKPTRU1 - ADDRESS OF USER PAGE LIST 00086000
* DMKDSPNP - NUMBER OF DYNAMICALLY ASSIGNABLE PAGE FRAMES 00087000
* DMKPTRRL - HIGH WATER LIMIT FOR RESERVED PAGE USER 00088000
* DMKLOKTR - TIMER REQUEST QUEUE LOCK 00088100
* DMKLOKDS - DISPATCHER QUEUES LOCK 00088200
* DMKLOKRL - RUNLIST LOCK 00088300
* 00089000
* TABLES/WORKAREAS - 00090000
* 00091000
* TRQBLOK,TEMPSAVE 00092000
* 00093000
* REGISTER USAGE - 00094000
* 00095000
* GPR0-9 - TIMER ARITHMETIC AND PRIORITY CALCULATIONS 00096000
* GPR10 - TRQBLOK BASE 00097000
* GPR11 - VMBLOK BASE 00098000
* GPR12 - DMKSCH BASE 00099000
* GPR13 - DMKSCH BASE 00099100
* GPR14 - INTERNAL LINKAGE 00100000
* GPR15 - ADDRESSABILITY FOR QUEUE CONTROL DSECT 00101000
* 00102000
* NOTES - 00103000
* 00104000
* NONE 00105000
* 00106000
* OPERATION - 00107000
* 00108000
* A. MAIN STATUS CHANGE MAINTENANCE 00109000
* 1. STAMP/UNSTAMP USER'S "REAL" TIMER(S) 00110000
* 2. IF USER IS RUNNABLE, SKIP TO STEP 6. 00111000
* 3. IF USER WAS RUNNABLE BEFORE, MARK NOT RUNNABLE 00112100
* IF IN ELIGIBLE LIST DROP FROM LIST. 00112200
* 4. IF USER IS IN AN IDLE WAIT STATE, DROP FROM Q 00113000
* 5. GO TO SECTION B TO LOOK FOR ELIGIBLE USERS TO ADD TO Q 00114000
* 6. IF USER IS RUNNABLE, MARK IT RUNNABLE. 00115100
* 7. IF USER WAS RUNNABLE BUT NOT IN Q BEFORE, GO TO SECTION 00116000
* B TO LOOK FOR USERS TO ADD TO Q 00117000
* 8. IF USER WAS NOT RUNNABLE BEFORE, ADD TO APPROPRIATE RUN- 00118000
* NABLE LIST 00119000
* 9. IF USER'S TIME SLICE HAS BEEN EXCEEDED, DROP FROM Q 00120000
* 10. IF USER HAS GONE COMPUTE BOUND, DROP TO LOW PRIORITY 00121000
* 11. GO TO SECTION B 00122000
*. 00123000
EJECT 00124000
COPY OPTIONS 00125000
COPY LOCAL OPTIONS 00126000
EJECT 00127000
DMKSCH CSECT 00128000
SPACE 00129000
EXTRN DMKPTRRS 00130000
EXTRN DMKPTRU1 00131000
EXTRN DMKDSPNP 00132000
EXTRN DMKCVTBH 00133000
EXTRN DMKMIDNT 00134000
EXTRN DMKPTRRL 00135000
EXTRN DMKQCNWT @V2B2638 00136000
EXTRN DMKCVTAB @VA04301 00136100
EXTRN DMKPTRUC @VA07810 00136200
SPACE 00137000
ENTRY DMKSCHTI,DMKSCHCU,DMKSCHCO,DMKSCHSC @V2B2638 00138000
ENTRY DMKSCHS1,DMKSCHS2,DMKSCHLI @V2B2638 00139000
ENTRY DMKSCHDL 00140000
ENTRY DMKSCHST 00141000
ENTRY DMKSCHRT 00142000
ENTRY DMKSCHN1 00143000
ENTRY DMKSCHN2 00144000
ENTRY DMKSCHAP 00145000
ENTRY DMKSCHTQ 00146000
ENTRY DMKSCHRL 00147000
ENTRY DMKSCHPG 00148000
ENTRY DMKSCHQ1 00149000
ENTRY DMKSCHQ2 00150000
ENTRY DMKSCHAU 00151000
ENTRY DMKSCHAE @VA04341 00151100
ENTRY DMKSCHMD 00152000
ENTRY DMKSCHW1,DMKSCHW2,DMKSCHAL 00153000
ENTRY DMKSCHEL @V305535 00154000
ENTRY DMKSCHBK @VA05288 00154100
ENTRY DMKSCHCA @V407577 00154200
SPACE 00155000
AIF (&RTIMR EQ 0).RTM3 00156000
ENTRY DMKSCH80 00157000
ENTRY DMKSCHCP 00158000
.RTM3 ANOP 00159000
SPACE 00160000
SPACE 00161000
USING PSA,R0 00162000
USING VMBLOK,R11 00163000
SPACE 2 00164000
DMKSCHDL EQU * 00165000
STM R0,R15,BALRSAVE SAVE CALLER'S REGISTERS 00166000
LR R12,R15 ESTABLISH 00167000
LA R13,2048(,R12) @V407577 00168100
LA R13,2048(,R13) @V407577 00168200
USING DMKSCHDL,R12,R13 @V407577 00168300
L R0,DMKSCHCT GET TOTAL CALL COUNT 00169000
AL R0,F1 BUMP 00170000
ST R0,DMKSCHCT AND SAVE 00171000
AIF (NOT &TRACE(9)).TR1 00174000
TM TRACFLG1,TRAC08 TRACING ACTIVE? 00175000
BZ NOTRAC1 BRANCH IF NOT 00176000
TRACE CODE=TRCSCH,R15,R1,R2 @V407577 00177100
STCM R11,B'0111',1(R15) SAVE USERS VMBLOK @V407577 00177200
L R1,VMRSTAT SAVE USER STATUS BYTES @VA01166 00180000
ST R1,4(,R15) IN TRACE TABLE @VA01166 00181000
LH R1,VMIOINT SAVE I/O INT PENDING FLAGS @VM03123 00182000
ICM R1,B'0100',VMTLEVEL GET USER TIMER LEVEL @VM03123 00183000
ICM R1,B'1000',VMQLEVEL GET USER QUEUE LEVEL @VM03123 00184000
ST R1,8(,R15) IN THE TRACE TABLE @VA01166 00185000
LR R1,R14 GET RETURN ADDRESS @VM03123 00186000
ICM R1,B'1000',VMPEND AND INT. PENDING SUMMARY @VM03123 00187000
ST R1,12(R15) IN THE TRACE TABLE @VM08543 00188000
NOTRAC1 EQU * 00194000
.TR1 ANOP 00195000
AIF (&RTIMR EQ 0).RTM1 00196000
TM VMTLEVEL,VMRON REAL TIMER RUNNING ?? 00197000
BNZ CKCPWAIT @VA01688 00198000
TM VMPSTAT,VMV370R IS THIS EC MODE @VA01688 00199000
BZ CKRSTAT NO, NO CPU TIMER VALUE @VA01688 00200000
CKCPWAIT EQU * @VA01688 00201000
TM VMRSTAT,VMCPWAIT IN PSEUDO- WAIT ?? 00202000
BNZ UNSTAMP YES -- TIMER MUST NOT RUN 00203000
TM VMRSTAT,VMPSWAIT IN USER WAIT ?? 00204000
BZ UNSTAMP NO -- TIMER MUST NOT RUN 00205000
TM VMTLEVEL,VMSTMPI+VMSTMPT TIMER REQUESTS QUEUED ? 00206000
BO CKRSTAT YES, BOTH TIMERS STAMPED @VA01688 00207000
BAL R3,RSTMPON NO -- GO START IT 00208000
B CKRSTAT -- 00209000
SPACE 00210000
UNSTAMP TM VMTLEVEL,VMSTMPI+VMSTMPT TIMER REQUESTS QUEUED? 00211000
BZ CKRSTAT NO -- CONTINUE 00212000
BAL R3,RSTMPOFF YES -- GO STOP IT 00213000
SPACE 00214000
CKRSTAT EQU * 00215000
.RTM1 ANOP 00216000
TM VMRSTAT,VMNORUN+VMIDLE IS THIS MACHINE RUNNABLE @VA06404 00217000
BZ CKRUN YES -- 00218000
TM VMDSTAT,VMRUN+VMINQ WAS HE RUNNABLE OR IN Q BEFORE?? 00218100
BZ SCHEXIT NO - NO STATUS CHG @V408246 00218200
BO RESETRUN INDICATE NOT RUNNABLE @V408246 00218300
SPACE 1 00231000
SPACE 00232000
CKIDLE TM VMDSTAT,VMINQ IN A QUEUE @VA04341 00233400
BZ DROPL DROP FROM ELIGBLE LIST @V408246 00233800
TM VMRSTAT,VMLONGWT IN A LONG WAIT @VA04341 00234200
BNZ DROPHIM YES - DROP USER FROM QUEUE @VA04341 00234600
TM VMDSTAT,VMQSEND EXPIRED TIME SLICE @VA04341 00235000
BZ SCHEXIT NO - RETURN TO CALLER @VA04341 00235400
DROPHIM BAL R14,DROPLIST DROP FROM LIST @V408246 00235800
BAL R14,DROPQ DROP FROM QUEUE @V408246 00235900
B CKWAITNG SEE IF ANY USERS WAITING @VA04341 00236200
DROPL TM VMDSTAT,VMELIG IN ELIGIBLE LIST ?? @V408246 00236300
BZ SCHEXIT EXIT IF NO @V408246 00236400
BAL R14,DROPLIST DROP FROM LIST IF YES @V408246 00236500
B SCHEXIT RETURN TO CALLER @V408246 00236600
RESETRUN NI VMDSTAT,X'FF'-VMRUN NOT DISPATCHABLE @V408246 00236700
B CKIDLE CHECK FOR IDLE @V408246 00236800
SPACE 00244000
ENTRY DMKSCHCT 00245000
DMKSCHCT DC F'0' COUNT TOTAL CALLS TO DMKSCH 00246000
EJECT 00247000
CKRUN EQU * HERE TO CHECK OUT RUNNABLE USER -- 00248000
TM VMQSTAT,VMPRIDSP SHOULD USER BE SCHEDULED FOR Q1 ?? 00249000
BZ CKDSTAT NO -- 00250000
NI VMQSTAT,X'FF'-VMPRIDSP REMOVE PRIORITY FLAG @VA01354 00251000
SLR R1,R1 CLEAR @VA01354 00252000
STH R1,VMQPRIOR USER DISPATCHING PRIORITY @VA01354 00253000
TM VMDSTAT,VMINQ CURRENTLY IN A QUEUE ? @VA04341 00256000
BO CKDSTAT IF YES - RE-ADD TO RUNLIST @VA04341 00257000
TM VMQLEVEL,VMQ1 ALREADY SET FOR Q1 ?? @VA07752 00257100
BO AWAITING YES, EASY AS PIE @VA07752 00257200
TM VMDSTAT,VMELIG NOT Q1, IN Q2 ELIGIBLE ?? @VA07752 00257300
BZ CKRUN1 NO, FLAG FOR Q1 ENTRY @VA07752 00257400
BAL R14,DROPLIST DROP Q2 ELIG. THEN ADD TO Q1 @VA07752 00257500
CKRUN1 EQU * NOT IN Q2 ELIGIBLE, ADD TO Q1 @VA07752 00257600
OI VMQLEVEL,VMQ1 FLAG FOR QUEUE 1 ENTRY @VA04341 00258000
B AWAITING ADD USER TO ELIGIBLE LIST @VA04341 00259000
SPACE 00266000
CKDSTAT TM VMDSTAT,VMRUN+VMINQ WAS USER RUNNABLE OR IN A Q BEFORE 00267000
BO CKTIME YES -- GO TEST FOR TIME SLICE END 00268000
TM VMDSTAT,VMINQ IS USER IN QUEUE @V408246 00269200
BZ AWAITING ADD TO ELIG LIST IF NOT @V408246 00269300
OI VMDSTAT,VMRUN MARK DISPATCHABLE @V408246 00269400
NI VMQLEVEL,255-VMCOMP RESET COMPUTE BOUND @VA12052 00269500
B CKTIME NOW TEST TIME SLICE END @VA04341 00269600
SPACE 1 00269800
AWAITING TM VMQLEVEL,VMAEX+VMAEXP IS THIS A SPECIAL USER @VA04341 00270000
BNZ QAEX YES - ADD TO QUEUE IMMEDIATELY @VA04341 00270200
BAL R14,AWAITLST RUNNABLE AND NOT IN A QUEUE - @VA04341 00270400
* ADD TO ELIGIBLE LIST 00270600
B CKWAITNG LOOK FOR USER TO ADD TO QUEUE @VA04341 00270800
SPACE 00273000
CKTIME EQU * RUNNABLE AND IN A Q - TEST FOR TIME SLICE END 00274000
TM VMDSTAT,VMQSEND TIME SLICE END @VA04341 00274100
BO TMRDROP YES - DROP FROM QUEUE @VA04341 00274200
TM VMDSTAT,VMTSEND TIME SLICE END ?? 00275000
BZ SCHEXIT NO - RETURN TO CALLER @VA04341 00276100
NI VMDSTAT,X'FF'-VMTSEND UNFLAG T.S. END 00277000
TM VMQLEVEL,VMCOMP ALREADY MARKED COMPUTE BOUND ?? 00278000
BZ *+8 NO .. GO FLAG 1ST TIME SLICE END 00279000
OI VMQLEVEL,VMLOPRI FLAG 2ND AND SUBSEQUENT SLICE ENDS 00280000
OI VMQLEVEL,VMCOMP .... 00281000
BAL R14,DROPLIST REMOVE FROM CURRENT LIST POSITION 00282000
CHARGE SYNC UPDATE VMTTIME @V4M0203 00282100
BAL R14,CALCPRI RE-CALCULATE DISPATCHING PRIORITY @V407577 00283100
BAL R14,ARUNLST RE-ADD TO RUNLIST @VA04341 00284500
B SCHEXIT AND RETURN TO CALLER @VA04341 00285000
SPACE 00288000
EJECT 00290000
TMRDROP BAL R14,DROPQ DROP USER FROM ACTIVE QUEUE @VA04341 00291000
BAL R14,DROPLIST ALSO FROM DISPATCHABLE LIST @VA04341 00292000
NI VMQLEVEL,X'FF'-VMHIPRI PERCENTAGE ACHIEVED @VA04341 00293000
TM VMQLEVEL,VMAEX ASSURED EXECUTION USER @VA04341 00294000
BZ AWAITING NO - ADD TO ELIGIBLE LIST @VA04341 00295000
B NODROP ADD USER BACK IN EXECUTABLE LIST @V4M0215 00296100
QAEX TM VMQLEVEL,VMAEXP FAVORED PERCENTAGE USER @VA04341 00297000
BZ QAEXLOW NO @VA04341 00298000
OI VMQLEVEL,VMHIPRI YES - HE GETS TOP PRIORITY @VA04341 00299000
QAEXLOW DS 0H @V4M0215 00300100
TM VMDSTAT,VMELIG IS USER IN ELIGIBLE LIST? @V4M0215 00300200
BZ NODROP NO, NO NEED TO CALL DROPLIST @V4M0215 00300300
BAL R14,DROPLIST DROP FROM ELIGIBLE LIST @V4M0215 00300400
NODROP DS 0H @V4M0215 00300500
BAL R14,ADDQ ADD TO ACTIVE QUEUE @VA04341 00301000
BAL R14,CALCBIAS CALC ELIGIBLE PRIORITY @V407577 00302100
ST R0,VMEPRIOR STORE FOR 'VMRPRIOR' CALC @VA04341 00303000
BAL R14,ARUNLST AND THE RUNNABLE LIST @VA04341 00304000
* QUEUE ADD 00306000
B CKWAITNG LOOK FOR MORE USERS TO ADD TO @VA04341 00307000
* QUEUE 00308000
EJECT 00340000
*. 00341000
* OPERATION - 00342000
* 00343000
* B. ADD USERS TO DISPATCHABLE LIST 00344000
* 00345000
* 1. ADD ANY USERS WAITING FOR Q1 TO RUNNABLE LIST, FIRST SUB- 00346000
* TRACTING THEIR PROJECTED WORKING SETS FROM THE TOTAL NUMBER 00347000
* OF PAGE FRAMES AVAILABLE 00348000
* 2. LOCATE THE FIRST USER WAITING FOR Q2 AND SUBTRACT HIS PROJ- 00349000
* ECTED WORKING SET FROM THE NUMBER OF PAGES AVAILABLE; IF HE 00350000
* FITS ADD HIM TO THE DISPATCHABLE LIST AND CONTINUE WITH THE 00351000
* NEXT WAITING USER 00352000
* 3. IF THE USER'S WORKING SET WILL EXCEED THE NUMBER OF AVAIL- 00353000
* ABLE PAGE FRAMES, FIRST INSURE THAT HIS PROJECTED WORKING 00354000
* SET DOES NOT EXCEED ALL OF DYNAMIC STORAGE; THEN, TEST TO 00355000
* SEE THAT THERE IS AT LEAST ONE Q2 (NON-INTERACTIVE) USER. 00356000
* IF THERE ARE NONE, ADD THIS USER TO Q2. 00357000
* 4. AFTER Q2 HAS BEEN FILLED OR ALL RUNNABLE USERS HAVE BEEN 00358000
* PROCESSED, TEST TO SEE IF THE CURRENT USER HAS BEEN DROPPED 00359000
* FROM Q; IF HE HAS, PLACE THE CORTABLE ENTRIES FOR HIS 00360000
* ACTIVE PAGE FRAMES ON THE FLUSHED PAGE LIST 00361000
* INSURE THAT USER'S PROJECTED WORKING SET IS LESS THAN 00361100
* THE NUMBER OF REFERENCED PAGES. ADJUST IF REQUIRED. 00361200
* 00362000
*. 00363000
SPACE 2 00364000
CKWAITNG EQU * LOOK FOR RUNNABLE USERS TO ADD TO ACTIVE QUEUES 00365000
SPACE 00366000
CHARGE STOP NO CHARGE FOR QUEUE MANIPULATION @V407577 00367100
L R5,WAITQ1 GET ELIGLIBE LIST 00368000
LA R6,WAITQ1 GET ADDRESS OF LIST ANCHOR 00369000
LA R15,QUEUE1 AND OF QUEUE CONTROL 00370000
L R7,=A(DMKDSPNP) GET ADDRESS OF PAGE COUNTER 00371000
L R7,0(,R7) GET NUMBER OF PAGEABLE PAGES 00372000
LTR R7,R7 CHECK FOR ZERO PAGES @VA03678 00373000
BNZ SETEXIT OK, CONTINUE @VA03678 00374000
LA R7,1 INSURE COUNT OF ONE @VA03678 00375000
SETEXIT LA R8,GETQ2 SET EXIT ADDR FROM SEARCH LOOP @VA03678 00376000
LA R9,CKQ SET RESTART ADDRESS FOR LOOP 00377000
SPACE 00378000
CKQ LR R11,R5 GET ADDRESS OF NEXT USER IN LIST 00379000
CR R11,R6 END OF CHAIN ?? 00380000
BCR 8,R8 YES -- EXIT 00381000
STANDWSS LH R0,VMWSPROJ GET PROJECTED WORKSET SIZE @VA01148 00389000
L R1,PAGUSAGE GET SUM OF ACTIVE WORKSETS 00390000
ALR R1,R0 ADD IN THIS USERS CONTRIBUTION 00391000
CR R1,R7 AND COMPARE SUM TO AVAILABLE PAGES 00392000
BH CKMIN IF SUM EXCEEDS AVAILABLE, EXIT 00393000
ADDTOQ L R5,VMQFPNT OTHERWISE, ADD TO QUEUE 00394000
BAL R14,DROPLIST REMOVE FROM ELIGIBLE LIST 00395000
BAL R14,ADDQ ADD TO QUEUE 1 00396000
BAL R14,ARUNLST AND TO RUNNABLE LIST 00397000
BR R9 RESTART LOOP, OR EXIT 00398000
SPACE 00399000
GETQ2 EQU * CHECK OUT THOSE WAITING FOR Q2 00400000
L R5,WAITQ2 POINT TO 1ST WAITING BLOK 00401000
LA R6,WAITQ2 POINT TO LIST 00402000
LA R8,SETIME SET EXIT ADDRESS FROM SEARCH LOOP 00404000
B CKQ AND LOOK FOR Q2 USERS 00405000
SPACE 00406000
CKMIN EQU * 00407000
LA R9,SETIME SET RESTART ADDRESS TO EXIT 00408000
CR R0,R7 WILL USER EVER FIT ?? 00409000
BL CKNQ YES -- TEST NUMBER IN QUEUE 00410000
LR R0,R7 IF NOT, 00411000
BCTR R0,0 MAKE SURE THAT HE 00412000
STH R0,VMWSPROJ WILL 00413000
SPACE 00414000
CKNQ L R2,DMKSCHN1 GET NUMBER NOW IN QUEUE 1 00415000
TM VMQLEVEL,VMQ1 ADDING TO QUEUE 1 @VA04341 00416500
BO *+8 YES - MUST HAVE AT LEAST 1 @VA04341 00417000
A R2,DMKSCHN2 IF ADDING TO QUEUE2, COUNT ALL USERS 00418000
LTR R2,R2 ARE THERE ANY ?? 00419000
BZ ADDTOQ PUT AT LEAST ONE USER IN Q 00420000
LR R1,R0 SAVE PROJECTED WORKING SET @VA01353 00421000
SRL R1,2 DIVIDE IT BY /4. @VA01353 00422000
SLR R0,R1 GIVES US 75% OF PROJECTED @VA01353 00423000
AL R0,PAGUSAGE ADD IN PRESENT PAGE USAGE. @VA01353 00424000
CR R0,R7 WILL HE FIT NOW ? @VA01353 00425000
BNH ADDTOQ YES - ADD USER TO A QUEUE. @VA01353 00426000
SPACE 00427000
SETIME L R11,BALR11 RESTORE ADDRESS OF ORIGINAL USER 00428000
CHARGE START AND HIS CPU TIMER @V407577 00429100
SPACE 2 00430000
CKFLUSH EQU * HERE TO TEST FOR PAGES TO BE FLUSHED 00431000
TM DMKSCHAL,VMINQ DROPPED FROM Q? @V408246 00432100
BZ SCHEXIT NO - EXIT @V408246 00432200
NI DMKSCHAL,255-VMINQ RESET Q-DROP INDIC @V408246 00432300
TM VMDSTAT,VMINQ VM NOW IN A QUEUE @V4M0207 00432305
BO SCHEXIT YES- BYPASS PAGE RESET CALL @V4M0207 00432310
CL R11,AVMREAL V=R VIRTUAL MACHINE? @VA07342 00432320
BE SCHEXIT YES, BYPASS PAGE RESET @V4M0167 00432340
L R1,=A(DMKPTRUC) FLUSHED PAGE COUNT @VA07810 00432350
L R2,DMKSCHN1 USERS IN Q1 @VA07810 00432355
A R2,DMKSCHN2 PLUS Q2 @VA07810 00432360
C R2,0(R1) BELOW THRESHOLD @VA07810 00432365
BNH SCHEXIT NO- BYPASS PAGE RESET @VA07810 00432370
CALL DMKPTRRS @V408246 00432400
* TEMPR1 SET UP BY DMKPTRRS @V408246 00432600
LH R1,VMWSPROJ GET PROJ WORKING SET SIZE @V408246 00432700
S R1,TEMPR1 SUBTRACT NUMBER OF REF PAGES @V408246 00432800
BNP SCHEXIT OK IF VMWSPROJ <= REF PAGES @V408246 00432900
L R2,TEMPR1 @V408246 00433000
STH R2,VMWSPROJ SET PROJ WS TO NBR OF REF PAGES @V408246 00433100
TM VMDSTAT,VMINQ MADE IT BACK TO QUEUE? @V408246 00433200
BZ CKWAITNG NO- TRY AGAIN @V408246 00433300
L R2,PAGUSAGE ADJUST SUM OF USERS WORKING SETS @V408246 00433400
SR R2,R1 BY AMOUNT OF OVER ESTIMATE OF WS @V408246 00433500
LTR R2,R2 WILL PAGE USEAGE GO NEGATIVE @VA08454 00433520
BP CKFLUSH1 NO, LET IT GO @VA08454 00433540
SR R2,R2 YES, ZERO IS MINIMUM COUNT @VA08454 00433560
CKFLUSH1 EQU * @VA08454 00433580
ST R2,PAGUSAGE @V408246 00433600
B CKWAITNG TRY TO ADD USERS TO QUEUE @V408246 00433700
SPACE 2 00447000
SCHEXIT EQU * EXIT FROM SHCEDULER 00448000
LM R0,R15,BALRSAVE RESTORE CALLER'S REGISTERS 00449000
BR R14 AND RETURN 00450000
EJECT 00451000
ADDQ EQU * HERE WHEN USER IS BEING PUT IN ACTIVE QUEUE 00452000
* 00453000
* THE VMBLOK FOR THIS USER IS TIME STAMPED AS FOLLOWS. 00455000
* 00456000
* 00459000
* A. VMTODINQ = TOD CLOCK 00460000
* B. VMTMOUTQ = AMOUNT OF TIME ALLOWED TO STAY IN QUEUE 00461000
* C. VMTMINQ = CURRENT VALUE OF (VMTTIME) 00462000
* SUPERVISOR OVERHEAD TIME FOR THIS USER. IT 00463000
* IS REPRESENTED BY THE DIFFERENCED FROM 00464000
* X'7FFFFFFFFFFFF000'. 00465000
SPACE 00466000
USING VMQBLOK,R15 00467000
TM VMDSTAT,VMINQ CURRENTLY IN A QUEUE ? @VA04341 00467100
BOR R14 YES - RETURN TO CALLER @VA04341 00467200
LA R15,QUEUE2 ASSUME ADDING TO QUEUE 2 @VA04341 00467300
TM VMQLEVEL,VMQ1 WERE WE CORRECT @VA04341 00467400
BZ *+8 IF YES - QUEUE BLOCK POINTER @VA04341 00467500
* ALL SET 00467600
LA R15,QUEUE1 OTHERWISE SET FOR QUE 1 @VA04341 00467700
STM R14,R15,TEMPR14 SAVE REGISTERS FOR LATER CALLS @VA07582 00467800
OI VMDSTAT,VMINQ FLAG AS IN QUEUE 00468000
STCK VMTODINQ TOD CLOCK AT QUEUE ENTRY 00469000
BC 12,CLOCKOK IS CLOCK FUNCTIONING? @VA04301 00469250
DOWNWEGO GOTO DMKCVTAB CLOCK DAMAGED...ABEND WITH CVT001@VA04301 00469500
CLOCKOK EQU * @VA04301 00469750
LM R0,R2,VMQTIME GET TIME SLICE AND NUMBER IN QUEUE 00470000
TM VMPSTAT,VMV370R EC MODE MACHINE ? 00471000
BZ NOQUETMR NO - CAN'T HAVE CPU TIMER 00472000
L R10,VMECEXT GET EXTENSION VMBOLK 00473000
L R3,EXTCPTRQ-ECBLOK(,R10) ADDRESS OF TIMER REQ. BLOCK 00474000
STM R0,R1,TRQBQUE-TRQBLOK(R3) SAVE QUEUE DROP INTERVAL 00475000
CLC EXTCPTMR-ECBLOK(8,R10),VMQTIME VIRT TIMER < QTIME ? 00476000
BH NOQUETMR NO - 00477000
LM R0,R1,EXTCPTMR-ECBLOK(R10) GET VIRTUAL TIME 00478000
OI VMTLEVEL,VMCPUTMR VIRT. CPU TIMER RUNNING AS REAL 00479000
SPACE 00480000
NOQUETMR EQU * HERE IF VIRTUAL CPU TIMER > QUEUE DROP INTERVAL 00481000
TM CPSTATUS,CPRUN WAS SYSTEM IN PROBLEM STATE? @VA07582 00481100
BZ NOPROBT NO, CONTINUE NORMALLY @VA07582 00481200
C R11,RUNUSER IS THIS USER RUNUSER? @VA07582 00481300
BNE NOPROBT NO, CONTINUE NORMALLY @VA07582 00481400
BAL R14,INCPROBT GO INCREMENT PROBTIME NOW SINCE @VA07582 00481500
* VMTMOUTQ IS TO BE CHANGED 00481600
L R14,TEMPR14 RELOAD RETURN REGISTER @VA07582 00481700
STM R0,R1,PROBSTRT SET PROBSTRT FOR DSP CALCULATION @VA07582 00481800
NOPROBT DS 0H @VA07582 00481900
ST R0,VMTMOUTQ STORE TIME ALLOWED TO STAY IN QUEUE 00482000
ST R1,VMTMOUTQ+4 ... 00483000
LA R10,1 CONSTANT FOR ARITHMETIC 00484000
ALR R2,R10 INCREMENT NUM. USER'S IN QUEUE. 00485000
ST R2,VMQNUM SAVE IT 00486000
CHARGE SYNC UPDATE VMTTIME @V4M0203 00486200
LM R14,R15,TEMPR14 RESTORE CALLER'S REGISTERS @V4M0203 00486300
SPACE 00487000
SPACE 00488000
LM R0,R1,VMTTIME GET TOTAL SUPERVISOR TIME TO DATE 00489000
SL R1,VMQTIME+4 SUBTRACT OUT SUPERVISOR TIME SLICE .. 00490000
BC 8+2+1,*+6 ... 00491000
SLR R0,R10 .. 00492000
SL R0,VMQTIME . 00493000
STM R0,R1,VMTMINQ AND SAVE AS Q-DROP TIME 00494000
SPACE 00495000
TM VMQLEVEL,VMAEXP ASSURED PERCENTAGE USER ? 00496000
BZ LOADUP NO -- GO SET PAGE LOAD 00497000
SPACE 00498000
LM R2,R3,VMTTIME GET TOTAL SUPERVISOR OVERHEAD @VA04341 00499300
LA R4,AEXPQUE2 ASSUME QUE 2 TIME SLICE @VA04341 00499600
TM VMQLEVEL,VMQ1 IS USER IN QUE 1 @VA04341 00499900
BZ *+8 NO - THEN R4 IS POINTING @VA04341 00500200
* CORRECTLY 00500500
LA R4,AEXPQUE1 POINT TO QUE 1 TIME SLICE @VA04341 00500800
TM VMQLEVEL,VMHIPRI IS THIS FIRST HALF OF PERCENT @VA04341 00501100
BZ QAEXLAST NO - SET UP LAST HALF @VA04341 00501400
LM R0,R1,0(R4) GET FAVORED PERCENTAGE IN MICRO @VA04341 00501700
* SEC. 00502000
SLR R3,R1 REMOVE PERCENTAGE FROM VMTTIME @VA04341 00502300
BC 8+2+1,*+6 ADJUST FOR CARRY @VA04341 00502600
SLR R2,R10 SUBTRACT FOR CARRY CONDITION @VA04341 00502900
SLR R2,R0 NOW CLEAN UP HIGH WORD @VA04341 00503200
STM R2,R3,VMTMINQ LIMIT SUPERVISOR OVERHEAD TIME @VA04341 00503500
STM R0,R1,SCHBAEXP SAVE TIME SLICE FOR 'CALCPRI' @VA04815 00503600
TM VMPSTAT,VMV370R EC MODE MACHINE @VA04341 00503800
BZ NOAEXTMR NO - CAN'T HAVE CPU TIMER @VA04341 00504100
L R10,VMECEXT GET VMBLOK EXTENSION @VA04341 00504400
L R3,EXTCPTRQ-ECBLOK(,R10) ADDR. OF TIMER @VA04341 00504700
* REQUEST BLOK 00505000
STM R0,R1,TRQBQUE-TRQBLOK(R3) SAVE QUEUE DROP TIME @VA04341 00505300
* SLICE 00505600
CLC EXTCPTMR-ECBLOK(8,R10),SCHBAEXP VIRT. < QUEUE @VA04341 00506200
* SLICE 00506500
BH NOAEXTMR NO @VA04341 00506800
LM R0,R1,EXTCPTMR-ECBLOK(R10) GET VIRT. CPU TIMER @VA04341 00507100
OI VMTLEVEL,VMCPUTMR VIRT. TIMER IN REAL TIMER @VA04341 00507400
NOAEXTMR STM R0,R1,VMTMOUTQ STORE ASSURED TIME SLICE @VA04341 00507700
NI VMQLEVEL,VMHIPRI+VMQ1+VMAEX+VMAEXP LEAVE THESE @VA04341 00508000
TM CPSTATUS,CPRUN WAS SYSTEM IN PROBLEM STATE? @VA07582 00508050
BZ LOADUP NO, CONTINUE NORMALLY @VA07582 00508100
C R11,RUNUSER IS THIS USER RUNUSER? @VA07582 00508150
BNE LOADUP NO, CONTINUE NORMALLY @VA07582 00508200
STM R0,R1,PROBSTRT SET PROBSTRT FOR DSP CALCULATION @VA07582 00508250
B LOADUP SET PAGE USAGE @VA04341 00508300
QAEXLAST LM R2,R3,8(R4) PERCENT OF STANDARD TIME SLICE @VA04341 00508600
LM R0,R1,VMTODINQ GET TOD AT QUEUE ENTRY @VA04341 00508900
ALR R1,R3 AND ADD TO IT @VA04341 00509200
BC 8+4,*+6 THE REMAINING TIME @VA04341 00509500
ALR R0,R10 THAT THIS USER @VA04341 00509800
ALR R0,R2 WILL BE AT LOW PRIORITY IN @VA04341 00510100
* RUNLIST 00510400
STM R0,R1,SCHBVAL TOD CLOCK INTERRUPT VALUE @VA04341 00510700
ST R11,SCHBUSER FAVORED PERCENTAGE VMBLOK @VA04341 00511000
LA R1,SCHBLOK ADDRESS OF TRQBLOK @VA04341 00511300
BAL R14,SETIMER ESTABLISH CLOCK COMPARATOR @VA04341 00511900
* REQUEST 00512200
L R14,TEMPR14 RESTORE BAL REGISTER @VA04341 00512500
SPACE 00520000
LOADUP L R0,PAGUSAGE GET CURRENT PAGE USAGE 00521000
AH R0,VMWSPROJ ADD THIS USER'S LOAD 00522000
ST R0,PAGUSAGE AND SAVE NEW VALUE 00523000
SCHMN3 MC MNCOAQ,MNCLSCH MONITOR ADD TO Q @VM01017 00524000
SPACE 00525000
SLR R1,R1 INITIALIZE 00526000
STH R1,VMSTEALS COUNTERS 00527000
L R0,VMPGREAD FOR 00528000
LH R1,VMPAGES QUEUE 00529000
SRL R1,1 DROP 00530000
STM R0,R1,VMRDINQ ............... 00531000
BR R14 RETURN TO CALLER 00532000
EJECT 00533000
*. 00534000
* OPERATION - 00535000
* 00536000
* C. QUEUE DROP CALCULATIONS 00537000
* 1A. UPDATE SMOOTHED VALUES OF UTILIZATION AND CONTENTION 00538000
* FOR CPU AND CORE 00539000
* 1B. IF USER IS RUNNING AN EC-MODE MACHINE, CALCULATE THE 00540000
* AMOUNT OF TIME HIS VIRTUAL CPU TIMER SHOULD BE UPDATED. 00541000
* THE CALCULATION IS AS FOLLOWS; 00542000
* 00543000
* A. IF VIRTUAL CPU TIMER IS NOT IN REAL CPU TIMER - 00544000
* TRQBQUE-VMTMOUTQ=DIFFERENCE 00545000
* EXTCPTMR-DIFFERENCE= NEW VIRTUAL CPU TIMER 00546000
* 00547000
* B. IF VIRTUAL CPU TIMER IS IN THE REAL CPU TIMER - 00548000
* VMTMOUTQ= NEW VIRTUAL CPU TIMER 00549000
* 1C. UNFLAG USER-IN-Q, SUBTRACT WORKSET FROM SYSTEM PAGE USAGE, 00550000
* AND DECREMENT NUMBER OF IN-Q USERS 00551000
* 2. CALCULATE ELAPSED TIME IN QUEUE AND DIVIDE INTO CPU TIME 00552000
* WHILE IN QUEUE. THE RESULT, MULTIPLIED BY 4096, WILL BE 00553000
* THE USER'S DISPATCHING PRIORITY NEXT TIME HE IS RUN 00554000
* 3. COMPARE THE ACTUAL WORKING SET TO THE PROJECTED WORKING SET 00562100
* AND NOTE THE ALGEBRAIC SIGN OF THE ERROR. IF THE SIGN OF 00563000
* THE CURRENT ERROR IS THE SAME AS THAT OF THE LAST ERROR 00564000
* COMPUTED, REPLACE THE PROJECTED WORKING SET WITH THE ACTUAL 00565000
* WORKING SET. IF THE SIGNS OF THE ERRORS ARE OPPOSITE, RE- 00566000
* PLACE THE PROJECTED WORKING SET SIZE WITH THE AVERAGE OF 00567000
* THE PROJECTED AND ACTUAL WORKING SETS 00568000
*. 00569000
SPACE 2 00570000
DROPQ EQU * DROP THIS USER FROM AN ACTIVE QUEUE 00571000
TM VMDSTAT,VMINQ CURRENTLY IN A QUEUE @VA04341 00571100
BZR R14 NO - RETURN @VA04341 00571200
ST R14,TEMPR14 SAVE RETURN REGISTER @VA08518 00571300
SPACE 00572000
TM VMDSTAT,VMQSEND WAS HE TIME SLICE ENDED? @V2B2638 00573000
BZ DROPQPC NO @V2B2638 00574000
OI DMKSCHAL,TSEND YES, INDICATE SO FOR MONITOR @V2B2638 00575000
DROPQPC EQU * @V2B2638 00576000
NI VMDSTAT,X'FF'-(VMINQ+VMDSP+VMQSEND) UNFLAG USER 00577000
L R3,PAGUSAGE GET SUM OF WSS IN Q USE @V2B2638 00578000
LTR R3,R3 OUTSIDE CHANCE OF ZERO WSS SIZE @V2B2638 00579000
BZ QRT @V2B2638 00580000
SR R2,R2 @VA03678 00581000
SLL R3,10 *1024 FOR ACCURACY @V2B2638 00582000
L R7,=A(DMKDSPNP) ADDRESS OF PAGE COUNTER @V2B2638 00583000
L R7,0(R7) NUMBER OF PAGABLE PAGES @V2B2638 00584000
LTR R7,R7 CHECK FOR ZERO PAGES @VA03678 00585000
BZ QRT BYPASS SUBTRACT INSTR IF ZERO @VA03678 00586000
DR R2,R7 DIVIDED BY PAGABLE PAGES @V2B2638 00587000
QRT L R7,DMKSCHCO SMOOTH CORE UTILIZATION VALUE @V2B2638 00588000
SR R6,R6 @V2B2638 00589000
M R6,F15 X15 @V2B2638 00590000
AR R3,R7 TOTAL @V2B2638 00591000
SRL R3,4 (NEW + 15*OLD)/16 @V2B2638 00592000
A R3,F8 ROUND BY LOGICAL 0.5 @VA05456 00592100
ST R3,DMKSCHCO NEW SMOOTHED CORE UTILIZATION @V2B2638 00593000
SPACE 00594000
L R0,DMKSCHN1 CURRENT NUMBER OF USERS IN Q1 @V2B2638 00595000
L R1,DMKSCHN2 CURRENT NUMBER OF USERS IN Q2 @V2B2638 00596000
SLDL R0,10 *1024 FOR ACCURACY @V2B2638 00597000
LH R3,DMKSCHW1 USERS ELIGIBLE FOR Q1 @V2B2638 00598000
AH R3,DMKSCHW2 USERS ELIGIBLE FOR Q2 @V2B2638 00599000
SLL R3,10 (E1+E2)*1024 @V2B2638 00600000
LR R4,R0 @V2B2638 00601000
AR R4,R1 (Q1+Q2)*1024 @V2B2638 00602000
AR R3,R4 (Q1+Q2+E1+E2)*1024 @V2B2638 00603000
SPACE 00604000
SMOOTHQ1 SR R6,R6 CLEAR FOR MULTIPLY @V2B2638 00605000
L R7,DMKSCHS1 YES,GET OLD SMOOTHED Q1 VALUE @V2B2638 00606000
M R6,F15 @V2B2638 00607000
AR R0,R7 15*S1+Q1 @V2B2638 00608000
A R0,F8 ROUND BY LOGICAL 0.5 @VA05456 00608100
SRL R0,4 (15S1+Q1)/16 @V2B2638 00609000
ST R0,DMKSCHS1 NEW SMOOTHED @V2B2638 00610000
SPACE 00611000
SMOOTHQ2 L R7,DMKSCHS2 OLD SMOOTHED Q2 @V2B2638 00612000
M R6,F15 @V2B2638 00613000
AR R1,R7 15S2+Q2 @V2B2638 00614000
A R1,F8 ROUND BY LOGICAL 0.5 @VA05456 00614100
SRL R1,4 (15S2+Q2)/16 @V2B2638 00615000
ST R1,DMKSCHS2 NEW SMOOTHED Q2 @V2B2638 00616000
SPACE 00617000
SMOOTHSC SR R2,R2 CLEAR FOR DIVIDE @V2B2638 00618000
SRL R4,10 BACK TO NORMAL TO RETAIN ACCURACY@V2B2638 00619000
DR R2,R4 (Q1+Q2+E1+E2)*1024/(Q1+Q2) @V2B2638 00620000
L R7,DMKSCHSC OLD SMOOTHED RATIO @V2B2638 00621000
M R6,F15 @V2B2638 00622000
AR R3,R7 (15*OLD RATIO + NEW RATIO) @V2B2638 00623000
A R3,F8 ROUND BY LOGICAL 0.5 @VA05456 00623100
SRL R3,4 (15OLD +NEW)/16 @V2B2638 00624000
ST R3,DMKSCHSC NEW SMOOTHED RATIO @V2B2638 00625000
SPACE 00626000
L R0,PAGUSAGE GET SYSTEM PAGE USAGE 00627000
SH R0,VMWSPROJ SUBTRACT THIS USER'S CONTRIBUTION 00628000
LTR R0,R0 WILL PAGE USAGE GO NEGATIVE @VA08454 00628100
BP SMOOTHS1 NO, LET IT GO @VA08454 00628200
SR R0,R0 YES, ZERO IS MINIMUM COUNT @VA08454 00628300
SMOOTHS1 EQU * @VA08454 00628400
ST R0,PAGUSAGE AND SAVE NEW VALUE 00629000
LA R15,QUEUE2 DROPPING FROM Q2 MOST LIKELY 00630000
TM VMQLEVEL,VMQ1 REALLY DROPPING FROM 1 ?? 00631000
BZ DROPQ2 NO -- 00632000
LA R15,QUEUE1 POINT TO QUEUE1 ANCHOR 00633000
OI DMKSCHAL,Q1DROP INDICATE (FOR MONITOR) DROPPING FROM 1 00634000
OI VMQLEVEL,VMDROP1 FLAG Q1 DROP 00635000
DROPQ2 L R2,VMQNUM GET NUMBER NOW IN Q 00636000
S R2,F1 DECREMENT AND TEST 00637000
BNM SCH1A EVERYTHING OK -- 00638000
ABEND 1 DIE 00639000
SCH1A EQU * 00640000
ST R2,VMQNUM UPDATE NUMBER IN Q 00641000
SPACE 00642000
ST R15,TEMPR15 SAVE R15 ACROSS CHARGE @VA07582 00643110
CHARGE STOP GET CPU TIME AT Q-DROP @V407577 00643200
L R15,TEMPR15 RESTORE R15 VALUE @VA07582 00643310
LA R8,1 CONSTANT 00644000
SPACE 00645000
TM VMPSTAT,VMV370R EC MODE ALLOWED FOR THIS USER 00646000
BZ NOCPUTMR NO - CAN'T HAVE VIRTUAL CPU TIMER 00647000
L R6,VMECEXT GET VMBLOK EXTENSION FOR EC MACHINE 00648000
LM R4,R5,EXTCPTMR-ECBLOK(R6) GET USER'S CPU TIMER 00649000
L R7,EXTCPTRQ-ECBLOK(,R6) GET ADDR. OF TIMER REQUEST BLOK 00650000
LM R2,R3,TRQBQUE-TRQBLOK(R7) GET TIME LEFT IN QUEUE 00651000
LM R0,R1,VMTMOUTQ .. 00652000
LTR R0,R0 WAS ALL THE ALLOCATED TIMED USED 00653000
BNM *+8 NO - USE VALUE THAT REMAINS @VA07582 00654100
LM R0,R1,ZEROES CAN'T USE A NEGATIVE NUMBER 00655000
SPACE 00657000
TM VMTLEVEL,VMCPUTMR DOES USER CPU TIMER = REAL TIMER 00658000
BO TRACKTMR YES - SPECIAL CONSIDERATIONS 00659000
SLR R3,R1 CALCULATE AMOUNT OF TIME THAT 00660000
BC 8+2+1,*+6 VIRTUAL CPU TIMER SHOULD BE 00661000
SLR R2,R8 UPDATED WITH. 00662000
SLR R2,R0 ... 00663000
SPACE 00664000
SLR R5,R3 NOW THAT WE KNOW THE 00665000
BC 8+2+1,*+6 DIFFERENCE. SUBTRACT IT 00666000
SLR R4,R8 FROM THE VIRTUAL CPU TIMER 00667000
SLR R4,R2 THIS LEAVES THE VIRTUAL 00668000
STM R4,R5,EXTCPTMR-ECBLOK(R6) CPU TIMER CORRECT.. 00669000
B QUETIME NOW CALCULATE PROBLEM TIME USED. 00670000
SPACE 00671000
TRACKTMR NI VMTLEVEL,X'FF'-VMCPUTMR NO-LONGER TRACKING CPU TIMER. 00672000
TM VMTLEVEL,VMTMRINT IS IT ALSO CPU TIMER INTERRUPT 00673000
BO QUETIME YES - HIS VIRTUAL CPU TIMER IS OK. 00674000
SLR R5,R1 CALCULATE AMOUNT OF TIME 00675000
BC 8+2+1,*+6 THAT SHOULD BE CHARGED TO THIS 00676000
SLR R4,R8 USER'S VIRTUAL PROBLEM TIME USED. 00677000
SLR R4,R0 ... 00678000
SPACE 00679000
SLR R3,R5 FIND TOTAL TIME THAT THIS USER 00680000
BC 8+2+1,*+6 ACTUALLY USED WHILE HE WAS 00681000
SLR R2,R8 IN THE QUEUE. 00682000
SLR R2,R4 ... 00683000
SPACE 00684000
STM R0,R1,EXTCPTMR-ECBLOK(R6) STORE VIRTUAL CPU TIMER. 00685000
TM CPSTATUS,CPRUN WAS SYSTEM IN PROBLEM STATE? @VA07582 00685100
BZ NOPROBT2 NO, CONTINUE NORMALLY @VA07582 00685200
C R11,RUNUSER IS THIS USER RUNUSER? @VA07582 00685300
BNE NOPROBT2 NO, CONTINUE NORMALLY @VA07582 00685400
BAL R14,INCPROBT GO INCREMENT PROBTIME NOW SINCE @VA07582 00685500
* VMTMOUTQ IS TO BE CHANGED 00685600
STM R2,R3,PROBSTRT SET PROBSTRT FOR DSP CALCULATION @VA07582 00685800
NOPROBT2 DS 0H @VA07582 00685900
STM R2,R3,VMTMOUTQ STORE AMOUNT OF TIME THAT IS LEFT OVER 00686000
SPACE 00687000
NOCPUTMR EQU * HERE IF USER IS NON- EC MODE MACHINE 00688000
QUETIME EQU * HERE TO CALCULATE AMOUNT OF PROBLEM TIME USED. 00689000
SPACE 00690000
NI VMTLEVEL,X'FF'-VMTMRINT RESET TIMER INTERRUPT FLAG 00691000
LM R2,R3,VMTMOUTQ GET TIME VALUE REMAINING IN QUEUE 00692000
TM VMQLEVEL,VMAEXP ASSURED PERCENTAGE USER @VA04341 00693050
BZ GETQTMR NO _ @VA04341 00693100
LM R0,R1,SCHBAEXP GET PERCENTAGE TIME SLICE @VA04341 00693150
TM VMQLEVEL,VMHIPRI DROPPING WITHIN FIRST PART @VA04341 00693200
* PERCENT 00693250
BO AEXQTMR YES - @VA04341 00693300
CLC SCHBVAL,ZEROES WAS CLOCK COMPARATOR THIS ONE ???@VA04341 00693350
BE GETQTMR YES - THEN ITS ALREADY RESET @VA04341 00693400
* FOR INT. 00693450
LA R1,SCHBLOK RESET CLOCK COMPARATOR @VA04341 00693550
BAL R14,RESETIMR FOR LAST PART OF PERCENTAGE @VA04341 00693600
GETQTMR LM R0,R1,VMQTIME GET STANDARD TIME SLICE INTERVAL @VA04341 00693700
AEXQTMR LTR R2,R2 DID USER USE ALL TIME ALLOTED @VA04341 00693750
BM USEDALL YES - 00695000
SLR R1,R3 NO - CALCULATE TIME HE DID USE 00696000
BC 8+2+1,*+6 WHILE HE WAS IN THE QUEUE. 00697000
SLR R0,R8 00698000
SLR R0,R2 00699000
SPACE 00700000
USEDALL EQU * 00701000
L R2,VMVTIME CALCULATE TOTAL PROB. STATE TIME 00702000
L R3,VMVTIME+4 ... 00703000
ALR R3,R1 00704000
BC 8+4,*+6 00705000
ALR R2,R8 00706000
ALR R2,R0 00707000
STM R2,R3,VMVTIME STORE TOTAL PROB. STATE TIME 00708000
CHARGE SYNC UPDATE VMTTIME @V4M0203 00715150
BAL R14,CALCPRI CALCULATE DISPATCHING PRIORITY @V407577 00715200
NI VMQLEVEL,X'FF'-VMQ1 RESET Q1 FLAG 00716000
SLR R4,R4 RESET REGISTER 4 @VA05979 00716500
CL R11,AVMREAL IS THIS THE VIRTUAL = REAL USER ? 00717000
BC 8,SAVEWS+4 YES--BYPASS WORKING SET CALCULATION 00718000
EJECT 00719000
* 00720000
* CALCULATE WORKING SET SIZE AND FLUSH ACTIVE PAGES 00721000
* 00722000
SPACE 00723000
LH R1,VMPAGES GET NUMBER OF RESIDENT PAGES 00725000
EJECT 00778000
WORKSET EQU * COMPUTE PROJECTED WORKSET SIZE 00779000
LR R4,R1 SAVE PAGE REF COUNT FOR MONITOR 00780000
AIF (NOT &TRACE(9)).TR3 00782000
TM TRACFLG1,TRAC09 TRACING ACTIVE? 00783000
BZ NOTRAC3 BRANCH IF NOT 00784000
TRACE CODE=TRCDROP,R15,R1,R2 TRACE DROP QUEUE @V407577 00785100
MVC 12(4,R15),PAGELOAD SAVE SYS PAGE LOAD AND RATE @VA07681 00786500
LH R2,VMWSPROJ WORKING SET PROJECTION @V200820 00788000
ICM R2,B'1100',VMPAGES NO. RESIDENT PAGES @V200820 00789000
ST R2,8(,R15) ... 00790000
STCM R11,B'0111',1(R15) SAVE USERS VMBLOK @V407577 00791100
LH R2,VMQPRIOR GET NEW PRIORITY @VA01166 00793000
ST R2,4(,R15) SAVE NEW PRIORITY @VA01166 00794000
NOTRAC3 EQU * 00800000
.TR3 ANOP 00801000
L R1,VMPGRINQ GET SUM OF RESIDENT PAGES @ EACH READ 00802000
SLR R0,R0 CLEAR FOR DIVISION 00803000
L R2,VMPGREAD GET TOTAL PAGE READS 00804000
S R2,VMRDINQ GET PAGE READS WHILE IN Q 00805000
BP *+8 INSURE AT 00806000
LA R2,1 ONE FOR DIVIDE 00807000
DR R0,R2 GET AVERAGE PAGES RESIDENT/READ 00808000
AH R1,VMSTEALS PLUS NUMBER OF WAITS FOR STOLEN PAGES 00809000
SPACE 00813000
* R1 NOW HAS MEASURED WORKING SET 00814000
SPACE 00815000
SPACE 00816000
TM VMPSTAT,VMRPAGE RESERVED PAGE USER ?? 00817000
BZ PROJECT NO -- USE AVERAGE AS IT STANDS 00818000
L R15,=A(DMKPTRRL) GET MAXIMUM RESERVED COUNT 00819000
S R1,0(,R15) AND SUBTRACT FROM PROJECTION 00820000
BP PROJECT USE DIFFERENCE AS USER'S IMPACT 00821000
SLR R0,R0 IF USING LESS THAN GUARANTEE, 00822000
B SAVEWS ASSUME LOAD OF 0 00823000
SPACE 00824000
PROJECT EQU * 00825000
LR R0,R1 SAVE ACTUAL WORKSET 00826000
SH R1,VMWSPROJ GET DIFFERENCE FROM WHAT WAS PROJECTED 00827000
LR R2,R1 AND SAVE THE ERROR 00828000
LA R3,FFS SET FOR NEGATIVE PROJECTION ERROR 00829000
TM VMQSTAT,VMWSERNG WAS LAST ERROR NEGATIVE ? 00830000
BO *+8 YES -- ALL SET 00831000
LA R3,F1+2 SET FOR POSITIVE ERROR 00832000
MH R1,0(,R3) COMPARE SIGNS OF ERRORS 00833000
NI VMQSTAT,X'FF'-VMWSERNG CLEAR ERROR FLAG 00834000
LTR R2,R2 CURRENT ERROR NEGATIVE ? 00835000
BNM *+8 NO -- LEAVE FLAG OFF 00836000
OI VMQSTAT,VMWSERNG YES - FLAG NEGATIVE ERROR 00837000
LTR R1,R1 ERROR THIS TIME SAME DIRECTION AS LAST 00838000
BP SAVEWS YES -- TRACKING TOO SLOWLY - USE ACTUAL 00839000
AH R0,VMWSPROJ IF ERRORS ARE OF OPPOSITE SIGN, 00840000
SRL R0,1 TAKE AVERAGE OF ACTUAL AND PROJECTED 00841000
SAVEWS STH R0,VMWSPROJ SAVE NEW PROJECTED WORKSET 00842000
SCHMN2 EQU * @VA08518 00843100
L R14,TEMPR14 RESTORE RETURN REGISTER @VA08518 00843300
MC MNCODQ,MNCLSCH MONITOR DROP FROM Q @VA08518 00843500
NI DMKSCHAL,255-Q1DROP-TSEND RESET MONITOR FLAGS @V2B2638 00844000
OI DMKSCHAL,VMINQ SET FLAG FOR FLUSH LIST CK @V408246 00844100
BR R14 AND RETURN TO CALLER 00845000
SPACE 2 00846000
EJECT 00848000
* 00849000
* RE-CALCULATE DISPATCHING PRIORITY (VMQPRIOR) AT Q DROP OR MINOR TIME 00850000
* SLICE END AS : VMQPRIOR = (EXECUTION TIME/ELAPSED TIME)*4096. 00851000
* EXECUTION TIME IS CALCULATED AS : 00852000
* EX.T. = VMQTIME*2+VMTMINQ-VMTTIME-VMTMOUTQ(+EXTCPTMR-TRQBQUE) 00853000
* NOTE THAT THE FINAL TERM IS USED ONLY IF VMTMOUTQ CONTAINS A 00854000
* RESIDUAL VIRTUAL CPU TIMER VALUE RATHER THAN A TIME IN QUEUE 00855000
* ELAPSED TIME IS CALCULATED AS : 00856000
* EL.T. = TOD - VMTODINQ 00857000
* 00858000
SPACE 00859000
CALCPRI EQU * FIRST, LOAD UP ALL PERTINENT TIME VALUES ... 00860000
LM R0,R7,VMTMOUTQ ,VMTTIME,VMTMINQ, AND VMTODINQ ... 00861000
LA R15,DMKSCHQ1 POINT TO APPROPRIATE Q CONTROL BLOCK 00862000
TM VMQLEVEL,VMQ1 RUNNING IN Q1 ?? 00863000
BO *+8 YES -- QUEUE CONTROL IS CORRECT 00864000
LA R15,DMKSCHQ2 CORRECT QUEUE CONTROL 00865000
LM R8,R9,VMQTIME-VMQBLOK(R15) AND LOAD UP TIME SLICE 00866000
TM VMQLEVEL,VMAEXP+VMHIPRI ASSURED PERCENT AND @VA04341 00866100
* FIRST HALF 00866200
BNO *+8 NO @VA04341 00866300
LM R8,R9,SCHBAEXP YES - USE HIS PERCENT OF TIME @VA04341 00866400
* SLICE 00866500
SLDL R8,1 GET VMQTIME*2 00867000
LA R15,1 FREQUENTLY USED CONSTANT ... 00868000
SPACE 00869000
ALR R9,R5 VMQTIME*2 + VMTMINQ 00870000
BC 8+4,*+6 ... 00871000
ALR R8,R15 ... 00872000
ALR R8,R4 ... 00873000
SPACE 00874000
SLR R9,R3 - VMTTIME 00875000
BC 8+2+1,*+6 ... 00876000
SLR R8,R15 ... 00877000
SLR R8,R2 ... 00878000
SPACE 00879000
LTR R0,R0 DID WE TIME SLICE END(VMQSEND)? @VA01553 00880000
BNM *+8 NO- USE VALUE IN VMTMOUTQ @VA01553 00881000
LM R0,R1,ZEROES YES- CAN'T ALLOW NEGATIVE @VA01553 00882000
* CALCULATION 00883000
SLR R9,R1 - VMTMOUTQ @VA01553 00884000
BC 8+2+1,*+6 ... 00885000
SLR R8,R15 ... 00886000
SLR R8,R0 ... 00887000
SPACE 00888000
TM VMTLEVEL,VMCPUTMR RESIDUAL TIMER IN VMTMOUTQ ?? 00889000
BZ ELAPSED NO -- EXECUTION TIME COMPLEATE 00890000
L R1,VMECEXT POINT TO VMBLOK EXTENSION ... 00891000
AL R9,EXTCPTMR-ECBLOK+4(,R1) GET TIME+EXTCPTMR 00892000
BC 8+4,*+6 00893000
ALR R8,R15 ... 00894000
AL R8,EXTCPTMR-ECBLOK(,R1) ... 00895000
SPACE 00896000
L R1,EXTCPTRQ-ECBLOK(,R1) POINT TO TIMER CONTROL BLOK 00897000
SL R9,TRQBQUE-TRQBLOK+4(,R1) GET TIME - TRQBQUE 00898000
BC 8+2+1,*+6 ... 00899000
SLR R8,R15 ... 00900000
SL R8,TRQBQUE-TRQBLOK(,R1) ... 00901000
SPACE 00902000
ELAPSED EQU * HERE TO CALCULATE ELAPSED TIME IN QUEUE AND PRIORITY 00903000
STCK TEMPSAVE GET CURRENT TIME OF DAY 00904000
BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 00904100
LM R0,R1,TEMPSAVE ... 00905000
SLR R1,R7 - VMTODINQ 00906000
BC 8+2+1,*+6 ... 00907000
SLR R0,R15 ... 00908000
SLR R0,R6 ... 00909000
SRDL R0,12 /4096 00910000
SPACE 00911000
AIF (NOT &AP).NOTAP1 HRC066DK 00911100
L R1,PREFIXA -> this CPU prefix HRC066DK 00911200
TM CPSTAT4-PSA(R1),CPSHUT Is system coming down? HRC066DK 00911300
BZ *+6 No HRC066DK 00911400
SR R8,R8 Else ensure no PRG009 HRC066DK 00911500
.NOTAP1 ANOP HRC066DK 00911600
DR R8,R1 EXECUTED/ELAPSED ... 00912000
AH R9,VMQPRIOR + OLD PRIORITY 00913000
SRL R9,1 /2 00914000
STH R9,VMQPRIOR = NEW, SMOOTHED PRIORITY 00915000
BR R14 RETURN TO CALLER @V407577 00916100
SPACE 00916200
INCPROBT DS 0H INCREMENT PROBLEM STATE TIME @VA07582 00916250
CLC VMTMOUTQ,PROBSTRT WAS CALCULATION ALREADY DONE? @VA07582 00916300
BER R14 YES, RETURN TO CALLER @VA07582 00916350
STM R4,R7,TEMPR4 SAVE REGS USED IN SUBROUTINE @VA07582 00916400
LM R4,R5,VMTMOUTQ GET TIMER AT PROBLEM STATE END @VA07582 00916450
LM R6,R7,PROBSTRT GET TIMER AT PROBLEM STATE START @VA07582 00916500
SLR R7,R5 CALC 2ND HALF OF ELAPSED TIME @VA07582 00916550
BNM *+6 WAS THERE A CARRY? @VA07582 00916600
BCTR R6,0 NO CARRY, SIGNIFICANT DIFFERENCE @VA07582 00916650
SLR R6,R4 CALC 1ST HALF OF ELAPSED TIME @VA07582 00916700
LM R4,R5,PROBTIME GET TOTAL PROBLEM TIME @VA07582 00916750
SLR R5,R7 SUBTRCT 2ND HALF OF ELAPSED TIME @VA07582 00916800
BNM *+6 WAS THERE A CARRY? @VA07582 00916850
BCTR R4,0 NO CARRY, SIGNIFICANT DIFFERENCE @VA07582 00916900
SLR R4,R6 SUBTRCT 1ST HALF OF ELAPSED TIME @VA07582 00916950
STM R4,R5,PROBTIME STORE NEW TOTAL PROBLEM TIME @VA07582 00917000
LM R4,R7,TEMPR4 RESTORE REGS USED IN SUBROUTINE @VA07582 00917050
BR R14 RETURN TO CALLER @VA07582 00917100
EJECT 00917150
ARUNLST EQU * ADD A USER TO THE RUNNABLE LIST 00918000
TM VMDSTAT,VMRUN ALL READY IN THE RUNLIST ? @VA04341 00918400
BOR R14 YES - RETURN TO CALLER @VA04341 00918800
LA R2,DMKSCHRL POINT TO LIST 00919000
LH R0,VMQPRIOR ADD IN BLOCKAGE DELAY FACTOR @VA01352 00920000
AL R0,VMEPRIOR TO RESOLVE THE RUNLIST BLOK. @VA01352 00921000
* FAILURE 00922000
ST R0,VMRPRIOR STORE THE DISPATCHING PRIORITY @VA01352 00923000
LOCK OBTAIN,TYPE=RL,SPIN=YES,SAVE LOCK THE RUNLIST @V407577 00923100
L R1,DMKSCHRL GET ADDRESS OF 1ST USER NOW ON LIST 00924000
TM VMQLEVEL,VMHIPRI HIGHEST PRIORITY USER ?? 00925000
BO ADDLISTR ADD TO RUNLIST @VA04341 00926100
SPACE 00927000
ADRLOOP EQU * 00928000
CR R1,R2 END OF LIST ?? 00929000
BE ADDLISTR ADD TO RUNLIST @VA04341 00930100
TM VMQLEVEL-VMBLOK(R1),VMHIPRI 1ST BLOK HIGHEST PRIORITY 00931000
BO ADDNEXT YES -- SKIP IT 00932000
CL R0,VMRPRIOR-VMBLOK(,R1) LOWER PRIORITY ? @VA01352 00933000
BL ADDLISTR ADD TO RUNLIST @VA04341 00934100
ADDNEXT EQU * POINT TO NEXT USER TO TEST 00935000
L R1,VMQFPNT-VMBLOK(,R1) GET ADDRESS OF NEXT BLOK 00936000
B ADRLOOP AND KEEP LOOKING 00937000
SPACE 00938000
ADDLISTR EQU * INSERT VMBLOK INTO RUNLIST @VA04341 00939300
OI VMDSTAT,VMRUN FLAG USER IN RUNNABLE LIST @VA04341 00939600
L R2,VMQBPNT-VMBLOK(,R1) POINT TO PREVIOUS VMBLOK 00941000
STM R1,R2,VMQFPNT CHAIN NEW USER IN HERE 00942000
ST R11,VMQFPNT-VMBLOK(,R2) CHAIN NEW BLOK TO PREVIOUS 00943000
ST R11,VMQBPNT-VMBLOK(,R1) AND TO NEXT 00944000
LOCK RELEASE,TYPE=RL,SPIN=,SAVE @V407577 00944100
BR R14 AND RETURN TO CALLER .. 00945000
ADDLISTE EQU * INSERT VMBLOK INTO ELIGIBLE LIST @V407577 00945100
OI VMDSTAT,VMRUN FLAG USER IN RUNNABLE LIST @V407577 00945200
L R2,VMQBPNT-VMBLOK(,R1) POINT TO PREVIOUS VMBLOK@V407577 00945300
STM R1,R2,VMQFPNT CHAIN NEW USER IN HERE @V407577 00945400
ST R11,VMQFPNT-VMBLOK(,R2) @V407577 00945500
ST R11,VMQBPNT-VMBLOK(,R1) @V407577 00945600
BR R14 AND RETURN TO CALLER .. @V407577 00945700
SPACE 00946000
AWAITLST EQU * ADD A USER TO THE ELIGIBLE LIST 00947000
TM VMDSTAT,VMELIG ALREADY IN THE ELIGIBLE LIST @VA04341 00949000
BOR R14 YES - RETURN TO CALLER @VA04341 00950000
ST R14,TEMPR14 SAVE CALLER'S R14 @V407577 00951100
BAL R14,CALCBIAS CALCULATE ELIGIBLE LIST PRIORITY @V407577 00951200
L R14,TEMPR14 RESTORE CALLER'S R14 @V407577 00951300
LA R2,WAITQ1 POINT TO Q1 ELIGIBLE LIST 00976000
LA R3,DMKSCHW1 AND COUNT 00977000
TM VMQLEVEL,VMQ1 REALLY WAITING FOR Q1 ? 00978000
BO SETPRIOR YES -- GO SET FINAL PRIORITY ... 00979000
LA R2,WAITQ2 POINT TO Q2 ELIGIBLE LIST 00980000
LA R3,DMKSCHW2 AND COUNT 00981000
TM VMQLEVEL,VMDROP1 JUST DROPPED FROM Q1 ? 00982000
BZ SETPRIOR NO -- GO SET PRIORITY 00983000
LH R1,DMKSCHIB GET INTERACTIVE USER BIAS 00984000
SLR R0,R1 AND LOWER PRIORITY 00985000
NI VMQLEVEL,X'FF'-VMDROP1 UNFLAG Q1 DROP 00986000
SETPRIOR ST R0,VMEPRIOR SET ELIGIBLE LIST PRIORITY 00987000
L R1,VMQFPNT-VMBLOK(,R2) POINT TO 1ST BLOK ON LIST 00988000
LH R4,0(R3) COUNT OF USERS IN LIST 00989000
A R4,F1 ADD ONE 00990000
STH R4,0(R3) AND RESTORE 00991000
OI VMDSTAT,VMELIG SET ELIGIBLE LIST FLAG 00992000
SCHMN0 MC MNCOAEL,MNCLSCH MONITOR ADD TO ELIG LIST @VM01017 00993000
TM VMQLEVEL,VMAEX HI PRIORITY Q2 ?? 00994000
BO ADDLISTE YES - ADD TO TOP OF ELIGIBLE LIST@VA04341 00995100
SPACE 00996000
ADQLOOP EQU * 00997000
CR R1,R2 END OF THE LIST ?? 00998000
BE ADDLISTE YES - ADD TO ELIGIBLE LIST HERE @VA04341 00999100
CL R0,VMEPRIOR-VMBLOK(,R1) FOUND A LOWER GUY ? 01000000
BL ADDLISTE YES - ADD TO ELIGIBLE LIST HERE @VA04341 01001100
L R1,VMQFPNT-VMBLOK(,R1) KEEP LOOKING 01002000
B ADQLOOP .. 01003000
CALCBIAS EQU * ADD A USER TO THE ELIGIBLE LIST @VA04341 01003020
LH R1,VMWSPROJ GET PROJECTED WORKING SET @VA04341 01003040
LA R2,100 ... FOR ARITHMETIC @VA04341 01003060
MR R0,R2 GET SET FOR PERCENTAGE @VA04341 01003080
L R15,=A(DMKDSPNP) ADDR. OF DYNAMIC PAGE COUNT @VA04341 01003100
L R15,0(,R15) GET NUMBER OF PAGEABLE PAGES @VA04341 01003120
LTR R15,R15 CHECK FOR ZERO PAGES @VA04341 01003140
BZ NODIV1 IF ZERO, SKIP DIVIDE INSTRUCTION.@VA04341 01003160
DR R0,R15 GET WORKING SET SIZE AS % OF @VA04341 01003180
* AVAIALBLE 01003200
NODIV1 MH R1,DMKSCHPB MULTIPLY BY PAGING BIAS FACTOR @VA04341 01003220
SLR R0,R0 CLEAR WORK REGISTER @VA04341 01003240
IC R0,VMUPRIOR GET SHEDULING PRIORITY @VA04341 01003260
MH R0,DMKSCHUB MULTIPLY BY USER PRIORITY BIAS @VA04341 01003280
ALR R1,R0 ADD TO PAGING BIAS @VA04341 01003300
LH R2,DMKSCHPB GET PAGING BIAS WEIGHT FACTOR @VA04341 01003320
AH R2,DMKSCHUB PLUS USER BIAS WEIGHT FACTOR @VA04341 01003340
BZ GETBASE IF NO BIAS, NO WEIGHT @VA04341 01003360
SLR R0,R0 CLEAR FOR DIVISION @VA04341 01003380
DR R0,R2 AND GET WEIGHTED AVERAGE @VA04341 01003400
SPACE 01003420
GETBASE STCK TEMPSAVE GET TOD FOR BASE PRIORITY @VA04341 01003440
BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 01003441
L R0,TEMPSAVE USE HIGH ORDER WORD ONLY @VA04341 01003460
LH R2,DMKSCHPD GET PAGING DELAY SHIFT @VA04341 01003480
LA R3,RSHIFT ASSUME RIGHT SHIFT @VA04341 01003500
LTR R2,R2 + FOR RIGHT SHIFT, - FOR LEFT @VA04341 01003520
BNM SHIFT ALL SET FOR RIGHT SHIFT @VA04341 01003540
LA R3,LSHIFT SET FOR LEFT SHIFT @VA04341 01003560
LPR R2,R2 ... @VA04341 01003580
SHIFT EX R0,0(,R3) DO PROPER SHIFT @VA04341 01003600
ALR R0,R1 AND ADD IN BIAS @VA04341 01003620
BR R14 AND RETURN TO CALLER @V407577 01003650
SPACE 2 01004000
DROPLIST EQU * DROP THIS USER FROM THE @VA04341 01005100
* RUNNABLE/ELIGIBLE LIST. 01005200
NI VMDSTAT,X'FF'-VMRUN UNFLAG AS IN LIST 01006000
TM VMDSTAT,VMELIG ARE WE DROPPING HIM FROM ELIGIBLE 01007000
BZ NODELIG NO, SKIP COUNT DECREMENT 01008000
LA R1,DMKSCHW2 ADD, OF WAITQ2 COUNT 01009000
TM VMQLEVEL,VMQ1 IS HE IN Q1 ELIGIBLE LIST? 01010000
BZ NOQ1 NO, USE R1 AS SETUP 01011000
LA R1,DMKSCHW1 YES, GET ADD. OF Q1 WAIT COUNT 01012000
NOQ1 LH R2,0(R1) SUBTRACT 1 FROM COUNT OF 01013000
S R2,F1 USERS IN ELIGIBLE LIST 01014000
STH R2,0(R1) 01015000
NI VMDSTAT,255-VMELIG REMOVE ELIGIBLE LIST FLAG 01016000
LM R1,R2,VMQFPNT GET CHAIN POINTERS @V407577 01016100
ST R1,VMQFPNT-VMBLOK(,R2) AND @V407577 01016200
ST R2,VMQBPNT-VMBLOK(,R1) UNCHAIN @V407577 01016300
BR R14 EXIT TO CALLER @V407577 01016400
NODELIG EQU * 01017000
LOCK OBTAIN,TYPE=RL,SPIN=YES,SAVE LOCK THE RUNLIST @V407577 01017100
LM R1,R2,VMQFPNT GET CHAIN POINTERS 01018000
ST R1,VMQFPNT-VMBLOK(,R2) AND 01019000
ST R2,VMQBPNT-VMBLOK(,R1) UNCHAIN 01020000
LOCK RELEASE,TYPE=RL,SPIN=,SAVE @V407577 01020100
BR R14 EXIT TO CALLER 01021000
SPACE 01022000
RSHIFT SRL R0,0(R2) EXECUTED TO ALTER BASE PRIORITY 01023000
LSHIFT SLL R0,0(R2) .... 01024000
EJECT 01025000
*. 01026000
* OPERATION - 01027000
* 01028000
* D. REAL TIMER STAMP 01029000
* 1. CONVERT THE CURRENT TIMER VALUE TO THE APPROPRIATE UNITS; 01030000
* IE, CONVERT THE LOCATION 80 TIMER TO MICROSECONDS 01031000
* 2. STORE THE TOD CLOCK, AND ADD TO IT THE VALUE IN THE TIMER 01032000
* 3. ESTABLISH A TOD CLOCK COMPARATOR REQUEST FOR THE SPECIFIED 01033000
* INTERVAL 01034000
*. 01035000
SPACE 2 01036000
AIF (&RTIMR EQ 0).RTM2 01037000
RSTMPON EQU * START UP A REAL INTERVAL TIMER 01038000
STCK TEMPSAVE GET CURRENT TOD @VA02049 01039000
BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 01039100
TM VMTLEVEL,VMRON IS THIS A REAL TIMER @VA01688 01040000
BZ SETCPU NO, STAMP CPU TIMER @VA01688 01041000
TM VMTLEVEL,VMSTMPI INTERVAL TIMER REQUEST? @VA01688 01042000
BO SETCPU NO, STAMP CPU TIMER @VA01688 01043000
OI VMTLEVEL,VMSTMPI FLAG LOCATION 80 TIMER STAMPED 01044000
SR R0,R0 FOR HIGHORDER REGISTER ADJUST 01045000
L R1,VMTRQBLK POINT TO TIMER REQUEST BLOK 01046000
USING TRQBLOK,R1 ADDRESSABILITY 01047000
LM R4,R5,TEMPSAVE GET CURRENT TOD VALUE @VA02049 01048000
STM R4,R5,TRQBTOD AND STORE IN TRQBLOK @VA02049 01049000
SR R4,R4 CLEAR R4 JUST IN CASE @VA02049 01050000
LCTL C1,C1,VMSEG GET CORRECT STO @VA07222 01051100
LRA R6,TIMER-PSA VIRT. LOC. 80 AVAILABLE? @VA07222 01051200
BZ *+8 YES, USE VIRT. LOC. 80 @VA07222 01051300
LA R6,VMTIMER NO, POINT AT ACTIVE COPY @VA07222 01051400
L R5,0(,R6) PICK UP TIMER VALUE @VA07222 01051500
LTR R5,R5 CURRENTLY NEGATIVE ?? 01052000
BNM CVTMS NO -- 01053000
SL R5,=XL4'80000000' GET TIME TILL IT WRAPS 01054000
AL R5,=XL4'7FFFFFFF' GET TIME TILL IT AGAIN GOES NEGATIVE 01055000
LA R0,13 FOR HIGH ORDER REG ADJUSTMENT @VA01872 01056000
SPACE 01057000
CVTMS M R4,=F'13' CONVERT TO MICROSECONDS 01058000
ALR R4,R0 ADJUST HIGH ORDER REGISTER 01059000
SLDL R4,12 GET TOD CLOCK UNITS @VA02049 01060000
AL R5,TRQBTOD+4 GET TOD FOR INTERRUPT 01061000
BC 12,*+8 .. 01062000
AL R4,F1 .. 01063000
AL R4,TRQBTOD .. 01064000
STM R4,R5,TRQBVAL AND STORE IN TRQBLOK 01065000
BAL R14,SETIMER GO SET TOD CLOCK COMPARATOR REQUEST 01066000
SETCPU EQU * @VA01688 01067000
TM VMPSTAT,VMV370R EC MODE ALLOWED 01068000
BCR 8,R3 NO -- EXIT 01069000
TM VMTLEVEL,VMSTMPT CPU TIMER REQUEST? @VA01688 01070000
BOR R3 NO, EXIT @VA01688 01071000
OI VMTLEVEL,VMSTMPT FLAG CPU TIMER STAMPED 01072000
L R2,VMECEXT POINT TO EXTENDED CONTROL BLOK 01073000
L R1,EXTCPTRQ-ECBLOK(,R2) GET TRQBLOK FOR CPU TIMER 01074000
LM R4,R5,TEMPSAVE GET CURRENT TOD VALUE @VA02049 01075000
STM R4,R5,TRQBTOD AND STORE IN TRQBLOK @VA02049 01076000
LM R6,R7,EXTCPTMR-ECBLOK(R2) GET CPUTIMER VALUE @VA02049 01077000
TM VMTLEVEL,VMCPUTMR DOES USER CPU TIMER = REAL @VA02049 01078000
* TIMER? 01079000
BZ ADDCPTOD NO, GO ADD TO T-O-D VALUE @VA02049 01080000
LM R4,R5,VMTMOUTQ GET TIME LEFT IN QUEUE @VA04063 01081100
LTR R4,R4 HAS IT GONE NEGATIVE? @VA04063 01081200
BNM *+8 NO....OK TO USE @VA04063 01081300
LM R4,R5,ZEROES CAN'T USE NEGATIVE NUMBER @VA04063 01081400
SLR R7,R5 FIGURE DIFFERENCE BETWEEN @VA04063 01081500
BC 11,*+6 ORIGINAL CPUTIMER VALUE @VA04063 01081600
BCTR R6,0 AND CURRENT VALUE @VA04063 01081700
SLR R6,R4 @VA04063 01081800
LTR R6,R6 IF EXTCPTMR IS NEGATIVE @VA07016 01081830
BM ECVALNEG LEAVE TRQBQUE AS IS @VA07016 01081860
LM R4,R5,TRQBQUE GET ORIGINAL TIME SLICE VALUE @VA04063 01081900
SLR R5,R7 DECREMENT THIS VALUE @VA04063 01082000
BC 11,*+6 BY THE CALCULATED @VA04063 01082100
BCTR R4,0 DIFFERENCE (AMOUNT USED UP) @VA04063 01082200
SLR R4,R6 @VA04063 01082300
STM R4,R5,TRQBQUE UPDATE T/S TO CURRENT VALUE @VA04063 01082400
ECVALNEG EQU * @VA07016 01082450
LM R4,R5,TRQBTOD GET CURRENT T-O-D AGAIN @VA04063 01082500
LM R6,R7,VMTMOUTQ NOW, GET TIME LEFT IN QUEUE @VA04063 01082600
STM R6,R7,EXTCPTMR-ECBLOK(R2) UPDATE CPUTIMER VALUE @VA02049 01083000
LTR R6,R6 HAS IT GONE NEGATIVE? @VA02049 01084000
BNM ADDCPTOD NO, GO ADD IT TO T-O-D VALUE @VA02049 01085000
B SETCOMP SET UP FOR TIMER INTERRUPT @VA02049 01086000
ADDCPTOD EQU * @VA02049 01087000
LA R8,1 CONSTANT 01088000
ALR R5,R7 GET TIME 01089000
BC 12,*+6 FOR CPU TIMER INTERRUPT 01090000
ALR R4,R8 .. 01091000
ALR R4,R6 .. 01092000
BC 12,*+8 BRANCH IF NO OVERFLOW 01093000
L R4,FFS LARGE NUMBER IF TIMER WRAPS 01094000
SETCOMP EQU * @VA02049 01095000
STM R4,R5,TRQBVAL SET VALUE FOR CLOCK COMPARATOR 01096000
BAL R14,SETIMER AND GO SET TIMER REQUEST 01097000
BR R3 RETURN TO CALLER @V200820 01098000
EJECT 01099000
*. 01100000
* OPERATION - 01101000
* 01102000
* E. REAL TIMER UNSTAMP 01103000
* 1. RESET THE PENDING TRQBLOK REQUEST 01104000
* 2. CALCULATE THE ELAPSED TIME SPENT IN USER-REQUESTED WAIT 01105000
* STATE AND SUBTRACT IT FROM THE APPROPRIATE TIMER 01106000
* 3. IF THE TIMER HAS GONE NEGATIVE, POST A PENDING INTERRUPT 01107000
*. 01108000
SPACE 2 01109000
RSTMPOFF EQU * STOP A RUNNING REAL TIMER -- 01110000
STCK TEMPSAVE SAVE TOD CLOCK @VA01553 01111000
BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 01111100
TM VMTLEVEL,VMSTMPI LOCATION 80 TIMER STAMPED ? 01112000
BZ CPTOFF NO -- GO UNSTAMP CPU TIMER 01113000
NI VMTLEVEL,255-VMSTMPI UNSTAMP INTERVAL TIMER @V200820 01114000
L R1,VMTRQBLK POINT TO TIMER REQUEST BLOK 01115000
BAL R14,RESETIMR AND GO CANCEL TIMER REQUEST 01116000
LM R4,R5,TRQBTOD GET TOD AT REQUEST 01117000
LM R0,R1,TEMPSAVE GET TOD NOW 01118000
SPACE 01119000
SLR R1,R5 GET ELAPSED TIME 01120000
BC 11,*+6 ... 01121000
BCTR R0,R0 ... @VA01553 01122000
SLR R0,R4 ... 01123000
SRDL R0,12 CONVERT TO MICROSECONDS 01124000
* R6 POINTS TO ACTIVE VIRT. LOC. 80 TIMER @VA07222 01124100
LCTL C1,C1,VMSEG GET CORRECT STO @VA07222 01124200
LRA R6,TIMER-PSA VIRT. LOC. 80 AVAILABLE? @VA07222 01124300
BZ *+8 YES, USE VIRT. LOC. 80 @VA07222 01124400
LA R6,VMTIMER NO, POINT AT ACTIVE COPY @VA07222 01124500
LTR R0,R0 IS IT A BIG NUMBER? @VA02792 01125000
BZ NORMAL NO...REGULAR ROUTINE WILL DO @VA02792 01126000
D R0,=F'3328' CONVERT TO 3.3MS UNITS @VA02792 01127000
SLL R1,8 SHIFT TO BIT POS. 23 @VA02792 01128000
L R2,0(,R6) PICK UP TIMER VALUE @VA07222 01129100
LTR R2,R2 SET COND. CODE IF NEG @VA03848 01130000
BNM MAYHAP NOT NEG. NOW...BUT MAY GO NEG. @VA03848 01130100
SLR R2,R1 SUBTR. FROM INTV. TIMER @VA03848 01130200
ST R2,0(,R6) SAVE INTERIM VALUE @VA07222 01130310
LTR R5,R0 SAVE REMAINDER IN R5 (IF ANY) @VA03848 01130400
BZ NOINT IF NO REMAINDER...EXIT @VA03848 01130500
B DOREST OTHERWISE DO THE REST OF IT @VA03848 01130600
MAYHAP SLR R2,R1 SUBTR. FROM INTV. TIMER @VA03848 01130700
LTR R2,R2 SET COND CODE IF NEG. NOW @VA03848 01130800
ST R2,0(,R6) SAVE INTERIM VALUE @VA07222 01131100
LR R5,R0 SAVE REMAINDER IN REG 5 @VA02792 01132000
BC 11,*+8 NO INTERRUPT JUST YET @VA02792 01133000
BAL R9,INTINT SET INTERVAL TIMER INTERRUPT @VA02792 01134000
LTR R5,R5 ANY REMAINDER? @VA02792 01135000
BZ NOINT NO, ALL SET @VA02792 01136000
DOREST EQU * @VA03848 01136500
LR R1,R5 REMAINDER INTO REG 1 @VA02792 01137000
SLR R0,R0 CLEAR REG 0 @VA02792 01138000
NORMAL EQU * AND CONTINUE @VA02792 01139000
D R0,=F'13' CONVERT TO TIMER UNITS 01140000
L R2,0(,R6) GET VIRTUAL TIMER VALUE @VA07222 01141100
LTR R2,R2 SET COND. CODE IF NEGATIVE @VA03848 01142100
BNM MAYBE NOT NEG. NOW....BUT MAY GO NEG. @VA03848 01142200
SLR R2,R1 SUBTR. FROM INTV. TIMER @VA03848 01142300
ST R2,0(,R6) STORE VIRTUAL TIMER VALUE @VA07222 01142410
B NOINT NO INTERRUPT THIS TIME @VA03848 01142500
MAYBE SLR R2,R1 SUBTR. FROM INTV. TIMER @VA03848 01142600
LTR R2,R2 SET COND. CODE IF NEG. NOW @VA03848 01142700
ST R2,0(,R6) STORE VIRTUAL TIMER VALUE @VA07222 01143100
BC 11,NOINT NO INTERRUPT 01144000
BAL R9,INTINT SET INTERVAL TIMER INTERRUPT @V200198 01145000
NOINT EQU * 01146000
TM VMPSTAT,VMV370R EC MODE ALLOWED @VA0861 01147000
BCR 8,R3 NO -- EXIT 01148000
TM VMTLEVEL,VMSTMPT CPU TIMER STAMPED ? 01149000
BCR 8,R3 NO -- EXIT 01150000
CPTOFF EQU * 01151000
NI VMTLEVEL,X'FF'-VMSTMPT UNFLAG CPU TIMER STAMP 01152000
L R2,VMECEXT GET EXTENDED CONTROL BLOK 01153000
L R1,EXTCPTRQ-ECBLOK(,R2) POINT TO TRQBLOK 01154000
BAL R14,RESETIMR AND CANCEL TIMER REQUEST 01155000
LM R4,R5,TRQBTOD GET TOD AT TIMER REQUEST 01156000
LM R0,R1,TEMPSAVE AND CURRENT TOD 01157000
SLR R1,R5 GET ELAPSED TIME 01158000
BC 11,*+6 ... 01159000
BCTR R0,R0 ... @VA01553 01160000
SLR R0,R4 ... 01161000
LM R4,R5,EXTCPTMR-ECBLOK(R2) GET CPU TIMER 01162000
SLR R5,R1 GET NEW TIMER VALUE 01163000
BC 11,*+6 ... 01164000
BCTR R4,R0 ... @VA01553 01165000
SLR R4,R0 ... 01166000
TM VMTLEVEL,VMCPUTMR TRACKING VIRTUAL IN REAL? @VA04063 01166050
BNO EXIT NO - JUST SAVE IT FOR LATER @VA04063 01166100
STM R4,R5,VMTMOUTQ @VA10081 01166125
LTR R4,R4 HAS IT GONE NEGATIVE? @VA04063 01166150
BNM EXIT NO - OK TO SAVE @VA04063 01166200
NI VMTLEVEL,X'FF'-VMCPUTMR NO LONGER TRACKING @VA04063 01166250
L R2,VMECEXT POINT TO ECBLOK @VA04063 01166300
L R1,EXTCPTRQ-ECBLOK(,R2) POINT TO TRQBLOK AGAIN @VA04063 01166350
LM R0,R1,TRQBQUE PUT CURRENT TIME SLICE... @VA04063 01166400
STM R0,R1,VMTMOUTQ ...VALUE BACK @VA04063 01166450
STM R4,R5,EXTCPTMR-ECBLOK(R2) SAVE TIMER IN ECBLOK @VA04063 01166500
L R7,=X'10500000' CPU TIMER COLLATING VALUE @VA04063 01166550
L R8,=X'10050400' CPU TIMER INTERRUPT CODE @VA04063 01166600
BAL R9,CPTINT SET CPU TIMER INTERRUPT @VA04063 01166650
BR R3 EXIT @VA04063 01166700
EXIT EQU * @VA04063 01166750
STM R4,R5,EXTCPTMR-ECBLOK(R2) AND SAVE IN ECBLOK 01167000
BR R3 AND EXIT @V200820 01168000
EJECT 01169000
*. 01170000
* OPERATION - 01171000
* 01172000
* F. INTERRUPT PROCESSING FOR REAL TIMERS 01173000
* 1. FOR THE REAL LOCATION 80 TIMER, SET A VALUE OF -1 INTO 01174000
* THE USER'S VIRTUAL TIMER SLOT IN THE VMBLOK, POST A PENDING 01175000
* EXTERNAL INTERRUPT, AND EXIT 01176000
* 2. FOR THE REAL CPU TIMER, ADD THE ELAPSED TIME TO THE CURRENT 01177000
* VALUE OF THE TIMER AND TEST THE SIGN. IF IT IS NEGATIVE, 01178000
* FLAG A CPU TIMER INTERRUPT PENDING AND EXIT. IF 01179000
* IT IS POSITIVE, UNFLAG ANY PENDING INTERRUPT AND EXIT. 01180000
*. 01181000
SPACE 2 01182000
DMKSCH80 EQU * IRA FOR REAL TIMER INTERRUPT 01183000
USING *,R12 TEMPORARY ADDRESSABILITY 01184000
DROP R13 @V407577 01185100
LM R12,R13,ASCHDL MAIN ROUTINE BASE REG @V407577 01185200
USING DMKSCHDL,R12,R13 ADDRESSABILITY @V407577 01185300
BAL R9,INTINT SET INTERVAL TIMER INTERRUPT @V200198 01187000
SR R0,R0 GET TIMER VALUE 01188000
BCTR R0,0 OF -1 01189000
* R2 POINTS TO ACTIVE VIRTUAL LOC. 80 TIMER 01190100
LCTL C1,C1,VMSEG CORRECT ST0 @VA06414 01190200
LRA R2,TIMER-PSA VIRTUAL TIMER LOCATION? @VA06414 01190300
BZ *+8 OK @VA06414 01190400
LA R2,VMTIMER NOT THERE, USE ALTERNATE @VA06414 01190500
ST R0,0(,R2) SET NEW VALUE @VA06414 01190600
NI VMTLEVEL,X'FF'-VMSTMPI UNSTAMP LOC. 80 TIMER 01191000
GOTO DMKDSPCH AND TO RE-DISPATCH 01195000
EJECT 01195050
DMKSCHAE EQU * IRA FOR FAVORED PERCENTAGE USER @VA04341 01195100
USING *,R12 TEMPORARY ADDRESSABILITY @VA04341 01195150
DROP R13 @V407577 01195210
LM R12,R13,ASCHDL MAIN ROUTINE BASE REG @V407577 01195220
USING DMKSCHDL,R12,R13 ADDRESSABILITY @V407577 01195230
XC SCHBVAL,SCHBVAL DON'T FOUL UP QUEUE DROP LOGIC @VA04341 01195300
BAL R14,DROPLIST DROP FROM RUNNABLE LIST @VA05536 01195350
TM VMDSTAT,VMINQ USER IN A QUEUE ?? @VA05536 01195355
BZ GOTODSP NO, DON'T TRY TO DROP @VA05536 01195360
BAL R14,DROPQ DROP USER FROM ACTIVE QUEUE @VA05536 01195365
CL R11,AVMREAL THIS USER VIRT=REAL ?? @VA05536 01195370
BE GOTODSP YES, NO NEED TO FLUSH @VA05536 01195375
L R1,=A(DMKPTRUC) FLUSHED PAGE COUNT @VA08286 01195380
L R2,DMKSCHN1 USER IN Q1 @VA08286 01195385
A R2,DMKSCHN2 PLUS Q2 @VA08286 01195390
C R2,0(R1) BELOW THESHOLD @VA08286 01195395
BNH GOTODSP NO NEED TO FLUSH @VA08286 01195400
L R15,=A(DMKPTRRS) RESET PAGES @V408246 01195410
BALR R14,R15 @V408246 01195420
GOTODSP GOTO DMKDSPCH LET DSP CALL THE BOSS @VA05206 01195460
* AGAIN 01195500
EJECT 01196000
DMKSCHCP EQU * IRA FOR CPU TIMER INTERRUPTS 01197000
USING *,R12 TEMPORARY ADDRESSABILITY 01198000
DROP R13 @V407577 01199100
LM R12,R13,ASCHDL MAIN ROUTINE BASE REG @V407577 01199200
USING DMKSCHDL,R12,R13 ADDRESSABILITY @V407577 01199300
NI VMTLEVEL,X'FF'-VMSTMPT UNFLAG CPU TIMER STAMP 01201000
STCK TEMPSAVE SAVE TOD CLOCK 01202000
BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 01202100
L R2,VMECEXT POINT TO EXTENDED CONTROL BLOK 01203000
L R1,EXTCPTRQ-ECBLOK(,R2) POINT TO TIMER REQUEST BLOK 01204000
LM R4,R5,TRQBTOD GET TOD AT REQUEST 01205000
LM R0,R1,TEMPSAVE GET TOD NOW 01206000
LA R6,1 01207000
SLR R1,R5 GET ELAPSED TIME 01208000
BC 11,*+6 .. 01209000
SLR R0,R6 .. 01210000
SLR R0,R4 .. 01211000
SPACE 01212000
LM R4,R5,EXTCPTMR-ECBLOK(R2) GET CPU TIMER 01213000
SLR R5,R1 GET NEW TIMER VALUE 01214000
BC 11,*+6 .. 01215000
SLR R4,R6 .. 01216000
SLR R4,R0 .. 01217000
STM R4,R5,EXTCPTMR-ECBLOK(R2) AND SAVE IT 01218000
LTR R4,R4 IS TIMER NEGATIVE ?? 01219000
L R7,=X'10500000' GET CPU TIMER COLLATING VALUE @V200198 01220000
BM CPTPEND @V200198 01221000
LA R1,VMPXINT @V200198 01222000
CPTLOOP LR R2,R1 @V200198 01223000
L R1,XINTNEXT-XINTBLOK(,R2) @V200198 01224000
LTR R1,R1 @V200198 01225000
BZ CPTLEND @V200198 01226000
C R7,XINTSORT-XINTBLOK(,R1) @V200198 01227000
BH CPTLOOP @V200198 01228000
BL CPTLEND @V200198 01229000
L R0,XINTNEXT-XINTBLOK(,R1) @V200198 01230000
ST R0,XINTNEXT-XINTBLOK(,R2) @V200198 01231000
LA R0,XINTSIZE @V200198 01232000
CALL DMKFRET @V200198 01233000
B CPTLEND @V200198 01234000
CPTPEND L R8,=X'10050400' CPU TIMER INTERRUPT CODE @V200198 01235000
BAL R9,CPTINT SET CPU TIMER INTERRUPT @V200198 01236000
TM VMTLEVEL,VMCPUTMR TRACKING VIRTUAL IN REAL? @VA04063 01236100
BNO CPTLEND NO...GO TO DISPATCH @VA04063 01236200
NI VMTLEVEL,X'FF'-VMCPUTMR NO LONGER TRACKING @VA04063 01236300
L R2,VMECEXT POINT TO ECBLOK @VA04063 01236400
L R1,EXTCPTRQ-ECBLOK(,R2) POINT TO TRQBLOK AGAIN @VA04063 01236500
LM R7,R8,TRQBQUE PUT CURRENT TIME SLICE... @VA04063 01236600
STM R7,R8,VMTMOUTQ ...VALUE BACK @VA04063 01236700
CPTLEND GOTO DMKDSPCH GO TO DISPATCH @V200198 01237000
SPACE 1 01238000
INTINT SLR R7,R7 ZERO @V200198 01239000
L R8,=X'00800080' @V200198 01240000
CPTINT LA R2,VMPXINT @V200198 01241000
INTLOOP LR R4,R2 @V200198 01242000
L R2,XINTNEXT-XINTBLOK(,R4) @V200198 01243000
LTR R2,R2 @V200198 01244000
BZ INTADD @V200198 01245000
C R7,XINTSORT-XINTBLOK(,R2) @V200198 01246000
BH INTLOOP @V200198 01247000
BL INTADD @V200198 01248000
O R8,XINTCODE-XINTBLOK(,R2) @V200198 01249000
ST R8,XINTCODE-XINTBLOK(,R2) @V200198 01250000
BR R9 @V200198 01251000
INTADD LA R0,XINTSIZE @V200198 01252000
CALL DMKFREE @V200198 01253000
ST R1,XINTNEXT-XINTBLOK(,R4) @V200198 01254000
ST R2,XINTNEXT-XINTBLOK(,R1) @V200198 01255000
ST R7,XINTSORT-XINTBLOK(,R1) @V200198 01256000
ST R8,XINTCODE-XINTBLOK(,R1) @V200198 01257000
SLR R0,R0 @V200198 01258000
ST R0,XINTPARM-XINTBLOK(,R1) @V200198 01259000
BR R9 @V200198 01260000
.RTM2 ANOP 01261000
EJECT 01262000
DMKSCHST EQU * HERE TO SET TIMER REQUEST FROM OUTSIDE DMKSCHDL 01263000
USING *,R15 TEMPORARY ADDRESSABILITY 01264000
STM R0,R15,BALRSAVE SAVE CALLER'S REGISTERS 01265000
DROP R13 @V407577 01266100
LM R12,R13,ASCHDL MAIN ROUTINE BASE REG @V407577 01266200
USING DMKSCHDL,R12,R13 ADDRESSABILITY @V407577 01266300
DROP R15 01268000
BAL R14,SETIMER GO SET TIMER 01269000
LM R0,R15,BALRSAVE RESTORE REGISTERS 01270000
BR R14 AND EXIT 01271000
SPACE 3 01272000
DMKSCHRT EQU * HERE TO RESET TIMER FROM OUTSIDE DMKSCHDL 01273000
USING *,R15 TEMPORARY ADDRESSABILITY 01274000
STM R0,R15,BALRSAVE SAVE ALL REGISTERS 01275000
DROP R13 @V407577 01276100
LM R12,R13,ASCHDL MAIN ROUTINE BASE REG @V407577 01276200
USING DMKSCHDL,R12,R13 ADDRESSABILITY @V407577 01276300
DROP R15 01278000
BAL R14,RESETIMR GO RESET REQUEST 01279000
LM R0,R15,BALRSAVE RESTORE REGISTERS 01280000
BR R14 AND EXIT 01281000
SPACE 2 01282000
DMKSCHMD EQU * HERE AT MIDNIGHT TO CHANGE THE CLOCK 01283000
USING *,R12 TEMPORARY ADDRESSABILITY 01284000
DROP R13 @V407577 01285100
LM R12,R13,ASCHDL MAIN ROUTINE BASE REG @V407577 01285200
USING DMKSCHDL,R12,R13 ADDRESSABILITY @V407577 01285300
CALL DMKMIDNT CALL DATE CHANGE ROUTINE 01287000
GOTO DMKDSPCH AND LEAVE 01288000
EJECT 01289000
*. 01290000
* OPERATION - 01291000
* 01292000
* G. TIMER REQUEST QUEUE MAINTENANCE 01293000
* 1. TO ESTABLISH A TOD CLOCK INTERRUPT REQUEST, CHAIN DOWN THE 01294000
* LIST OF PENDING REQUESTS UNTIL A TRQBLOK FOR A REQUEST WITH 01295000
* A CLOCK VALUE GREATER THAN OR EQUAL TO THE CURRENT ONE IS 01296000
* FOUND. WHEN IT IS, INSERT THE NEW REQUEST INTO THE CHAIN 01297000
* AHEAD OF IT. IF THE NEW REQUEST IS THE FIRST ONE IN THE 01298000
* CHAIN, ISSUE A SET CLOCK COMPARATOR INSTRUCTION FOR THE 01299000
* VALUE IN THE TRQBLOK 01300000
* 2. TO RESET A REQUEST, REMOVE THE TRQBLOK FROM THE CHAIN. IF 01301000
* THE BLOCK REMOVED WAS THE 1ST ONE, ISSUE A SET CLOCK COMP- 01302000
* ARATOR INSTRUCTION FOR THE VALUE IN THE FOLLOWING BLOCK 01303000
*. 01304000
SPACE 2 01305000
SETIMER EQU * HERE TO ESTABLISH A CLOCK COMPARATOR REQUEST 01306000
SPACE 01307000
STM R0,R3,TEMPSAVE+32 SAVE THESE REGISTERS 01308000
LA R0,DMKSCHTQ POINT TO QUEUE OF OUTSTANDING REQUESTS 01309000
LR R2,R0 SAVE ADDRESS 01310000
LOCK OBTAIN,TYPE=TR,SPIN=YES,SAVE LOCK THE TRQ CHAIN @V407577 01310100
SPACE 01311000
TIMELOOP L R2,TRQBFPNT-TRQBLOK(,R2) POINT TO NEXT BLOK ON LIST 01312000
CLC TRQBVAL,TRQBVAL-TRQBLOK(R2) IS NEW REQUEST SHORTER ?? 01313000
BH TIMELOOP NO -- 01314000
BL QTIME YES - QUEUE IN FRONT @VA06136 01314100
CR R2,R0 IS IT THE END OF QUEUE ?? @VA06136 01314200
BNE TIMELOOP NO - KEEP SEARCHING @VA06136 01314300
SPACE 01315000
QTIME L R3,TRQBBPNT-TRQBLOK(,R2) GET BACKCHAIN POINTER 01316000
STM R2,R3,TRQBFPNT AND CHAIN IN NEW REQUEST 01317000
ST R1,TRQBFPNT-TRQBLOK(,R3) TO PREVIOUS 01318000
ST R1,TRQBBPNT-TRQBLOK(,R2) AND NEXT BLOK 01319000
SPACE 01320000
CR R3,R0 FIRST BLOK 01321000
BE SETCKC YES, SET NEW REQUEST @V407577 01322100
TM APSTAT1,APUOPER RUNNING AN AP SYSTEM @V407577 01322200
BNO TIMEXIT NO, NO NEED TO CHECK FURTHER @V407577 01322300
L R3,PREFIXB POINT TO OTHER PREFIX @V407577 01322400
B FINDTRQ GO SCAN FOR NEW ACTIVE TRQ @V407577 01322500
SPACE 01323000
SETCKC SCKC TRQBVAL YES -- SET NEW COMPARATOR REQUEST 01324000
ST R1,ACTIVTRQ INDICATE THE ACTIVE TRQ IN PSA @V407577 01324100
SPACE 01325000
TIMEXIT LOCK RELEASE,TYPE=TR,SPIN=,SAVE @V407577 01326100
LM R0,R3,TEMPSAVE+32 RESTORE REGISTERS @V407577 01326200
BR R14 AND EXIT 01327000
SPACE 2 01328000
RESETIMR EQU * RESET A CLOCK COMPARATOR REQUEST 01329000
TM APSTAT1,APUOPER RUNNING AN AP SYSTEM? @V407577 01329100
BO MPRESET YES, SPECIAL HANDLING REQUIRED @V407577 01329200
SPACE 01330000
STM R0,R3,TEMPSAVE+32 SAVE THESE REGISTERS 01331000
LA R0,DMKSCHTQ POINT TO QUEUE OF REQUESTS 01332000
LM R2,R3,TRQBFPNT GET CHAIN POINTERS 01333000
ST R2,TRQBFPNT-TRQBLOK(,R3) UNCHAIN THIS BLOK 01334000
ST R3,TRQBBPNT-TRQBLOK(,R2) -- 01335000
CR R3,R0 UNCHAINING THE 1ST BLOK ?? 01336000
BNE TIMEXIT NO -- 01337000
LR R1,R2 POINT TO NEW 1ST BLOK 01338000
B SETCKC AND GO ESTABLISH REQUEST 01339000
MPRESET EQU * CLOCK COMPARATOR RESET FOR AP SYSTEMS @V407577 01339010
STM R0,R3,TEMPSAVE+32 SAVE THESE WORK REGISTERS @V407577 01339020
LA R0,DMKSCHTQ PICK UP POINTER TO TRQ ANCHOR @V407577 01339030
LOCK OBTAIN,TYPE=TR,SPIN=YES,SAVE AND LOCK THE CHAIN@V407577 01339040
LR R2,R0 @V407577 01339050
TRQSCAN L R2,TRQBFPNT-TRQBLOK(,R2) POINT TO NEXT TRQBLOK @V407577 01339060
CR R2,R0 BACK TO THE ANCHOR? @V407577 01339070
BE LOCKDSQ YES, THE TRQBLOK MUST BE ON @V407577 01339080
* THE DISPATCHER QUEUE 01339090
CR R2,R1 IS THIS THE TRQBLOK BEING RESET? @V407577 01339100
BE UNCHAIN YES, GO UNCHAIN IT @V407577 01339110
B TRQSCAN CONTINUE THE SEARCH @V407577 01339120
LOCKDSQ LOCK OBTAIN,TYPE=DS,SPIN=YES,SAVE LOCK THE QUEUE @V407577 01339130
LM R2,R3,TRQBFPNT GET CHAIN POINTERS @V407577 01339140
ST R2,TRQBFPNT-TRQBLOK(,R3) UNCHAIN THIS BLOK @V407577 01339150
ST R3,TRQBBPNT-TRQBLOK(,R2) -- @V407577 01339160
LH R2,VMSTKCNT PICK UP COUNT OF STACKED BLOCKS @V407577 01339170
BCTR R2,0 AND DECREMENT BY ONE @V407577 01339180
STH R2,VMSTKCNT AND SAVE IT AWAY @V407577 01339190
LOCK RELEASE,TYPE=DS,SPIN=,SAVE @V407577 01339200
B TIMEXIT EXIT...COMPARATOR IS ALREADY SET @V407577 01339210
UNCHAIN LM R2,R3,TRQBFPNT GET CHAIN POINTERS @V407577 01339220
ST R2,TRQBFPNT-TRQBLOK(,R3) UNCHAIN THIS BLOK @V407577 01339230
ST R3,TRQBBPNT-TRQBLOK(,R2) -- @V407577 01339240
SETACTIV L R3,PREFIXB POINT TO THE OTHER PSA AREA @V407577 01339250
L R2,ACTIVTRQ-PSA(,R3) POINTER TO ACTIVE TRQBLOK@V407577 01339260
CR R1,R2 IS THIS TRQBLOK ACTIVE ON THE @V407577 01339270
* OTHER PROCESSOR? 01339280
BNE NOCLEAR NO, NO NEED TO CLEAR THE POINTER @V407577 01339290
SR R0,R0 CLEAR FOR THE STORE @V407577 01339300
ST R0,ACTIVTRQ-PSA(,R3) ZIP IT OUT @V407577 01339310
NOCLEAR L R2,ACTIVTRQ IS THE RESET TRQBLOK ACTIVE @V407577 01339320
CR R1,R2 ....ON THIS PROCESSOR? @V407577 01339330
BNE TIMEXIT NO, THEN EXIT @V407577 01339340
FINDTRQ LA R0,DMKSCHTQ POINTER TO THE TRQBLOK ANCHOR @V407577 01339350
LR R2,R0 SET UP FOR THE SCAN LOOP @V407577 01339360
NEXTTRQ L R2,TRQBFPNT-TRQBLOK(,R2) POINT TO NEXT TRQBLOK @V407577 01339370
CR R2,R0 ARE WE BACK TO THE ANCHOR? @V407577 01339380
BE GOSET YES, SET THE DISTANT FUTURE @V407577 01339390
C R2,ACTIVTRQ-PSA(,R3) IS THIS TRQBLOK ALREADY @V407577 01339400
* ACTIVE ON THE OTHER PROCESSOR? 01339410
BE NEXTTRQ YES, CONTINUE THE SCAN @V407577 01339420
GOSET LR R1,R2 SETCKC WANTS THE POINTER IN R1 @V407577 01339430
B SETCKC AND GO SET IT @V407577 01339440
EJECT 01340000
*. 01341000
* OPERATION - 01342000
* 01343000
* H. CPU UTILIZATION MAINTENANCE 01344000
* 1. USING SAME TIMER REQUEST BLOCK AS CAUSED CONTROL TO BE 01345000
* BROUGHT HERE (INITIATED BY DMKCPI), REESTABLISH NEXT TIMER 01346000
* INTERRUPT 30 SECONDS FROM NOW BY CALLING DMKSCHST. 01347000
* 2. CALCULATE TOTAL WAIT TIME IN 30 SECOND INTERVAL SINCE LAST 01348000
* TIME THROUGH THIS ROUTINE AND UPDATE SMOOTHED VALUE OF WAIT 01349000
* IN DMKSCHCU FIELD. 01350000
*. 01351000
DMKSCHTI EQU * @V2B2638 01352000
USING PSA,R0 LOW CORE ADDRESSABILITY @V2B2638 01353000
USING TRQBLOK,R10 TIMER REQUEST BLOC ADDRESSABILITY@V2B2638 01354000
USING *,R12 @V2B2638 01355000
DROP R13 @V407577 01357100
LM R12,R13,ASCHDL MAIN ROUTINE BASE REG @V407577 01357200
USING DMKSCHDL,R12,R13 ADDRESSABILITY @V407577 01357300
L R2,PREFIXB GET PREFIX VALUE OF OTHER PROC @V4M0102 01357310
TM CPSTATUS-PSA(R2),CPWAIT IS OTHER PROC IN WAIT? @V4M0102 01357410
BNO SETTRQ NO, GO SET NEXT TRQ @V4M0102 01357510
TM CPSTATUS-PSA(R2),CPSUPER IS OTHER PROC IN @V4M0102 01357610
* SUPERVISOR STATE? @V4M0102 01357710
BO SETTRQ YES, GO SET NEXT TRQ @V4M0102 01357810
SIGNAL WAKEUP WAKE UP IDLE PROCESSOR @V4M0102 01357910
SETTRQ DS 0H @V4M0102 01358010
LR R1,R10 SET ADDR OF TRQ FOR DMKSCHST @V4M0102 01358110
STCK TRQBTOD GET PRESENT TOD @V2B2638 01359000
BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 01359100
L R5,DMKSCHLI SAMPLE INTERVAL IN SECONDS @V2B2638 01360000
SR R4,R4 ZIP @V2B2638 01361000
M R4,=F'1000000' CONVERT TO MICRO SECS @V2B2638 01362000
SLDL R4,12 ALIGN TO TOD FORMAT @V2B2638 01363000
AL R5,TRQBTOD+4 ADD IN TOD LOW ORDER BITS @V2B2638 01364000
BC 12,*+8 SKIP IF NO OVERFLOW @V2B2638 01365000
AL R4,F1 ADD ONE SEC IF OVERFLOW @V2B2638 01366000
AL R4,TRQBTOD ADD IN HIGH ORDER TOD BITS @V2B2638 01367000
STM R4,R5,TRQBVAL NEXT INTERRUPT DUE AT THIS TIME @V2B2638 01368000
CALL DMKSCHST TICK...TOCK...TICK @V2B2638 01369000
SR R2,R2 ZIP @V2B2638 01370000
SR R1,R1 CLEAR FOR A CONSTANT INDEX @V407577 01370100
TM APSTAT1,PROCIPL IS THIS THE IPL'ED PROCESSOR? @VMV0008 01370240
BO CALCWAIT YES, UPDATE THE CPU'S VALUES @V407577 01370300
PREFIX L R2,PREFIXB POINT TO THE OTHER PSA @V407577 01370400
CALCWAIT LM R4,R5,IDLEWAIT-PSA(R2) GET INTERVAL IDLE TIME @V407577 01371100
SLDL R4,2 TO WITHIN 4.8% OF NEAREST 1/4 SEC@V407577 01371200
L R5,OLDWAIT(R1) PREVIOUS CHECKPOINT @V407577 01371300
ST R4,OLDWAIT(R1) NEW CHECKPOINT @V407577 01371400
SR R5,R4 @V407577 01371500
LM R6,R7,IONTWAIT-PSA(R2) COMPUTE INTERVAL IOWAIT @V407577 01371600
SLDL R6,2 TO WITHIN 4.8% OF NEAREST 1/4 SEC@V407577 01371700
L R7,OLDIOWT(R1) @V407577 01371800
ST R6,OLDIOWT(R1) @V407577 01371900
SR R7,R6 @V407577 01372000
LM R8,R9,PAGEWAIT-PSA(R2) COMPUTE INTERVAL PGWAIT @V407577 01372100
SLDL R8,2 WITHIN 4.8% OF NEAREST 1/4 SEC @V407577 01372200
L R9,OLDPWT(R1) @V407577 01372300
ST R8,OLDPWT(R1) @V407577 01372400
SR R9,R8 @V2B2638 01385000
AR R5,R7 COMPUTE TOTAL INTERVAL WAIT @V2B2638 01386000
AR R5,R9 @V2B2638 01387000
LR R3,R5 @V2B2638 01388000
SR R4,R4 @V2B2638 01389000
D R4,=F'21' ADD 4.8% TO CORRECT ERROR @V2B2638 01390000
C R4,F10 IS REMAINDER SIGNIFICANT @V2B2638 01391000
BNH NOFIXUP NO, NO CORRECTION TO MAKE @V2B2638 01392000
LA R5,1(,R5) YES, ADD 1 TO 4.8% VALUE @V2B2638 01393000
NOFIXUP AR R3,R5 NOW TO NEAREST 1/4 SEC @V2B2638 01394000
L R7,DMKSCHCU(R1) SMOOTH WAIT VALUE..TO 1/4 SEC @V407577 01395100
SR R6,R6 @V2B2638 01396000
M R6,F3 @V2B2638 01397000
ALR R3,R7 TOTAL NEW VALUE @V2B2638 01398000
SRL R3,2 (NEW + 3OLD)/4 @V2B2638 01399000
ST R3,DMKSCHCU(R1) SAVE NEW VALUE @V407577 01400050
TM APSTAT1,APUOPER RUNNING AN AP SYSTEM? @V407577 01400100
BNO OUT NO, ALL DONE @V407577 01400150
C R1,F16 ARE THE APU'S VALUES UPDATED? @V407577 01400200
BE OUT YES, ALL FINISHED @V407577 01400250
L R1,F16 BUMP THE INDEX TO POINT TO THE @V407577 01400300
* ATTACHED PROCESSOR VALUES 01400350
SR R2,R2 CLEAR THE PSA INDEX @V407577 01400400
TM APSTAT1,PROCIPL IS THIS THE IPL'ED PROCESSOR? @VMV0008 01400460
BO PREFIX YES, GO POINT TO APU PSA AREA @V407577 01400500
B CALCWAIT THIS PROCESSOR IS THE APU @V407577 01400550
OUT GOTO DMKDSPCH @V2B2638 01401000
EJECT 01402000
* CONSTANTS, QUEUE ANCHORS, ETC.. 01403000
* 01404000
ASCHDL DC A(DMKSCHDL,DMKSCHDL+4096) @V407577 01404100
DMKSCHS1 DC F'0' SMOOTHED COUNT OF Q1 USERS*1024 @V2B2638 01407000
DMKSCHS2 DC F'0' SMOOTHED COUNT OF Q2 USERS*1024 @V2B2638 01408000
DMKSCHCO DC F'0' SMOOTHED CORE UTILIZATION * 1024 @V2B2638 01409000
DMKSCHSC DC F'1024' SMOOTHED S. C. RATIO * 1024 @V2B2638 01410000
* 01410100
* THE FOLLOWING EIGHT WAIT SAVE AREAS MUST BE CONTIGUOUS 01410200
* 01410300
DMKSCHCU DC F'120' SMOOTHED WAIT TIME VALUE TO 1/4 @V407577 01410400
* SEC ( CPU VALUE ) 01410500
OLDWAIT DC X'FFFFFFFF' WORK AREA @V2B2638 01411000
OLDIOWT DC X'FFFFFFFF' INITIAL VALUE OF I/OWAIT @V2B2638 01412000
OLDPWT DC X'FFFFFFFF' INITIAL VALUE OF PAGE WAIT @V2B2638 01413000
DMKSCHCA DC F'120' SMOOTHED WAIT TIME VALUE TO 1/4 @V407577 01413100
* SEC ( APU VALUE ) 01413200
OLDWAITA DC X'FFFFFFFF' WORK AREA (APU ) @V407577 01413300
OLDIOWTA DC X'FFFFFFFF' INITIAL VALUE OF I/OWAIT (APU) @V407577 01413400
OLDPWTA DC X'FFFFFFFF' INITIAL VALUE OF PAGE WAIT (APU) @V407577 01413500
DMKSCHLI DC F'30' WAIT TIME SAMPLING INTERVAL IN @V2B2638 01414000
* SECS 01415000
* 01416000
SPACE 2 01417000
DMKSCHTQ DS 0D DUMMY TIMER REQUEST BLOK 01418000
DC 2F'-1' LARGE REQUEST IF QUEUE EMPTY 01419000
DC 2A(DMKSCHTQ) REQUEST QUEUE ANCHOR 01420000
SPACE 2 01421000
DMKSCHRL DC 2A(DMKSCHRL) LIST OF DISPATCHABLE VMBLOKS 01422000
DMKSCHEL EQU * ENTRY POINT FOR CPINIT AUTOLOG @V305535 01423000
SPACE 01424000
WAITQ1 DC 2A(WAITQ1) LIST OF VMBLOKS WAITING FOR Q1 01425000
SPACE 01426000
WAITQ2 DC 2A(WAITQ2) LIST OF VMBLOKS WAITING FOR Q2 01427000
DMKSCHW1 DC H'0' COUNT OF USERS ELIGIBLE FOR Q1 01428000
DMKSCHW2 DC H'0' COUNT OF USERS ELIGIBLE FOR Q2 01429000
SPACE 2 01430000
DMKSCHQ1 EQU * 01431000
QUEUE1 DC F'0' .2 SECOND USER IS ALLOWED TO 01432000
DC X'30D40000' STAY IN QUEUE 1. 01433000
DMKSCHN1 DC F'0' Q1 COUNT 01434000
SPACE 01435000
DMKSCHQ2 EQU * 01436000
QUEUE2 DC X'00000001' 2.0 SECONDS USER IS ALLOWED TO 01437000
DC X'E8480000' STAY IN QUEUE 2. 01438000
DMKSCHN2 DC F'0' Q2 COUNT 01439000
SPACE 2 01440000
PAGUSAGE DC F'0' SUM OF ACTIVE WORKING SETS 01441000
SPACE 01442000
ENTRY DMKSCHPU ENTRY FOR MEASUREMENT 01443000
DMKSCHPU EQU PAGUSAGE 01444000
SPACE 2 01445000
DMKSCHPG DC F'16' ALLOWABLE PAGING OVERHEAD 01446000
SPACE 01447000
ENTRY DMKSCHPB,DMKSCHUB,DMKSCHIB,DMKSCHPD 01448000
DMKSCHPB DC H'0' PAGING BIAS WEIGHT FACTOR 01449000
DMKSCHUB DC H'1' USER PRIORITY BIAS WEIGHT FACTOR 01450000
DMKSCHIB DC H'0' INTERACTIVE USER BIAS 01451000
DMKSCHPD DC H'0' PAGING DELAY SHIFT 01452000
SPACE 2 01453000
* ASSURED EXECUTION USER CONTROL 01454000
SPACE 01455000
DMKSCHAP DC 4D'0' CHANGED BY DMKCFS (SET FAVORED) @VA04341 01456100
AEXPQUE1 EQU DMKSCHAP QUE 1 FAVORED PERCENTAGE @VA04341 01456200
AEXPQUE2 EQU DMKSCHAP+16 QUE 2 FAVORED PERCENTAGE @VA04341 01456300
SPACE 01457000
DMKSCHAU DC A(0) A(VMBLOK) OF ASSURED PERCENTAGE USER 01458000
SPACE 01459000
* 01460050
* THE FOLLOWING FIELDS ARE DEPENDENT AND MUST NOT BE 01460100
* ORDERED IN AND WAY. 01460150
* 01460200
SCHBLOK DS 0D ALIGNMENT @VA04341 01460250
DMKSCHBK EQU * ENTRY POINT FOR DMKTMRPT @VA05288 01460275
SCHBVAL DC D'0' TOD CLOCK COMPARATOR VALUE FOR @VA04341 01460300
* INTERRUPT 01460350
SCHBFPNT DC F'0' FORWARD POINTER (NOT USED) @VA04341 01460400
SCHBBPNT DC F'0' BACKWARD POINTER (NOT USED) @VA04341 01460450
SCHBAEXP DC D'0' 'VMHIPRI' TIME SLICE VALUE @VA04341 01460500
SCHBUSER DC F'0' ADDRESS OF VMBLOK FOR FAVORED @VA04341 01460550
* USER 01460600
SCHBIRA DC A(DMKSCHAE) INTERRUPT RETURN FROM CLOCK COMP.@VA04341 01460650
SCHBQUE DC D'0' NOT USED @VA04341 01460700
SPACE 1 01460750
DMKSCHAL DC X'00' QUEUE DROP FLAG FOR MONITOR 01461000
* 01462000
* BIT DEFINED IN 'DMKSCHAL' 01463000
TSEND EQU X'20' USER VOLUNTARILY DROPPED FROM Q2 @V2B2638 01464000
* 01465000
EJECT 01466000
* QUEUE CONTROL BLOK DSECT 01467000
SPACE 01468000
VMQBLOK DSECT 01469000
VMQTIME DS D TIME-IN-Q, DOUBLE PRECISION 2'S COMPLEMENT TOD UNITS 01470000
VMQNUM DS F NUMBER OF USERS IN THIS QUEUE 01471000
SPACE 2 01472000
CPAUTEL EQU X'80' AUTOLOGGED ELIGIBLE USERS READY @V305535 01473000
EJECT 01474000
PSA 01475000
Q1DROP EQU X'40' 01476000
COPY VMBLOK 01477000
COPY XINTBLOK @V200198 01478000
COPY TIMER 01479000
COPY CORE 01480000
COPY EQU 01481000
END 01482000