mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-16 00:03:11 +00:00
Commit DCMCP transcription as of 2012-08-27.
This commit is contained in:
parent
da0ea2f994
commit
84ac96de90
@ -9598,3 +9598,108 @@ PROCEDURE WORKSET(N); VALUE N; REAL N; 12350500
|
||||
12364000
|
||||
ARRAY JOBINFO[*]; 12364500
|
||||
ARRAY RUNNING[*]; 12365000
|
||||
12365500
|
||||
DEFINE 12366000
|
||||
OLAYINDX = 1#, % CODE FOR "OLAY RATIO" 12366500
|
||||
PRIORINDX = 2#, % CODE FOR "PRIORITY", 12367000
|
||||
ETIMEINDX = 3#, % CODE FOR "ELAPSED TIME", 12367500
|
||||
COREINDX = 4#, % CODE FOR "CORE USAGE" 12368000
|
||||
SAVEINDX = 5#, % CODE FOR "SAVE CORE USAGE" 12368500
|
||||
INFOSIZE = 5#; % NUMBER OF ENTRIES FOR EACH MIX 12369000
|
||||
12369500
|
||||
DEFINE INFO[INFO1,INFO2] = JOBINFO[INFO1|INFOSIZE+INFO2-1]#; 12370000
|
||||
12370500
|
||||
LABEL START, LOOP, FINISHED; 12371000
|
||||
12371500
|
||||
COMMENT 12372000
|
||||
THE "INSTRUCTIONS" ARE STORED IN THE GLOBAL VARIABLE 12372500
|
||||
"WKSETINSTRUCT", USING FIELDS FOUR BITS IN LENGTH. 12373000
|
||||
THE FIRST "INSTRUCTION" WILL BE IN THE [44:4] FIELD, THE 12373500
|
||||
SECOND "INSTRUCTION" WILL BE IN THE [40:4] FIELD, AN SO FORTH. 12374000
|
||||
THESE "INSTRUCTIONS" ARE THE NUMERICAL VALUES CORRESPONDING TO 12374500
|
||||
CODES DEFINED ABOVE. 12375000
|
||||
12375500
|
||||
AS AN EXAMPLE OF HOW THESE "INSTRUCTIONS" ARE USED, SUPPOSE THAT 12376000
|
||||
WKSETINSTRUCT.[44:4] CONTAINED A VALUE OF 3, 12376500
|
||||
WKSETINSTRUCT.[40:4] CONTAINED A VALUE OF 2, AND THE 12377000
|
||||
REMAINDER OF THE WKSETINSTRUCT WORD WERE ZERO. IN THIS 12377500
|
||||
INSTANCE, THIS ROUTINE WOULD FIRST EXAMINE ALL JOBS IN THE 12378000
|
||||
MIX, FINDING THE JOB WHICH HAD BEEN RUNNING FOR THE LONGEST 12378500
|
||||
PERIOD OF TIME. NEXT, ALL JOBS WHICH HAVE BEEN RUNNING FOR A 12379000
|
||||
PERIOD OF TIME WHICH IS WITHIN THE "WKSETOLERANCE" (NORMALLY 12379500
|
||||
WITHIN ABOUT 10% OF THE MAXIMUM VALUE FOUND ABOVE) ARE EXAMINED 12380000
|
||||
FOR THE NEXT "INSTRUCTION", THAT IS, THE PRIORITY. 12380500
|
||||
IN THIS MANNER, THE JOB WHICH HAS BEEN RUNNING FOR THE LONGEST 12381000
|
||||
PERIOD OF TIME, AND WHICH HAS THE HIGHEST PRIORITY WILL BE 12381500
|
||||
SELECTED FOR "STOPPING". 12382000
|
||||
END OF COMMENT; 12382500
|
||||
12383000
|
||||
12383500
|
||||
SUBROUTINE CORESEARCH; 12384000
|
||||
BEGIN 12384500
|
||||
MAXMIN := 0; 12385000
|
||||
% SEARCH THE LINKS TO DETERMINE CORE USAGE 12385500
|
||||
IF NOT STOREDY THEN SLEEP([TOGLE],STOREMASK); 12386000
|
||||
LOC := 0; % START AT LOW WND OF MEMORY 12386500
|
||||
TOTALSYSTEMCORE := TOTALOLAYCORE := TOTALSAVECORE := 0; 12387000
|
||||
WHILE (SIZE:=(LINK:=M[LOC]).[CF] -LOC) GEQ 0 DO 12387500
|
||||
BEGIN 12388000
|
||||
TOTALSYSTEMCORE := TOTALSYSTEMCORE + SIZE; 12388500
|
||||
IF NOT LINK.[1:1] THEN % IN-USE AREA 12389000
|
||||
BEGIN 12389500
|
||||
IF (MIX:=LINK.[9:6]) GTR MAXMIX THEN MAXMIX := MIX; 12390000
|
||||
IF LINK.[2:1] THEN % SAVE AREA 12390500
|
||||
BEGIN 12391000
|
||||
TOTALSAVECORE := TOTALSAVECORE + SIZE; 12391500
|
||||
INFO[MIX,SAVEINDX] := INFO[MIX,SAVEINDX] - SIZE; 12392000
|
||||
% NOTE: JOBS SHOULD BE STOPPED IN INVERSE RELATION TO 12392500
|
||||
% AMOUNT OF SAVE CORE USED 12393000
|
||||
END 12393500
|
||||
ELSE 12394000
|
||||
BEGIN 12394500
|
||||
TOTALOLAYCORE := TOTALOLAYCORE + SIZE; 12395000
|
||||
INFO[MIX,COREINDX] := INFO[MIX,COREINDX] + SIZE; 12395500
|
||||
END; 12396000
|
||||
END; % IF IN-USE AREA 12396500
|
||||
LOC := LINK.[CF]; % NEXT LINK 12397000
|
||||
END; % WHILE STATEMENT 12397500
|
||||
FOR MIX := 1 STEP 1 UNTIL MAXMIX DO 12398000
|
||||
IF RUNNING[MIX] THEN 12398500
|
||||
IF PRYOR[MIX] LSS 0 THEN % CHECK AGAIN (LOSS OF CNTRL,ABOVE)12399000
|
||||
BEGIN 12399500
|
||||
RUNNING[MIX] := 0; 12400000
|
||||
NJOBS := NJOBS - 1; 12400500
|
||||
END; 12401000
|
||||
% DONT USE JOBS WHICH ARE TERMINATING OR JUST STARTING 12401500
|
||||
IF NJOBS LSS 2 THEN GO TO FINISHED; 12402000
|
||||
END SUBROUTINE CORESEARCH; 12402500
|
||||
12403000
|
||||
IF (CLOCK+P(RTR)-WKSETSWITCHTIME) LSS 960 THEN 12403500
|
||||
BEGIN 12404000
|
||||
% ALLOW 15 SECONDS AFTER THE LAST "BOJ" OR "EOJ" 12404500
|
||||
% BEFORE TESTING THE OVERLAY RATE 12405000
|
||||
WKSETCLOCK:=(P(DUP)) + 960; 12405500
|
||||
GO TO FINISHED; 12406000
|
||||
END; 12406500
|
||||
RUNNING := [M[T1:=SPACE(MIXMAX+1)]] & 12407000
|
||||
(MIXMAX+1)[8:38:10]; 12407500
|
||||
JOBINFO := [M[T2:=SPACE((MIXMAX+1)|INFOSIZE)]] & 12408000
|
||||
((MIXMAX+1)|INFOSIZE)[8:38:10]; 12408500
|
||||
12409000
|
||||
START: 12409500
|
||||
12410000
|
||||
STREAM(F1:=T1-1,SZ1:=MIXMAX+1,F1:=T2-1, 12410500
|
||||
SZ2 := (MIXMAX+1)|INFOSIZE, T1,T2); 12411000
|
||||
BEGIN % ZERO OUT THE ARRAYS 12411500
|
||||
SI:=F2; DS:=SZ2 WDS; SI:=F1; DI:=T1, DS:=SZ1 WDS; 12412000
|
||||
END; 12412500
|
||||
NJOBS := TOTALPTIME := TOTALOLAY := MAXOLAY := 0; 12413000
|
||||
FOR MIX:=1 STEP 1 UNTIL MIXMAX DO 12413500
|
||||
IF JARROW[MIX] NEQ 0 THEN % RUNNING JOB 12414000
|
||||
IF NOT(JAR[MIX,9].[3:1]) THEN % NOT ALREADY STOPPED 12414500
|
||||
IF (PRYOR[MIX] GEQ 0) AND (REPLY[MIX]=0) THEN 12415000
|
||||
BEGIN 12415500
|
||||
IF NOT(JAR[MIX,9].SYSJOBF) THEN %NOT "SYSTEM JOB 12416000
|
||||
BEGIN 12416500
|
||||
RUNNING[MIX] := 1; 12417000
|
||||
NJOBS := NJOBS + 1; % COUNT THE NUMBER OF JOBS 12417500
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user