X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/d693caac75dd25e668e43e85c29205bfc8dea06e..e6cdcf9f28fd4956d9c22090b705d9d8396b5cde:/src/schedb.mac diff --git a/src/schedb.mac b/src/schedb.mac index 16c0de7..ced81c1 100644 --- a/src/schedb.mac +++ b/src/schedb.mac @@ -8,6 +8,7 @@ SUBTTL CLKCSW R,KRASIN/AF/TH/RCC TS 02 JUNE 69 V421 XP VSCHED,421 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP + INTERNAL FTRC10 ;THIS SOURCE FILE MAY BE ASSEMBLED TO USE EITHER THE ; NEW PDP-10 DISK (MODEL RC-10) OR THE OLD PDP-6 DISK (DATA ; PRODUCTS DISK FILE) FOR SWAPPING. @@ -21,6 +22,7 @@ IFE FTRC10, < ENTRY XCKCSW > + EXTERNAL JOB,JBTSTS EXTERNAL JBTQ,PJBSTS EXTERNAL PJBSTS,TIMEF,MJOBN @@ -48,6 +50,7 @@ NXTINI: MOVEI TAC,MAXQ ;MAX. NO. OF QUEUES SETZM XJOB ;CLEAR NO. OF JOBS NEEDING EXPANDING SETZM JOBQUE ;CLEAR JOB NO. TO BE REQUEUED POPJ PDP, + ,NXTJOB DECREMENTS CURRENT JOB'S QUANT. AND PROTECT ,TIMES AND REQUEUES IT IF QUANT. TIME GONE TO 0 ,SERVINCES ANY JOB REQUEING REQUESTED AT OTHER PRIORITY @@ -55,6 +58,7 @@ NXTINI: MOVEI TAC,MAXQ ;MAX. NO. OF QUEUES ,MAKES NO ASSUMPTIONS RE. ACS ,RETURSN NEXT JOB TO RUN IN J. + EXTERNAL JBTSWP,POTLST NXTJOB: SKIPN TIMEF ;CLOCK TIC? @@ -66,7 +70,6 @@ NXTJOB: SKIPN TIMEF ;CLOCK TIC? JRST .+3 SKIPL JBTSWP(J) ADDM SW,JBTSWP(J) - AOBJN J,.-4 NXTJB1: SKIPN J,JOB ;CURRENT JOB NO., IS IT NULL JOB? @@ -140,8 +143,7 @@ IFE FTSWAP,< EXTERNAL CHKSHF PUSHJ PDP,CHKSHF > IFN FTSWAP,< - PUSHJ PDP,SWAP -> + PUSHJ PDP,SWAP> ;SCHEDULAR--SEARCH THRU QUEUES ACCORDING TO SSCAN TABLE ;FOR 1ST JOB IN CORE--RETURN ITS NO. IN J @@ -164,6 +166,7 @@ SCHD1: SETZ J, ;RETURN NULL JOB POPJ PDP, + ;TEMPORARY EXPERIMENTAL SCHEDULING CHANGE TO PERMIT TTY-I/O-WAIT-SATISFIED JOBS ON ; THE DISK TO DISPLACE I/O BOUND JOBS IN CORE.... R.CLEMENTS/D.PLUMER 9 MAY 68 CKJB10: SKIPE INFLG @@ -207,7 +210,8 @@ INTERNAL QXFER,QSCAN,FTSWAP,FTDISK ,BOTH ROUTINES ARE "TABLE DRIVEN" IN THE SENSE THAT THE ,CALLING ROUTINE PROVIDES THE ADDRESS OF A TABLE WHICH ,DEFINES THE SPECIFIC OPERATIONS TO BE PERFORMED. - ;QUEUE INITIALIZATION + +;QUEUE INITIALIZATION ;PUT ALL JOBS IN NULL QUEUE(JOB NO. NOT ASSIGNED) ;CALLED ON RESTART AT LOC 143 @@ -225,7 +229,6 @@ QINI: MOVNI TAC,MXQUE ;MAKE ALL QUEUE HEADERS POINT TO THEMSELVES MOVSM TAC,JBTQP1 ;BACK POINTER FOR JOB 1 MOVEI ITEM,JOBMAX ;MAX. JOB NO. MOVEM TAC,JBTQ(ITEM) ;FOR. POINTER OF JOBMAX JOB NO. - HRLM ITEM,JBTQMN ;SET NULQ HEADER TO POINT TO JOB1 MOVEI TAC,1 ;AND JOBMAX HRRM TAC,JBTQMN ;FORWARD POINTER @@ -234,7 +237,8 @@ QINI1: HRRM ITEM,JBTQM1(ITEM) ;JOB I-1 POINT TO JOB I SOJLE ITEM,CPOPJ ;FINISHED? HRLM ITEM,JBTQP1(ITEM) ;BACK POINTER JOB I+1 POINTS TO JOB I JRST QINI1 - ,DELETES A JOB FROM ITS "SOURCE-Q", DETERMINES A "DEST-Q" + +,DELETES A JOB FROM ITS "SOURCE-Q", DETERMINES A "DEST-Q" ,ACCORDING TO ONE OF 3 FUNCTIONS, AND INSERTS THE JOB AT ,THE BEGINNING OR END OF THIS DEST-Q. IN ADDITION IT MAY ,RESET THE JOB'S QUANTUM TIME (RH JBTSTS). @@ -280,7 +284,6 @@ QINI1: HRRM ITEM,JBTQM1(ITEM) ;JOB I-1 POINT TO JOB I , : EXP ;CORRES. TO +0 , ... , EXP ;CORRES. TO +N-1 - , Z , , UPON A CALL TO QXFER FOR THESE 2 CODES, AC T2 CONTAINES @@ -291,6 +294,7 @@ QINI1: HRRM ITEM,JBTQM1(ITEM) ;JOB I-1 POINT TO JOB I , TABLE. , IF NO MATCH FOUND..NO TRANSFER TAKES PLACE. + ,DEST-Q AS A FUNCTION OF JOB SIZE ,BQJSIZ INSERT AT BEG OF DEST-Q ,EQJSIZ INSERT AT END @@ -315,7 +319,7 @@ QINI1: HRRM ITEM,JBTQM1(ITEM) ;JOB I-1 POINT TO JOB I ,CALLING SEQUENCE: , MOVE J,[JOB NUMBER] , MOVE T2,[CURRENT Q] ;BQLINK AND EQLINK ONLY -; MOVEI TT,TRANS TABLE ADDRESS +, MOVEI TT,TRANS TABLE ADDRESS , PUSHJ PDP,QXFER , ... ;RETURN , ON RETURN J IS UNALTERED; LH(Q)=-1 IF QUANT, TIME OUT @@ -354,7 +358,8 @@ QX2: MOVS T2,Q ;T2 IS ADDR. OF QUANT.TIME(IF REQUESTED) HRRO Q,(Q) ;RH(Q)=DEST-Q;LH=-1(NO QUANT.TIME REQ.) SKIPL 1(TT) ;WAS QUANT. TIME REQUESTED? HRL Q,(T2) ;YES--GET IT - ,FIXED DEST-Q + +,FIXED DEST-Q QFIX: MOVE T1,JBTQ(J) ;DELETE JOB FROM SOURCE-Q MOVS T2,T1 ;T1=FORW. LINK, T2=BACK LINK HRRM T1,JBTQ(T2) ;FORW, LINK PAST JOB @@ -372,7 +377,6 @@ QFIX: MOVE T1,JBTQ(J) ;DELETE JOB FROM SOURCE-Q JUMPL Q,QX3 ;RETURN IF QUANT. TIME NOT REQ. HLRM Q,JBTSTS(J) ;SET QUANT. TIME - MOVEI TT,RNQ ;SET JOB STATUS WAIT DPB TT,PJBSTS ;CODE TO RUN QUEUE (0). QX3: POPJ PDP, @@ -466,6 +470,7 @@ A'AVAL: 0 > INTERNAL AVALTB + AVALTB: QUEUES ;GENERATE THE AVAL FLAGS LOC=.-AVALTB > @@ -492,7 +497,8 @@ LOC=LOC+1 PQ3=LOC LOC=LOC+1 CMQ=LOC ;COMMAND DELAY QUEUE - ;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES + +;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES ;USED BY SCHEDULER ;RUNCSS SETS JOB STATUS WORD TO NEW STATE CODE. ;SCHEDULER SETS UP QUEUE TRANSFER TABLE ADDRESS FROM @@ -508,7 +514,7 @@ QBITS: QUEUES CODES IFN FTCHECK+FTMONP,< DEFINE X(A,B),< -EXTERNAL A'RFQ +EXTERNAL A'REQ > QUEUES EXTERNAL REQTAB @@ -555,6 +561,7 @@ EXTERNAL XJOB >> IFE FTCHECK+FTMONP,< + INTERNAL JOBQUE JOBQUE: 0 ;JOBS TO BE REQUEUED ON CLOCK INTERRUPT @@ -623,11 +630,6 @@ QTIME: PTTAB EQLINK,QTTAB,QQSTAB ;MOVE JOB TO LOWER Q QSTAB: XWD 4,-PQ1 ;PQ1 IF SIZE .LE. 4K XWD ^D16,-PQ2 ;PQ2 IF 4K .L. SIZE .LE. 16K XWD ^D256,-PQ3 ;PQ3 IF 16 .L. SIZE - -,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME -QQTAB: XWD -PQ1,-PQ2 - XWD -PQ2,-PQ3 - XWD -PQ3,-PQ2 ;BACK TO PQ2 TO COMPETE WITH IOWS JOBS Z ,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME @@ -693,6 +695,7 @@ OSCAN: ;SCAN FOR OUTPUT Z Z ;FINAL ZERO TO FLAG END > + SUBTTL SWAP R. KRASIN/AF TS4.34 03 FEB 69 V406 ,SWAPPER CALLED EVERY CLOCK TIC. @@ -712,7 +715,6 @@ OSCAN: ;SCAN FOR OUTPUT , IF ONE--WILL LOW(HIGH) SEG FIT IN LARGEST HOLE IN CORE? , YES--START INPUT AND RETURN , NO--IS TOTAL FREE CORE(CORTAL) ENOUGH TO ACCOMMODATE LOW(HIGH) SEG? - ; YES--CALL CORE SHUFFLER ; IS SHUFFLER WAITING FOR IO TO STOP? ; YES--RETURN AND DO NOTHING @@ -825,7 +827,7 @@ IFN PROG-JDAT,< IFN FT2REL,< EXTERN FINOT PUSHJ PDP,FINOT ;IS THIS A HIGH SEG WHICH WAS JUST SWAPPED OUT? - ;YES, J SET TO LOW SEG NO, GO TRY SWAP IT OUT + JRST FORCEL ;YES, J SET TO LOW SEG NO, GO TRY SWAP IT OUT ; NO, THIS WAS A LOW SEG, ALL SWAPPING FOR THIS USER ; IS FINISHED. > @@ -887,7 +889,8 @@ SWPREC: MOVE TAC,SERA ;ERROR FLAGS LDB TAC,IMGOUT TLO TAC,1 ADDM TAC,SWPERC - JRST SWAPO ;GO TRY AGAIN + JRST SWAPO ;GO TRY AGAIN + ;NO INPUT TO DD, CHECK FOR EXPANDING JOBS CHKXPN: SKIPG XJOB ;ANY JOBS TO EXPAND @@ -895,7 +898,6 @@ CHKXPN: SKIPG XJOB ;ANY JOBS TO EXPAND ; YES, FALL INTO SCNOUT WHICH WILL SWAP OUT EXPANDING ; JOB SINCE THERE IS ONE ;INPUT TO DO, CHECK TO SEE IF ANY JOBS JUST HAPPEN TO WANT TO EXPAND - EXTERN HIGHJB,JBTSTS,ERROR,MAXSIZ,MAXJBN,SUMCOR SCNOUT: SKIPG XJOB ;ANY JOBS WAITING TO EXPAND? JRST SCNJOB ;NO, SCAN ALL JOBS IN PRIORITY ORDER LOOKING @@ -905,7 +907,8 @@ SCNOUT: SKIPG XJOB ;ANY JOBS WAITING TO EXPAND? TDNN T,JBTSTS(J) ;IS THIS JOB EXPANDING? SOJG J,.-1 ;NO, KEEP LOOKING IFN FTRCHK,< - JUMPG J,SCNOK ;CLEAR XJOB SO MESSAGE WILL PRINT + JUMPG J,SCNOK + SETZM XJOB ;CLEAR XJOB SO MESSAGE WILL PRINT JSP DAT,ERROR ;ERROR IF NONE FOUND > SCNOK: SOS XJOB ;DECREMENT COUNT OF EXPANDING JOBS @@ -929,7 +932,7 @@ SCNJOB: MOVE T,CORTAL ;INITIALIZE FREE CORE COUNTER ; PROTECT TIME IS DECREMENTED ONLY WHEN ; A JOB IS RUNABLE, SO LOOK AT IT ; ONLY IF RUN BIT STILL ON - TLNE T,NSWP+SWP ;NO, IS THIS JOB NOT TO BE SWAPPED OR ALREADY SWAPPED? + TLNE T,NSWP+SWP ;NO, IS THIS JOB NOT TO BE SWAPPED OR ALREADY SWAPPED? ; (DISPLAY, REAL TIME)? JRST (TAC1) ;YES,CONTINUE SCAN TO FIND ANOTHER HLRZ T,JBTADR(J) ;PICK UP SIZE OF JOB @@ -969,7 +972,6 @@ IFN FT2REL,< ; 5. HIGH SEG NOT ON DISK YET ; 6. THIS HIGH SEG IS NOT THE SAME ONE AS JOB ; BEING FITTED IN IS GOING TO WANT - ; RETURN HIGH SEG NO. IN J IF YES, OTHERWISE ; RETURN LOW SEG NO. ; IF JOB JUST HAS LOW SEG. SHF BIT IS SET IN JBTSTS @@ -1048,7 +1050,6 @@ FULL1A: PUSHJ PDP,GXSAT ;GET SOME SWAPPING SPACE POP PDP,DAT ;RESTORE AMT GOTTEN HRLM DAT,(AC3) ;SAVE AMOUNT IN TABLE SUB T,DAT ;AMOUNT STILL NEEDED - JUMPE T,FULSET ;THROUGH IF NEED 0 K NOW PUSHJ PDP,BMPAC3 ;STEP TO NEXT TABLE LOCATION MOVE DAT,T ;TRY TO GET ALL WE NEED NOW IN 1 CHUNK @@ -1173,7 +1174,6 @@ CHG1: ADDM TAC1,VIRTAL ;INCREASE SIZE OF VIRTUAL CORE AVAILABLE IN SYSTEM PUSH PDP,DAT ;SAVE TTY OUTPUT BYTE POINTER(COMMAND DECODER) LDB DAT,IMGOUT ;*SIZE ON DISK(1K BLOCKS) - JUMPE DAT,CHG3 ;DID SEG HAVE ANY DISK SPACE? HLRZ TAC,JBTSWP(ITEM) ;*YES, LOGICAL DISK BLOCK+FRGSEG BIT PUSHJ PDP,FXSAT ;*FREE THE DISK BLOCKS NO LONGER NEEDED @@ -1215,7 +1215,6 @@ XPAND: LSH TAC,-12 ;CONVERT HIGHEST DESIRED ADDRESS ;ROUTINE TO FLAG JOB TO BE STOPPED AND SWAPPED OUT ;BECAUSE IT HAS JUST BEEN CONNECTED TO A HIGH SHARABLE SEG WHICH IS ON DISK ;OR ON ITW WAY IN OR OUT. THE SIZE OF THE HIGH SEG IS UNCHANGED - ;THE JOB MUST BE STOPPED UNTIL HIGH SEG SWAPPED IN JUS AS IF JOB HAS ;EXPANDED HIGH SEG(MUST BE CALLED FROM UUO LEVEL FOR CURRENT JOB IF HIGH SEG) ;CALL: MOVE ITEM,HIGH SEG NUMBER @@ -1262,6 +1261,7 @@ SQOUT: MOVEM TAC,SERA ;STORE THE BLOCK NUMBER EXCH TAC,DFBUSY JUMPN TAC,CPOPJ ;YES IF JUMP + ERATRY=3 ;NO. OF TIMES TO READ AND WRITE ON ERRORS ;START UP DEVICE WITH SWAPPING REQUEST. THIS ROUTINE @@ -1299,7 +1299,6 @@ FRGIO1: HLRE DAT,(TAC) ;NO OF K IN THIS DISK CHUNCK ORM TAC,SERA ;INSERT NEW ADDRESS JRST FRGIO1 - FRGIO2: LSH DAT,12 ;CONVERT FROM K TO WORDS ADDM DAT,SQLEN ;ADD TO PREVIOUSLY TRANSFERRED AMOUNT MOVNS DAT ;-N WORDS @@ -1374,7 +1373,6 @@ GXSAT: MOVE AC1,XSAT1 ;SAVE AC1, SET IT TO TABLE LOC. MOVE AC2,XSAT2 ; LSH DAT,CONVMD ;CONVERT TO 128 WORD DISK BLOCKS PUSH PDP,ITEM ;SAVE C(ITEM) - MOVE ITEM,DAT ;GETBIT EXPECTS PARAMETER IN ITEM PUSHJ PDP,GETBIT ;FIND A HOLE BIG ENOUGH JRST IPOPJ ;NONE, RESTORE ITEM AND ERROR RETURN @@ -1408,7 +1406,6 @@ FXSAT: LSH TAC,CONVMD ;RESTORE SHIFTED DISK ADDRESS. JRST IPOPJ ;RETURN, AND RESTORE ITEM ;INITIALIZE SWAPPER DISK STORAGE TABLE - INTERNAL SWPINI SWPINI: MOVE TAC,XSAT2 @@ -1480,7 +1477,6 @@ SWPSIZ=XSAT6-XSAT4+1 ;SIZE OF TABLE HISWAP=17*BLOCKS ;LOGICAL BLOCK NUMBER OF FIRST ; BLOCK ON DISK DIFF=HISWAP-BLOCKS-1 - XP CONVMD,3 ;CONVERSION FROM 1K CORE BLOCKS TO 128 WORD ;DISC BLOCKS(SHIFT COUNT) @@ -1543,7 +1539,6 @@ GXSAT: PUSH PDP,ITEM ;THIS ROUTINE SAVES AND RESTORES ACCUMULATOR "ITEM". FXSAT: TRZN TAC,FRGSEG ;FRAGMENTED? JRST FXSAT1 ;NO. DO IN REGULAR WAY - FRAGBK: HRRZ AC3,TAC ;YES. LOC OF TABLE IN AC3 FRGBK1: HRRZ TAC,(AC3) ;LOC OF NEXT DISK ADDRESS HLRE DAT,(AC3) ;NUMBER OF K @@ -1576,6 +1571,8 @@ FXSAT1: PUSH PDP,ITEM ;THIS ROUTINE SAVES AND RESTORES ACCUMULATOR "ITEM". FXSATC: PUSHJ PDP,CLRBIT ;THE "CLRBIT" SUBROUTINE IN "DSKSER" ACTUALLY DOES ; THE WORK OF CLEARING THE BITS. JRST IPOPJ ;RESTORE ITEM AND RETURN + + ;ROUTINE TO RE-INITIALIZE THE SWAPPING AVAILABILITY TABLE. CALLED AT ; SYSTEM INITIALIZATION TIME. @@ -1647,4 +1644,3 @@ SQLEN: 0 ;AMOUNT TRANSFERRED SO FAR FOR FRAGMENTED JOB > > ;END OF SWPSER LOGIC FOR THE NEW PDP-10 DISK. SCHEND: END -