Added base source
[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 \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
16 \r
17 ;CALL:  SETOM TIMEF             ;IF CLOCK HAS GONE OFF SINCE LAST CALL\r
18 ;       PUSHJ PDP,NXTJOB\r
19 ;       RETURN WITH NEXT JOB TO RUN IN AC ITEM\r
20 \r
21 ;INTIALIZE SCHEDULER(CALLED FROM IOINI1 BEFORE ALL OTHER\r
22 ;       DEVICES ARE INITIALIZED)\r
23 \r
24 INTERNAL NXTINI\r
25 \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
33                                 ;USE DEVICE AT ONCE\r
34 \f\r
35 INTERNAL NXTJOB\r
36 INTERNAL FTTRPSET,FTDISK\r
37 EXTERNAL JOB,TIMEF,JBTSTS,JOBMAX,JOBN,PJBSTS,CPOPJ,CHKSHF\r
38 ENTRY XCKCSS\r
39 \r
40 T=TAC           ;TEMPORARY\r
41 Q=TAC1          ;QUEUE NO.\r
42 Q1=DEVDAT       ;QUEUE NO. SHIFTED TO MATCHING POS. OF JBTSTS WORD\r
43 C=DAT           ;COUNT OF JOB LEFT TO SCAN\r
44 \r
45 XCKCSS:\r
46 NXTJOB: PUSHJ PDP,CHKSHF        ;SHUFFLE CORE IF NEEDED\r
47         SETZM T\r
48         SKIPN ITEM,JOB          ;CURRENT JOB NO.. IS IT NULL JOB?\r
49         JRST NXT0               ;YES, DO NOT DECREMENT QUANTUM RUN TIME\r
50         SKIPE TIMEF             ;NO, IS THIS A CLOCK INTERRUPT CALL?\r
51         SOSA T,JBTSTS(ITEM)     ;YES, DECREMENT QUANTUM RUN TIME\r
52                                 ;IN JOB STATUS WORD\r
53         SKIPA T,JBTSTS(ITEM)    ;NO, JUST PICKUP STATUS WORD\r
54         TRNE T,-1               ;REDUCE TIME TO ZERO YET?\r
55         JRST NXT1               ;NO\r
56         HRR T,RNQUNT            ;YES, RESET FOR RUN QUEUE QUANTUM\r
57 NXT0:   SETOM RNAVAL            ;FLAG TO SCAN RUN QUEUE FOR DIFFERENT JOB\r
58 NXT1:   HRRM T,JBTSTS(ITEM)     ;STORE MODIFIED QUANTUM RUN TIME\r
59         MOVEI Q,MAXQ            ;HIGHEST PRIORITY QUEUE SCANNED FIRST\r
60 NXT2:   SKIPN AVALTB(Q)         ;SHOULD THIS QUEUE BE SCANNED FOR A RUNABLE JOB?\r
61 NXT3:   SOJGE Q,NXT2            ;NO, LOOK AT NEXT LOWEST PRIORITY QUEUE\r
62         JUMPL Q,NXT7            ;YES, LOOKED AT QUEUES NQUEUE-1..,0?\r
63         MOVE Q1,Q               ;MOVE QUEUE INDEX TO PROPER POS.\r
64         ROT Q1,^D17-JWPOS       ;TO MATCH JOB STATUS WORD\r
65         MOVEI C,JOBMAX          ;NO, SACN ALL JOBS(EXECEPT NULL JOB)\r
66         AOSA ITEM,JOBP(Q)       ;SCAN ALL OTHER JOBS IN THIS QUEUE FIRST\r
67 \r
68 NXT4:   SETOM RNAVAL            ;FLAG RUN QUEUE BEING SCANNED\r
69 \r
70 NXT5:   CAIL ITEM,JOBN          ;GREATER THEN HIGHEST JOB NO.?\r
71         MOVEI ITEM,1            ;YES, RESET TO 1(SKIP NULL JOB)\r
72         HLRZ T,JBTSTS(ITEM)     ;IS JOB RUNABLE?\r
73         TRZ T,RUNMSK+CMWB       ;MASK OUT JOB STATUS BITS WHICH DO NOT MATTER\r
74         CAIN T,RUNABLE(Q1)      ;ADD IN QUEUE NO. IN PROPER POSITION\r
75         JRST NXT8               ;YES, IT IS RUNABLE AND IS IN THIS QUEUE\r
76 NXT6:   SOJLE C,NXT3            ;NO IT IS NOT, SCANNED ALL JOBS YET?\r
77         AOJA ITEM,NXT5          ;NO, LOOK AT NEXT JOB\r
78 \f\r
79 ;HERE IF NO JOBS FOUND TO RUN(Q=-1)\r
80 \r
81 NXT7:   MOVEI C,JOBN            ;SCAN ALL JOBS INCLUDING POSSIBLY NULL JOB\r
82         MOVE ITEM,JOB           ;STARTING WITH LAST JOB TO RUN\r
83         SKIPN Q1,RNAVAL         ;HAS RUN QUEUE(Q,Q1=7) BEEN SCANNED?\r
84         AOJA Q,NXT4             ;NO, FLAG THAT IS HAS AND SCAN RUN QUEUE(Q,Q1=2)\r
85         SETZB ITEM,RNAVAL       ;YES, CLEAR FLAG, SET NULL JOB TO RUN\r
86         POPJ PDP,               ;RETURN\r
87 \r
88 NXT8:\r
89 IFN FTTRPSET,<\r
90         EXTERNAL STOPTS\r
91         MOVE T,STOPTS                   ;HAS A TRPSET UUO BEEN DONE FOR JOB1\r
92                                         ;WITH NON ZERO AC?\r
93         CAIE ITEM,1                     ;IS THIS JOB 1?\r
94         JUMPN T,NXT6                    ;KEEP LOOKING IF NOT JOB1 AND\r
95                                         ;STOPTS FLAG SET\r
96 >\r
97 \r
98         CAIE Q,TSQ              ;IS THIS TTY WAIT SATISFIED Q?\r
99         CAIN Q,WSQ              ;IS THIS IO WAIT SATISFIED QUEUE?\r
100         SOSGE AVALTB(Q)         ;YES, DECREMENT COUNT OF JOBS WITH SATISFIED IO\r
101         SETZM AVALTB(Q)         ;NO, CLEAR AVAILABLE FLAG FOR THIS QUEUE\r
102         MOVEM ITEM,JOBP(Q)      ;SAVE JOB NUMBER FOR THIS QUEUE FOR NEXT TIME\r
103         JUMPE Q,CPOPJ           ;IS THIS RUN QUEUE?\r
104         MOVEI T,RNQ             ;NO, SET STATE CODE TO RUN\r
105         DPB T,PJBSTS            ;CLEAR WAIT CODE(SO HE WILL BE IN RUN QUEUE)\r
106         MOVE T,QUANTS(Q)        ;SET QUANTUM RUNNING TIME FOR QUEUE\r
107         HRRM T,JBTSTS(ITEM)     ;WHICH JOB HAS JUST LEFT\r
108         POPJ    PDP,            ;RETURN\r
109 \f\r
110 INTERNAL FTCHECK,FTMONP\r
111 \r
112 IFN FTCHECK+FTMONP,<\r
113 EXTERNAL JOBP,AVALTB,REQTAB,QUANTS\r
114 \r
115 DEFINE X(A,B)\r
116 <       EXTERNAL A'AVAL,A'REQ,A'QUNT\r
117         INTERNAL A'Q\r
118         A'Q=ZZ\r
119         ZZ=ZZ+1\r
120 >\r
121         ZZ=0\r
122         QUEUES\r
123         LOC=ZZ\r
124 >\r
125 IFE FTCHECK+FTMONP,<\r
126 ;APPROPRIATE ENTRY IS NON-ZERO WHEN SCHEDULER SHOULD LOOK\r
127 ;AT THAT QUEUE TO FIND A JOB TO RUN\r
128 ;WSAVAL CONTAINS THE NO. OF JOBS WITH IO WAIT SATISFIED(0=NONE)\r
129 ;SIMILARLY FOR TSAVAL\r
130 \r
131 DEFINE X(A,B)\r
132 <       INTERNAL A'AVAL,A'Q\r
133         A'Q=.-AVALTB\r
134                 A'AVAL: 0\r
135 >\r
136 \r
137 INTERNAL AVALTB\r
138 \r
139 AVALTB: QUEUES          ;GENERATE THE AVAL FLAGS\r
140 LOC=.-AVALTB\r
141 >\r
142 \r
143 NQUEUE=LOC              ;NO. OF QUEUES COUNTING RUN QUEUE\r
144 XP MAXQ,NQUEUE-1        ;MAX STATE CODE WHICH HAS A QUEUE\r
145 \r
146 ;DEFINE STATE CODES WHICH DO NOT HAVE QUEUES ASSOCIATED WITH THEM\r
147 \r
148 \r
149 DEFINE X(A)\r
150 <       INTERNAL A'Q\r
151         A'Q=LOC\r
152         LOC=LOC+1\r
153 >\r
154 \f\r
155         CODES\r
156 \f\r
157 IFE FTCHECK+FTMONP,<\r
158 ;LAST JOB SCHEDULED FOR EACH QUEUE\r
159 \r
160 JOBP:   REPEAT NQUEUE,<         EXP 1>\r
161 \f\r
162 ;SHARABLE DEVICE REQUEST TABLE(GENERAL;IZED FOR OTHER QUEUES TOO)\r
163 ;CONTAINS THE NUMBER OF JOBS WAITING TO USE SHARABLE DEVICE\r
164 ;WSREG AND RNREG ARE UNUSED\r
165 \r
166 DEFINE X(A,B)\r
167 <       A'REQ:  0\r
168         INTERNAL A'REQ\r
169 >\r
170 \r
171 INTERNAL REQTAB\r
172 \r
173 REQTAB: QUEUES\r
174 \f\r
175 ;QUANTUM RUNNING TIME FOR EACH QUEUE IN JIFFIES(CLOCK TICKS)\r
176 \r
177 DEFINE X(A,B)\r
178 <       A'QUNT: EXP 2\r
179         INTERNAL A'QUNT\r
180 >\r
181 QUANTS: QUEUES\r
182 >\r
183         END,\r