X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cda2ba6d27526e5ef6f27f7b3391cfb55055bf2e..a55d79e58539edcb4fb7316118b0a2e58ae90d47:/src/schedb.mac diff --git a/src/schedb.mac b/src/schedb.mac index b33d156..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? @@ -75,7 +78,7 @@ NXTJB1: SKIPN J,JOB ;CURRENT JOB NO., IS IT NULL JOB? HLRZ SW,JBTSTS(J) ;GET JOB STATUS BITS AND CODES TRZ SW,RUNMSK+CMWB ;MASK OUT DO NOT CARE BITS CAIE SW,RUNABLE ;IS CURRENT JOB RUNABLE? - JRST CKJR3 ;NO. REQUEU CURRENT JOB + JRST CKJB3 ;NO. REQUEU CURRENT JOB SKIPN TIMEF ;NO. IS THIS A TIME INTERRUPT? JRST CKJB1 ;NO. @@ -85,10 +88,10 @@ NXTJB1: SKIPN J,JOB ;CURRENT JOB NO., IS IT NULL JOB? MOVEI DAT,QTIME ;YES---REQUEUE AND RESET QUANT. TIME MOVE TAC,JOBQUE PUSHJ PDP,QXFER - CKJB1: SKIPG QJ,QJDB ;SET QJ NON ZERO IF ANY REQUEUING TO DO + CKJB1: SKIPG QJ,QJOB ;SET QJ NON ZERO IF ANY REQUEUING TO DO JRST CKJB5 ;NO REQUEUEING NECESSARY MOVEI J,JOBMAX ;START WITH HIGHEST JOB NUMBER ASSIGNED -CKJB2: MOVSI SW,JBQ ;JOB NEEDS REQUEUEING BIT +CKJB2: MOVSI SW,JRQ ;JOB NEEDS REQUEUEING BIT TDNN SW,JBTSTS(J) ;THIS JOB? SOJG J,.-1 ;NO, KEEP LOOKING JUMPLE J,CKJB5 ;YES,LOOKED AT ALL JOBS? @@ -100,12 +103,12 @@ CKJB3: MOVE SW,JBTSTS(J) ;JOB STATUS WORD TLNN SW,CMWB ;IS JOB IN COMMAND WAIT? JRST CKJB9 ;NO. TLNE SW,SWP+JXPN ;YES, IS JOB ON DISK, OR TRYING TO EXPAND? - JRST CK,JB4A ;YES. PUT JOB IN COMMAND WAIT Q + JRST CKJB4A ;YES. PUT JOB IN COMMAND WAIT Q CKJB9: JUMPGE SW,CKJB4 ;NO,WAIT STATUS CODE DETERMINES NEW Q LDB SW,PJBSTS ;YES, GET QUEUE CODE. CAIN SW,WSQ ;*** EXPERIMENTAL *** JRST CKJB10 ;*** EXPERIMENTAL *** - CAIN SW,TIOWD ;CURRENT JOB GOING INTO TTY IO WAIT? + CAIN SW,TIOWQ ;CURRENT JOB GOING INTO TTY IO WAIT? HRROS JBTSWP(J) ;YES, SET IN CORE PROTECT TIME TO -1, ; SO HE CAN BE SWAPPED IMMEDIATELY IF SOMEONE ; ELSE WANTS TO BE SWAPPED IN @@ -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,15 +210,16 @@ 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 -INTERNAL QINT +INTERNAL QINI EXTERNAL CPOPJ,JOBMAX,MXQUE,JBTQ EXTERNAL JBTQP1 ;EQUALS JBTQ+1 -EXTERNAL JBTCM1 ;EQUALS JBTQ-1 -EXTERNAL JBTOMN ;EQUALS JBTQ-NULQ +EXTERNAL JBTQM1 ;EQUALS JBTQ-1 +EXTERNAL JBTQMN ;EQUALS JBTQ-NULQ QINI: MOVNI TAC,MXQUE ;MAKE ALL QUEUE HEADERS POINT TO THEMSELVES HRL TAC,TAC ;BACKWARD POINTERS TOO @@ -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 @@ -326,7 +330,7 @@ TT=DAT ;POINTER TO TRANSFER TABLE J=ITEM ;JOB NO. Q=PROG ;DEST-Q AND QUANT. TIME ON RETURN T1=TAC1 ;TEMP -T2=TAC ;TEMP AND SOURCE-Q ON CALL TO B,EQLINE +T2=TAC ;TEMP AND SOURCE-Q ON CALL TO B,EQLINK EXTERNAL ERROR @@ -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, @@ -380,7 +384,7 @@ QX3: POPJ PDP, BQFIX=QFIX EQFIX=QFIX+1B0 BQLINK=QLINK -EQLINK=QLINE+1B0 +EQLINK=QLINK+1B0 BQJSIZ=QJSIZ EQJSIZ=QJSIZ+1B0 ,SCANS THE QS RETURNING THE NUMBERS OF THE JOBS IN THE QS. @@ -461,11 +465,12 @@ IFE FTCHECK+FTMONP,< DEFINE X(A,B) INTERNAL AVALTB + AVALTB: QUEUES ;GENERATE THE AVAL FLAGS LOC=.-AVALTB > @@ -483,7 +488,17 @@ A'Q=LOC LOC=LOC+1 > CODES - ;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES + +XP MXCODE,LOC-1 ;MAX, JOB STATE DONE +PQ1=LOC +LOC=LOC+1 +PQ2=LOC +LOC=LOC+1 +PQ3=LOC +LOC=LOC+1 +CMQ=LOC ;COMMAND DELAY QUEUE + +;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 @@ -496,9 +511,10 @@ DEFINE X(A,B) INTERNAL QBITS QBITS: QUEUES + CODES IFN FTCHECK+FTMONP,< DEFINE X(A,B),< -EXTERNAL A'RFQ +EXTERNAL A'REQ > QUEUES EXTERNAL REQTAB @@ -545,6 +561,7 @@ EXTERNAL XJOB >> IFE FTCHECK+FTMONP,< + INTERNAL JOBQUE JOBQUE: 0 ;JOBS TO BE REQUEUED ON CLOCK INTERRUPT @@ -583,7 +600,7 @@ QRNW: PTTAB EQJSIZ,QSTAB,QQSTAB ;JUST RUNABLE JOBS QWSW: TTAB BQFIX,PQ1,QQTTY ;IO WAIT SAT.(EXCEPT TTY) ;ENTER FRONT OF PROCESSOR QS AND GET QUANT, TIME ;ACCORDING TO JOB SIZE -QTSW: TTAB BQFIX,PQ,QQTTY ;TTY IO WAIT SATISFIED(ENTER FRONT OF PQ1) +QTSW: TTAB BQFIX,PQ1,QQTTY ;TTY IO WAIT SATISFIED(ENTER FRONT OF PQ11) QIOWW: TTAB EQFIX,IOWQ,-1 ;IOW(EXDEPT TTY) HELD IN IOWQ QTIOWW: TTAB EQFIX,TIOWQ,-1 ;TTY IOW HELD IN TIOWQ @@ -600,22 +617,23 @@ QSLPW: TTAB EQFIX,SLPQ,-1 ;SLEEP UUO QQSD=-1 -QMSQ: TTAB BQFIX,PQ1,QQSD ;START MON. Q(DISK) AT PQ1 +QMQS: TTAB BQFIX,PQ1,QQSD ;START MON. Q(DISK) AT PQ1 QDAS: TTAB BQFIX,PQ1,QQSD ;DEV. ALLOC.(DISK)... QDCS: TTAB BQFIX,PQ1,QQSD ;DATA CONTROL... QSTS: TTAB BQFIX,PQ1,QQSD ;SYST TAPE QDTS: TTAB BQFIX,PQ1,QQSD ;DEC TAPE QMTS: TTAB BQFIX,PQ1,QQSD ;MAG TAPE QAUS: TTAB BQFIX,PQ1,QQSD ;ALTER UFD -QTIME PTTAB EQLINK,QTTAB,QQSTAB ;MOVE JOB TO LOWER Q +QTIME: PTTAB EQLINK,QTTAB,QQSTAB ;MOVE JOB TO LOWER Q ;WHEN QUANT. TIME EXCEEDED AND RESET QUANT. TIME ,ENTER PROCESSOR QS ACCORDING TO JOB SIZE 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 + Z ,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME -QQTAB: XWD -PQ1,-PQ2 +QTTAB: XWD -PQ1,-PQ2 XWD -PQ2,-PQ3 XWD -PQ3,-PQ2 ;BACK TO PQ2 TO COMPETE WITH IOWS JOBS Z @@ -637,7 +655,7 @@ QQSTAB: EXP ^D30 ;PQ1: ONE HALF SECOND IFN FTSWAP,< INTERNAL ISCAN,QSCAN ISCAN: ;SCAN FOR INPUT - XWD -CWM,QFOR ;MONITOR COMMAND WHICH NEEDS CORE IMAGE IN CORE + XWD -CMQ,QFOR ;MONITOR COMMAND WHICH NEEDS CORE IMAGE IN CORE XWD -MQQ,QFOR1 ;LOOK FOR 1ST JOBS IN SHAR. DEV QUEUES XWD -DAQ,QFOR1 XWD -AUQ,QFOR1 @@ -652,7 +670,7 @@ SSCAN: XWD -PQ1,QFOR ;SCAN PROCESSOR AS SCHEDULER DOES Z Z ;FINAL ZERO TO FLAG END -QSCAN: ;SCAN FOR OUTPUT +OSCAN: ;SCAN FOR OUTPUT XWD -STOPQ,QFOR ;UNRUNABLE JOBS FIRST XWD -SLPQ,QFOR XWD -DTQ,QBAK1 ;ANY SHAR. DEV.WAITERS MORE THAN 1 DEEP @@ -677,6 +695,7 @@ QSCAN: ;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. @@ -696,7 +715,6 @@ QSCAN: ;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 @@ -729,7 +747,7 @@ T2=TAC J=ITEM ,ALL DEVICE DEPENDENT CODE MARKED WITH A "*" - SWAP: SKIPE SHWAT ;IS CORE SHUFFLER WAITING FOR IO TO STOP + SWAP: SKIPE SHFWAT ;IS CORE SHUFFLER WAITING FOR IO TO STOP ; FOR SOME JOB? PUSHJ PDP,CHKSHF ;YES, CALL CORE SHUFFLER TO SEE IF ; IO STOPPED YET @@ -809,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. > @@ -871,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 @@ -879,17 +898,17 @@ 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 ; FOR ONE TO SWAP OUT MOVE J,HIGHJB ;YES, START WITH HIGHEST JOB NUMBER ASSIGNED MOVSI T,JXPN ;SETUP JOB EXPANDED BIT - TDDN T,JBTSTS(J) ;IS THIS JOB EXPANDING? + 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 @@ -913,11 +932,11 @@ 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 - JUMPE T,(TAC1) ` ;CONTINUE SCAN IF NOT IN CORE (HIGH SEG ALREADY SWAPPED + JUMPE T,(TAC1) ;CONTINUE SCAN IF NOT IN CORE (HIGH SEG ALREADY SWAPPED) ; OUT FOR THIS USER IF NO LOW SEG) ASH T,-12 ;CONVERT TO 1K BLOCKS ADDI T,1 @@ -953,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 @@ -981,12 +999,12 @@ IFN JDAT-PROG,< INTERNAL FTTRACK -SWAPD: +SWAPO: IFN FTTRACK, SETZM FORCE ;CLEAR FORCE FLAG - HLRZ T,JBTADTR(J) ;COMPUTE CORE IMAGE + HLRZ T,JBTADR(J) ;COMPUTE CORE IMAGE JUMPE T,SWP1 ;DONT OUTPUT IF 0 CORE(IMGOUT ALREADY SET TO 0 ; WHEN CORE WAS RETURNED @@ -1016,7 +1034,7 @@ NOFIT: SETZM FIT ;FORGET ABOUT FITTING IN A JOB ON DISK ;COME HERE WHEN THE AMOUNT OF SPACE NEEDED ON THE DISK ;IS NOT AVAILABLE IN ONE CONTIGUOUS BLOCK - EXTERN GETFOR + EXTERN GETFCR FULL: HRLM DAT,AC3 ;SAVE DAT (LARGEST AVAILABLE HOLE) PUSHJ PDP,FULCOR ;GET 4 FREE CORE LOCS @@ -1032,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 @@ -1059,8 +1076,8 @@ FULSET: PUSHJ PDP,BMPAC3 ;STEP TO NEXT (LAST) TABLE LOCATION JRST OUTP2 ;GO START OUTPUT ;HERE TO GET 4 LOCS OF FREE CORE -FULCOR: PUSH PDP,ITEM ;GETFOR USES ITEM - PUSHJ PDP,GETFOR ;GET 4 CELLS +FULCOR: PUSH PDP,ITEM ;GETFCR USES ITEM + PUSHJ PDP,GETFCR ;GET 4 CELLS JRST IPOPJ ;RETORE ITEM AND RETURN ;STEP AC3 TO NEXT LOC OF TABLE BEING BUILT @@ -1148,7 +1165,7 @@ CHGSWP: LDB TAC1,IMGIN ;SIZE WHEN SEG NEXT SWAPPED IN INTERN ZERSWP -ZERSWPL TDZA TAC,TAC ;REQUEST O SPACE ON DISK AND ALWAYS SKIP +ZERSWP: TDZA TAC,TAC ;REQUEST O SPACE ON DISK AND ALWAYS SKIP CHG1: ADDM TAC1,VIRTAL ;INCREASE SIZE OF VIRTUAL CORE AVAILABLE IN SYSTEM ; AND THEN RETURN ALL OF DISK SPACE(CHGSWP) MOVSI TAC1,SWP!SHF ;CLEAR SWAPPED OUT BIT IN JOB OR SEG @@ -1157,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 @@ -1199,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 @@ -1246,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 @@ -1266,7 +1282,7 @@ SQGO: MOVEI TAC1,ERATRY SQGO1: SETZM SQLEN ;ZERO AMOUNT TRANSFERRED SO FAR MOVE TAC1,SQREQ ;*PUT IOWD INTO TAC1 MOVSI TAC,200000 ;*SET "SWAPPER I/O GOING" FLAG ON - ORB TAC,SETA ;* + ORB TAC,SERA ;* TRZN TAC,FRGSEG ;*FRAGMENTED? JRST SQGO2 ;*NO, READ IN ENTIRE (OR PART) OF SEG @@ -1283,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 @@ -1328,7 +1343,7 @@ DINT8A: HRRZM IOS,SERA SETZM SQREQ JRST DINT4B -SWPER1; MOVSI TAC,100 +SWPER1: MOVSI TAC,100 ADDM TAC,CKSMCT TRO IOS,IODTER SWPERR: MOVM TAC, FINISH ;*RESET SERA IN CASE OF FRAGMENTED JOB @@ -1358,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 @@ -1392,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 @@ -1406,7 +1419,7 @@ SWPINI: MOVE TAC,XSAT2 MOVEM TAC,XSAT5 MOVE TAC,XSAT8 MOVEM TAC,XSAT6 - POPJ PDPD, + POPJ PDP, IFN FTCHECK+FTMONP,< EXTERNAL SQREQ,SERA,SERACT,XSAT1,XSAT2,XSAT3,XSAT4,XSAT5,XSAT6,XSAT7 @@ -1426,7 +1439,7 @@ ESQREQ: Z ;COPY OF SQREQ, IN CASE OF SERA: Z ;SIGN IS 1 IF A READ ; C(RH)=BLOCK NUMBER BEFORE READING. ; ERROR BITS AFTER READING. -SELACT: 0 ;COUNT FOR ERRORS +SERACT: 0 ;COUNT FOR ERRORS SQLEN: 0 ;AMOUNT TRANSFERRED SO FAR - FRAG SEG XSAT1: EXP XSAT3-1 ;POINTER USED BY GETBIT,CLRBIT @@ -1448,11 +1461,11 @@ XSAT5: BLOCK W2+1 XSAT6: BLOCK 1 REPEAT 1,< IFE E1, - IFN E1,> IFE E2, IFN E2, >> @@ -1464,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) @@ -1527,8 +1539,7 @@ GXSAT: PUSH PDP,ITEM ;THIS ROUTINE SAVES AND RESTORES ACCUMULATOR "ITEM". FXSAT: TRZN TAC,FRGSEG ;FRAGMENTED? JRST FXSAT1 ;NO. DO IN REGULAR WAY - -FRAGRK: HRRZ AC3,TAC ;YES. LOC OF TABLE IN AC3 +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 JUMPLE DAT,FRGBK2 ;GIVE UP FREE CORE IF NOT REAL ADDRESS @@ -1560,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. @@ -1590,7 +1603,7 @@ EXTERNAL LBHIGH,BLKSPK,MAX2SWP,SWPENT,SWPTAB,MAXSWP IFE FTCHECK+FTMONP,< ;DATA ASSOCIATED WITH THE SWPSER LOGIC FOR THE NEW PDP-10 DISK --- - INTERN MXK2SWP,CONVMD,BLKSPK,SWAPTAB,MAXSWP + INTERN MXK2SWP,CONVMD,BLKSPK,SWPTAB,MAXSWP EXTERN K4SWAP ;THE ABOVE ARE REFERENCED OR INITIALIZED BY THE "ONCE" ROUTINE. @@ -1610,7 +1623,7 @@ MXK2SWP=^D1000 ;MASIMUM NUMBER OF 1K DISK BLOCKS WHICH MIGHT BE ALLOCATED ; FOR SWAPPING (UPPER BOUND ON THE VALUE OF K4SWAP WHICH ; MAY BE REQUESTED AT DISK REFRESH TIME). (ONE MILLION WORDS ; FOR SWAPPING SEEMS LIKE A NON-RESTRICTIVE ARBITRARY LIMIT.) -SWPSIZ=MXK2SWP/.^D36+1 ;SIZE OF SWPTAB ALLOCATION TABLE. +SWPSIZ=MXK2SWP/^D36+1 ;SIZE OF SWPTAB ALLOCATION TABLE. SWPENT: XWD -SWPSIZ,SWPTAB ;THREE WORD POINTER TABLE XWD 400000,0 ; REQUIRED BY THE "GETBIT" AND @@ -1626,7 +1639,7 @@ ESQREQ: Z ;COPY OF SQREQ, IN CASE OF SWAP ERROR IN FRAGMENTED JOB SERA: Z ;SIGN IS 1 IF A READ ; C(RH)=BLOCK NUMBER BEFORE READING. ; ERROR BITS AFTER READING. -SELACT: 0 ;COUNT FOR ERRORS +SERACT: 0 ;COUNT FOR ERRORS SQLEN: 0 ;AMOUNT TRANSFERRED SO FAR FOR FRAGMENTED JOB > > ;END OF SWPSER LOGIC FOR THE NEW PDP-10 DISK.