.TITLE UPD .IDENT /V7.04/ ;******************************************************************* ; ; UPD.TSK ; ; THIS TASK SENDS A MESSAGE TO LOG... TO REQUEST IT TO ; UPDATE THE SYSTEM USAGE STATISTICS. FOLLOWING THIS, WE ; DO A SHORT "USE" COMMAND AND WRITE THE RESULTING STATISTICS ; TO THE STATISTICS FILE, LB:[0,0]STATISTIC.DAT. ; THE NAME OF THE UPD TASK IS UPD... AND IT SHOULD ; BE ENTERED INTO THE CLOCK QUEUE WITH A RESCHEDULE INTERVAL ; OF SIX MINUTES. ; ; VERSION: V6 OCTOBER 1979 ; VERSION: V7 JANUARY 1981 ; ; STEVE THOMPSON SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; REVISION HISTORY ; ---------------- ; ; SMT736 6-AUG-81 REMOVED CALLS TO $LOCKL AND $UNLKL ; FOR COMPATIBILITY WITH FUTURE DEC ; SOFTWARE ; ; SMT745 16-SEP-81 ADDED STATISTICS ACCUMULATION FEATURE, ; CONDITIONALISED ON AA$STA ; ; SMT753 7-OCT-81 CHANGED NAMES OF CONDITIONAL ASSEMBLY ; PARAMETERS; SEE THE FILES MODIFY.TXT AND ; CONDEF.MAC FOR DETAILS. ; ; SMT762 10-OCT-81 ADDITION OF BATCH/INTERACTIVE LOAD FEATURE ; IN STATISTICS RECORDING SECTION. ; ;****************************************************************** .MCALL EXST$S,TCBDF$,FSRSZ$ TCBDF$ ; DEFINE TCB OFFSETS ACCDF$ ; DEFINE A/C PACKET OFFSETS BITDF$ ; DEFINE ACCOUNTING BITS STADF$ ; DEFINE STATISTICS BLOCK OFFSETS .IF DF AA$USE LOGNAM: .RAD50 /LOG.../ .IF DF AA$STA TCBADR: .WORD 0 ; LOG...'S TCB ADDRESS PKTADR: .WORD 0 ; POOL PACKET ADDRESS FSRSZ$ 1 ; ALLOCATE FSR SPACE .ENDC ; DF AA$STA .IFTF ESTAT: .WORD EX$SUC ; EXIT STATUS $UPDEP: ; XFR ADDRESS .IFT CALL $SWSTK,20$ ; SWITCH STACKS .IF DF AA$STA CLR TCBADR ;; ASSUME NO LOG... IN SYSTEM .IFTF ; DF AA$STA MOV #LOGNAM,R3 ;; GET TASK NAME ADDRESS IN R3 CALL $SRSTD ;; SCAN THE STD FOR LOG... BCS 10$ ;; IF CARRY SET, THEN NO LOG... BIT #TS.EXE,T.STAT(R0) ;; IS IT ACTIVE? BNE 10$ ;; IF NE NO, ERROR. .IFT ; DF AA$STA MOV R0,TCBADR ;; SAVE TCB ADDRESS .IFTF ; DF AA$STA MOV R0,R5 ;; COPY TCB ADDRESS MOV #B.LUPD,R1 ;; GET BLOCK SIZE TO ALLOCATE CALL $ALOCB ;; GET IT BCS 10$ ;; IF CARRY SET, THEN ALLOCATION FAILURE MOV R0,R1 ;; COPY BLOCK TO R1 MOV #,B.MASK(R1) ;; SET REQUEST BIT MASK MOV R5,R0 ;; RESTORE TCB ADDRESS CALLR $EXRQF ;; QUEUE AND START LOG... 10$: RETURN ;; AND EXIT SYSTEM STATE MOV #EX$ERR,ESTAT ; SET ERROR EXIT STATUS 20$: ; REF. LABEL .IFT ; DF AA$STA TST TCBADR ; LOG... IN SYSTEM? BEQ EXIT ; IF EQ NO, JUST EXIT CALL $SWSTK,40$ ; SWITCH STACKS AGAIN CLR PKTADR ;; ASSUME NO POOL PACKET MOV #B.LUSE,R1 ;; GET LENGTH OF POOL BLOCK REQUIRED CALL $ALOCB ;; ALLOCATE IT BCS 30$ ;; IF CS FORGET IT MOV R0,PKTADR ;; SAVE PACKET ADDRESS MOV R0,R1 ;; COPY BLOCK ADDRESS TO R1 MOV $TKTCB,B.STCB(R1) ;; STORE OUR TCB ADDRESS FOR LOG... MOV #,B.MASK(R1) ;; SET USE REQUEST MASK MOV TCBADR,R0 ;; GET LOG...'S TCB ADDRESS CALL $EXRQF ;; QUEUE PACKET AND START LOG... CALLR $STPCT ;; STOP US UNTIL WE GET A REPLY 30$: RETURN ;; RETURN TO USER STATE MOV #EX$ERR,ESTAT ; SET ERROR EXIT STATUS 40$: MOV PKTADR,R5 ; GET PACKET ADDRESS BEQ EXIT ; IF EQ NONE, SO EXIT CALL $SFOPN ; OPEN STATISTICS FILE BCC 42$ ; IF CC GOOD MOV #EX$SEV,ESTAT ; SET EXIT STATUS BR EXIT2 ; AND EXIT 42$: MOV B.ELAP(R5),R0 ; CHECK THAT WE HAVE SOMETHING BIS B.ELAP+2(R5),R0 ; BEQ EXIT1 ; IF EQ SOMETHING WENT WRONG MOV #$SFREC,R3 ; GET ADDRESS OF STATISTICS RECORD BUFFER MOV B.ELAP(R5),S.ELAP(R3) ; SAVE ELAPSED TIME MOV B.ELAP+2(R5),S.ELAP+2(R3) ; MOV B.ELAP(R5),S.USER(R3) ; COPY TO USER TIME SLOT MOV B.ELAP+2(R5),S.USER+2(R3) ; MOV B.EXEC(R5),S.EXEC(R3) ; SAVE EXECUTIVE TIME MOV B.EXEC+2(R5),S.EXEC+2(R3) ; SUB B.EXEC+2(R5),S.USER+2(R3) ; UPDATE USER TIME FIELD SBC S.USER(R3) ; SUB B.EXEC(R5),S.USER(R3) ; MOV B.NULL(R5),S.NULL(R3) ; SAVE NULL TIME MOV B.NULL+2(R5),S.NULL+2(R3) ; SUB B.NULL+2(R5),S.USER+2(R3) ; UPDATE USER TIME FIELD SBC S.USER(R3) ; SUB B.NULL(R5),S.USER(R3) ; .IF DF AA$LDR MOV B.LOAD(R5),S.LOAD(R3) ; SAVE LOADER REQUESTS MOV B.LOAD+2(R5),S.LOAD+2(R3) ; .ENDC ; DF AA$LDR .IF DF AA$QIO MOV B.TQIO(R5),S.TQIO(R3) ; SAVE TOTAL I/O COUNT MOV B.TQIO+2(R5),S.TQIO+2(R3) ; .ENDC ; DF AA$QIO .IF DF AA$CSW MOV B.CSWT(R5),S.CSWT(R3) ; SAVE CONTEXT SWITCHING COUNT MOV B.CSWT+2(R5),S.CSWT+2(R3) ; .ENDC ; DF AA$CSW .IF DF AA$BAT MOV B.BATU(R5),S.BCPU(R3) ; TRANSFER BATCH CPU TIME MOV B.BATU+2(R5),S.BCPU+2(R3) ; .ENDC ; DF AA$BAT CALL $SFPUT ; WRITE STATISTICS TO FILE EXIT1: CALL $SFCLS ; CLOSE STATISTICS FILE EXIT2: MOV PKTADR,R0 ; GET ADDRESS OF BLOCK TO DEALLOCATE BEQ EXIT ; IF EQ NONE MOV #B.LUSE,R1 ; AND ITS LENGTH CALL $SWSTK,EXIT ; SWITCH STACKS CALLR $DEACB ;; DEALLOCATE BLOCK AND EXIT .ENDC ; DF AA$STA .ENDC ; DF AA$USE EXIT: EXST$S ESTAT ; EXIT. .END $UPDEP