XP VSCHED,421\r
;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
\r
+\r
INTERNAL FTRC10 ;THIS SOURCE FILE MAY BE ASSEMBLED TO USE EITHER THE\r
; NEW PDP-10 DISK (MODEL RC-10) OR THE OLD PDP-6 DISK (DATA\r
; PRODUCTS DISK FILE) FOR SWAPPING.\r
ENTRY XCKCSW\r
>\r
\r
+\r
EXTERNAL JOB,JBTSTS\r
EXTERNAL JBTQ,PJBSTS\r
EXTERNAL PJBSTS,TIMEF,MJOBN\r
SETZM XJOB ;CLEAR NO. OF JOBS NEEDING EXPANDING\r
SETZM JOBQUE ;CLEAR JOB NO. TO BE REQUEUED\r
POPJ PDP,\r
+\r
\f,NXTJOB DECREMENTS CURRENT JOB'S QUANT. AND PROTECT\r
,TIMES AND REQUEUES IT IF QUANT. TIME GONE TO 0\r
,SERVINCES ANY JOB REQUEING REQUESTED AT OTHER PRIORITY\r
,MAKES NO ASSUMPTIONS RE. ACS\r
,RETURSN NEXT JOB TO RUN IN J.\r
\r
+\r
EXTERNAL JBTSWP,POTLST\r
\r
NXTJOB: SKIPN TIMEF ;CLOCK TIC?\r
JRST .+3\r
SKIPL JBTSWP(J)\r
ADDM SW,JBTSWP(J)\r
-\r
AOBJN J,.-4\r
\r
NXTJB1: SKIPN J,JOB ;CURRENT JOB NO., IS IT NULL JOB?\r
PUSHJ PDP,CHKSHF\r
>\r
IFN FTSWAP,<\r
- PUSHJ PDP,SWAP\r
->\r
+ PUSHJ PDP,SWAP>\r
\r
;SCHEDULAR--SEARCH THRU QUEUES ACCORDING TO SSCAN TABLE\r
;FOR 1ST JOB IN CORE--RETURN ITS NO. IN J\r
POPJ PDP,\r
\r
\r
+\r
;TEMPORARY EXPERIMENTAL SCHEDULING CHANGE TO PERMIT TTY-I/O-WAIT-SATISFIED JOBS ON\r
; THE DISK TO DISPLACE I/O BOUND JOBS IN CORE.... R.CLEMENTS/D.PLUMER 9 MAY 68\r
CKJB10: SKIPE INFLG\r
,BOTH ROUTINES ARE "TABLE DRIVEN" IN THE SENSE THAT THE\r
,CALLING ROUTINE PROVIDES THE ADDRESS OF A TABLE WHICH\r
,DEFINES THE SPECIFIC OPERATIONS TO BE PERFORMED.\r
-\f;QUEUE INITIALIZATION\r
+\f\r
+;QUEUE INITIALIZATION\r
;PUT ALL JOBS IN NULL QUEUE(JOB NO. NOT ASSIGNED)\r
;CALLED ON RESTART AT LOC 143\r
\r
MOVSM TAC,JBTQP1 ;BACK POINTER FOR JOB 1\r
MOVEI ITEM,JOBMAX ;MAX. JOB NO.\r
MOVEM TAC,JBTQ(ITEM) ;FOR. POINTER OF JOBMAX JOB NO.\r
-\r
HRLM ITEM,JBTQMN ;SET NULQ HEADER TO POINT TO JOB1\r
MOVEI TAC,1 ;AND JOBMAX\r
HRRM TAC,JBTQMN ;FORWARD POINTER\r
SOJLE ITEM,CPOPJ ;FINISHED?\r
HRLM ITEM,JBTQP1(ITEM) ;BACK POINTER JOB I+1 POINTS TO JOB I\r
JRST QINI1\r
-\f,DELETES A JOB FROM ITS "SOURCE-Q", DETERMINES A "DEST-Q"\r
+\f\r
+,DELETES A JOB FROM ITS "SOURCE-Q", DETERMINES A "DEST-Q"\r
,ACCORDING TO ONE OF 3 FUNCTIONS, AND INSERTS THE JOB AT\r
,THE BEGINNING OR END OF THIS DEST-Q. IN ADDITION IT MAY\r
,RESET THE JOB'S QUANTUM TIME (RH JBTSTS).\r
, <QUANT-TAB>: EXP <QUANT1> ;CORRES. TO <Q-TAB>+0\r
, ...\r
, EXP <QUANTN> ;CORRES. TO <Q-TAB>+N-1\r
-\r
, Z\r
,\r
, UPON A CALL TO QXFER FOR THESE 2 CODES, AC T2 CONTAINES\r
, <QUANT-TAB> TABLE.\r
, IF NO MATCH FOUND..NO TRANSFER TAKES PLACE.\r
\r
+\r
,DEST-Q AS A FUNCTION OF JOB SIZE\r
,BQJSIZ INSERT AT BEG OF DEST-Q\r
,EQJSIZ INSERT AT END\r
\f,CALLING SEQUENCE:\r
, MOVE J,[JOB NUMBER]\r
, MOVE T2,[CURRENT Q] ;BQLINK AND EQLINK ONLY\r
-; MOVEI TT,TRANS TABLE ADDRESS\r
+, MOVEI TT,TRANS TABLE ADDRESS\r
, PUSHJ PDP,QXFER\r
, ... ;RETURN\r
, ON RETURN J IS UNALTERED; LH(Q)=-1 IF QUANT, TIME OUT\r
HRRO Q,(Q) ;RH(Q)=DEST-Q;LH=-1(NO QUANT.TIME REQ.)\r
SKIPL 1(TT) ;WAS QUANT. TIME REQUESTED?\r
HRL Q,(T2) ;YES--GET IT\r
-\f,FIXED DEST-Q\r
+\f\r
+,FIXED DEST-Q\r
QFIX: MOVE T1,JBTQ(J) ;DELETE JOB FROM SOURCE-Q\r
MOVS T2,T1 ;T1=FORW. LINK, T2=BACK LINK\r
HRRM T1,JBTQ(T2) ;FORW, LINK PAST JOB\r
\r
JUMPL Q,QX3 ;RETURN IF QUANT. TIME NOT REQ.\r
HLRM Q,JBTSTS(J) ;SET QUANT. TIME\r
-\r
MOVEI TT,RNQ ;SET JOB STATUS WAIT\r
DPB TT,PJBSTS ;CODE TO RUN QUEUE (0).\r
QX3: POPJ PDP,\r
>\r
\r
INTERNAL AVALTB\r
+\r
AVALTB: QUEUES ;GENERATE THE AVAL FLAGS\r
LOC=.-AVALTB\r
>\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
+\f\r
+;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
;SCHEDULER SETS UP QUEUE TRANSFER TABLE ADDRESS FROM\r
>>\r
IFE FTCHECK+FTMONP,<\r
\r
+\r
INTERNAL JOBQUE\r
JOBQUE: 0 ;JOBS TO BE REQUEUED ON CLOCK INTERRUPT\r
\r
QSTAB: XWD 4,-PQ1 ;PQ1 IF SIZE .LE. 4K\r
XWD ^D16,-PQ2 ;PQ2 IF 4K .L. SIZE .LE. 16K\r
XWD ^D256,-PQ3 ;PQ3 IF 16 .L. SIZE\r
-\r
-,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME\r
-QQTAB: XWD -PQ1,-PQ2\r
- XWD -PQ2,-PQ3\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
Z\r
Z ;FINAL ZERO TO FLAG END\r
>\r
+\r
\fSUBTTL SWAP R. KRASIN/AF TS4.34 03 FEB 69 V406\r
\r
,SWAPPER CALLED EVERY CLOCK TIC.\r
, IF ONE--WILL LOW(HIGH) SEG FIT IN LARGEST HOLE IN CORE?\r
, YES--START INPUT AND RETURN\r
, NO--IS TOTAL FREE CORE(CORTAL) ENOUGH TO ACCOMMODATE LOW(HIGH) SEG?\r
-\r
; YES--CALL CORE SHUFFLER\r
; IS SHUFFLER WAITING FOR IO TO STOP?\r
; YES--RETURN AND DO NOTHING\r
IFN FT2REL,<\r
EXTERN FINOT\r
PUSHJ PDP,FINOT ;IS THIS A HIGH SEG WHICH WAS JUST SWAPPED OUT?\r
- ;YES, J SET TO LOW SEG NO, GO TRY SWAP IT OUT\r
+ JRST FORCEL ;YES, J SET TO LOW SEG NO, GO TRY SWAP IT OUT\r
; NO, THIS WAS A LOW SEG, ALL SWAPPING FOR THIS USER\r
; IS FINISHED.\r
>\r
LDB TAC,IMGOUT\r
TLO TAC,1\r
ADDM TAC,SWPERC\r
- JRST SWAPO ;GO TRY AGAIN\r
+ JRST SWAPO ;GO TRY AGAIN\r
+\r
\r
;NO INPUT TO DD, CHECK FOR EXPANDING JOBS\r
CHKXPN: SKIPG XJOB ;ANY JOBS TO EXPAND\r
; YES, FALL INTO SCNOUT WHICH WILL SWAP OUT EXPANDING\r
; JOB SINCE THERE IS ONE\r
;INPUT TO DO, CHECK TO SEE IF ANY JOBS JUST HAPPEN TO WANT TO EXPAND\r
-\r
EXTERN HIGHJB,JBTSTS,ERROR,MAXSIZ,MAXJBN,SUMCOR\r
SCNOUT: SKIPG XJOB ;ANY JOBS WAITING TO EXPAND?\r
JRST SCNJOB ;NO, SCAN ALL JOBS IN PRIORITY ORDER LOOKING\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
+ JUMPG J,SCNOK\r
+ SETZM XJOB ;CLEAR XJOB SO MESSAGE WILL PRINT\r
JSP DAT,ERROR ;ERROR IF NONE FOUND\r
>\r
SCNOK: SOS XJOB ;DECREMENT COUNT OF EXPANDING JOBS\r
; PROTECT TIME IS DECREMENTED ONLY WHEN\r
; A JOB IS RUNABLE, SO LOOK AT IT\r
; ONLY IF RUN BIT STILL ON\r
- TLNE T,NSWP+SWP ;NO, IS THIS JOB NOT TO BE SWAPPED OR ALREADY SWAPPED?\r
+ TLNE T,NSWP+SWP ;NO, IS THIS JOB NOT TO BE SWAPPED OR ALREADY SWAPPED? \r
; (DISPLAY, REAL TIME)?\r
JRST (TAC1) ;YES,CONTINUE SCAN TO FIND ANOTHER\r
HLRZ T,JBTADR(J) ;PICK UP SIZE OF JOB\r
; 5. HIGH SEG NOT ON DISK YET\r
; 6. THIS HIGH SEG IS NOT THE SAME ONE AS JOB\r
; BEING FITTED IN IS GOING TO WANT\r
-\r
; RETURN HIGH SEG NO. IN J IF YES, OTHERWISE\r
; RETURN LOW SEG NO.\r
; IF JOB JUST HAS LOW SEG. SHF BIT IS SET IN JBTSTS\r
POP PDP,DAT ;RESTORE AMT GOTTEN\r
HRLM DAT,(AC3) ;SAVE AMOUNT IN TABLE\r
SUB T,DAT ;AMOUNT STILL NEEDED\r
-\r
JUMPE T,FULSET ;THROUGH IF NEED 0 K NOW\r
PUSHJ PDP,BMPAC3 ;STEP TO NEXT TABLE LOCATION\r
MOVE DAT,T ;TRY TO GET ALL WE NEED NOW IN 1 CHUNK\r
\r
PUSH PDP,DAT ;SAVE TTY OUTPUT BYTE POINTER(COMMAND DECODER)\r
LDB DAT,IMGOUT ;*SIZE ON DISK(1K BLOCKS)\r
-\r
JUMPE DAT,CHG3 ;DID SEG HAVE ANY DISK SPACE?\r
HLRZ TAC,JBTSWP(ITEM) ;*YES, LOGICAL DISK BLOCK+FRGSEG BIT\r
PUSHJ PDP,FXSAT ;*FREE THE DISK BLOCKS NO LONGER NEEDED\r
;ROUTINE TO FLAG JOB TO BE STOPPED AND SWAPPED OUT\r
;BECAUSE IT HAS JUST BEEN CONNECTED TO A HIGH SHARABLE SEG WHICH IS ON DISK\r
;OR ON ITW WAY IN OR OUT. THE SIZE OF THE HIGH SEG IS UNCHANGED\r
-\r
;THE JOB MUST BE STOPPED UNTIL HIGH SEG SWAPPED IN JUS AS IF JOB HAS\r
;EXPANDED HIGH SEG(MUST BE CALLED FROM UUO LEVEL FOR CURRENT JOB IF HIGH SEG)\r
;CALL: MOVE ITEM,HIGH SEG NUMBER\r
EXCH TAC,DFBUSY \r
JUMPN TAC,CPOPJ ;YES IF JUMP\r
\r
+\r
ERATRY=3 ;NO. OF TIMES TO READ AND WRITE ON ERRORS\r
\r
;START UP DEVICE WITH SWAPPING REQUEST. THIS ROUTINE\r
ORM TAC,SERA ;INSERT NEW ADDRESS\r
JRST FRGIO1\r
\r
-\r
FRGIO2: LSH DAT,12 ;CONVERT FROM K TO WORDS\r
ADDM DAT,SQLEN ;ADD TO PREVIOUSLY TRANSFERRED AMOUNT\r
MOVNS DAT ;-N WORDS\r
MOVE AC2,XSAT2 ;\r
LSH DAT,CONVMD ;CONVERT TO 128 WORD DISK BLOCKS\r
PUSH PDP,ITEM ;SAVE C(ITEM)\r
- \r
MOVE ITEM,DAT ;GETBIT EXPECTS PARAMETER IN ITEM\r
PUSHJ PDP,GETBIT ;FIND A HOLE BIG ENOUGH\r
JRST IPOPJ ;NONE, RESTORE ITEM AND ERROR RETURN\r
JRST IPOPJ ;RETURN, AND RESTORE ITEM\r
\r
;INITIALIZE SWAPPER DISK STORAGE TABLE\r
-\r
INTERNAL SWPINI\r
\r
SWPINI: MOVE TAC,XSAT2\r
HISWAP=17*BLOCKS ;LOGICAL BLOCK NUMBER OF FIRST\r
; BLOCK ON DISK\r
DIFF=HISWAP-BLOCKS-1\r
-\r
XP CONVMD,3 ;CONVERSION FROM 1K CORE BLOCKS TO 128 WORD\r
;DISC BLOCKS(SHIFT COUNT)\r
\r
\r
FXSAT: TRZN TAC,FRGSEG ;FRAGMENTED?\r
JRST FXSAT1 ;NO. DO IN REGULAR WAY\r
-\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
FXSATC: PUSHJ PDP,CLRBIT ;THE "CLRBIT" SUBROUTINE IN "DSKSER" ACTUALLY DOES\r
; THE WORK OF CLEARING THE BITS.\r
JRST IPOPJ ;RESTORE ITEM AND RETURN\r
+\r
+\f\r
;ROUTINE TO RE-INITIALIZE THE SWAPPING AVAILABILITY TABLE. CALLED AT\r
; SYSTEM INITIALIZATION TIME.\r
\r
>\r
> ;END OF SWPSER LOGIC FOR THE NEW PDP-10 DISK.\r
\fSCHEND: END\r
-\0\r