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