.TITLE SALLOG .IDENT /V02.1/ .NLIST BEX .NLIST CND .ENABL LC .NLIST ME .SBTTL DESCRIPTION ; ; ; COMPONENT: SALLOG ; --------- ; ; DATE: 09-JUL-80 ; ---- ; ; AUTHOR: GR JOHNSON ; ------ BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ------ ; ; ; DESCRIPTION: ; ----------- ; ; ; "SALLOG" IS A PRIVILEGED TASK WHICH RUNS AT PERIODIC INTERVALS AND ; LOGS A SNAPSHOT OF SYSTEM ACTIVITY. EACH SAMPLE CONSISTS OF ONE SYSTEM ; STATISTICS (SST) RECORD, AND A VARIABLE NUMBER OF ACTIVE TERMINAL (ATT) ; RECORDS. THE RECORD FORMATS ARE DESCRIBED BELOW. ; ; ; "SALLOG" IS INITIATED DURING SYSTEM STARTUP AS FOLLOWS: ; ; ; MCR> INS [11,1]SALLOG ; MCR> RUN SALLOG M/RSI=5M ; ; -OR- ; ; SCI> INS [11,1]SALLOG ; SCI> RUN/SYN:M/INT:5M SALLOG ; ; ; DESCRIPTION - CNTD ; SYSTEM STATISTICS RECORD ; ======================== ; ; ; 00 -- RECORD TYPE (001) ; ; 02 -- SYSTEM CLOCK YEAR ; 04 -- MONTH ; 06 -- DAY ; 10 -- HOUR ; 12 -- MINUTE ; 14 -- SECOND ; 16 -- TICK ; 20 -- TICKS/SECOND ; ; 22 -- SYSTEM ELAPSED TIME (TICKS) ; ; 26 -- SYSTEM TIMES (TICKS) TIMESHARING AVAILABLE ; 32 -- NO JOBS TO RUN ; 36 -- INTERACTIVE USERS ; 42 -- SWAPPING ; 46 -- BATCH ; ; 52 -- MEMORY SIZE (32-WORD BLOCKS) ; ; 54 -- TIMESHARING PARTITION SIZE (32-WORD BLOCKS) ; 56 -- TIMESHARING PARTITION USED (32-WORD BLOCKS) ; ; 60 -- NODE POOL FREE NODES (8-WORD NODES) ; 62 -- NODE POOL LARGEST HOLE (8-WORD NODES) ; ; 64 -- SWAP FILE SIZE (1K-WORD SWAP BLOCKS) ; 66 -- SWAP FILE USED (1K-WORD SWAP BLOCKS) ; ; 70 -- NUMBER OF ACTIVE TASKS (ATL COUNT) ; ; 72 -- NUMBER OF ACTIVE TASKS (LEVEL 1) ; 73 -- NUMBER OF ACTIVE TASKS (LEVEL 2) ; 74 -- NUMBER OF ACTIVE TASKS (LEVEL 3) ; 75 -- NUMBER OF ACTIVE TASKS (LEVEL 4) ; ; 76 -- NUMBER OF TIMESHARING TERMINALS ; 77 -- NUMBER OF TIMESHARING TERMINALS ACTIVE ; DESCRIPTION - CNTD ; ACTIVE TERMINAL RECORD ; ====================== ; ; ; 00 -- RECORD TYPE (002) ; ; 02 -- TERMINAL DEVICE NAME ; 04 -- TERMINAL UNIT NUMBER ; ; 05 -- TERMINAL FLAGS BYTE: 001 = PRIVILEGED ; 002 = SLAVED ; 004 = LOGGED ON ; 020 = DIRECTED TO CO ; 100 = DIALUP ; 200 = BATCH ; ; 06 -- ACTIVE JOB COUNT ; ; 07 -- ACTIVE JOB NAME BUFFER COUNT ; 10 -- ACTIVE JOB NAME BUFFER .SBTTL .SBTTL INSTALLATION PROCEDURE ; ; ; ASSEMBLY: ; -------- ; ; MCR> EDI [311,201]SALLOG.MAC ; *PL TSS= ; * . ; * . EDIT CONDITIONAL ASSEMBLY PARAMETERS ; * . ; *EX ; ; MCR> MAC [11,201]SALLOG,[211,201]SALLOG/-SP=[311,201]SALLOG ; ; ; TASK BUILD: ; ---------- ; ; MCR> TKB ; TKB> [11,1]SALLOG/PR,[111,201]SALLOG/-SP/-SH/CR=[11,201]SALLOG .IF DF,TSS ; TKB> LB:[1,1]IASCOM.STB/SS .ENDC ; TKB> LB:[1,1]EXEC.STB/SS ; TKB> / ; ENTER OPTIONS: ; TKB> TASK=SALLOG ; TKB> UIC=[1,1] ; TKB> PRI=110 ; TKB> ACTFIL=1 ; TKB> LIBR=SYSRES:RO .IF DF,TSS ; TKB> LIBR=IASCOM:RO .ENDC ; TKB> // ; ; ; INSTALLATION: ; ------------ ; ; MCR> INS [11,1]SALLOG ; ; .SBTTL ASSEMBLY PARAMETERS TSS= 0 ; TIMESHARING SYSTEM VERSION ;; CO= 0 ; LOG ACTIVE SYSTEM CONSOLE ;; RT= 0 ; LOG ACTIVE REALTIME TASKS .IF NDF,NATT NATT= 32. ; MAX. NO. ACTIVE TERMINALS .ENDC .IF NDF,NJOB NJOB= 2. ; MAX. NO. ACTIVE JOBS PER TERMINAL .ENDC .SBTTL .SBTTL SYSTEM DIRECTIVE MACROS .MCALL DIR$ ; .MCALL GTIM$S ; GET TIME PARAMETERS .MCALL ALUN$ ; ASSIGN LOGICAL UNIT .MCALL QIOW$ ; QUEUE I-O REQUEST AND WAIT .MCALL FSRSZ$ ; ALLOCATE FILE STORAGE REGION (FSR) .MCALL FDBDF$ ; ALLOCATE FILE DESCRIPTOR BLOCK (FDB) .MCALL FDAT$A ; INIT FDB ATTRIBUTES SECTION .MCALL FDOP$A ; INIT FDB FILE OPEN SECTION .MCALL FINIT$ ; INITIALIZE FILES-11 .MCALL OPEN$A ; OPEN FILE TO APPEND .MCALL OPEN$W ; OPEN FILE TO WRITE .MCALL PUT$ ; PUT RECORD IN FILE .MCALL CLOSE$ ; CLOSE FILE .MCALL EXIT$S ; TASK EXIT .SBTTL INTERNAL MACRO DEFINITIONS .MACRO .INH0 ; INHIBIT TASK SWITCHING MOV PS.EXP,-(SP) MOVB #140,PS.EXP .ENDM .INH0 .MACRO .ENB0 ; ENABLE TASK SWITCHING JSR PC,..ENB0 .ENDM .ENB0 .SBTTL .SBTTL SYSTEM STATISTICS RECORD BUFFER SSBUF: ; SYSTEM STATISTICS RECORD BUFFER ; =============================== SSTYP: .WORD 001 ; RECORD TYPE (001) SSTIM: .BLKW 8. ; SYSTEM CLOCK SSSET: .BLKW 2. ; SYSTEM ELAPSED TIME SSSTS: .BLKW 10. ; SYSTEM TIMES SSMEM: .WORD 0 ; MEMORY SIZE SSTPS: .WORD 0 ; TIMESHARING PARTITION SIZE SSTPA: .WORD 0 ; TIMESHARING PARTITION USED SSNOD: .WORD 0 ; NODE POOL FREE NODES SSHOL: .WORD 0 ; NODE POOL LARGEST HOLE SSSFS: .WORD 0 ; SWAP FILE SIZE SSSFA: .WORD 0 ; SWAP FILE USED SSATL: .WORD 0 ; NUMBER OF ACTIVE TASKS (ATL) SSUTL: .BLKB 4 ; NUMBER OF ACTIVE TASKS (UTL) SSTTN: .BYTE 0 ; TIMESHARING TERMINALS SSTTA: .BYTE 0 ; TIMESHARING TERMINALS ACTIVE SSBSZ= .-SSBUF ; BUFFER LENGTH .SBTTL ACTIVE TERMINAL RECORD BUFFER ATBUF: ; ACTIVE TERMINAL RECORD BUFFER ; ============================= ATTYP= .-ATBUF ; RECORD TYPE (002) .WORD 0 ; ATTDN= .-ATBUF ; TERMINAL DEVICE NAME .WORD 0 ; ATTUN= .-ATBUF ; TERMINAL UNIT NUMBER .BYTE 0 ; ATTFL= .-ATBUF ; TERMINAL FLAGS BYTE .BYTE 0 ; ; TFL.PR= 001 ; PRIVILEGED TFL.SL= 002 ; SLAVED TFL.LG= 004 ; LOGGED ON TFL.CO= 020 ; DIRECTED TO CO TFL.DL= 100 ; DIALUP TFL.BT= 200 ; BATCH ATNAJ= .-ATBUF ; ACTIVE JOB COUNT .BYTE 0 ; ATNJB= .-ATBUF ; ACTIVE JOB NAME BUFFER COUNT .BYTE 0 ; ATJOB= .-ATBUF ; ACTIVE JOB NAME BUFFER .BLKW ; ATBSZ= .-ATBUF ; BUFFER LENGTH . = ATBUF .REPT NATT ; BUFFER ALLOCATION .WORD 002 ; .BLKB ATBSZ-2 ; .ENDR ; ATBND: .BLKB ATBSZ ; BUFFER END .SBTTL .SBTTL LOG FILE FCS BUFFERS FSRSZ$ 1 ; ALLOCATE FILE STORAGE REGION FDB: FDBDF$ ; ALLOCATE FILE DESCRIPTOR BLOCK FDAT$A R.VAR,FD.CR ; INITIALIZE RECORD ATTRIBUTES SECTION FDOP$A 2,DSD ; INITIALIZE FILE OPEN SECTION DSD: .WORD DEVSZ,DEVBF ; ALLOCATE DATASET DESCRIPTOR .WORD DIRSZ,DIRBF ; .WORD FNMSZ,FNMBF ; DEVBF: .ASCII /LB:/ ; DEVICE DEVSZ= .-DEVBF DIRBF: .ASCII /[1,1]/ ; DIRECTORY DIRSZ= .-DIRBF FNMBF: .ASCII /SAL.LOG/ ; FILENAME FNMSZ= .-FNMBF .EVEN .SBTTL MISCELLANEOUS DPB'S ; FETCH TERMINAL DIALUP CHARACTERISTIC ; DLLUN: ALUN$ 1,TI,0 ; ASSIGN LOGICAL UNIT ; ; GET CHARACTERISTIC DLGSC: QIOW$ SF.GSC,1,1,,IOSB,, IOSB: .BLKW 2 ; ; ERROR MESSAGE(S) ERRQ1: QIOW$ IO.WLB,5,5,,,, ERRM1: .ASCII /SALLOG -- *WARNING* ATT BUFFER OVERFLOW/ ERRL1= .-ERRM1 .EVEN ERRQ2: QIOW$ IO.WLB,5,5,,,, ERRM2: .ASCII /SALLOG -- *WARNING* LOG FILE OPEN ERROR/ ERRL2= .-ERRM2 .EVEN .SBTTL .SBTTL .SBTTL SYSTEM ACTIVITY LOG (SALLOG) UTILITY .SBTTL .SBTTL .SBTTL CSST -- COLLECT SYSTEM STATISTICS DATA CSST: .INH0 ;; INHIBIT TASK SWITCHING GTIM$S #SSTIM ;; SAVE SYSTEM CLOCK/CALENDAR MOV .SETIM ,SSSET+2 ;; SAVE SYSTEM ELAPSED TIME (WORD 1) MOV .SETIM+2,SSSET ;; SAVE SYSTEM ELAPSED TIME (WORD 2) ;; FETCH SYSTEM TIME STATISTICS ;; MOV #.SSTIM,R0 ;; STS ADDRESS MOV #SSSTS,R1 ;; STS BUFFER ADDRESS MOV #5,R2 ;; TRANSFER COUNT ;; 2$: MOV (R0)+,2(R1) ;; SAVE STS ENTRY (WORD 1) MOV (R0)+, (R1) ;; SAVE STS ENTRY (WORD 2) ADD #4,R1 ;; NEXT SST BUFFER ENTRY SOB R2,2$ ;; LOOP MOV .MSIZE,SSMEM ;; SAVE MEMORY SIZE ;; FETCH PARTITION STATISTICS ;; MOV .TPDAD,R0 ;; TIMESHARING TPD POINTER ;; MOV T.PZ(R0),SSTPS ;; SAVE PARTITION SIZE MOV T.PZ(R0),SSTPA ;; SAVE PARTITION ALLOCATION ;; MOV T.HP(R0),R0 ;; MUL LISTHEAD ;; SUB M.TS(R0),SSTPA ;; ADJUST PARTITION ALLOCATION ; CSST -- CNTD ;; FETCH NODE POOL STATISTICS ;; MOV .POLLH,R0 ;; POOL LISTHEAD CLR R1 ;; CLEAR FREE NODE COUNT CLR R2 ;; CLEAR LARGEST HOLE COUNT ;; 4$: ADD 2(R0),R1 ;; ADD NODE SIZE (BYTES) ;; CMP 2(R0),R2 ;; LARGEST HOLE? BLOS 6$ ;; NO -- BYPASS MOV 2(R0),R2 ;; YES -- SAVE HOLE SIZE (BYTES) ;; 6$: TST (R0) ;; DONE? BEQ 10$ ;; YES -- TERMINATE SCAN MOV (R0),R0 ;; NO -- NEXT NODE BR 4$ ;; LOOP ;; 10$: ASH #-4,R1 ;; DIVIDE BY 16 MOV R1,SSNOD ;; SAVE FREE NODES ASH #-4,R2 ;; DIVIDE BY 16 MOV R2,SSHOL ;; SAVE LARGEST HOLE ;; FETCH SWAP FILE STATISTICS ;; MOV #.SFLLH,R0 ;; SFL LISTHEAD CLR R1 ;; CLEAR SWAP FILE SIZE CLR R2 ;; CLEAR SWAP FILE ALLOCATION ;; 12$: MOV (R0),R0 ;; SFL ENTRY CMP R0,#.SFLLH ;; END OF LIST? BEQ 14$ ;; YES -- TERMINATE SFL SCAN ;; ADD S.LEN(R0),R1 ;; ADD SWAP FILE LENGTH SUB S.RND(R0),R1 ;; ADJ SWAP FILE LENGTH ADD S.ALC(R0),R2 ;; ADD SWAP FILE ALLOCATION BR 12$ ;; LOOP ;; 14$: MOV R1,SSSFS ;; SAVE SWAP FILE SIZE MOV R2,SSSFA ;; SAVE SWAP FILE ALLOCATION ; CSST -- CNTD MOV #.ATLLH,R0 ;; ATL LISTHEAD ;; 16$: MOV (R0),R0 ;; NEXT ATL ENTRY ;; CMP R0,#.ATLLH ;; END-OF-LIST? BEQ 20$ ;; YES -- TERMINATE ATL SCAN ;; INC SSATL ;; INCREMENT ATL COUNT BR 16$ ;; LOOP 20$: MOV #.UTLHD,R0 ;; UTL LISTHEAD MOV #SSUTL,R1 ;; UTL BUFFER ADDRESS MOV #4,R2 ;; UTL LEVELS ;; 22$: MOV (R0),R0 ;; NEXT UTL ENTRY ;; CMP R0,#.UTLHD ;; END-OF-LIST? BEQ 24$ ;; YES -- TERMINATE UTL SCAN ;; MOVB Z.NE(R0),(R1)+ ;; SAVE NUMBER OF ENTRIES SOB R2,22$ ;; LOOP 24$: .ENB0 ; ENABLE TASK SWITCHING .SBTTL CATT -- COLLECT ACTIVE TERMINAL DATA CATT0: MOV .PUDBA,R0 ; PUD LISTHEAD SUB #U.SZ,R0 ; BACK-OFF ONE ENTRY MOV #ATBUF,R5 ; ATT BUFFER POINTER SUB #ATBSZ,R5 ; BACK-OFF ONE ENTRY CATT: ADD #ATBSZ,R5 ; NEXT BUFFER ENTRY CMP R5,#ATBND ; ATT BUFFER FULL? BNE 2$ ; DIR$ #ERRQ1 ; YES -- OUTPUT ERROR MESSAGE 2$: ADD #U.SZ,R0 ; NEXT PUD ENTRY CMP R0,.PUDEA ; END OF PUD? BNE .+10 ; CLR (R5) ; YES -- FLAG ATT BUFFER END JMP USAL ; AND TERMINATE PUD SCAN MOVB U.PR(R0),ATTFL(R5) ; INITIALIZE TERMINAL FLAGS BYTE CMP #"BA,U.DN(R0) ; BATCH STREAM? BNE 4$ ; BISB #TFL.BT,ATTFL(R5) ; YES -- SET FLAG BR 10$ ; 4$: BIT #UC.TTY,U.C1(R0) ; TTY DEVICE? BEQ 2$ ; NO -- BYPASS BITB #UF.CO,U.FB(R0) ; DIRECTED TO CO? .IF DF,CO BEQ 6$ ; BISB #TFL.CO,ATTFL(R5) ; YES -- SET FLAG BR 10$ .IFF BNE 2$ ; YES -- BYPASS .ENDC 6$: MOV U.DN(R0),DLLUN+A.LUNA ; DEVICE NAME MOV U.UN(R0),DLLUN+A.LUNU ; UNIT NUMBER ; DIR$ #DLLUN ; ASSIGN LOGICAL UNIT ; DIR$ #DLGSC ; FETCH TERMINAL CHARACTERISTIC ; TST IOSB+2 ; DIALUP TERMINAL? BEQ 10$ ; NO BISB #TFL.DL,ATTFL(R5) ; YES -- SET FLAG ; CATT - CNTD 10$: INCB SSTTN ; INCREMENT TERMINAL COUNT .INH0 ;; INHIBIT TASK SWITCHING BITB #UT.LG,U.PR(R0) ;; LOGGED ON? BEQ 12$ ;; NO ;; CMP #"BA,U.DN(R0) ;; BATCH STREAM? BNE 14$ ;; NO ;; MOV U.HA(R0),R1 ;; BATCH STREAM ATL ADDRESS TSTB A.IN(R1) ;; I-O PENDING COUNT > 0? BNE 14$ ;; YES ;; 12$: .ENB0 ; NO -- ENABLE TASK SWITCHING ; BR 2$ ; BYPASS 14$: INCB SSTTA ;; INCREMENT ACTIVE TERMINAL COUNT CMP R5,#ATBND ;; ATT BUFFER FULL? BNE 16$ ;; ;; .ENB0 ; YES -- ENABLE TASK SWITCHING ; BR 2$ ; BYPASS 16$: MOV U.DN(R0),ATTDN(R5) ;; SAVE TERMINAL DEVICE NAME MOVB U.UN(R0),ATTUN(R5) ;; SAVE TERMINAL UNIT NUMBER ; CATT - CNTD ;; FETCH ACTIVE JOB(S) ;; .IF DF,TSS MOV U.ACP(R0),R1 ;; UTN POINTER ;; .ENDC MOV #.ATLLH,R2 ;; ATL LISTHEAD MOV R5,R4 ;; ADD #ATJOB,R4 ;; ACTIVE JOB NAME BUFFER POINTER 20$: MOV (R2),R2 ;; NEXT ATL ENTRY ;; CMP R2,#.ATLLH ;; END OF LIST? BEQ 22$ ;; YES -- TERMINATE ATL SCAN CMP A.TI(R2),R0 ;; TI IDENTIFICATION - SAME PUD ADDRESS? BNE 20$ ;; NO -- BYPASS .IF NDF,RT BIT #AF.IA,A.TF(R2) ;; IAS CONTROLLED TASK? BEQ 20$ ;; NO -- BYPASS .ENDC MOV A.TD(R2),R3 ;; JOB STD POINTER BEQ 20$ ;; NONE -- BYPASS .IF DF,TSS CMP I.CI(R1),A.JN(R2) ;; CLI? BEQ 20$ ;; YES -- BYPASS .ENDC INCB ATNAJ(R5) ;; INCREMENT ACTIVE JOB COUNT CMPB ATNJB(R5),#NJOB ;; BUFFER FULL? BEQ 20$ ;; YES -- BYPASS MOV S.TN+0(R3),(R4)+ ;; SAVE JOB NAME (WORD 1) MOV S.TN+2(R3),(R4)+ ;; SAVE JOB NAME (WORD 2) ;; INCB ATNJB(R5) ;; INCREMENT ACTIVE JOB NAME COUNT ;; BR 20$ ;; LOOP 22$: .ENB0 ; ENABLE TASK SWITCHING JMP CATT ; LOOP FOR NEXT TERMINAL .SBTTL .SBTTL USAL -- UPDATE SYSTEM ACTIVITY LOG USAL: FINIT$ ; INITIALIZE FCS OPEN$A #FDB ; OPEN OLD FILE TO APPEND BCC 2$ ; CMPB #IE.NSF,F.ERR(R0) ; ERROR -- NO SUCH FILE? BNE 6$ ; NO -- TERMINATE WITH ERROR OPEN$W #FDB ; OPEN NEW FILE TO WRITE BCS 6$ ; ERROR -- TERMINATE WITH ERROR 2$: PUT$ #FDB,#SSBUF,#SSBSZ ; OUTPUT SST RECORD TO FILE MOV #ATBUF,R4 ; ATT BUFFER ADDRESS ; 4$: TST (R4) ; END-OF-BUFFER? BEQ 10$ ; YES -- TERMINATE ; MOVB ATNJB(R4),R5 ; COMPUTE RECORD LENGTH MUL #4,R5 ; ADD #ATJOB,R5 ; ; PUT$ #FDB,R4,R5 ; OUTPUT ATT RECORD TO FILE ; ADD #ATBSZ,R4 ; NEXT BUFFER ENTRY BR 4$ ; LOOP 6$: DIR$ #ERRQ2 ; OUTPUT ERROR MESSAGE 10$: CLOSE$ #FDB ; CLOSE FILE .SBTTL .SBTTL EXIT -- TASK EXIT EXIT: EXIT$S .END CSST