Google
 

Trailing-Edge - PDP-10 Archives - bb-bt99g-bb - sched1.c11
There is 1 other file named sched1.c11 in the archive. Click here to see a list.
 REP 3/33	;11C1
	BQFOR::	SKIPG	RRFLAG##	;CLASS SCHEDULING?
 WIT
	BQFOR::	SKIPN	BBFIT##		;ALREADY FITTING IN A BB JOB?
		SKIPG	RRFLAG##	;CLASS SCHEDULING?
 REP 46/42	;11C2
		JRST	SWAP1
 WIT
		JRST	FININ5
 REP 3/44	;11C3
		SKIPN	BBFIT##		;IS JOB IN BACKGROUND BATCH?
		JRST	FININ6		;NO
		IORM	F,JBTST2##(J)	;SET THE BACKGROUND BATCH BIT
		SKIPE	JBTJIL##(J)	;SHOULD BE ZERO
		JRST	FININ7		;OOPS
		HLRZ	T1,JBTBBQ##	;CURRENT LAST ENTRY IN B B QUEUE
		HRLM	J,JBTBBQ##	;NEW LAST ENTRY
		HRRM	J,JBTJIL##(T1)	;FORWARD LINK
		HRLI	T1,MBBQ##	;OFFSET OF BBQ HEADER
		MOVSM	T1,JBTJIL##(J)	;OLD LAST ENTRY,,HEADER
		JRST	FININ7		;AND PROCEED
	FININ6:	ANDCAM	F,JBTST2##(J)	;CLEAR THE BACKGROUND BATCH BIT
		SKIPGE	JBTSCD##(J)	;IS JOB IN PQ2?
	>
 WIT
		CAME	J,BBFIT##	;IS THIS JOB IN BACKGROUND BATCH?
		JRST	FININ6		;NO
		IORM	F,JBTST2##(J)	;SET THE BACKGROUND BATCH BIT
		MOVEI	T1,MBBQ##	;OFFSET TO BBQ
		JRST	FNIN6A
	FININ6:	ANDCAM	F,JBTST2##(J)	;CLEAR THE BACKGROUND BATCH BIT
		MOVEI	T1,-JIQ##	;OFFSET TO JBTJIQ
		SKIPGE	JBTSCD##(J)	;IS JOB IN PQ2?
	FNIN6A:>
 REP 23/44	;11C4
		HLRZ	T1,JBTJIQ##	;CURRENT LAST ENTRY
		HRLM	J,JBTJIQ##	;NEW LAST ENTRY
		HRRM	J,JBTJIL##(T1)	;NEW FORWARD POINTER
		HRLOM	T1,JBTJIL##(J)	;SETUP THIS JOBS POINTERS
 WIT
	IFN FTMP,<
		CPLOCK	(SCD)
	>
		HLL	T1,JBTJIL##(T1)	;PREVIOUS LAST JOB
		HRLM	J,JBTJIL##(T1)	;LAST JOB IS NOW US
		MOVEM 	T1,JBTJIL##(J)	;HE IS OUR PREDECESSOR & QUEUE HEADER SUCCESSOR
		HLRZS	T1		;POINT TO HIM
		HRRM	J,JBTJIL##(T1)	;POINT HIM TO US
	IFN FTMP,<
		CPUNLK	(SCD)
	>
 INS 30/44	;11C5
		CAMN	J,BBFIT##	;BB JOB BEING FIT IN?
 INS 59/44	;11C6

	;HERE IF THERE'S A COLLISION ON A HIGH SEG FOR A JOB WHICH JUST
	;FINISHED SWAPPING (JOB # IN J)

	FININ5:	SKIPE	JBTJIL##(J)	;THIS BETTER BE ZERO
		JRST	SWAP1		;ELSE WE'VE BEEN HERE BEFORE
	;NOTE THAT THE FOLLOWING 5 LINES ARE NOT UNDER THE SCHEDULAR INTERLOCK.
	;THIS IS BECAUSE IT CAN ONLY BE EXECUTED ON POLICY RIGHT NOW (SWAPPER
	;DOESN'T RUNO ON NON-POLICY), AND THE JOBS IN THE QUEUE ARE NOT RUNNABLE
	;SO CANNOT BE RUN BY THE SCHEDULAR.  SHOULD ANY OF THE ABOVE CHANGE,
	;THE CODE WILL AHVE TO BE PUT UNDER SCDLOK.
		HLRZ	T1,JBTHSQ##	;LAST JOB WAITING FOR A HIGH SEG
		HRLM	J,JBTHSQ##	;NEW LAST JOB IS US
		HRRM	J,JBTJIL##(T1)	;POINT PREVIOUS LAST TO US
		HRLI	T1,-HSQ##	;WE ARE LAST SO POINT AT HEADER
		MOVSM	T1,JBTJIL##(J)
		JRST	SWAP1		;AND IGNORE US FOR NOW
 INS 54/45	;11C7
		CAMN	J,BBFIT##	;WAS THIS A BB JOB?
		SETZM	BBFIT##		;YES, CLEAR FLAG SO OTHERS CAN COME IN
 REP 2/47	;11C8
	SWP2:	SKIPE	J,FORCE##	;WAITING FOR JOB TO BECOME SWAPPABLE?
 WIT
	SWP2:
		SKIPG	J,JBTHSQ##	;IS THERE A HIGH SEG WAITING TO FINISH?
		JRST	SWP9		;NO
	SWP3:	HRRZS	J		;YES, SEE IF WE CAN DO ANYTHING WITH IT
		CAME	J,FORCE##	;WAITING TO GO OUT?
		CAMN	J,FORCEF	;?
		JRST	SWP5		;YES, IGNORE FOR NOW
		PUSH	P,J		;SAVEJOB # TO DEQUEUE
		PUSHJ	P,FINCHK##	;WELL?
		  JRST	SWP4		;NO
		  SKIPA	T1,[FIT1]	;WHERE TO GO TO IN THIS CASE
		MOVEI	T1,FININ3	;AND IN THIS
		EXCH	T1,(P)		;STORE ADDRESS, GET OLD JOB
		EXCH	T1,J		;NEW JOB TO T1,OLD JOB TO J
		PUSH	P,T1		;SAVE NEW JOB
		MOVE	T1,JBTJIL##(J)	;GET PREDECESSOR,,SUCCESSOR
		HLLM	T1,JBTJIL##(T1)	;STORE PREDECESSOR TO SUCCESSOR
		MOVSS	T1
		HLRM	T1,JBTJIL##(T1)	;FIX UP THE QUEUE
		SETZM	JBTJIL##(J)	;CLEAR
		POP	P,J		;RESTORE J
		POPJ	P,		;RETURN TO THE APPROPRIATE PLACE
	SWP4:	POP	P,J		;RESTORE J WE STARTED WITH
	SWP5:	HRRE	J,JBTJIL##(J)	;NEXT
		JUMPG	J,SWP3
	SWP9:
		SKIPE	J,FORCE##	;WAITING FOR JOB TO BECOME SWAPPABLE?
 DEL 2/49	;11C9
	IFN FTNSCHED,<
		SETZM	BBFLAG##	;WE ARE NOT SCANNING THE BACKGROUND BATCH QUEUE YET
	>
 INS 15/49	;11C10
	IFN FTNSCHED,<
		SETZM	BBFLAG##	;WE ARE NOT SCANNING THE BACKGROUND BATCH QUEUE YET
	>
 REP 4/60	;11C11
		SKIPN	BBFIT##		;WAS BACKGROUND BATCH SELECTED FOR SWAPIN?
 WIT
		SKIPE	J,BBFIT##	;WAS BACKGROUND BATCH SELECTED FOR SWAPIN?
		CAME	J,FIT##		;REALLY JUST SELECTED?
 REP 37/60	;11C12
	NOFITZ:	SETZM	FIT##		;CLEAR JOB BEING FIT IN
	IFN FTNSCHED,<
 WIT
	NOFITZ:	SKIPE	J,FIT##		;GET JOB IN FIT BEFORE ZAPPING IT
		SETZM	FIT##
	IFN FTNSCHED,<
		CAMN	J,BBFIT##	;DON'T CLEAR UNLESS WE'RE SUPPOSED TO
 REP 44/60	;11C13
	ZERFIT:	SETZM	FIT##		;CLEAR FIT SO WE CAN RESELECT
	IFN FTNSCHED,<
 WIT
	ZERFIT:	SKIPE	W,FIT##		;GET JOB # IN FIT
		SETZM	FIT##		;CLEAR FIT SO WE CAN RESELECT
	IFN FTNSCHED,<
		CAMN	W,BBFIT##	;DON'T CLEAR UNLESS WE'RE SUPPOSED TO
 SUM 196284