cdc:nos2.source:nam5871:msetil
Table of Contents
MSETIL
Table Of Contents
- [00010] PROC MSETIL1)
- [00065] PROC ABORT
- [00066] PROC MCLRIL
- [00067] PROC OMSG
- [00068] PROC OTIME
- [00069] PROC XRECALL
- [00070] PROC XTRACE
Source Code
- MSETIL.txt
- *DECK MSETIL
- USETEXT NIPDEF
- USETEXT LLCB
- USETEXT MSGIDX
- USETEXT NBT
- USETEXT PIT
- USETEXT PT
- USETEXT SYSTIME
- USETEXT STATTAB
- PROC MSETIL((CBADDR)); # REQUEST NIP/PIP INTERLOCK #
- STARTIMS;
- #
- *1DC MSETIL
- * 1. PROC NAME AUTHOR DATE
- * MSETIL J.C. LEE 80/04/01
- *
- * 2. FUNCTIONAL DESCRIPTION.
- * REQUEST NIP/PIP INTERLOCK
- *
- * 3. METHOD USED.
- * SET REQUEST INTERLOCK FLAG IN PIT ENTRY REQUEST WORD,
- * WAIT FOR ALL RUNNING PIP-S TO ACKNOWLEDGE THE INTERLOCK REQ.
- *
- * 4. ENTRY PARAMETERS.
- * CBADDR ZERO IF ALL PIP(S) ARE TO BE INTERLOCKED,
- * LLCB ADDRESS IF ONLY A SPECIFIC
- * PIP IS TO BE INTERLOCKED
- *
- * 5. EXIT PARAMETERS.
- * NONE
- *
- * 6. COMDECKS CALLED AND SYMPL TEXTS USED.
- * NIPDEF LLCB NBT PIT PT OSIZE
- * SYSTIME MSGIDX
- * STATTAB STATISTICS TABLE
- *
- * 7. ROUTINES AND OVERLAYS CALLED.
- * MCLRIL CLEAR INTERLOCK REQUEST
- * OTIME GET (DEADSTART) REAL TIME CLOCK VALUE
- * XRECALL RECALL
- * XTRACE TRACE CALL
- * OMSG ISSUE DAYFILE MESSAGE
- *
- * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION
- * "NO INTERLOCK"
- *
- * W A R N I N G - THIS PROCEDURE IS LOADED WITH PRIMARY OVERLAY
- * MGBGCLT, MDRPTR, MCHKPTR, MAJPTR
- * AND XCHKPCR. THEREFORE WHENEVER THIS ROUTINE
- * IS MODIFIED, CHECK MUST BE MADE TO MAKE SURE
- * THE OVERLAYS MGBGCLT, MDRPTR, MCHKPTR,
- * MAJPTR AND XCHKPCR WILL NOT EXCEED THE
- *CALL OSIZE
- *
- * THIS PROCEDURE IS CALLED BY MGBGCLT, NPHECP,
- * AND NPPCT.
- *
- #
- STOPIMS;
- #
- EXTERNAL VARIABLES
- #
- XREF
- BEGIN
- PROC ABORT; # ABORT PROCEDURE #
- PROC MCLRIL; # CLEAR INTERLOCK REQUEST #
- PROC OMSG; # ISSUE DAYFILE MESSAGE #
- PROC OTIME; # GET REAL TIME CLOCK VALUE #
- PROC XRECALL; # RECALL #
- PROC XTRACE; # TRACE CALL #
- END
- #
- INTERNAL VARIABLES
- #
- ARRAY CURTIME P(1); # WORD TO STORE CURRENT TIME #
- BEGIN
- ITEM CURSECS U(0,0,24); # SYSTIME IN SECONDS #
- ITEM SMILS U(0,24,36); # STARTING TIME IN MILLESECONDS #
- END
- DEF ACKTIME #25#;
- ITEM
- CBADDR, # PCB ADDRESS #
- INDEX, # INDEX FOR PIT ENTRY #
- IDXMIN, # MINIMUM INDEX #
- IDXMAX, # MAXIMUM INDEX #
- NOTACK B, # FLAG FOR INTRLK NOT ACKED #
- TIMEC = 0, # SAVE INITIAL TIME #
- FLAG B; # TEMPORARY FLAG #
- CONTROL IFEQ STAT,1;
- ARRAY ETIME P(1); # RTIME BUFFER FOR ENDING TIME #
- BEGIN
- ITEM EMILS U(0,24,36); # ENDING TIME IN MILLESECONDS #
- END
- ITEM STTEMP; # TEMPORARY STATISTICS VARIABLE #
- ITEM TIMESC = 0; # SAVE INITIAL TIME IN MILLESEC #
- CONTROL FI;
- # ******************************************************************** #
- BEGIN
- CONTROL IFEQ DEBUG,1;
- XTRACE("MSETI") ;
- CONTROL FI;
- OTIME(CURTIME);
- TIMEC = CURSECS[0]; # SAVE CURRENT TIME IN SECS #
- CONTROL IFEQ STAT,1;
- TIMESC = SMILS[0];
- CONTROL FI;
- NOTACK = FALSE;
- IF CBADDR NQ 0
- THEN # INTERLOCK A SPECIFIC PIP ONLY #
- BEGIN
- P<LLCB> = CBADDR; # LLCB ADDRESS #
- IF LLCBID[0] NQ LLCBIDVALUE
- THEN # IF NOT LLCB #
- GOTO EXIT; # NO INTERLOCK IS REQUIRED #
- IDXMIN = LLCBPITIDX[0]; # PIT ENTRY INDEX #
- IDXMAX = IDXMIN;
- END
- ELSE # NEED TO INTERLOCK ALL PIPS #
- BEGIN
- IDXMIN = 1; # INDEX FOR FIRST PIT ENTRY #
- IDXMAX = MAXPIP; # INDEX FOR LAST PIT ENTRY #
- END
- FOR INDEX = IDXMIN STEP 1 UNTIL IDXMAX
- DO # INTERLOCK ALL PIPS #
- BEGIN
- IF PITPUF[INDEX] AND # PIT ENTRY IS IN USE #
- NOT PITC[INDEX] # PIP HAS NOT DROPPED OUT #
- THEN # NEED TO INTERLOCK THIS PIP #
- BEGIN
- IF PITACK[INDEX]
- THEN # PREVIOUS ACK WAS NOT CLEARED #
- BEGIN
- GOTO EXIT; # DO NOT NEED INTERLOCK #
- END
- IF PITAF[INDEX]
- THEN # INTERLOCK ABANDONED LAST TIME #
- BEGIN
- CONTROL SLOWLOOP;
- FOR INDEX = INDEX WHILE PITACK[INDEX]
- DO # WAIT FOR ACK TO BE CLEARED #
- BEGIN
- XRECALL(0);
- END
- PITAF[INDEX] = FALSE; # CLEAR ABANDON FLAG #
- END
- PITPF[INDEX] = TRUE; # SET INTERLOCK REQUEST #
- END
- END
- #
- CHECK FOR ACKNOWLEDGEMENT OF INTERLOCK
- #
- FOR INDEX = IDXMIN STEP 1 UNTIL IDXMAX
- DO # CHECK ALL PIPS #
- BEGIN
- FLAG = TRUE;
- CONTROL SLOWLOOP;
- FOR INDEX = INDEX WHILE FLAG AND NOT NOTACK
- DO # UNTIL INTERLOCK ACKNOWLEDGED OR ABANDONED #
- BEGIN
- IF PITPF[INDEX] AND NOT PITACK[INDEX]
- THEN # PIP HAS ACKNOWLEDGED INTERLOCK#
- BEGIN
- XRECALL(0);
- OTIME(CURTIME); # GET CURRENT TIME #
- IF CURSECS[0] - TIMEC GR ACKTIME
- THEN # AT LEAST 2 SECONDS HAVE PASSED#
- BEGIN # DO NOT WAIT ANY LONGER #
- NOTACK = TRUE; # SET PIP NOT INTERLOCKED FLAG #
- END # TERMINATE EXECUTION OF LOOP #
- END
- ELSE # INTLCK NOT REQ-ED OR ACK-ED #
- FLAG = FALSE;
- END
- END
- IF NOTACK # IF INTLCK NOT ACK-ED #
- THEN
- BEGIN
- MCLRIL; # CLEAR INTERLOCK REQUEST #
- OMSG(DFMSG19); # " NO INTERLOCK" #
- ABORT(0,0);
- END
- EXIT:
- CONTROL IFEQ STAT,1;
- OTIME(ETIME); # GET SYSTEM TIME AT END OF PROCEDURE #
- ST$NMS = ST$NMS + 1; # INCREMENT NUMBER OF TIMES MSETIL CALLED #
- STTEMP = EMILS[0] - TIMESC; # TIME SPENT WAITINT FOR INTERLOCK#
- ST$TMS = ST$TMS + STTEMP; # TOTAL TIME SPENT IN MSETIL #
- IF ST$LMS LS STTEMP
- THEN # FOUND LARGER TIME INTERVAL IN ROUTINE #
- BEGIN
- ST$LMS = STTEMP; # NEW LARGEST TIME INTERVAL #
- END
- CONTROL FI;
- RETURN;
- END
- TERM
1)
CBADDR
cdc/nos2.source/nam5871/msetil.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator