1 TITLE CLKCSS - SCHEDULING ALOGRITHM FOR NON-SWAPPING SYSTEMS
\r
2 SUBTTL T. HASTINGS/TH TS3.17 6 SEP 67 V001
\r
4 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP
\r
6 ;SCHEDULING ALGORITHM IS:
\r
7 ;CALLED EVERY 60TH OF A SECOND WHEN CURRENT JOB IS USER MODE
\r
8 ;CALLED WHEN CURRENT JOB IS IN EXEC MODE AND:
\r
9 ; 1. JUST STARTED TO WAIT FOR IO
\r
10 ; 2. JUST STARTED TO WAIT FOR A BUSY SHARABLE DEVICE
\r
11 ; 3. RETURNING TO USER AFTER TYPING CONTROL C
\r
12 ; 4. RETURNING TO USER AFTER CLOCK TRIED TO INTERRUPT
\r
13 ; CURRENT JOB WHILE IT WAS IN EXEC MODE
\r
14 ; 5. AND ERROR OCCURRED IN CURRENT JOB
\r
16 ;CALL: SETOM TIMEF ;IF CLOCK HAS GONE OFF SINCE LAST CALL
\r
18 ; RETURN WITH NEXT JOB TO RUN IN AC ITEM
\r
20 ;INTIALIZE SCHEDULER(CALLED FROM IOINI1 BEFORE ALL OTHER
\r
21 ; DEVICES ARE INITIALIZED)
\r
25 NXTINI: MOVSI TAC,-NQUEUE ;NO. OF QUEUES
\r
26 SETZM AVALTB(TAC) ;CLEAR SHARABLE DEVICE AVAILABLE FLAGS
\r
27 SETOM REQTAB(TAC) ;SET SHARABLE DEVICE REQUEST COUNT TO -1
\r
28 ;IE NO JOB WAITING OR USING DEVICE
\r
29 AOBJN TAC,.-2 ;OTHER DEVICE INITIALIZATION
\r
30 POPJ PDP, ;MAY CHOOSE TO SET REQUEST TO MORE
\r
31 ;NEG. VALUE IF MORE THEN ON JOB CAN
\r
34 INTERNAL FTTRPSET,FTDISK
\r
35 EXTERNAL JOB,TIMEF,JBTSTS,JOBMAX,JOBN,PJBSTS,CPOPJ,CHKSHF
\r
40 Q1=DEVDAT ;QUEUE NO. SHIFTED TO MATCHING POS. OF JBTSTS WORD
\r
41 C=DAT ;COUNT OF JOB LEFT TO SCAN
\r
44 NXTJOB: PUSHJ PDP,CHKSHF ;SHUFFLE CORE IF NEEDED
\r
46 SKIPN ITEM,JOB ;CURRENT JOB NO.. IS IT NULL JOB?
\r
47 JRST NXT0 ;YES, DO NOT DECREMENT QUANTUM RUN TIME
\r
48 SKIPE TIMEF ;NO, IS THIS A CLOCK INTERRUPT CALL?
\r
49 SOSA T,JBTSTS(ITEM) ;YES, DECREMENT QUANTUM RUN TIME
\r
51 SKIPA T,JBTSTS(ITEM) ;NO, JUST PICKUP STATUS WORD
\r
52 TRNE T,-1 ;REDUCE TIME TO ZERO YET?
\r
54 HRR T,RNQUNT ;YES, RESET FOR RUN QUEUE QUANTUM
\r
55 NXT0: SETOM RNAVAL ;FLAG TO SCAN RUN QUEUE FOR DIFFERENT JOB
\r
56 NXT1: HRRM T,JBTSTS(ITEM) ;STORE MODIFIED QUANTUM RUN TIME
\r
57 MOVEI Q,MAXQ ;HIGHEST PRIORITY QUEUE SCANNED FIRST
\r
58 NXT2: SKIPN AVALTB(Q) ;SHOULD THIS QUEUE BE SCANNED FOR A RUNABLE JOB?
\r
59 NXT3: SOJGE Q,NXT2 ;NO, LOOK AT NEXT LOWEST PRIORITY QUEUE
\r
60 JUMPL Q,NXT7 ;YES, LOOKED AT QUEUES NQUEUE-1..,0?
\r
61 MOVE Q1,Q ;MOVE QUEUE INDEX TO PROPER POS.
\r
62 ROT Q1,^D17-JWPOS ;TO MATCH JOB STATUS WORD
\r
63 MOVEI C,JOBMAX ;NO, SACN ALL JOBS(EXECEPT NULL JOB)
\r
64 AOSA ITEM,JOBP(Q) ;SCAN ALL OTHER JOBS IN THIS QUEUE FIRST
\r
66 NXT4: SETOM RNAVAL ;FLAG RUN QUEUE BEING SCANNED
\r
68 NXT5: CAIL ITEM,JOBN ;GREATER THEN HIGHEST JOB NO.?
\r
69 MOVEI ITEM,1 ;YES, RESET TO 1(SKIP NULL JOB)
\r
70 HLRZ T,JBTSTS(ITEM) ;IS JOB RUNABLE?
\r
71 TRZ T,RUNMSK+CMWB ;MASK OUT JOB STATUS BITS WHICH DO NOT MATTER
\r
72 CAIN T,RUNABLE(Q1) ;ADD IN QUEUE NO. IN PROPER POSITION
\r
73 JRST NXT8 ;YES, IT IS RUNABLE AND IS IN THIS QUEUE
\r
74 NXT6: SOJLE C,NXT3 ;NO IT IS NOT, SCANNED ALL JOBS YET?
\r
75 AOJA ITEM,NXT5 ;NO, LOOK AT NEXT JOB
\r
76 \f;HERE IF NO JOBS FOUND TO RUN(Q=-1)
\r
78 NXT7: MOVEI C,JOBN ;SCAN ALL JOBS INCLUDING POSSIBLY NULL JOB
\r
79 MOVE ITEM,JOB ;STARTING WITH LAST JOB TO RUN
\r
80 SKIPN Q1,RNAVAL ;HAS RUN QUEUE(Q,Q1=7) BEEN SCANNED?
\r
81 AOJA Q,NXT4 ;NO, FLAG THAT IS HAS AND SCAN RUN QUEUE(Q,Q1=2)
\r
82 SETZB ITEM,RNAVAL ;YES, CLEAR FLAG, SET NULL JOB TO RUN
\r
88 MOVE T,STOPTS ;HAS A TRPSET UUO BEEN DONE FOR JOB1
\r
90 CAIE ITEM,1 ;IS THIS JOB 1?
\r
91 JUMPN T,NXT6 ;KEEP LOOKING IF NOT JOB1 AND
\r
95 CAIE Q,TSQ ;IS THIS TTY WAIT SATISFIED Q?
\r
96 CAIN Q,WSQ ;IS THIS IO WAIT SATISFIED QUEUE?
\r
97 SOSGE AVALTB(Q) ;YES, DECREMENT COUNT OF JOBS WITH SATISFIED IO
\r
98 SETZM AVALTB(Q) ;NO, CLEAR AVAILABLE FLAG FOR THIS QUEUE
\r
99 MOVEM ITEM,JOBP(Q) ;SAVE JOB NUMBER FOR THIS QUEUE FOR NEXT TIME
\r
100 JUMPE Q,CPOPJ ;IS THIS RUN QUEUE?
\r
101 MOVEI T,RNQ ;NO, SET STATE CODE TO RUN
\r
102 DPB T,PJBSTS ;CLEAR WAIT CODE(SO HE WILL BE IN RUN QUEUE)
\r
103 MOVE T,QUANTS(Q) ;SET QUANTUM RUNNING TIME FOR QUEUE
\r
104 HRRM T,JBTSTS(ITEM) ;WHICH JOB HAS JUST LEFT
\r
107 \fINTERNAL FTCHECK,FTMONP
\r
109 IFN FTCHECK+FTMONP,<
\r
110 EXTERNAL JOBP,AVALTB,REQTAB,QUANTS
\r
113 < EXTERNAL A'AVAL,A'REQ,A'QUNT
\r
122 IFE FTCHECK+FTMONP,<
\r
123 ;APPROPRIATE ENTRY IS NON-ZERO WHEN SCHEDULER SHOULD LOOK
\r
124 ;AT THAT QUEUE TO FIND A JOB TO RUN
\r
125 ;WSAVAL CONTAINS THE NO. OF JOBS WITH IO WAIT SATISFIED(0=NONE)
\r
126 ;SIMILARLY FOR TSAVAL
\r
129 < INTERNAL A'AVAL,A'Q
\r
136 AVALTB: QUEUES ;GENERATE THE AVAL FLAGS
\r
140 NQUEUE=LOC ;NO. OF QUEUES COUNTING RUN QUEUE
\r
141 XP MAXQ,NQUEUE-1 ;MAX STATE CODE WHICH HAS A QUEUE
\r
143 ;DEFINE STATE CODES WHICH DO NOT HAVE QUEUES ASSOCIATED WITH THEM
\r
153 \fIFE FTCHECK+FTMONP,<
\r
154 ;LAST JOB SCHEDULED FOR EACH QUEUE
\r
156 JOBP: REPEAT NQUEUE,< EXP 1>
\r
158 ;SHARABLE DEVICE REQUEST TABLE(GENERAL;IZED FOR OTHER QUEUES TOO)
\r
159 ;CONTAINS THE NUMBER OF JOBS WAITING TO USE SHARABLE DEVICE
\r
160 ;WSREG AND RNREG ARE UNUSED
\r
171 \f;QUANTUM RUNNING TIME FOR EACH QUEUE IN JIFFIES(CLOCK TICKS)
\r