HLRZ SW,JBTSTS(J) ;GET JOB STATUS BITS AND CODES\r
TRZ SW,RUNMSK+CMWB ;MASK OUT DO NOT CARE BITS\r
CAIE SW,RUNABLE ;IS CURRENT JOB RUNABLE?\r
- JRST CKJR3 ;NO. REQUEU CURRENT JOB\r
+ JRST CKJB3 ;NO. REQUEU CURRENT JOB\r
SKIPN TIMEF ;NO. IS THIS A TIME INTERRUPT?\r
JRST CKJB1 ;NO.\r
\r
MOVEI DAT,QTIME ;YES---REQUEUE AND RESET QUANT. TIME\r
MOVE TAC,JOBQUE\r
PUSHJ PDP,QXFER\r
-\fCKJB1: SKIPG QJ,QJDB ;SET QJ NON ZERO IF ANY REQUEUING TO DO\r
+\fCKJB1: SKIPG QJ,QJOB ;SET QJ NON ZERO IF ANY REQUEUING TO DO\r
JRST CKJB5 ;NO REQUEUEING NECESSARY\r
MOVEI J,JOBMAX ;START WITH HIGHEST JOB NUMBER ASSIGNED\r
-CKJB2: MOVSI SW,JBQ ;JOB NEEDS REQUEUEING BIT\r
+CKJB2: MOVSI SW,JRQ ;JOB NEEDS REQUEUEING BIT\r
TDNN SW,JBTSTS(J) ;THIS JOB?\r
SOJG J,.-1 ;NO, KEEP LOOKING\r
JUMPLE J,CKJB5 ;YES,LOOKED AT ALL JOBS?\r
TLNN SW,CMWB ;IS JOB IN COMMAND WAIT?\r
JRST CKJB9 ;NO.\r
TLNE SW,SWP+JXPN ;YES, IS JOB ON DISK, OR TRYING TO EXPAND?\r
- JRST CK,JB4A ;YES. PUT JOB IN COMMAND WAIT Q\r
+ JRST CKJB4A ;YES. PUT JOB IN COMMAND WAIT Q\r
CKJB9: JUMPGE SW,CKJB4 ;NO,WAIT STATUS CODE DETERMINES NEW Q\r
LDB SW,PJBSTS ;YES, GET QUEUE CODE.\r
CAIN SW,WSQ ;*** EXPERIMENTAL ***\r
JRST CKJB10 ;*** EXPERIMENTAL ***\r
- CAIN SW,TIOWD ;CURRENT JOB GOING INTO TTY IO WAIT?\r
+ CAIN SW,TIOWQ ;CURRENT JOB GOING INTO TTY IO WAIT?\r
HRROS JBTSWP(J) ;YES, SET IN CORE PROTECT TIME TO -1,\r
; SO HE CAN BE SWAPPED IMMEDIATELY IF SOMEONE\r
; ELSE WANTS TO BE SWAPPED IN\r
;PUT ALL JOBS IN NULL QUEUE(JOB NO. NOT ASSIGNED)\r
;CALLED ON RESTART AT LOC 143\r
\r
-INTERNAL QINT\r
+INTERNAL QINI\r
EXTERNAL CPOPJ,JOBMAX,MXQUE,JBTQ\r
EXTERNAL JBTQP1 ;EQUALS JBTQ+1\r
-EXTERNAL JBTCM1 ;EQUALS JBTQ-1\r
-EXTERNAL JBTOMN ;EQUALS JBTQ-NULQ\r
+EXTERNAL JBTQM1 ;EQUALS JBTQ-1\r
+EXTERNAL JBTQMN ;EQUALS JBTQ-NULQ\r
\r
QINI: MOVNI TAC,MXQUE ;MAKE ALL QUEUE HEADERS POINT TO THEMSELVES\r
HRL TAC,TAC ;BACKWARD POINTERS TOO\r
J=ITEM ;JOB NO.\r
Q=PROG ;DEST-Q AND QUANT. TIME ON RETURN\r
T1=TAC1 ;TEMP\r
-T2=TAC ;TEMP AND SOURCE-Q ON CALL TO B,EQLINE\r
+T2=TAC ;TEMP AND SOURCE-Q ON CALL TO B,EQLINK\r
\r
EXTERNAL ERROR\r
\r
BQFIX=QFIX\r
EQFIX=QFIX+1B0\r
BQLINK=QLINK\r
-EQLINK=QLINE+1B0\r
+EQLINK=QLINK+1B0\r
BQJSIZ=QJSIZ\r
EQJSIZ=QJSIZ+1B0\r
\f,SCANS THE QS RETURNING THE NUMBERS OF THE JOBS IN THE QS.\r
\r
DEFINE X(A,B)\r
<INTERNAL A'AVAL,A'Q\r
-A'Q=.=AVALTB\r
+A'Q=.-AVALTB\r
A'AVAL: 0\r
>\r
\r
LOC=LOC+1\r
>\r
CODES\r
+\r
+XP MXCODE,LOC-1 ;MAX, JOB STATE DONE\r
+PQ1=LOC\r
+LOC=LOC+1\r
+PQ2=LOC\r
+LOC=LOC+1\r
+PQ3=LOC\r
+LOC=LOC+1\r
+CMQ=LOC ;COMMAND DELAY QUEUE\r
\f;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES\r
;USED BY SCHEDULER\r
;RUNCSS SETS JOB STATUS WORD TO NEW STATE CODE.\r
INTERNAL QBITS\r
\r
QBITS: QUEUES\r
+ CODES\r
\fIFN FTCHECK+FTMONP,<\r
DEFINE X(A,B),<\r
EXTERNAL A'RFQ\r
QWSW: TTAB BQFIX,PQ1,QQTTY ;IO WAIT SAT.(EXCEPT TTY)\r
;ENTER FRONT OF PROCESSOR QS AND GET QUANT, TIME\r
;ACCORDING TO JOB SIZE\r
-QTSW: TTAB BQFIX,PQ,QQTTY ;TTY IO WAIT SATISFIED(ENTER FRONT OF PQ1)\r
+QTSW: TTAB BQFIX,PQ1,QQTTY ;TTY IO WAIT SATISFIED(ENTER FRONT OF PQ11)\r
\r
QIOWW: TTAB EQFIX,IOWQ,-1 ;IOW(EXDEPT TTY) HELD IN IOWQ\r
QTIOWW: TTAB EQFIX,TIOWQ,-1 ;TTY IOW HELD IN TIOWQ\r
\r
QQSD=-1\r
\r
-QMSQ: TTAB BQFIX,PQ1,QQSD ;START MON. Q(DISK) AT PQ1\r
+QMQS: TTAB BQFIX,PQ1,QQSD ;START MON. Q(DISK) AT PQ1\r
QDAS: TTAB BQFIX,PQ1,QQSD ;DEV. ALLOC.(DISK)...\r
QDCS: TTAB BQFIX,PQ1,QQSD ;DATA CONTROL...\r
QSTS: TTAB BQFIX,PQ1,QQSD ;SYST TAPE\r
QDTS: TTAB BQFIX,PQ1,QQSD ;DEC TAPE\r
QMTS: TTAB BQFIX,PQ1,QQSD ;MAG TAPE\r
QAUS: TTAB BQFIX,PQ1,QQSD ;ALTER UFD\r
-QTIME PTTAB EQLINK,QTTAB,QQSTAB ;MOVE JOB TO LOWER Q\r
+QTIME: PTTAB EQLINK,QTTAB,QQSTAB ;MOVE JOB TO LOWER Q\r
;WHEN QUANT. TIME EXCEEDED AND RESET QUANT. TIME\r
\f,ENTER PROCESSOR QS ACCORDING TO JOB SIZE\r
QSTAB: XWD 4,-PQ1 ;PQ1 IF SIZE .LE. 4K\r
XWD -PQ3,-PQ2 ;BACK TO PQ2 TO COMPETE WITH IOWS JOBS\r
Z\r
\r
+,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME\r
+QTTAB: XWD -PQ1,-PQ2\r
+ XWD -PQ2,-PQ3\r
+ XWD -PQ3,-PQ2 ;BACK TO PQ2 TO COMPETE WITH IOWS JOBS\r
+ Z\r
+\r
,QUANTUM TABLES\r
\r
QQSD=6 ;TENTH SEC. INITIAL QUANT. FOR SHAR. DEV. WAITERS\r
\fIFN FTSWAP,<\r
INTERNAL ISCAN,QSCAN\r
ISCAN: ;SCAN FOR INPUT\r
- XWD -CWM,QFOR ;MONITOR COMMAND WHICH NEEDS CORE IMAGE IN CORE\r
+ XWD -CMQ,QFOR ;MONITOR COMMAND WHICH NEEDS CORE IMAGE IN CORE\r
XWD -MQQ,QFOR1 ;LOOK FOR 1ST JOBS IN SHAR. DEV QUEUES\r
XWD -DAQ,QFOR1\r
XWD -AUQ,QFOR1\r
Z\r
Z ;FINAL ZERO TO FLAG END\r
\r
-QSCAN: ;SCAN FOR OUTPUT\r
+OSCAN: ;SCAN FOR OUTPUT\r
XWD -STOPQ,QFOR ;UNRUNABLE JOBS FIRST\r
XWD -SLPQ,QFOR\r
XWD -DTQ,QBAK1 ;ANY SHAR. DEV.WAITERS MORE THAN 1 DEEP\r
J=ITEM\r
\r
,ALL DEVICE DEPENDENT CODE MARKED WITH A "*"\r
-\fSWAP: SKIPE SHWAT ;IS CORE SHUFFLER WAITING FOR IO TO STOP\r
+\fSWAP: SKIPE SHFWAT ;IS CORE SHUFFLER WAITING FOR IO TO STOP\r
; FOR SOME JOB?\r
PUSHJ PDP,CHKSHF ;YES, CALL CORE SHUFFLER TO SEE IF\r
; IO STOPPED YET\r
; FOR ONE TO SWAP OUT\r
MOVE J,HIGHJB ;YES, START WITH HIGHEST JOB NUMBER ASSIGNED\r
MOVSI T,JXPN ;SETUP JOB EXPANDED BIT\r
- TDDN T,JBTSTS(J) ;IS THIS JOB EXPANDING?\r
+ TDNN T,JBTSTS(J) ;IS THIS JOB EXPANDING?\r
SOJG J,.-1 ;NO, KEEP LOOKING\r
IFN FTRCHK,<\r
JUMPG J,SCNOK ;CLEAR XJOB SO MESSAGE WILL PRINT\r
; (DISPLAY, REAL TIME)?\r
JRST (TAC1) ;YES,CONTINUE SCAN TO FIND ANOTHER\r
HLRZ T,JBTADR(J) ;PICK UP SIZE OF JOB\r
- JUMPE T,(TAC1) ` ;CONTINUE SCAN IF NOT IN CORE (HIGH SEG ALREADY SWAPPED\r
+ JUMPE T,(TAC1) ;CONTINUE SCAN IF NOT IN CORE (HIGH SEG ALREADY SWAPPED)\r
; OUT FOR THIS USER IF NO LOW SEG)\r
ASH T,-12 ;CONVERT TO 1K BLOCKS\r
ADDI T,1\r
\r
INTERNAL FTTRACK\r
\r
-SWAPD:\r
+SWAPO:\r
IFN FTTRACK,<EXTERN LASOUT\r
MOVEM J,LASOUT ;SAVE LAST SWAP OUT FOR DEBUGGING ONLY\r
>\r
SETZM FORCE ;CLEAR FORCE FLAG\r
- HLRZ T,JBTADTR(J) ;COMPUTE CORE IMAGE\r
+ HLRZ T,JBTADR(J) ;COMPUTE CORE IMAGE\r
JUMPE T,SWP1 ;DONT OUTPUT IF 0 CORE(IMGOUT ALREADY SET TO 0\r
; WHEN CORE WAS RETURNED\r
\r
\f;COME HERE WHEN THE AMOUNT OF SPACE NEEDED ON THE DISK\r
;IS NOT AVAILABLE IN ONE CONTIGUOUS BLOCK\r
\r
- EXTERN GETFOR\r
+ EXTERN GETFCR\r
\r
FULL: HRLM DAT,AC3 ;SAVE DAT (LARGEST AVAILABLE HOLE)\r
PUSHJ PDP,FULCOR ;GET 4 FREE CORE LOCS\r
JRST OUTP2 ;GO START OUTPUT\r
\r
;HERE TO GET 4 LOCS OF FREE CORE\r
-FULCOR: PUSH PDP,ITEM ;GETFOR USES ITEM\r
- PUSHJ PDP,GETFOR ;GET 4 CELLS\r
+FULCOR: PUSH PDP,ITEM ;GETFCR USES ITEM\r
+ PUSHJ PDP,GETFCR ;GET 4 CELLS\r
JRST IPOPJ ;RETORE ITEM AND RETURN\r
\r
;STEP AC3 TO NEXT LOC OF TABLE BEING BUILT\r
\r
INTERN ZERSWP\r
\r
-ZERSWPL TDZA TAC,TAC ;REQUEST O SPACE ON DISK AND ALWAYS SKIP\r
+ZERSWP: TDZA TAC,TAC ;REQUEST O SPACE ON DISK AND ALWAYS SKIP\r
CHG1: ADDM TAC1,VIRTAL ;INCREASE SIZE OF VIRTUAL CORE AVAILABLE IN SYSTEM\r
; AND THEN RETURN ALL OF DISK SPACE(CHGSWP)\r
MOVSI TAC1,SWP!SHF ;CLEAR SWAPPED OUT BIT IN JOB OR SEG\r
\fSQGO1: SETZM SQLEN ;ZERO AMOUNT TRANSFERRED SO FAR\r
MOVE TAC1,SQREQ ;*PUT IOWD INTO TAC1\r
MOVSI TAC,200000 ;*SET "SWAPPER I/O GOING" FLAG ON\r
- ORB TAC,SETA ;*\r
+ ORB TAC,SERA ;*\r
TRZN TAC,FRGSEG ;*FRAGMENTED?\r
JRST SQGO2 ;*NO, READ IN ENTIRE (OR PART) OF SEG\r
\r
SETZM SQREQ\r
JRST DINT4B\r
\r
-SWPER1; MOVSI TAC,100\r
+SWPER1: MOVSI TAC,100\r
ADDM TAC,CKSMCT\r
TRO IOS,IODTER\r
SWPERR: MOVM TAC, FINISH ;*RESET SERA IN CASE OF FRAGMENTED JOB\r
MOVEM TAC,XSAT5\r
MOVE TAC,XSAT8\r
MOVEM TAC,XSAT6\r
- POPJ PDPD,\r
+ POPJ PDP,\r
\r
IFN FTCHECK+FTMONP,<\r
EXTERNAL SQREQ,SERA,SERACT,XSAT1,XSAT2,XSAT3,XSAT4,XSAT5,XSAT6,XSAT7\r
SERA: Z ;SIGN IS 1 IF A READ\r
; C(RH)=BLOCK NUMBER BEFORE READING.\r
; ERROR BITS AFTER READING.\r
-SELACT: 0 ;COUNT FOR ERRORS\r
+SERACT: 0 ;COUNT FOR ERRORS\r
SQLEN: 0 ;AMOUNT TRANSFERRED SO FAR - FRAG SEG\r
\r
XSAT1: EXP XSAT3-1 ;POINTER USED BY GETBIT,CLRBIT\r
XSAT6: BLOCK 1\r
REPEAT 1,<\r
IFE E1,<X=1B0>\r
- IFN E1,<X1\r
+ IFN E1,<X=1\r
REPEAT ^D35-E1,<X=X*2>>\r
IFE E2,<Z=-1>\r
IFN E2,<Z=0\r
- X=1\r
+ Y=1\r
REPEAT ^D36-E2,<Z=Z+Y\r
Y=Y*2>\r
>>\r
FXSAT: TRZN TAC,FRGSEG ;FRAGMENTED?\r
JRST FXSAT1 ;NO. DO IN REGULAR WAY\r
\r
-FRAGRK: HRRZ AC3,TAC ;YES. LOC OF TABLE IN AC3\r
+FRAGBK: HRRZ AC3,TAC ;YES. LOC OF TABLE IN AC3\r
FRGBK1: HRRZ TAC,(AC3) ;LOC OF NEXT DISK ADDRESS\r
HLRE DAT,(AC3) ;NUMBER OF K\r
JUMPLE DAT,FRGBK2 ;GIVE UP FREE CORE IF NOT REAL ADDRESS\r
IFE FTCHECK+FTMONP,<\r
;DATA ASSOCIATED WITH THE SWPSER LOGIC FOR THE NEW PDP-10 DISK ---\r
\r
- INTERN MXK2SWP,CONVMD,BLKSPK,SWAPTAB,MAXSWP\r
+ INTERN MXK2SWP,CONVMD,BLKSPK,SWPTAB,MAXSWP\r
EXTERN K4SWAP\r
;THE ABOVE ARE REFERENCED OR INITIALIZED BY THE "ONCE" ROUTINE.\r
\r
; FOR SWAPPING (UPPER BOUND ON THE VALUE OF K4SWAP WHICH\r
; MAY BE REQUESTED AT DISK REFRESH TIME). (ONE MILLION WORDS\r
; FOR SWAPPING SEEMS LIKE A NON-RESTRICTIVE ARBITRARY LIMIT.)\r
-SWPSIZ=MXK2SWP/.^D36+1 ;SIZE OF SWPTAB ALLOCATION TABLE.\r
+SWPSIZ=MXK2SWP/^D36+1 ;SIZE OF SWPTAB ALLOCATION TABLE.\r
\r
SWPENT: XWD -SWPSIZ,SWPTAB ;THREE WORD POINTER TABLE\r
XWD 400000,0 ; REQUIRED BY THE "GETBIT" AND\r
SERA: Z ;SIGN IS 1 IF A READ\r
; C(RH)=BLOCK NUMBER BEFORE READING.\r
; ERROR BITS AFTER READING.\r
-SELACT: 0 ;COUNT FOR ERRORS\r
+SERACT: 0 ;COUNT FOR ERRORS\r
SQLEN: 0 ;AMOUNT TRANSFERRED SO FAR FOR FRAGMENTED JOB\r
>\r
> ;END OF SWPSER LOGIC FOR THE NEW PDP-10 DISK.\r
\fSCHEND: END\r
+\0\r