2ccc5accdb4ee577eafc9c9a1cc8b05594ddfc8d
[retro-software/dec/tops10/v4.5.git] / src / clkcss.mac
1 TITLE   CLKCSS - SCHEDULING ALOGRITHM FOR NON-SWAPPING SYSTEMS\r
2 SUBTTL  T. HASTINGS/TH TS3.17 6 SEP 67 V001\r
3 XP      VOLKCS,001\r
4                 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
5 \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
15 \r
16 ;CALL:  SETOM TIMEF             ;IF CLOCK HAS GONE OFF SINCE LAST CALL\r
17 ;       PUSHJ PDP,NXTJOB\r
18 ;       RETURN WITH NEXT JOB TO RUN IN AC ITEM\r
19 \r
20 ;INTIALIZE SCHEDULER(CALLED FROM IOINI1 BEFORE ALL OTHER\r
21 ;       DEVICES ARE INITIALIZED)\r
22 \r
23 INTERNAL NXTINI\r
24 \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
32                                 ;USE DEVICE AT ONCE\r
33 \fINTERNAL NXTJOB\r
34 INTERNAL FTTRPSET,FTDISK\r
35 EXTERNAL JOB,TIMEF,JBTSTS,JOBMAX,JOBN,PJBSTS,CPOPJ,CHKSHF\r
36 ENTRY XCKCSS\r
37 \r
38 T=TAC           ;TEMPORARY\r
39 Q=TAC1          ;QUEUE NO.\r
40 Q1=DEVDAT       ;QUEUE NO. SHIFTED TO MATCHING POS. OF JBTSTS WORD\r
41 C=DAT           ;COUNT OF JOB LEFT TO SCAN\r
42 \r
43 XCKCSS:\r
44 NXTJOB: PUSHJ PDP,CHKSHF        ;SHUFFLE CORE IF NEEDED\r
45         SETZM T\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
50                                 ;IN JOB STATUS WORD\r
51         SKIPA T,JBTSTS(ITEM)    ;NO, JUST PICKUP STATUS WORD\r
52         TRNE T,-1               ;REDUCE TIME TO ZERO YET?\r
53         JRST NXT1               ;NO\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
65 \r
66 NXT4:   SETOM RNAVAL            ;FLAG RUN QUEUE BEING SCANNED\r
67 \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
77 \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
83         POPJ PDP,               ;RETURN\r
84 \r
85 NXT8:\r
86 IFN FTTRPSET,<\r
87         EXTERNAL STOPTS\r
88         MOVE T,STOPTS                   ;HAS A TRPSET UUO BEEN DONE FOR JOB1\r
89                                         ;WITH NON ZERO AC?\r
90         CAIE ITEM,1                     ;IS THIS JOB 1?\r
91         JUMPN T,NXT6                    ;KEEP LOOKING IF NOT JOB1 AND\r
92                                         ;STOPTS FLAG SET\r
93 >\r
94 \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
105         POPJ    PDP,            ;RETURN\r
106 \r
107 \fINTERNAL FTCHECK,FTMONP\r
108 \r
109 IFN FTCHECK+FTMONP,<\r
110 EXTERNAL JOBP,AVALTB,REQTAB,QUANTS\r
111 \r
112 DEFINE X(A,B)\r
113 <       EXTERNAL A'AVAL,A'REQ,A'QUNT\r
114         INTERNAL A'Q\r
115         A'Q=ZZ\r
116         ZZ=ZZ+1\r
117 >\r
118         ZZ=0\r
119         QUEUES\r
120         LOC=ZZ\r
121 >\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
127 \r
128 DEFINE X(A,B)\r
129 <       INTERNAL A'AVAL,A'Q\r
130         A'Q=.-AVALTB\r
131                 A'AVAL: 0\r
132 >\r
133 \r
134 INTERNAL AVALTB\r
135 \r
136 AVALTB: QUEUES          ;GENERATE THE AVAL FLAGS\r
137 LOC=.-AVALTB\r
138 >\r
139 \r
140 NQUEUE=LOC              ;NO. OF QUEUES COUNTING RUN QUEUE\r
141 XP MAXQ,NQUEUE-1        ;MAX STATE CODE WHICH HAS A QUEUE\r
142 \r
143 ;DEFINE STATE CODES WHICH DO NOT HAVE QUEUES ASSOCIATED WITH THEM\r
144 \r
145 \r
146 DEFINE X(A)\r
147 <       INTERNAL A'Q\r
148         A'Q=LOC\r
149         LOC=LOC+1\r
150 >\r
151 \r
152         CODES\r
153 \fIFE FTCHECK+FTMONP,<\r
154 ;LAST JOB SCHEDULED FOR EACH QUEUE\r
155 \r
156 JOBP:   REPEAT NQUEUE,<         EXP 1>\r
157 \f\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
161 \r
162 DEFINE X(A,B)\r
163 <       A'REQ:  0\r
164         INTERNAL A'REQ\r
165 >\r
166 \r
167 INTERNAL REQTAB\r
168 \r
169 REQTAB: QUEUES\r
170 \r
171 \f;QUANTUM RUNNING TIME FOR EACH QUEUE IN JIFFIES(CLOCK TICKS)\r
172 \r
173 DEFINE X(A,B)\r
174 <       A'QUNT: EXP 2\r
175         INTERNAL A'QUNT\r
176 >\r
177 \r
178 QUANTS: QUEUES\r
179 >\r
180         END,\r