-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathSCHED.MAC
4299 lines (3545 loc) · 108 KB
/
SCHED.MAC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;<135-TENEX>SCHED.MAC;343 17-DEC-75 12:12:00 EDIT BY ALLEN
; PROTECT AGAINST RE-ENTERING SCHEDULER BY ACCIDENT
;<ALLEN>SCHED.MAC;5 4-NOV-75 11:45:51 EDIT BY ALLEN
; FIX ERROR IN ASSFK LEADING TO NCP BUFFER SCREWUPS
;<134-TENEX>SCHED.MAC;339 30-SEP-75 10:29:30 EDIT BY ALLEN
;<134-TENEX>SCHED.MAC;338 26-SEP-75 16:27:31 EDIT BY ALLEN
; DO SIMPLE INSERT ON PLACING FORK ON COMPQ, RATHER THAN RESORTING
;<134-TENEX>SCHED.MAC;337 14-AUG-75 16:34:29 EDIT BY ALLEN
; AVOID LOCKUP IF BSYS OR SOME SUCH USER CODE UNLOCKS A DIRECTORY
; OR SUB-INDEX LOCK ON WHICH A CONFLICT HAS OCCURRED
;<134-TENEX>SCHED.MAC;336 5-AUG-75 11:38:26 EDIT BY CLEMENTS
; CHANGE TAGS P1 AND P2 TO BE PATCH1, PATCH2, TO AVOID CONFLICT WITH
; NEW ACCUMULATOR NAMES
;<134-TENEX>SCHED.MAC;335 12-JUN-75 15:18:53 EDIT BY ALLEN
; MINOR FIXES
;<134-TENEX>NSCHED.MAC;21 11-JUN-75 10:13:27 EDIT BY ALLEN
; FIX TO RESORT
;<134-TENEX>NSCHED.MAC;20 10-JUN-75 13:11:13 EDIT BY ALLEN
; LIST ROUTINES ARE NOW SUBROUTINES AGAIN INSTEAD OF MACROS
; FIX NECESSITY TO RESKED ON RELHIQ
;<134-TENEX>SCHED.MAC;334 4-JUN-75 13:09:12 EDIT BY ALLEN
; MORE FIXES TO NEW REGULATOR
;<134-TENEX>SCHED.MAC;332 3-JUN-75 15:59:55 EDIT BY ALLEN
; VARIOUS FIXES TO NEW REGULATOR
;<134-TENEX>NSCHED.MAC;13 3-JUN-75 11:27:03 EDIT BY ALLEN
; MINOR FIXES TO SPECIAL SCHEDULING FOR LOCKERS TO AVOID RESPONSE
; PROBLEMS AFTER CLEARING LOCK
;<134-TENEX>NSCHED.MAC;10 20-MAY-75 21:36:47 EDIT BY ALLEN
;<134-TENEX>NSCHED.MAC;9 20-MAY-75 16:49:14 EDIT BY ALLEN
; PARAMETERIZE UTILIZATION AVERAGE TIME CONSTANT
;<134-TENEX>NSCHED.MAC;8 20-MAY-75 16:23:57 EDIT BY ALLEN
; SHORTEN UTILIZATION AVERAGE TIME CONSTANT TO ABOUT
; 4 SECONDS
;<134-TENEX>NSCHED.MAC;7 20-MAY-75 08:26:17 EDIT BY ALLEN
;<134-TENEX>NSCHED.MAC;6 19-MAY-75 17:24:28 EDIT BY ALLEN
; REVISED PIE-SLICE REGULATOR
;<134-TENEX>SCHED.MAC;331 15-MAY-75 08:24:44 EDIT BY TOMLINSON
;<134-TENEX>SCHED.MAC;330 15-MAY-75 08:17:05 EDIT BY TOMLINSON
;<134-TENEX>SCHED.MAC;329 15-MAY-75 08:06:02 EDIT BY TOMLINSON
; ADDED CALL TO TNTCHK IN SCHEDULER
;<134-TENEX>SCHED.MAC;328 2-MAY-75 18:14:13 EDIT BY CLEMENTS
; INTERNED TTPSR1. XLISTED JTDVC1.
;<134-TENEX>SCHED.MAC;327 28-APR-75 12:10:32 EDIT BY CLEMENTS
;<134-TENEX>SCHED.MAC;326 14-APR-75 13:40:38 EDIT BY ALLEN
;<134-TENEX>SCHED.MAC;325 14-APR-75 13:28:24 EDIT BY ALLEN
;<134-TENEX>SCHED.MAC;324 11-APR-75 18:28:29 EDIT BY ALLEN
; FIXES TO NEW SPECIAL SCHEDULING FOR LOCKERS
;<134-TENEX>SCHED.MAC;323 10-APR-75 22:03:08 EDIT BY ALLEN
; REVISED HANDLING OF HIGH PRIORITY FOR LOCKERS
;<134-TENEX>SCHED.MAC;320 8-APR-75 23:44:35 EDIT BY ALLEN
; ADD SPECIAL SCHEDULING QUEUE. REDUCE BEHIND SCHED QUANTUM
;<134-TENEX>SCHED.MAC;318 12-MAR-75 13:08:18 EDIT BY PLUMMER
; CALLS TO ROUTINES IN SIGNAL.MAC
;<134-TENEX>SCHED.MAC;317 25-FEB-75 14:26:47 EDIT BY CLEMENTS
; MOVE DEFINITION OF MAXQ UP BEFORE USE OF IT TO AVOID PASS1 "V" ERRS
;<134-TENEX>SCHED.MAC;316 14-FEB-75 17:51:40 EDIT BY OPERATOR
; FIX BUG IN PSSKD2 LEADING TO LONG QUANTA ON Q0
;<134-TENEX>SCHED.MAC;315 5-FEB-75 15:32:43 EDIT BY ALLEN
;<134-TENEX>SCHED.MAC;314 4-FEB-75 20:07:02 EDIT BY ALLEN
; VARIOUS FIXES TO NEW LIST STUFF
;<134-TENEX>SCHED.MAC;313 4-FEB-75 12:56:11 EDIT BY ALLEN
;<134-TENEX>SCHED.MAC;312 4-FEB-75 12:30:10 EDIT BY ALLEN
; REORGANIZE LIST MANIPULATION STUFF
;<134-TENEX>SCHED.MAC;310 30-JAN-75 15:00:04 EDIT BY ALLEN
;DETAIL CHANGES TO NEW WAITLIST STUFF
;<134-TENEX>SCHED.MAC;309 30-JAN-75 00:12:03 EDIT BY ALLEN
; PLACE FORK DIRECTLY ON RUNLIST IN ASSFK
;<134-TENEX>SCHED.MAC;308 29-JAN-75 23:24:05 EDIT BY ALLEN
; WAITLST NOW DOUBLE LINKED LIST. FORK ON WAITLIST NOW INDICATED
;BY PRESENCE OF WTLS BIT IN FKFLGS, NOT LH(FKPT)=WTLST.
;NEW ROUTINE, 'PRWAKE', TRANSPARENT TO ACS, TAKES FORKX IN AC7
;AND AWAKENS SAID FORK.
;<134-TENEX>SCHED.MAC;301 17-JAN-75 15:12:30 EDIT BY ALLEN
; CORRECT NON-TRANSPARENCY OF HIQ
;<134-TENEX>SCHED.MAC;300 16-JAN-75 12:17:57 EDIT BY ALLEN
; NEWST HIQ'S UNCONDITIONALLY IF WAKEUP FROM TCI OR TCOTST
;FIX ERROR IN INCREMENTING NAPROC IN WTSCAN
;<134-TENEX>SCHED.MAC;299 12-JAN-75 21:17:14 EDIT BY ALLEN
; CORRECT RADIX ERROR IN CHGQ
;<134-TENEX>SCHED.MAC;298 10-JAN-75 11:54:28 EDIT BY ALLEN
; ADD HIQ ROUTINE FOR PIE-SLICE SCHEDULER
; PIE-SLICE PSSKD2 NOW HI-QUEUES
;<134-TENEX>SCHED.MAC;297 10-JAN-75 11:08:34 EDIT BY ALLEN
; HI-Q THE NCP ON WAKEUP
;<133-TENEX>SCHED.MAC;295 21-DEC-74 11:47:52 EDIT BY ALLEN
; MOVE CHKWT ROUTINE TO SCHED. UNDO PREVIOUS DUMB CHANGE I.E.
; DISMT IS NOW A LOCAL AGAIN.
;<133-TENEX>SCHED.MAC;294 19-DEC-74 17:53:04 EDIT BY ALLEN
; MAKE DISMT A GLOBAL
;<133-TENEX>SCHED.MAC;293 19-DEC-74 13:29:48 EDIT BY ALLEN
; REMOVED INIT OF PIEGRP TABLE TO -1
;<133-TENEX>SCHED.MAC;292 16-DEC-74 14:06:41 EDIT BY ALLEN
; MAKE NEWFKF A GLOBAL
;<133-TENEX>SCHED.MAC;291 11-DEC-74 16:58:17 EDIT BY ALLEN
; TREAT DDMP SAME AS NCP WITH RESPECT TO SCHEDULING
;<133-TENEX>SCHED.MAC;290 10-DEC-74 10:52:04 EDIT BY ALLEN
; INITIALIZE PIEGRP TO -1
;<133-TENEX>SCHED.MAC;289 9-DEC-74 19:32:16 EDIT BY ALLEN
; FIX BUG IN RMPROC UNCOVERED BY CHANGE TO MAXBSH LOGIC
;<133-TENEX>SCHED.MAC;288 9-DEC-74 13:21:11 EDIT BY ALLEN
; HOLD FORK IN BALSET FOR MAXBSH IF PREVIOUS DISMISS WAS OF DURATION
; NOT GREATER THAN MAXBSH
;<133-TENEX>SCHED.MAC;287 12-NOV-74 16:35:41 EDIT BY CLEMENTS
;<133-TENEX>SCHED.MAC;286 5-NOV-74 17:09:36 EDIT BY CLEMENTS
; PART OF CRJOB JSYS
;<133-TENEX>SCHED.MAC;285 1-NOV-74 13:37:28 EDIT BY ALLEN
; REMOVE UNNECESSARY GCCORS IN BKGND
;<133-TENEX>SCHED.MAC;284 29-OCT-74 16:56:28 EDIT BY PLUMMER
; RTISW CONDITIONS CALL TO GCCOR
;<133-TENEX>SCHED.MAC;283 18-OCT-74 09:11:20 EDIT BY BTHOMAS
; FIX JTENQ AND FRZPSI TO CALL ENSKED IN CORRECT PLACE
;<133-TENEX>SCHED.MAC;282 11-OCT-74 16:13:33 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;281 8-OCT-74 16:16:47 EDIT BY ALLEN
; TEST FOR VALID UNDERFLOW AT AVERG2+1
;<133-TENEX>SCHED.MAC;280 8-OCT-74 10:18:53 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;279 7-OCT-74 17:40:25 EDIT BY ALLEN
; PIE-SLICE SCHEDULER QUANTA SCALED BY TARGET
; UTILIZATION. PERIODIC SCAN OF AHEAD SCHEDULE QUEUE
;DONE TO DISCOVER NOW-BEHIND-SCHEDULE PROCESSES.
;<133-TENEX>SCHED.MAC;274 25-SEP-74 20:17:05 EDIT BY CLEMENTS
; MISSING CONDITIONAL ON PIESLC CODE FIXED
;<133-TENEX>SCHED.MAC;273 25-SEP-74 14:03:24 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;272 25-SEP-74 13:36:22 EDIT BY ALLEN
; UNLOCK GRPLOK AT HLTFK1 FOR PIE-SLICE SYSTEM
;<133-TENEX>SCHED.MAC;271 24-SEP-74 17:06:07 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;270 24-SEP-74 16:45:20 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;268 20-SEP-74 20:40:58 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;267 20-SEP-74 20:24:43 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;266 19-SEP-74 17:21:14 EDIT BY ALLEN
; VARIOUS PIE-SLICE REPAIRS AND ADDITION TO LOCK COLLISION LOGIC
; TO AVOID POSSIBLE DEADLOCK
;<133-TENEX>SCHED.MAC;264 16-SEP-74 20:04:35 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;263 16-SEP-74 19:34:37 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;262 5-SEP-74 15:27:24 EDIT BY ALLEN
; ADD ROUTINE FOR UNLOCKING LOCKS ON WHICH CONFLICT HAS OCCURRED
;<133-TENEX>SCHED.MAC;261 1-AUG-74 11:43:49 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;260 1-AUG-74 10:46:42 EDIT BY ALLEN
; MORE EFFICIENT HANDLING OF COLLISIONS ON NON-RESIDENT LOCKS
;<133-TENEX>SCHED.MAC;258 22-JUL-74 14:42:37 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;257 22-JUL-74 10:29:09 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;256 19-JUL-74 17:04:40 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;255 18-JUL-74 16:23:02 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;254 18-JUL-74 16:17:32 EDIT BY ALLEN
; ADD CODE FOR PIE-SLICE SCHEDULER REGULATOR
;<133-TENEX>SCHED.MAC;242 16-JUL-74 17:00:19 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;241 16-JUL-74 16:39:43 EDIT BY ALLEN
;<133-TENEX>SCHED.MAC;232 12-JUL-74 11:06:58 EDIT BY ALLEN
; CORRECT BLUNDER IN SCDRUN CAUSING OVERLOADING OF BALSET
;<133-TENEX>SCHED.MAC;231 10-JUL-74 11:26:12 EDIT BY ALLEN
; ELIMINATE RACE AT SCHED4, ELIMINATE RESCHEDULE ON CHAR ARRIVAL
; AND TEST FOR PENDING BALSET REMOVAL IN RMPROC
;<TENEX-132>SCHED.MAC;230 17-JUN-74 20:19:37 EDIT BY ALLEN
; CORRECT BUG IN MAINTENANCE OF OLDSUM
SEARCH PROLOG
TITLE SCHED
;TENEX SCHEDULER - D. MURPHY
;LINKAGE TO OTHER PARTS OF MON -- PAGEM AND PISRV
EXTERN ASSPT,BUGCHK,BUGNTE,BUGHLT,DCHKSW,DDTPRS,DESPT,DRMFRE,DRMIN0
EXTERN DSKRT,GCALC,GCCOR,XGC,ICAPT,IOIP,MENTR,MONCOR,MRETN
EXTERN NXTDMP,PIAPRX,POSTPG,PRELD,PRELDF,POSPGF,SETPPG
EXTERN SETPT,SPTC,SWPIN0,SWPINT,SWPRT
EXTERN SETMPG,JDSPTP
PGR==24 ;I/O DEVICE NUMBER FOR PAGER
EXTERN AUTONX
EXTERN TTCH7,TTBIGC,TTPSI,TADSEC,LSTERR,FACTSW,FLOGO
EXTERN TCITST,TCOTST,TTEMES,FRZWT,CAPMSK,CAPENB
EXTERN KSELF,LOGTOT,LOGDES
EXTERN TTFORK,TTFRK1,EXEC0
EXTERN BHC,BITS,SVN,CH6TAB
EXTERN GFKH,SETLF1
INTERN PSISV2,RSKEDN
INTERN BLOCK0,BLOCK1
INTERN ITRAP,DISGE,DISGET,DISL,DISLT,RSKP,R,JRET,JSKP,NJOBS
INTERN PJMPG,PJMA,PPMPG,PPMA,PSB,JSB
INTERN FREJPA,FREJP,JFNPC0,RJFN,MJFN,SJFN,SWPMA0
INTERN NNAMES,SCDIN,ILIST,SCHEDP,.DISMS,SCHED0
INTERN SCDRQ7,JOBSRT,TTPSRQ,PSIT1A,GETCHA,.DEBRK
INTERN DISE,DISET,DISN,DISNT
INTERN ASSFK,WTFPGS,WTSPT,SUSFKR,SUSWT,ITRAP1
INTERN NTASKT,NLOADT,NEVENT
INTERN STIME,ETIME,SETOVF,MAXQ,DISG,DISGT,BLOCKW
INTERN SUPERP,PARALP,INFERP,PSILOB,TMZONE,DISLE,DISLET
INTERN FFF,PATCH1,PATCH2,INDFLG
INTERN .HALTF,EDISMS,HALTF1,HALTT
INTERN HLTJB,HLTFK1,CLRM0,FRZB1,FRZB2,FRZBB,PSIJTR
INTERN PSIRQ0,PSIRQF,PSIRQB,CHNSON,PSIR4,FORCTM,PSIRQ
INTERN P7POV,P7FOV,P7OV,PI7P,WTSPTT,SCHEDR,APCLK1,MINNR,MPEINT
INTERN SCDVE,PISC7
INTERN JTULCK,PSIWTF,JTMCN,JTFRZB,JTDVC1,FRZBAL,TRPSI5
INTERN NEWFKF
INTERN TTFRKP
IFDEF RTISW,<INTERN .SOLO,.TUTTI>
NSKDP==40 ;LOCAL PUSH LIST
NSCDRQ==20 ;SIZE OF SCHEDULER REQUEST QUEUE
MINNR==3 ;MIN SIZE OF RPLQ FOR LOADING FORK
;MACROS FOR TIMING SUBROUTINES
DEFINE STMR
< SKIPL BKGFLG
JSP 4,STIME
>
DEFINE ETMR(CLK)
< SKIPGE BKGFLG ;BACKGROUND MODE?
JRST .+4 ;YES
JSP 4,ETIME
ADDM 1,CLK
AOS CLK+1
>
;STORAGE
LS SKDPDL,NSKDP ;SCHEDULER LOCAL PDL
LS MSCNT,1 ;INDEX TO MSEC/TICK TABLE
LS APCLKC,1 ;COMMUNICATION TO CH7 FROM CH1 CLOCK INTERRUPT
LS CLKAC2,1 ;CLOCK ROUTINE TEMP
LS CLKAC1,1 ; "
LS SYNCC,1 ; "
LS OLDTCK,1 ; "
LS PISC7R,1
LS FKPT6M,1 ;-FKPT(6)
GS FORKX,1 ;INDEX OF CURRENTLY RUNNING FORK
GS FKPGS,NFKS ;UPT,,PSB SPT NUMBERS
GS FKSTAT,NFKS ;FORK WAIT TEST
GS FKWSP,NFKS ;NO. PGS NEEDED TO PRELOAD,,NO. PGS IN CORE
GS FKPGST,NFKS ;TEST WORD WHILE IN PAGE WAIT
;IF ON WTLST, TIME WAIT BEGAN
GS FKQ,NFKS ;QUEUE NUMBER,,TIME REMAINING IN QUANTUM
GS FKPT,NFKS ;IF ON WTLST, =WTLST,,ADDRESS OF NEXT FKPT OR 0
;IF ON A RUNLST, ADDRESS OF PREV FKPT,, ADDRESS
;OF NEXT FKPT
;IF DELETED FORK, B0=1
GS FKINT,NFKS ;FORK INTERRUPT COMMUNICATION REG
;BITS IN FKINT --
; B0 = REQUEST FOR PSI PROCESSING
; B1 = PSI PROCESSING IN PROGRESS - DEFER FURTHER REQUESTS
; REST DEFINED AND COMMENTED AT TAG "PIRQ"
GS FKINTB,NFKS ;INTERRUPT CHANNELS REQUEST
GS FKJOB,NFKS ;JOB NUMBER ,, JSB
GS FKNR,NFKS ;AGE,,BALANCE SET SIZE (RESERVE)
GS FKFLGS,NFKS ;PER PROCESS FLAGS,,CORE NUMBER
;FLAG BIT DEFS FOR ABOVE TABLE
WTFK==:1B18 ;PROCESS IN BALANCE SET AND WAITING
NOSK==:1B19 ;PROCESS IS NOSKED
FORCEM==:1B20 ;PROCESS IS TO BE REMOVED FROM BS
BLST==:1B21 ;PROCESS IS IN BALANCE SET
RNLS==:1B22 ;PROCESS IS ON A RUNLIST
ZIFA==:1B23 ;ZERO IFAV AT NEXT PAGE-FAULT (PLEASE)
NOFLT==:1B24 ;INDICATES ADJUSTMENT OF FKNR DUE TO LACK OF PAGE-FAULTING HAS BEEN DONE
WTCLCT==:1B25 ;FORK HAS LEFT BAL SET BUT GCCOR NOT YET RUN
IFN PIESLC,<
NOCNT==:1B26 ;FORK BEING BORN OR DYING. DON'T INCLUDE IN NAPROC
;AS FORK IS NOT RECORDED IN SYSFK
> ;END PIE-SLICE SCHEDULER CONDITIONAL
HOLD==:1B27 ;HOLD FORK IN BALANCE SET FOR MAXBSH AFTER DISMISS
WTLS==:1B28 ;FORK IS ON THE WAIT LIST
IFN PIESLC,<
HIQFK==:1B29 ;FORK MUST REMAIN ON A HIGH QUEUE
SPQFK==:1B30 ;FORK MUST REMAIN ON THE SPECIAL QUEUE
PHIQFK==:1B31 ;USED TO REMEMBER THAT FORK WAS ALREADY ON INTERQ AT
;TIME OF CALL TO SETHIQ
>
FKCNO=:FKFLGS ;CORE NUMBER IN RIGHT HALF OF FKFLGS
GS FKJTQ,NFKS ;JSYS TRAP QUEUE - BACK PTR,,FWRD PTR
IFN PIESLC,<
GS FKSOLD,NFKS ;SYSTEM SOLD TIME WHEN FKUTIL LAST UPDATED
GS FKUTIL,NFKS ;PROCESSOR UTILIZATION PER FORK (FLOATING POINT)
GS FKPRT,NFKS ;PROCESS TIME SINCE FKUTIL LAST UPDATED
GS FKUDT,NFKS ;REAL TIME SINCE FKUTIL UPDATE
> ;END PIE-SLICE SCHEDULER CONDITIONAL
LS FREFK,1 ;LIST OF FREE FORKS
GS SYSIFG,1 ;SYSTEM HAS BEEN INITIALIZED IF NOT 0
GS ACCIFG,1 ;ACCOUNTING INITIALIZED WHEN NON-0
GS ENTFLG,1 ;PERMIT NEW JOB ON ^C IF NON-0
GS PWRDWN,1 ;POWER FAILURE DETECTED IF .G. 0, DONE IF .L. 0
GS JOBDIR,NJOBS ;ATTACHED DIRECTORY,,LOGIN DIRECTORY
GS JOBNAM,NJOBS ;JOB SUBSYSTEM NAME INDEX FOR SETNM
GS JOBRT,NJOBS ;JOB RUN TIME
GS JOBPT,NJOBS ;CONTROL TTY,,TOP FORK
LS FREJOB,1 ;LIST OF FREE JOBS
IFE PIESLC,<
MAXQ==:4 ;HIGHEST NUMBERED QUEUE
>
IFN PIESLC,<
MAXQ==:2 ;HIGHEST NUMBERED QUEUE
>
;RH(RUNLST(I)) CONTAINS A POINTER TO THE FKPT ENTRY OF THE HIGHEST
;PRIORITY PROCESS ON Q(I) REQUIRING SERVICE. SUBSEQUENT ENTRIES IN
;THE LIST MAY BE FOUND BY FOLLOWING THE POINTER IN RH(FKPT).
;LH(RUNLSB(I)) CONTAINS A POINTER TO THE FKPT ENTRY OF THE LOWEST
;PRIORITY PROCESS ON Q(I) REQUIRING SEERVICE. THE LIST MAY BE
;FOLLOWED VIA THE POINTERS IN LH(FKPT).
LS RUNLST,MAXQ+1 ;RUNNING FORK LISTS (DESCENDING PRIORITY)
LS RUNLSB,MAXQ+1 ;RUNNING FORK LISTS (ASCENDING PRIORITY)
LS WTLST,1 ;WAITING FORK LIST
LS WTLSTB,1 ;WAIT LIST TAIL POINTER
LS WAITFS,1 ;WAIT LIST FULL SCAN FLAG
LS WAITLS,1 ;TIME OF LAST FULL WAIT LIST SCAN
LS JTLST,1 ;JSYS TRAP QUEUE
LS JTLSTL,1 ; ... LAST
LS JB0FLG,1 ;RUN JOB 0 REQUEST
LS FRECB,1 ;FREE CORE NUMBER BITS
;BALANCE SET VARIABLES
LS NBPROC,1 ;NUMBER OF PROCESSES IN BAL SET
LS NBRUN,1 ;NUMBER RUNNABLE FORKS IN BALSET
GS TOTRC,1 ;TOTAL NUMBER REAL CORE PAGES
GS SUMNRX,1 ;SUM(FKNR FOR BALSET PROCS)+SUM(FKWSP FOR ALL OTHERS)
;+PAGES UNASSIGNED AND AWAITING COLLECTION
GS NRPMIN,1 ;MINIMUM VALUE OF NRPLQ
GS MAXNRX,1 ;MAX VALUE OF SUMNRX
GS CGFLG,1 ;DEASSIGNED PAGES MAY EXIST IF >0
LS PANIC,1 ;COUNT OF PANIC MODE GCCORS
LS RLBITS,1 ;FOR GCCOR -- PROC USE BITS OF RUNLIST PROCS
LS BSBITS,1 ;PROC USE BITS OF BAL SET PROCS
LS RUNT1,1 ;RUNTIME SINCE FORK BEGAN EXECUTION
GS NRPLQ,1 ;NUMBER OF PAGES ON REPLACABLE QUEUE
GS RPLQ,1 ;REPLACABLE QUEUE END,,BGN
GS PNDING,1 ;NO. UNASSIGNED PAGES AWAITING COLLECTION
GS NPMAX,1 ;MAX NUMBER OF PAGES IN CORE FOR ONE PROCESS
GS SNPMAX,1 ;SMALL NPMAX FOR LOADED CONDITIONS
GS SJSIZ,1 ;'SMALL' JOB SIZE
GS IRJAV,1 ;NEAREST INTEGER TO RJAV
;SCHEDULER VARIABLES
LS SKEDF1,1 ;START PROCESS VIA CH7 BREAK IN 1
LS SKEDF3,1 ;PROCESS CLOCK COUNTED TO 0
LS INSKED,1 ;IN SCHEDULER IF NON-ZERO
LS SSKED,1 ;LAST JOB RUNNING WAS NOSKED
GS PSKED,1 ;PAGE TRANSFER COMPLETED OR PSI NEEDS ATTENTION
GS ISKED,1 ;SCHEDULE REQUEST FLAG
GS FSHBAL,1 ; FLUSH BALSET REQUEST FLAG
GS BKGFLG,1 ;WHEN = 0 INDICATES BACKGROUND
LS NGPROC,1 ;NUMBER OF FORKS WAITING TO ENTER BAL SET
LS OLDSUM,1 ;SUMNRX AT TIME OF LAST ATTEMPT TO ADD TO
;BALANCE SET. -1 IF THIS VALUE HAS BEEN
;INVALIDATED BY SOME CHANGE SUCH AS A FORK
;ENTERING THE RUNLISTS.
LS POTEN,1 ;UPPER BOUND ON NUMBER OF PAGES TO BE GAINED
;BY DOING GCCOR
LS RJAVS1,1 ;RJTSUM AT LAST RJAV UPDATE
;TABLES FOR SETNM
NNAMES==^D50 ;NUMBER OF NAMES ALLOWED
GS SNAMES,NNAMES ;SIXBIT NAME OF SUBSYSTEM
GS STIMES,NNAMES ;ACCUMULATED RUNTIME OF SUBSYSTEM
GS SPFLTS,NNAMES ;ACCUMULATED PAGE FAULTS OF SUBSYSTEM
GS SWAKES,NNAMES ;WAKEUPS 0-14, SIZE INTEGRAL 15-35
GS SBLKTM,NNAMES ; BLOCKED FOR TTY TIME
;"QTIMES" GETAB TABLE
GS QSUM,5 ;ACCUMULATED TIME OF JOBS OF RESPECTIVE Q'S
;PROCESSOR TASK GETAB TABLE ("TASKTB")
;ACCOUNTS FOR WHERE PROCESSOR TIME IS BEING SPENT
;EACH CATEGORY CONSISTS OF TWO WORDS; FIRST WORD IS TOTAL TIME
;SPENT PERFORMING THE TASK OR ROUTINE, SECOND IS A COUNT OF INVOKATIONS
;OF THAT TASK OR ROUTINE.
GS SOLD,2 ;PROCESS-LEVEL TIME AND NUMBER OF PROCESS
;DISPATCHINGS
GS IDLE,2 ;IDLE TIME (NO PROCESSES REQUESTING SERVICE)
;AND NUMBER OF TIMES WE GO IDLE
GS SWAPWT,2 ;SWAP-WAIT TIME (NO RUNNABLE PROCESSES) AND
;NUMBER OF TIMES WE HAD TO WAIT
GS NSKWT,2 ;NOSKED WAIT TIME (NOSKED PROCESS PAGE FAULTS
;WHILE THERE ARE OTHER RUNNABLE PROCESSES) AND
;NUMBER OF TIMES THIS HAPPENS
GS SKMAIN,2 ;TOTAL TIME SPENT IN AND ENTRIES TO SCHEDULER
;MAIN ROUTINE
GS SKBAL,2 ;TIME SPENT IN AND ENTRIES TO BALANCE SET SCHED.
GS SKWAIT,2 ;TIME SPENT IN AND ENTRIES TO WAIT-LIST SCAN
GS SKLDPR,2 ;TIME SPENT IN AND ENTRIES TO LDPROC ROUTINE
;(ROUTINE THAT PROMOTES ACTIVE PROCESSES TO
;THE BALANCE SET)
GS GCCR,2 ;TIME SPENT IN AND ENTRIES TO GLOBAL GARBAGE
;COLLECTOR (GCCOR)
GS PPG,2 ;TIME SPENT IN AND ENTRIES TO POST-PURGE ROUTINE
GS PTRAP,2 ;TIME SPENT IN AND COUNT OF PAGER TRAPS
;PLEASE NOTE THAT PAGER TRAP TIME IS ALSO
;INCLUDED IN SOLD TIME
IFN PIESLC,<GS SORTIM,2 ;TIME SPENT IN AND ENTRIES TO RESORT>
IFE PIESLC,<NTASKT==^D22>
IFN PIESLC,<NTASKT==^D24>
;SYSTEM LOAD GETAB TABLE ("LOADTB")
GS RJTSUM,1 ;INTEGRAL OF NBPROC+NGPROC DT
GS BSTSUM,1 ;INTEGRAL OF NBPROC DT
GS NBRSUM,1 ;INTEGRAL OF NBRUN DT
NRJAVS==3 ;NUMBER OF LOAD AVERAGES WE MAINTAIN
GS RJAV,NRJAVS ;EXPONENTIAL AVERAGES OF NUMBER OF ACTIVE PROCESSES
NLOADT==NRJAVS+3
;SYSTEM MISCELLANEOUS EVENT COUNTERS ("EVENTS")
GS DRMRD,1 ;NUMBER OF DRUM READS
GS DRMWR,1 ;NUMBER OF DRUM WRITES
GS DSKRD,1 ;NUMBER OF DISK READS
GS DSKWR,1 ;NUMBER OF DISK WRITES
GS TOPTRP,1 ;COUNT OF TOP-LEVEL PAGER TRAPS
GS WAKEUP,1 ;NUMBER OF PROCESS WAKE-UPS
GS TTINTS,1 ;NUMBER OF TERMINAL INTERRUPTS
GS NTTYIN,1 ;TOTAL NUMBER TERMINAL INPUT CHARS
GS NTTYOT,1 ;TOTAL NUMBER TERMINAL OUTPUT CHARS
GS ENTDMS,1 ;ENTRIES TO SCHED DUE TO FORKX DISMS
GS ENTPGF,1 ;ENTRIES TO SCHED DUE TO FORKX PAGE-FAULT
GS NGCLCT,1 ;NUMBER OF PAGES COLLECTED BY GCCOR
GS PPCLCT,1 ;NUMBER OF PAGES COLLECTED BY POSTPG
GS NREMJ,1 ;COUNT OF FORCED BALSET REMOVALS
GS HSYST1,1 ;TIME OF SYSTEM SHUTDOWN PENDING (GTAD FORMAT)
GS HSYST4,1 ;AND GTAD TIME SYSTEM SCHEDULED BACK UP (OR 0)
NEVENT==^D15
;CLOCKS COUNTED DOWN AND TESTED, PARALLEL TO PCLKT, DON'T REORDER
LS RJQNT,1 ;RUNNING JOB REMAINING QUANTUM
GS TIM2,1 ;SECOND CLOCK, 100 MS
LS JOBRTT,1 ;JOB RUNTIME SINCE LAST UPDATE
LS SCDRQI,1 ;SCHEDULER REQUEST QUEUE
LS SCDRQO,1
LS SCDRQB,NSCDRQ
GS TODCLK,1 ;MILLISECOND CLOCK, MONOTONICALLY INCREASING
GS CHKTIM,1 ;FOUR MINUTES PAST LAST JOB 0 CHECK
GS CHKTM1,1 ;TWO MINUTES PAST LAST JOB 0 CHECK
GS DDMPFK,1 ;INDEX OF FORK RUNNING DDMP. -1 IF NON-EXISTANT
LS SCDRN1,1 ;RUN ONLY FORK N IF N > -1
LS GLOCK,1 ;USED TO AVOID UNNECESSARY WAKEUPS
;AFTER COLLISION ON NON-RESIDENT LOCK
LS RESDNT,1 ;ANYTHING BELOW THIS ADDRESS IS RESIDENT
;RESIDENT STORAGE FOR CRJOB JSYS
GS CRJLCK,1 ;PROCESS LOCK FOR USE OF CRJOB JSYS
GS CRJANS,1 ;ANSWER FROM JOBSRT. 0=WAITING, -1=SUCCESS,
; +N IS AN ERROR NUMBER.
GS CRJJNO,1 ;JOB NUMBER ASSIGNED BY JOBSRT
IFN PIESLC,<
;RESIDENT STORAGE FOR PIE-SLICE SCHEDULER
GS NAPROC,NGRPS ;NUMBER OF ACTIVE PROCESSES PER GROUP
GS DSHARE,NGRPS ;FRACTION (INCLUDING WINDFALL) PER GROUP
GS PIEGRP,NJOBS ;GROUP INDEX PER JOB
GS DEFGP,1 ;DEFAULT PIE-SLICE GROUP
GS PASSES,1 ;LOCAL COUNT OF PASSES PER ENTRY TO RESORT
GS EXCHGS,1 ;LOCAL COUNT OF EXCHANGES IN RESORT
GS SRTBEG,1 ;PLACE TO BEGIN NEW SORT PASS
GS SRTEND,1 ;PLACE TO END IT
GS SRTTMP,1 ;TEMPORARY FOR SORT
>; END PIE-SLICE SCHEDULER CONDITIONAL
;PATCH SPACE FOR RES MON
SCDV1==1 ;IF DEFINED MEANS ASSEMBLING MON
SCDVE==.-1 ;UPPER LIMIT FOR CORE CLEAR ON STARTUP
FFF:
PATCH1:
PATCH2: XLIST ;REPEAT 300,<0>
REPEAT 300,< 0>
LIST
INDFLG: 0 ; .NE. 0 MEANS LOCK JSB
; .L. 0 MEANS USE NO INDIRECT PTRS
;SCHEDULER INITIALIZATION
SCDIN: SETZM SYSIFG
SETZM AUTONX
SETZM PWRDWN
SETZM ENTFLG
SETZM WAITLS
MOVE 1,[JRST SCDRQ0]
MOVEM 1,SCDRQ+1 ;DISPATCH FOR JSR-CALLED ROUTINE
MOVEI 1,JTLST
MOVEM 1,JTLSTL ;SET UP JSYS TRAP WAIT LIST
MOVNI 1,FKPT ;BECAUSE MACRO DOESN'T HAVE NEG RELOC'N
HRLI 1,6
MOVEM 1,FKPT6M ;-FKPT(6)
MOVEI 1,SCDRQB
MOVEM 1,SCDRQI
MOVEM 1,SCDRQO
MOVEI 1,FKPT
MOVEI 2,NFKS
CALL ILIST ;INIT FREE FORK LIST
MOVEM 1,FREFK
IFDEF SIGIPC,< CALL SIGINI## ;INIT SIGNL/WTFOR TABLES>
MOVEI 1,JOBPT
MOVEI 2,NJOBS
CALL ILIST
MOVEM 1,FREJOB ;INIT FREE JOB LIST
SETOM JOBRT
MOVE 1,[XWD JOBRT,JOBRT+1]
BLT 1,JOBRT+NJOBS-1
SETZM 20
SETOM SCDRN1
SETOM GLOCK
SETOM FORKX
SETOM TADSEC
SETOM OLDSUM
SETOM SSKED
SETOM DDMPFK
SETOM CRJLCK ;FREE LOCK ON CRJOB CELLS
HRLOI 1,377777
MOVEM 1,CHKTM1 ;AVOID JOB0 BUGHLT ON STARTUP
MOVSI 1,(777B8!CORMB) ;INIT RLBITS NOT TO CLEAR AGE AND CORMB
MOVEM 1,RLBITS
HRLOI 1,377 ;BITS IN PROC. USE REG.
MOVEM 1,FRECB
MOVEM 1,INSKED
MOVE 1,[FACTON]
MOVEM 1,FACTSW ;FACT FILE ON AND INIT THE REST=0
MOVEI 1,MAXQ+1 ;CLEAR RUNLST AND RUNLSB
SCDIN2: MOVEI 2,RUNLST(1)
MOVEI 3,RUNLSB(1)
HRLZM 2,0(3)
HRRZM 3,0(2)
SOJGE 1,SCDIN2
MOVEI 1,WTLST
HRLZM 1,WTLSTB
MOVEI 1,WTLSTB
HRRZM 1,WTLST
MOVE 1,MONCOR
LSH 1,^D9
MOVEM 1,RESDNT
RET
ILIST: ADDI 1,-1(2)
SETZM 0(1) ;INIT FREE LIST, BLOCK ADR IN AC1,
SOJLE 2,ILIST1 ; SIZE OF BLOCK IN 2
MOVEM 1,-1(1)
SUBI 1,1
SOJG 2,.-2
ILIST1: RET
;CHANNEL 7 INTERRUPT
;CLOCK, POSSIBLE RESCHEDULING, OR START PROCESS FROM SCHEDULER
PISC7: XWD PISC7R,.+1
IFN KIFLG,< ;PROTECT SOME AREAS ON KI-10.
CLSB SCDCHN ;THE ISB MUST BE EXPLICITLY CLEARED
MOVEM 1,KIP7A ;STASH AN AC TO DO THE RANGE CHECK
SKIPE KIP7Q ;REQUEST FROM KI RETURN?
JRST [ MOVE 1,KIP7P ;YES. GET PC AND FLAGS
MOVEM 1,PISC7R ;SET TO GO THERE
SETZM KIP7Q ;CLEAR REQUEST
SETZM KIP7F
JRST .+1]
MOVE 1,PISC7R ;SEE IF WE WERE IN USER MODE
TLNE 1,UMODF ; ..
JRST KIP71 ;YES. OK TO RESCHEDULE
MOVEI 1,0(1) ;EXEC MODE. JUST THE ADDRESS. CLR FLAGS
CAIL 1,KIBGN ;CRITICAL SECTION RANGE CHECK
CAIL 1,KIEND ; ..
KIP71: SKIPA 1,KIP7A ;NO. OK TO BREAK HERE. GET THE AC BACK.
JRST [ AOS KIP7F ;CRITICAL. FLAG INTERRUPT NEEDED, BUT
MOVE 1,KIP7A ; FOR NOW JUST RESTORE AC AND GO AWAY
JEN @PISC7R] ;DISMISS FROM CHANNEL 7
>; ;END OF KI-10 SAFETY CHECK.
SKIPG PSKED ;RESCHEDULE ON PAGE ARRIVAL .. DCA
SKIPE ISKED
AOSA SKEDF3 ;RESKED REQUEST
SKIPE APCLKC ;CLOCK TICK?
JRST APCLK ;SERVICE IT
APCLKX: SKIPE SKEDF1 ;INITIATED BY SCHEDULER?
JRST SCDR ;YES, GO START PROCESS
SKIPG INSKED ;IN SCHEDULER NOW, OR
SKIPG SKEDF3 ;NO SCHEDULING REQUESTS?
JEN @PISC7R ;IGNORE INTERRUPT
SKIPE ENSKR ; ABOUT TO ENTER SCHEDULER AT PROC LVL?
JEN @PISC7R ; YES. NO NEED TO DO IT HERE
SKIPN TRAPPC ;PAGER TRAP STARTING?
SKIPE NSKED ;OK TO RESCHEDULE?
JRST SCDW ;NO, GO SET TRAPS
ENTSKD ;ENTER SCHEDULER ENVIRONMENT
MOVE 1,PISC7R
MOVEM 1,PPC
JEN @[SCHED0]
SCDW: MOVEM 1,RSKED ;SAVE AC1
MOVE 1,RSKEDT ;GET TRAP INSTRUCTION
EXCH 1,RSKED ;LEAVE IT TO GET EXECUTED
JEN @PISC7R
RSKEDN: JFCL 0 ;NO-TRAP CONTENTS OF RSKED
RSKEDT: JSYS RSKD0 ;TRAP CONTENTS OF RSKED
;SETUP AND RESUME PROCESS
SCDR: SETZM SKEDF1 ;CLEAR LOCAL FLAG
SETZM INSKED ;NO LONGER IN SCHEDULER
IFN KIFLG,<
JSP 7,KISLOD> ;RELOAD STUFF PECULIAR TO KI-10
IFE JTRPSW-1,< ;IF MAPPING RES MON FOR TRAPS
HRRZ 1,JTMNW ;1=FORKS MONITOR
CAIN 1,7777 ;NULL FORK?
JRST .+5 ;YES, DON'T MAP RES MON
SKIPN 1,PSB+JDVPG ;NO, IS FORK INIT'D?
JRST .+3 ;NO
MOVEM 1,MMAP+1 ;YES, SET MON MAP AND
CONO PGR,7 ;MAP RES MON
>
MOVE 1,PSB40
MOVEM 1,40
MOVSI 17,PAC ;RESTORE PROCESS AC'S
BLT 17,17
JEN @PPC ;RUN PROCESS
;VARIOUS WAYS OF ENTERING SCHEDULER
;JSYS HALTF - DISMISS FORK UNTIL INTERRUPT OR EXTERNALLY RESTARTED
.HALTF: JSYS MENTR
HALTF1: CALL FKTMI ;FORK TERM INTERRUPT
HALTX: MOVEI 1,HALTT
JSYS EDISMS
JRST MRETN ;IF CONTINUED
HALTT: JRST 0(4) ;IDENTIFIABLE TEST FOR HALTED FORK
;EXEC DISMISS - AC1 CONTAINS XWD DATA,TEST ROUTINE ADR
EDISMS: XWD FPC,.+1
ENTSKD ;ENTER SCHEDULER
DISMS1: MOVE 2,FPC ;USE JSYS RETURN AS PPC
MOVEM 2,PPC
DISMSE: SKIPE NSKED ;CHECK FOR BUGGY DISMISS
BUG(HLT,<DISMISS WHILE NOSKED>)
AOS ENTDMS ;COUNT DISMISSES
MOVEM 1,FKSTAT(7) ;STORE ACTIVATION TEST WORD
LSH 1,-^D9
ANDI 1,777
CAML 1,MONCOR
BUG(HLT,<DISMISS WITH NON-RES TEST ADDRESS>)
CALL SAVRT
SETZM JOBCK0 ;INIT MEASURING INTERVAL
SETZ 2,
MOVSI 1,HOLD ;THIS FORK TO BE KEPT IN BALSET?
TDNE 1,FKFLGS(7)
MOVE 2,MAXBSH ;YES
HRRZ 1,FKSTAT(7)
CAIE 1,BLOCKM
CAIN 1,BLOCKT ;DISMISSED FOR WAIT .G. 500 MS?
SETZ 2, ;YES, DON'T RETAIN IN BALSET
JUMPE 2,[ CALL REMBSJ ;IF NO HOLD TIME REMOVE FROM
SETOB 7,FORKX ;BAL SET IMMED.
JRST SCHED0 ]
MOVE 1,TODCLK
ANDI 1,377777
ADDI 1,0(2)
MOVSI 1,0(1)
HRRI 1,DISMT
MOVEM 1,FKPGST(7)
JRST SCHP3
MAXBSH: ^D100 ;MAX BALSET 'HYSTERESIS'
;RESCHEDULE ON PAGE WAIT
SCHEDP: XWD SKDPC,.+1
ENTSKD
SCHP1: AOS ENTPGF ;COUNT ENTRIES DUE TO PAGE-FAULT
MOVEM 1,FKPGST(7)
CALL SAVRT
MOVE 1,SKDPC
MOVEM 1,PPC
SCHP3: MOVSI 1,WTFK
SOS NBRUN ;FORK NO LONGER RUNNABLE .. COUNT
CALL SCHP2
JRST SCHED0
SCHP2: SKIPE NSKED
JRST [MOVEM 7,SSKED ;SAVE NOSKED FORK INDEX
TLO 1,NOSK
JRST .+1]
IORM 1,FKFLGS(7)
SETOB 7,FORKX
RET
;DO OKSKED AND RESCHEDULE
SCHEDR: XWD SKDPC,.+1
ENTSKD
SOSGE NSKED
BUG(HLT,<OKSKED WHEN NOT NOSKED>)
JRST SCHP1
;DEFERRED SCHEDULING REQUEST TRAP
RSKD0: XWD SKDPC,.+1
ENTSKD ;ENTER SCHEDULER
MOVE 1,SKDPC
RSKD2: MOVEM 1,PPC
RSKD3: MOVE 1,RSKEDN
MOVEM 1,RSKED
JRST SCHED0
;COMMON SCHEDULER ENTER ROUTINE, SAVE AC'S AND SET INSKED FLAG
;UPDATES PROCESS CLOCKS. SMASHES ACS 15 AND 16 IN DOING SO!!
ENSKED: XWD ENSKR,.+1
SKIPE INSKED
BUG(HLT,<CALL TO SCHEDULER WHEN ALREADY IN SCHEDULER>)
AOS INSKED ;PREVENT ACTION BY CH7 BREAK
MOVEM 17,PAC+17 ;SAVE PROCESS AC'S
MOVEI 17,PAC
BLT 17,PAC+16
MOVE 7,40
MOVEM 7,PSB40
IFN KIFLG,<
JSP 7,KISSAV> ;SCHEDULER SAVE ROUTINE FOR KI-10 HWARE
MOVE 7,FORKX ;GET INDEX OF CURRENT FORK
MOVE P,PI7P ;GET PDL POINTER
PUSH P,ENSKR ; SAVE ENSKR
SETZM ENSKR
;UPDATE PROCESS CLOCKS
UCLOCK: MOVE 16,JOBNO
SETZ 15,
EXCH 15,JOBRTT ;RUN TIME SINCE LAST UPDATE
JUMPE 15,R ;RETURN NOW IF NO CHANGE
ADDM 15,SOLD ;ACCUMULATE ALL SOLD TIME
ADDM 15,JOBRT(16) ;ACCOUNT FOR JOB
ADDM 15,FKRT ;ACCOUNT FOR FORK
IFN PIESLC,<
ADDM 15,FKPRT(7) ;RUNTIME SINCE LAST FKUTIL UPDATE
> ;END PIE-SLICE SCHEDULER CONDITIONAL
ADDM 15,RUNT1 ;LOCAL RUNTIME
ADDM 15,IFTIM ;INTERFAULT TIME
HRRZ 16,JOBNAM(16) ;GET SUBSYSTEM INDEX
ADDM 15,STIMES(16) ;ACCUMULATE SUBSYSTEM TIME
ADDB 15,PGTIM ;CORE MGT CLOCK
CAIGE 15,AGTICK ;TIME TO TICK AGE CLOCK?
RET ;NO
IDIVI 15,AGTICK ;YES, COMPUTE NUMBER TICKS IN INTERVAL
MOVEM 16,PGTIM ;LEAVE REMAINDER
CAILE 15,AGSEC ;STRANGELY LONG INTERVAL?
MOVEI 15,AGSEC ;YES, NORMALIZE TO A SECOND
LDB 16,[POINT 9,FKNR(7),17] ;CURRENT AGE
ADDI 15,0(16) ;ADD TICKS
TRNE 15,777000 ;OVERFLOW 9 BIT FIELD?
SUBI 15,1000-100 ;YES, WRAPAROUND
DPB 15,[POINT 9,FKNR(7),17] ;SET NEW AGE
DPB 15,[POINT 9,PGR72,8] ;FOR PAGER
PGRLAG ;LOAD NEW AGE INTO PAGER
RET
;INSTRUCTION TRAP - TRAP PC IN FPC, ASSUMED TO BE I +1
ITRAP1: MOVEM 1,LSTERR ;SAVE ERROR CODE GIVEN IN 1
ITRAP: SKIPE INSKED
BUG(HLT,<INSTRUCTION TRAP WHILE IN SCHEDULER>)
SKIPL FORKX ;NO FORK RUNNING, OR
CONSZ PI,177B27 ;PI IN PROGRESS?
BUG(HLT,<INSTRUCTION TRAP WHILE PI IN PROGRESS OR IN SCHEDULER>)
SKIPGE SLOWF ;NOW IN SLOW CODE?
JSYS MENTR ;NO, ENTER
ITR3: MOVE 1,MPP ;STACK PTR ON ENTERING THIS CONTEXT
MOVE 2,0(1) ;RETURN PC
TLNN 2,UMODF ;PREVIOUS CONTEXT INTERRUPTABLE?
SKIPGE -2(1) ;I.E. USER MODE, OR INTDF .L. 0
JRST ITR2 ;YES, OK
BUG(CHK,<INSTRUCTION TRAP AND PREVIOUS CONTEXT WAS NOINT>)
ITR2: SETZM NSKED
SETOM TRAPC ;CLEAR FLAGS AND COUNTERS
SETZM INTDF ;SET TO 1 LEVEL NOINTERRUPT
MOVE 1,CHNSON
ANDCAM 1,PSIBW ;FLUSH PREVIOUS PANIC BREAKS
MOVEI 1,^D15 ;INITIATE CHANNEL 15 INTERRUPT
CALL PSIRQ0
RESKD1 ;GET THE INTERRUPT "SEEN"
OKINT ;INTERRUPT SHOULD TAKE HERE
MOVE P,UPP ;RETURN TO USER IF CONTINUED
ADD P,BHC+2
JRST MRETN
;BLOCK UNTIL CONDITION SATISFIED
;BLOCK0 - STAYS IN BALSET, BLOCK1 - LEAVES BALSET
BLOCK0: XWD SKDPC,.+1
ENTSKD
CALL BLOCKS
JRST SCHP1
BLOCK1: XWD SKDPC,.+1
ENTSKD
CALL BLOCKS
MOVE 2,SKDPC
MOVEM 2,PPC
JRST DISMSE
BLOCKS: MOVNI 1,^D100
ADDM 1,RJQNT ;CHARGE Q TO PREVENT HOGGING
MOVNI 1,2
ADDM 1,SKDPC ;MAKE RETURN TO INSTRUCTION BEFORE CALL
MOVE 1,TODCLK
ANDI 1,377777
ADDI 1,^D100 ;ADD 100 MILLISECS
MOVSI 1,0(1)
HRRI 1,BLOCKW
RET
BLOCKM: JFCL ;SCHED TEST FOR .5 TO 64 SEC.
BLOCKW: MOVE 2,TODCLK ;SCHEDULER TEST, GET TIME
ANDI 2,377777
SUB 1,2 ;DESIRED - NOW = WAIT LEFT
BLK2: JUMPLE 1,1(4) ;NO WAIT TIME LEFT
CAIGE 1,200000 ;BIG DIFFERENCE?
JRST 0(4) ;NO, KEEP WAITING
SUBI 1,400000 ;YES, COMPENSATE FOR WRAPAROUND
JRST BLK2
;DEFAULT LOCK FAILURE ROUTINE
CNTLCK::
LCKTST::
PUSH P,1 ;SAVE AC1
PUSH P,1 ;DO IT AGAIN
MOVE 1,-2(P)
MOVE 1,-2(1) ;GET THE FAILING AOSE
EXCH 1,0(P) ;PUT IT ON THE STACK AND RESTORE AC1
HRRZI 1,@0(P) ;AC1=ADDRESS OF LOCK
CAML 1,RESDNT ;RESIDENT?
JRST [SETZM GLOCK ;NO, INDICATE COLLISION
MOVEI 1,SLOCKT ;ACTIVATION ROUTINE
JSYS EDISMS ;SLEEP
MOVNI 1,2 ;BACK UP THE PC
ADDM 1,-2(P)
SUB P,BHC+1 ;ADJUST STACK
POP P,1 ;RESTORE AC1
RET] ;TRY AGAIN
HRLZS 1 ;ADDRESS TO LEFT HALF
HRRI 1,RLOCKT ;ACTIVATION TEST
JSYS EDISMS ;SLEEP
SUB P,BHC+1
POP P,1 ;RESTORE AC1
RET
;ACTIVATION TEST FOR PROCESS WAITING FOR RESIDENT LOCK
RLOCKT: AOSE 0(1)
JRST 0(4)
JRST 1(4)
;ACTIVATION TEST FOR PROCESS WAITING FOR A SWAPPABLE LOCK
SLOCKT: SKIPL GLOCK ;NOW A GOOD TIME TO TRY AGAIN?
JRST 0(4) ;NO
JRST 1(4) ;YES
;HERE ON UNLOCKING A LOCK ON WHICH A CONFLICT HAS OCCURRED
;NOTE THAT SPECIAL CARE IS TAKEN TO PRESERVE THE STATE OF
;ALL ACS BUT P WHEN THE EFFECTIVE ADDRESS COMPUTATION IS DONE
;TO ADDRESS THE LOCK. THUS, TABLES OF LOCKS MAY BE INDEXED VIA
;ANY AC EXCEPT P.
CNFLCT:: PUSH P,1
MOVE 1,-1(P) ;GET PC
MOVE 1,-2(1) ;GET THE SOSL THAT DIDN'T SKIP
EXCH 1,0(P) ;PUT IT ON THE STACK AND RESTORE 1
SETOM @0(P) ;UNLOCK THE LOCK
PUSH P,1
HRRZI 1,@-1(P) ;GET ADDRESS OF LOCK
CAMGE 1,RESDNT ;RESIDNET?
JRST CNFL2 ;YES
SETOM GLOCK ;INDICATE A CONFLICT RESOLVED
SETZM WAITLS ;REQUEST IMMEDIATE FULL WAITLIST SCAN
AOS ISKED ;TO AVOID POSSIBLE DEADLOCK
CNFL2: POP P,1
SUB P,BHC+1
RET
;DISMISS UNTIL WORD .GE. 0
DISGE: PUSH P,1
HRLI 1,DISGET ;GIVEN MON ADDRESS IN 1
DISXE: MOVS 1,1
JSYS EDISMS
POP P,1
RET
DISGET: SKIPGE 0(1)
JRST 0(4)
JRST 1(4)
;DISMISS UNTIL WORD .L. 0
DISL: PUSH P,1
HRLI 1,DISLT
JRST DISXE
DISLT: SKIPL 0(1)
JRST 0(4)
JRST 1(4)
;DISMISS UNTIL WORD .G. 0
DISG: PUSH P,1
HRLI 1,DISGT
JRST DISXE
DISGT: SKIPG 0(1)
JRST 0(4)
JRST 1(4)
;DISMISS UNTIL WORD .LE. 0
DISLE: PUSH P,1
HRLI 1,DISLET
JRST DISXE
DISLET: SKIPLE 0(1)
JRST 0(4)
JRST 1(4)
;DISMISS UNTIL WORD .E. 0
DISE: PUSH P,1
HRLI 1,DISET
JRST DISXE
DISET: SKIPE 0(1)
JRST 0(4)
JRST 1(4)