Table of Contents

DMKMON Abstract

Statistics

Type ASSEMBLE
Source Lines : 2,127
Fixes Applied : 13
Most Recent Version : Thursday, December 14, 1978
Last Fix ID : [HRC106DK]

Synopsis

Module

       DMKMON

Function

       TO PROCESS COMMANDS AND REQUESTS ASSOCIATED WITH THE
       MONITOR, INCLUDING MONITOR CALL INTERRUPTS WITHIN THE
       CONTROL PROGRAM.

Attributes

       REENTRANT, PAGABLE,

             CALLED VIA:
                       BRANCH FROM DMKPRG

             RE-ENTERED VIA:
                       IOBLOK IRA AFTER MONITOR TAPE I/O INTERRUPT.
                       TRQBLOK IRA AFTER TIME LAPSE EXPIRATION.

Operation

   
                     MONITOR CALL INTERRUPT PROCESSING

   DMKMONMI:

            THE MONITOR CALL CLASS AND  CODE ARE RETREIVED FROM
            PSA AND A BRANCH IS MADE TO THE APPROPRIATE MONITOR
            CLASS ROUTINE.

            FROM THE APPROPRIATE MONITOR CLASS ROUTINE A BRANCH
            IS  MADE TO  THE APPROPRIATE  MONITOR CODE  ROUTINE
            (THE DATA COLLECTION ROUTINE).

            EACH  ROUTINE  COLLECTING  DATA  CALLS  THE  BUFFER
            MANAGEMENT ROUTINE  FOR THE AMOUNT OF  SPACE NEEDED
            TO CONTAIN THE SPECIFIC RECORD.

            THE FOLLOWING IS A SUMMARY OF WHAT DATA EACH OF THE
            VARIOUS  ROUTINES  COLLECTS,   AND  THE  COLLECTION
            VEHICLE.

                 CLASS 0 - PERFORM (TIMER DRIVEN)
                    CODE  0 - COLLECT    SYSTEM   CLOCKS    AND
                               COUNTERS.
                    CODE  1 - COLLECT APU CLOCKS AND COUNTERS.
                    CODE 97 - MONITOR   TAPE   HEADER   RECORD,
                               CREATED BY DMKMONTH.
                    CODE 98 - MONITOR   TAPE  TRAILER   RECORD,
                               CREATED BY DMKMONIO.
                    CODE 99 - MONITOR  SUSPENSION DUE  TO  TAPE
                               BUSY, CREATED BY DMKMONIO.

                 CLASS 1 - RESPONSE (MONITOR CALL)
                    CODE 0 - BEGIN A CONSOLE READ.
                    CODE 1 - CONSOLE OUTPUT.
                    CODE 2 - END A CONSOLE READ.
                    CODE 3 - BEGIN SLEEP WITH TIME OUT.
                    CODE 4 - USER LOGON
                    CODE 5 - USER LOGOFF

                 CLASS 2 - SCHEDULER (MONITOR CALL)
                    CODE 2 - DROP USER FROM Q.
                    CODE 3 - ADD USER TO Q.
                    CODE 4 - ADD USER TO ELIGABLE LIST.

                 CLASS 3 - RESERVED (MONITOR CALL)

                 CLASS 4 - USER (TIMER DRIVEN)
                    CODE 0 - COLLECT VIRT. MACH STATISTICS.

                 CLASS 5 - INSTRUCTION SIMULATION (MONITOR CALL)
                    CODE 0 - BEGIN INSTRUCTION.

                 CLASS 6 - DASTAP (TIMER DRIVEN)
                    CODE 0 - INITIALIZE   AND   CREATE   DASTAP
                               HEADER, CALLED FROM DMKMONTH.
                    CODE 1 - COLLECT DEVICE INFORMATION.

                 CLASS 7 - SEEKS (MONITOR CALL)
                    CODE 0 - DASD SEEK CHANNEL PROGRAM ISSUED.

                 CLASS 8 - SYSPROF (MONITOR CALL - VIA CLASS 2)
                    CODE 2 - COLLECT  DEVICE  I/O   COUNTS  AND
                               SYSTEM CLOCKS.

            AFTER THE APPROPRIATE MONITOR DATA IS COLLECTED THE
            GENERAL  REGISTERS  ARE RESTORED  FROM  DMKPRG  AND
            SYSTEM  PROCESSING  RESUMES FROM  THE  PROGRAM  OLD
            PSW.

   BUFFER MANAGEMENT:
            THE BUFFER MANAGEMENT ROUTINE MAINTAINS A POINTER
            TO THE BUFFER CURRENTLY COLLECTING DATA.  IF A RECORD
            IS REQUESTED WHICH OVERFLOWS THE BUFFER, OR IF ONLY ONE
            BUFFER IS BEING USED AND THE NEXT RECORD WOULD OVERFLOW
            THE BUFFER, THEN A POINTER TO THE NEXT AVAILABLE BUFFER
            IS GOTTEN, AND CONTROL IS PASSED TO THE TAPE MANAGEMENT
            ROUTINE TO WRITE OUT THE BUFFER.

   TAPE I/O MANAGEMENT:
            THE  TAPE MANAGEMENT  ROUTINE  KEEPS  TRACK OF  THE
            CURRENT STATUS  OF THE  TAPE.  IF  THE TAPE  IS NOT
            BUSY THEN  A CPEXBLOK  IS STACKED  WHICH WILL  CALL
            DMKIOSQR TO  WRITE THE BUFFER  TO TAPE.   AFTER THE
            CPEXBLOK IS STACKED, RETURN IS  MADE FROM WHENCE WE
            CAME.
            IF THE TAPE IS BUSY, INDICATION IS MADE THAT I/O IS
            PENDING, SO THAT THE I/O INTERRUPT HANDLER WILL RE-START
            THE TAPE WHEN THE CURRENT I/O FINISHES.

            NOTE:  WHEN  THE  CPEXBLOK   IS  UNSTACKED  BY  THE
            DISPATCHER A CALL IS MADE TO DMKFREE TO REPLACE THE
            BACK  POCKET  CPEXBLOK.   THIS WILL  NOT  CAUSE  AN
            EXTEND  SINCE  THE DISPATCHER  JUST  UNSTACKED  AND
            FRETED THE CPEXBLOK.  ALTHOUGH  THE DISPATCHER FRET
            MAY  HAVE  CAUSED  A DIS-EXTEND,  RESULTING  IN  AN
            EXTEND ON THIS CALL; THIS  EXTEND WOULD NOT INVOLVE
            I/O.

   SUSPENSION:
            IF NO BUFFERS ARE AVAILABLE THEN MONITORING IS SUSPENDED.
            IN THIS CASE, EACH BUFFER IS EITHER  BEING WRITTEN TO
            TAPE, OR WAITING TO BE WRITTEN.  A COUNT IS MAINTAINED
            IN THIS  CASE, THERE  ARE 2  FULL BUFFERS  OF DATA.
            ONE HAS BEEN  SCHEDULED TO GO TO TAPE  BUT THE TAPE
            I/O HAS NOT COMPLETED AND  THE OTHER BUFFER IS FULL
            AND WAITING TO  GO TO TAPE.  A  COUNT IS MAINTAINED
            OF  THE   NUMBER  OF  TIMES  THAT   THIS  CONDITION
            OCCURRS.   A  NOTE  IS MADE  THAT  THE  MONITOR  IS
            SUSPENDED, ALONG WITH THE CURRENT TOD CLOCK VALUE.

            AT THIS POINT  THE REASON FOR ENTRY  INTO DMKMON IS
            IGNORED AND  EXIT IS MADE  BACK TO DMKPRG  IF ENTRY
            WAS VIA AN  MC INSTRUCTION OR TO  THE DISPATCHER IF
            ENTRY WAS MADE VIA A  TIMER INTERRUPT.  THE MONITOR
            IS LEFT DISABLED  FOR MC INTERRUPTS.  IF  A MONITOR
            TIMER  INTERRUPT  SHOULD  OCCUR,   THEN  THE  TIMER
            ROUTINE WILL  BE DECEIVED INTO THINKING  THAT THERE
            ARE NO EVENTS TO MONITOR.   HOWEVER, THE NEXT TIMER
            INTERRUPT  IS  SET  UP  BEFORE   HE  EXITS  TO  THE
            DISPATCHER, SO  THE TIMER INTERRUPT PROCESS  IS NOT
            FORGOTTEN.

            THE MONITOR  I/O INTERRUPT HANDLER WILL  DETECT THE
            SUSPEND  CONDITION  AND  DO WHAT  IS  NECESSARY  TO
            RESUME MONITORING.   SEE THE I/O  INTERRUPT HANDLER
            FOR DETAILS OF THAT FUNCTION.

Calls to Other Routines

       DMKIOSQR - TO INITIATE I/O FOR JUST FILLED DATA PAGE