*DECK SSSPES PROC SSSPES; *IF,DEF,IMS *TEXT # ** SERVICES AND SCHEDULING OVERVIEW * * * 1.0 INTRODUCTION * 2.0 DESCRIPTION OF SERVICES * 2.1 SCHEDULING OF PROCESSES * 2.1.1 DESIGN CONSIDERATIONS/PHILOSOPHIES * 2.1.2 STATUS WORK LIST ENTRY (SWLE) * 2.1.3 WORK LIST ENTRY (WLE) * 2.2 TABLE MANAGER (QUEUE MANAGER) * 2.3 OVERLAY LOADING * 2.4 TIMER SERVICES * 2.5 UTILITIES * 2.5.1 BIT MANIPULATION * 2.5.2 CHARACTER CONVERSION * 2.5.3 FILE FUNCTIONS * 2.5.4 COMMAND PARSER/RECOGNIZER * 2.5.5 AIP INTERFACE * 3.0 DECK/ROUTINE NAMING CONVENTIONS * 4.0 STRUCTURE CHARTS * 4.1 AIP INTERFACE ROUTINE * 4.2 CLOCK/TIMER ROUTINES * 4.3 OVERLAY MANAGEMENT ROUTINES * 4.4 COMMAND RECOGNITION ROUTINES * 4.5 SEQUENCE ROUTINES * 4.6 TABLE/QUEUE MANAGER ROUTINES * 5.0 TABLE STRUCTURES * 5.1 POINTER TABLE * 5.2 WORKLIST REQUEST QUEUE * 5.3 WORKLIST DEFINITION TABLE * 5.4 QUEUE TO WORKLIST DEFINITION TABLE * 5.5 STATUS WORKLIST DEFINITION * 5.6 OVERLAY DEFINITION TABLE * 5.7 OVERLAY CONTROL ITEMS * 5.8 OVERLAY REQUEST TABLE * 5.9 ROLLOUT TABLE * 5.10 TIMER REQUEST BLOCK * 5.11 CURRENT TIME AND DATE * 5.12 TYPICAL QUEUE ENTRY * 6.0 DEBUGGING TIPS *E * * * 1.0 INTRODUCTION * * SERVICES AND SCHEDULING IS A SET OF ROUTINES THAT ACT AS THE * EXECUTIVE AND PROVIDES SERVICES/UTILITIES FOR NVF AND CS. THE * FOLLOWING IS AN OVERVIEW OF THESE SERVICES, THE CONVENTIONS USED * IN NAMING THE ROUTINES, STRUCTURE CHARTS, AND THINGS TO LOOK FOR * WHEN ANALYZING A CS OR NVF DUMP. * * * 2.0 DESCRIPTION OF SERVICES * * 2.1 SCHEDULING OF PROCESSES * * 2.1.1 DESIGN CONSIDERATIONS/PHILOSOPHIES * * THE PROGRAM (NVF OR CS) IS VIEWED BY SERVICES AND SCHEDULING AS A * SET OF INDEPENDENT PROCESSORS. PROGRAM OPERATION IS DATA DRIVEN * OR TRANSACTION DRIVEN, I.E. - THE PRESENCE OF DATA IS SUFFICIENT * TO INDICATE THAT A PROCESSOR OF THAT DATA MUST BE STARTED UP. NO * DATA MEANS THERE IS NO WORK TO DO. * * KEY TO THE UNDERSTANDING THESE PROGRAMS IS THEIR TRANSACTION * PROCESSING NATURE AND THE DECOUPLING OF PROGRAM PARTS. SERVICE * MESSAGES AND DATA ARE ROUTED TO PROCESSES VIA ENTRIES IN THE * APPROPRIATE QUEUE. THESE PROCESSES ARE PREPARED TO HANDLE THE * POSSIBILITIES AT A GIVEN POINT IN THE OVERALL PROTOCOL. * * THE SERVICE MESSAGES AND DATA FOR A PARTICULAR CONNECTION HAVE * VERY LIMITED ASSOCIATION WITH OTHER CONNECTIONS AND PROTOCOLS * (APPLICATION NETTING OFF, FAILING, ETC.) SO THIS DECOUPLING WILL * WORK. THE OVERALL PROGRAM OPERATION IS LOOSELY TIED TOGETHER. * EXAMINATION OF THE VARIOUS PROTOCOLS AND THE UNDERSTANDING OF * THEIR RELATIONSHIPS, IF ANY, AND POSSIBLE INTERACTION WAS DONE AT * DESIGN TIME TO ELIMINATE ANY PROBLEMS. * * THE SCHEDULING OF PROCESSES IS DONE BY TWO SEPERATE MECHANISMS: * STATUS WORK LIST ENTRIES AND WORK LIST ENTRIES. THESE TWO METHODS * ARE EXPLAINED IN THE NEXT TWO SECTIONS. * * 2.1.2 STATUS WORK LIST ENTRY (SWLE) * * STATUS WORK LIST ENTRIES ARE USED BY PROCESSES THAT MUST WAIT FOR * EXTERNAL REQUESTS TO COMPLETE BEFORE PROCEEDING. ONCE THE REQUEST * IS COMPLETE, A NEW REQUEST FOR THE SERVICE IS MADE, IF ONE IS * AVAILABLE. THE PROCESSES CAN BE THOUGHT OF AS SEPARATE PROGRAMS * THAT RUN CONSTANTLY ONCE THEY ARE STARTED AT INITIALIZATION TIME. * THESE PROGRAMS DETERMINE THEMSELVES WHAT INDICATES THAT A REQUEST * IS COMPLETE AND CONVEYS THIS TO THE STATUS WORK LIST PROCESSOR * WHEN IT GOES INTO A STATE OF WAITING. * * THE STATUS WORKLIST PROCESSOR DOES NOT KNOW WHAT THE PROGRAM IS * DOING. IT IS SIMPLY LOOKING FOR A CHANGE IN THE INITIAL VALUE * WHEN THE SWLE REQUEST IS MADE. A CHANGE IN THE MEMORY LOCATION * THAT IT IS MONITORING WILL PROMPT IT TO START UP THE WAITING * PROGRAM. (NOTE: CURRENTLY NO MASKING OR IGNORING PARTS OF A * WATCHED WORD IS PLANNED, BUT COULD BE IMPLEMENTED EASILY IF FOUND * NECESSARY.) * * AN EXAMPLE MIGHT BE A PROCESS THAT READS RECORDS FROM A FILE UPON * REQUEST. IN THE BEGINNING THE PROCESSOR, AT INITIALIZATION TIME, * IS CALLED AND DETERMINES THAT THERE IS NO WORK IN PROGRESS AND NO * REQUESTS TO START SO IT GOES INTO WAIT MODE AND INFORMS THE STATUS * WORKLIST PROCESSOR TO RESTART IT WHEN AN ENTRY IS PLACED IN ITS * INPUT QUEUE. AT THIS POINT IT IS NOT EXECUTING AS THE STATUS WORK * LIST PROCESSOR IS DOING THE CHECKING FOR WORK TO BE DONE. IN * PARTICULAR THE SWLP IS CHECKING THE ENTRY COUNT OF THE QUEUE TO * BE NON-ZERO. ONCE AN ENTRY IS MADE IN THE QUEUE THE COUNTER IS * BUMPED AND THE SWLP STARTS UP THE PROCESSOR. THE PROCESSOR * REALIZES THAT A REQUEST IS IN ITS INPUT QUEUE AND STARTS THE READ * REQUEST (CALLING CIO TO READ THE RECORD), GOES INTO WAIT MODE, * AND INFORMS THE SWLP TO WATCH THE FET FOR EITHER A CHANGE IN THE * *IN* POINTER OR THE COMPLETE BIT BEING SET. * * THE PROCESSOR AT THIS POINT DOES NOT CARE ABOUT ADDITIONAL * REQUESTS IN ITS INPUT QUEUE SINCE IT HAS ONE IN PROGRESS. AGAIN, * IT IS NOT EXECUTING AS THE SWLP IS CHECKING FOR CHANGES IN THE CIO * FET. THE CHECKING DONE BY THE SWLP IS DONE USING LESS RESOURCES * AND MORE EFFICIENTLY THAN IF THE PROCESSOR WAS CALLED AGAIN AND * AGAIN TO CHECK THE STATUS OF THE FET. WHEN THE READ REQUEST HAS * BEEN AT LEAST PARTIALLY PROCESSED (CIO HAS MOVED THE *IN* POINTER) * THE PROCESSOR MOVES THE DATA FROM THE CIO BUFFER AND EITHER MAKES * A NEW READ REQUEST, WAITS FOR THE ENTIRE REQUEST UNTIL CIO IS * FINISHED, OR WAITS FOR A NEW REQUEST IN ITS INPUT Q, WHICHEVER IT * DETERMINES IS THE APPROPRIATE ACTION TO TAKE. * * 2.1.3 WORK LIST ENTRY (WLE) * * WORK LIST ENTRIES PROVIDE A METHOD OF PROCESSING TRANSACTIONS THAT * ALLOW THE DECOUPLING OF VARIOUS PROCESSES AND EXTERNAL SERVICES * NEEDED TO COMPLETE A TRANSACTION. THE WHOLE PROCESS WORKS WITH * JUST A FEW RULES: * * 1. WHEN THE FIRST ENTRY IN THE QUEUE IS MADE, A WLE REQUEST IS * MADE TO CAUSE THE STARTING OF THE PROCESSOR OF THAT QUEUE. * (ONLY ONE WLE REQUEST IS NEEDED FOR A QUEUE) * * 2. A PROCESSOR OF A QUEUE MUST EITHER EMPTY ALL OF ITS INPUT QUEUE * OR MAKE ANOTHER WLE REQUEST TO RESTART ITSELF. * * 3. IF THERE ARE ANY TIMING RELATIONSHIPS BETWEEN INPUTS TO A * PROCESSOR THAT MUST BE PRESERVED, THEN THE TIME COUPLED * REQUESTS MUST BE QUEUED AND PROCESSED BY THE SAME PROCESSOR. * * 4. A PROCESSOR SHOULD ONLY RUN FOR A SHORT TIME. IF IT HAS TOO * MANY REQUESTS IN ITS QUEUE, THEN IT SHOULD STOP AND MAKE A WLE * REQUEST FOR ITSELF TO START UP AT A LATER TIME. THIS WILL * ALLOW THE PROCESSORS OF ITS OUTPUT TO RUN AND ALSO ALLOW ANY * SWLE REQUESTS TO BE COMPLETED IN A TIMELY MANNER. * * A PROCESSOR-S JOB IS TO TAKE ENTRIES FROM ITS INPUT QUEUE, PROCESS * THEM, AND PLACE THE RESULTS IN OUTPUT QUEUES. PROCESSES THAT ARE * NEAR THE OUTPUT SIDE HAVE THE HIGHEST PRIORITY. THIS IS TO FREE * UP FIELD LENGTH BY PASSING DATA OUT OF THE PROGRAM. WHEN * SELECTING THE NEXT WLE TO PROCESS THE HIGHEST PRIORITY REQUEST IS * DONE REGARDLESS OF REQUEST ARRIVAL TIME. NO PROCESS, IN MAKING * A QUEUE ENTRY FOR ADDITIONAL PROCESSING, CAN ASSUME OR REQUIRE * THAT A PROCESS RUN NEXT, JUST THAT SOMETIMES IT WILL. THE WLE * CONTAINS NO DATA, IT IS JUST A SIGNAL TO START THE PROCESS, DATA * IS IN THE QUEUE FOR THE PROCESSOR. * * 2.2 TABLE MANAGER (QUEUE MANAGER) * * THE TABLE MANAGER, WRITTEN ORIGINALLY BY R. H. GOODELL FOR USE * WITH *DDLCG*, IS A ROUGH EQUIVALENT TO THE STANDARD COMMON DECK * *COMCMTP* WHICH CONTAINS THE COMPASS MANAGED TABLES PACKAGE. * THERE IS NO QUEUE MANAGER AS SUCH IN THAT THE ONLY TASKS * IMPLEMENTED IS THE PLACING OF ENTRIES IN QUEUES, REMOVING ENTRIES * FROM QUEUES, AND REQUESTING PROCESSING OF A QUEUE VIA A WLE * REQUEST, IF NEEDED. BOTH TABLES AND QUEUES ARE MAINTAINED * BY THE TABLE MANAGER. * * BASICALLY, THE TABLE MANAGER MAINTAINS A SET OF BASED ARRAY * POINTERS WHICH ALL POINTS TO THE MANAGED TABLE AREA IN HIGH CORE. * EACH ONE POINTING TO THE WORD WHERE THE TABLE BEGINS. FOLLOWING * EACH POINTER IS A WORD CONTAINING THE NUMBER OF WORDS ALLOCATED * FOR THAT PARTICULAR TABLE. THUS, IN DEFINING THE TABLES, EACH * TABLE IS DEFINED BY A BASED ARRAY FOLLOWED BY A ITEM DECLARATION. * * A CONCERTED EFFORT WAS MADE TO USE ONLY FIXED SIZED ENTRIES IN THE * MANAGED TABLES DUE TO THE POTENTIAL MAINTENANCE PROBLEMS OF BASING * ARRAYS NECESSARY TO HANDLE VARIABLE SIZED ENTRIES. * * THE TABLE MANAGER AUTOMATICALLY KEEPS THE BASED ARRAY POINTERS * UPDATED AND IF THE ENTRY SIZE IS FIXED, THEN ALL ENTRIES CAN BE * ACCESSED SAFELY BY JUST SUBSCRIPTING AND THE PROGRAMMER NEED NOT * BE CONCERNED WITH KEEPING THE BASED ARRAY POINTED CORRECTLY. * * QUEUES ARE GENERALLY NOT FIXED ENTRY SIZE. NON-FIXED ENTRY SIZED * MANAGED TABLES MUST BE HANDLED DIFFERENTLY AND MUCH CARE MUST BE * TAKEN TO HAVE BASED ARRAYS POINTED CORRECTLY. WHERE POSSIBLE * VARIABLE ENTRY SIZED MANAGED TABLES ARE HANDLED BY USE OF AN ENTRY * SIZE WORD FOR EACH ENTRY. QUEUE ENTRIES ALL HAVE A WORD COUNT * WORD, AN APPLICATION HEADER BLOCK WORD AND THE BODY OF THE ENTRY. * * THE ONLY EXTENSION TO THE MANAGER, FROM THE ORIGINAL VERSION, IS * ADDING WORDS AND REMOVING WORDS IN THE MIDDLE OF A TABLE. THIS IS * NEEDED TO ALLOW CERTAIN TABLES TO MAINTAIN ENTRIES IN SORT ORDER, * SUCH AS TIMER REQUESTS. * * 2.3 OVERLAY LOADING * * OVERLAY LOADING IS DONE VIA CIO FROM A LOCAL FILE. THIS IS SO * LOADING CAN BE DONE WITHOUT RECALL SINCE NOS WILL NOT ALLOW LOADER * CALLS WITHOUT RECALL FROM PROGRAMS OTHER THAN SUBSYSTEMS. THE * INABILITY TO LOAD AN OVERLAY WITHOUT RECALL WOULD DISRUPT AND STOP * OTHER EXTERNAL REQUESTS THAT ARE BEING DONE WITHOUT RECALL. IN * ADDITION, DATA/TABLES WHICH ARE ONLY USED BY AN OVERLAY IS ALREADY * IN THE OVERLAY LOADED AS IT IS INSERTED AT INITIALIZATION TIME * WHEN THE OVERLAY IS WRITTEN TO THE LOCAL FILE. EXAMPLES ARE * INCALL AND OUTCALL BLOCKS IN NVF AND THE CROSS REFERENCE TABLES IN * CS. * * WHEN AN OVERLAY HAS BEEN LOADED, THE OVERLAY IS USED UNTIL ALL * WORK THAT CAN BE DONE BY IT IS COMPLETED AND A DIFFERENT OVERLAY * IS NEEDED. THE EXECUTION OF OVERLAY CODE IS DONE IN SUCH A MANNER * THAT IT DOES NOT LOCK OUT HIGHER PRIORITY ACTIVITIES. * * 2.4 TIMER SERVICES * * TIMER REQUESTS ARE DONE VIA A TIMER REQUEST BLOCK. THE BLOCK * CONTAINS SUCH INFORMATION AS HOW MANY SECONDS TO WAIT (DELAY TIME) * AND THE NUMBER OF THE QUEUE IN WHICH TO PLACE THE BLOCK ONCE THE * TIME HAS EXPIRED (PAST THE FIRE-TIME). * * THE BLOCK IS ASSIGNED A CANCELLATION NUMBER WHEN THE REQUEST IS * RECEIVED. THE NUMBER IS PASSED BACK TO THE REQUESTING PROC TO BE * USED LATER TO IDENTIFY THE ENTRY IF THE BLOCK/REQUEST IS TO BE * CANCELLED. THE BLOCK IS PLACED IN A TIMER REQUEST QUEUE. THE * QUEUE IS SORTED IN ASCENDING ORDER BY FIRE-TIME. THE FIRE TIME * IS CALCUALTED TO BE THE DELAY-TIME PLUS THE CURRENT TIME. * * AGAIN, ONCE THE FIRE TIME IS REACHED FOR A BLOCK, THE BLOCK IS * REMOVE FROM THE TIMER REQUEST QUEUE AND PLACED IN THE QUEUE * SPECIFIED IN THE BLOCK. * * THE UNUSED PORTIONS OF THE BLOCK CAN BE USED BY THE REQUESTING * PROC TO STORE SUCH THINGS AS AN ACN VALUE OR A SERVICE MESSAGE * I.D. * * 2.5 UTILITIES * * 2.5.1 BIT MANIPULATION * * THESE PROCEDURES TAKE CARE OF FUNCTIONS NEEDED AT THE BIT LEVEL. * SOME FUNCTIONS INCLUDE SETTING AND CLEARING OF FLAGS IN A BIT MAP, * STORE FIELDS THAT ARE LESS THAN SIXTY BITS OR CROSS WORD * BOUNDRIES, AND INDICATE WHICH FLAG IS SET IN A BIT MAP. * * 2.5.2 CHARACTER CONVERSION * * THESE PROCEDURES CONVERT DISPLAY CODED CHARACTERS TO ASCII * CHARACTERS AND VICE VERSA. * * 2.5.3 FILE FUNCTIONS * * THE ONLY PROCEDURE DEFINED PRESENTLY IS ONE TO DETERMINE HOW MANY * USED AND UNUSED WORDS ARE CURRENTLY CONTAINED IN A SPECIFIED CIO * BUFFER. * * 2.5.4 COMMAND PARSER/RECOGNIZER * * THE COMMAND RECOGNIZER IS USED BY NVF AND CS TO DO SYNTAX AND * SEMANTIC CHECKING OF OPERATOR COMMANDS. THE RECOGNIZER IS PASSED * A COMMAND SYNTAX TABLE, WHICH DEFINES THE LEGAL COMMANDS, AND THE * OPERATOR TYPE-IN. WHAT IT RETURNS IS AN ERROR CODE VALUE AND A * PARAMETER LIST. THE PARAMETER LIST IS THE COMMAND IN A STRUCTURED * FORMAT. * * 2.5.5 AIP INTERFACE * * THE MEANS BY WHICH DATA IS PASSED BETWEEN NAM AND NVF/CS IS TAKEN * CARE OF BY THE AIP MONITOR. THE AIP MONITOR IS A STATUS LIST * DRIVEN PROCEDURE. FOR RECEIVING DATA THE NSUP WORD IS MONITORED * AND IF IT CHANGES, THEN THE AIP MONITOR GETS THE DATA FROM NAM AND * CALLS A PROC TO DISPATCH IT TO THE APPROPRIATE NVF/CS QUEUE. FOR * SEND DATA NVF/CS MAINTAINS AN OUTGOING TRAFFIC QUEUE. ONCE THERE * ARE ONE OR MORE ENTRIES IN THE QUEUE, THE AIP MONITOR REMOVES EACH * ENTRY AND SENDS IT TO NAM. * * 3.0 DECK/ROUTINE NAMING CONVENTIONS * * SERVICES AND SCHEDULING ROUTINE NAMES ARE ALL PREFIXED BY *SS*. * THE NAMES HAVE THE FOLLOWING FORMAT: * * SSYZZZ * * WHERE: * Y = A, AIP INTERFACE ROUTINES * B, BIT MANIPULATION ROUTINES * C, CLOCK/TIMER ROUTINES * D, CHARACTER CONVERSION ROUTINES * F, FILE UTILITIES * 0, OVERLAY MANAGEMENT ROUTINES * R, COMMAND RECOGNITION ROUTINES * S, SEQUENCING ROUTINES * T, TABLE/QUEUE MANAGEMENT ROUTINES * * ZZZ = FIRST LETTER OF EACH WORD OF VERB-ADJECTIVE-NOUN DESCRIBING * THE ROUTINE. * * ONE EXAMPLE IS *SSBSBF*. THIS IS A SERVICES AND SCHEDULING BIT * MANIPULATION ROUTINE, WHERE *SBF* STANDS FOR STORE BIT FIELD. * ANOTHER EXAMPLE IS *SSTRQE*. THIS IS A SERVICES AND SCHEDULING * TABLE/QUEUE MANAGEMENT ROUTINE, WHERE *RQE* STANDS FOR REMOVE * QUEUE ENTRY. * * THE FOLLOWING IS A LIST OF ALL THE SERVICES AND SCHEDULING * ROUTINES GROUPED BY TYPE OF ROUTINE. * * AIP INTERFACE ROUTINES-- * * SSACNI - CONTROL NETWORK INTERFACE * * BIT MANIPULATION ROUTINES-- * * SSBCBW - CLEAR BIT IN WORD * SSBFPB - FIND PRIORITY BIT * SSBSBW - SET BIT IN WORD * SSBTBW - TEST BIT IN WORD * SSBEBF - EXTRACT BIT FIELD * SSBSBF - STORE BIT FIELD * * CLOCK/TIME ROUTINES-- * * SSCATR - ACCEPT TIMER REQUEST * SSCCTR - CANCEL TIMER REQUEST * SSCRTR - RETURN TIMER REQUEST * SSCUTD - UPDATE TIME OF DAY * * CHARACTER CONVERSION ROUTINES-- * * SSDCAD - CONVERT ASCII TO DISPLAY CODE * SSDCDA - CONVERT DISPLAY CODE TO ASCII. * * FILE UTILITIES-- * * SSFCBS - CHECK BUFFER SPACE * * OVERLAY MANAGEMENT ROUTINES-- * * SSOJOP - JUMP TO OVERLAY PROGRAM * SSOCOL - CONTROL OVERLAY LOADING * SSOEOP - EXECUTE OVERLAY PROGRAM * * COMMAND RECOGNITION ROUTINES-- * * SSRGNT - GET NEXT TOKEN * SSRRCS - RECOGNIZE COMMAND STRING * * SEQUENCE ROUTINES-- * * SSSCRR - CALL REQUESTED ROUTINE. * SSSPAT - PROCESS ABNORMAL TERMINATION * SSSAOR - ACCEPT OVERLAY REQUEST * SSSAWR - ACCEPT WORKLIST REQUEST * SSSESP - EXECUTE STATUS (WORKLIST) PROGRAM * SSSEWP - EXECUTE WORKLIST PROGRAM * SSSPES - PROGRAM EXECUTION SEQUENCER * SSSPSI - PREPARE STATISTICS INFORMATION. * SSSWNR - WAIT FOR NEW REQUEST * * TABLE/QUEUE MANAGEMENT ROUTINES-- * * SSTRCM - REQUEST CENTRAL MEMORY * SSTAQE - ACCEPT QUEUE ENTRY * SSTRQE - REMOVE QUEUE ENTRY * SSTTMR - TABLE MANAGEMENT ROUTINES. * SSTASU - ACCUMULATE STORAGE USED * SSTATS - ALLOCATE TABLE SPACE * SSTDFL - DECREASE FIELD LENGTH * SSTETS - ENLARGE TABLE SPACE * SSTITM - INITIALIZE TABLE MANAGER * SSTRTS - REMOVE TABLE SPACE * SSTSDA - SET DYNAMIC AREA * *E * 4.0 STRUCTURE CHARTS * * THE FOLLOWING ARE STRUCTURE CHARTS FOR SERVICES AND SCHEDULING. * NOT ALL THE ROUTINES ARE SHOWN, ONLY THOSE THAT CALL OTHER * ROUTINES. * * * 4.1 AIP INTERFACE ROUTINE * * * +-------------+ * I I * +----------->I CSNVDSP I * I I I * I +-------------+ * I * I +-------------+ * I I I * +----------->I NETGETL I * I I I * I +-------------+ * I * +-----------+ I +-------------+ * I I I I I * I SSACNI +--------+----------->I NETPUT I * I I I I I * +-----------+ I +-------------+ * I * I +-------------+ * I I I * +----------->I NETREL I * I I I * I +-------------+ * I * I +-------------+ * I I I * +----------->I SSTRQE I * I I * +-------------+ * * * * SSACNI -- CONTROL NETWORK INTERFACE * CSNVDSP -- CS/NVF DISPATCH NETWORK TRAFFIC * NETGETL -- RECEIVE NETWORK TRAFFIC * NETPUT -- SEND NETWORK TRAFFIC * NETREL -- RELEASE DEBUG TRACE FILE * SSTRQE -- REMOVE QUEUE ENTRY *E * 4.2 CLOCK/TIMER ROUTINES * * +-------------+ * I I * I SSCATR I * I I * +------+------+ * I * +----------------+-----------------+ * I I * +------+-----+ +------+------+ * I I I I * I SSCUTD I I SSTETS I * I I I I * +------------+ +-------------+ * * * * * +-------------+ +-------------+ * I I I I * I SSCCTR +--------->I SSTRTS I * I I I I * +-------------+ +-------------+ * * * * * * +-------------+ * I I * I SSCRTR I * I I * +-------------+ * I * +----------------+----------------+ * I I * +------+------+ +------+------+ * I I I I * I SSTAQE I I SSTRQE I * I I I I * +-------------+ +-------------+ * * * SSCATR -- ACCEPT TIMER REQUEST * SSCUTD -- UPDATE TIME OF DAY * SSTETS -- ENLARGE TABLE SPACE * SSCCTR -- CANCEL TIMER REQUEST * SSCTRS -- REMOVE TABLE SPACE * SSCRTR -- RETURN TIMER REQUEST * SSTAQE -- ACCEPT QUEUE ENTRY * SSTRQE -- REMOVE QUEUE ENTRY *E * * * 4.2 CLOCK/TIMER ROUTINES (CONT.) * * * * * * +-------------+ * I I * +-------------->I PDATE I * I I I * I +-------------+ * I * I +-------------+ * I I I * +-------------->I DATE I * I I I * I +-------------+ * I * +-------------+ I +-------------+ * I I I I I * I SSCUTD +-------+-------------->I CLOCK I * I I I I I * +-------------+ I +-------------+ * I * I +-------------+ * I I I * +-------------->I RTIME I * I I I * I +-------------+ * I * I +-------------+ * I I I * +-------------->I SSSAWR I * I I * +-------------+ * * * SSCUTD -- UPDATE TIME OF DAY * PDATE -- GET PACKED DATE AND TIME * DATE -- GET DATE * CLOCK -- GET TIME (DISPLAY CODE) * RTIME -- GET AMOUNT OF TIME SINCE DEADSTART * SSSAWR -- ACCEPT WORKLIST REQUEST *E * 4.3 OVERLAY MANAGEMENT ROUTINES * * * * +-------------+ * I I * I SSOCOL I * I I * +------+------+ * I * +--------------------+-----------------------+ * I I I * +------+------+ +------+------+ +------+------ * I I I I I I * I READ I I SSSAWR I I SSSTSDA I * I I I I I I * +-------------+ +-------------+ +-------------+ * * * +-------------+ * I I * +--------->I SSBCBW I * I I I * I +-------------+ * I * I +-------------+ * I I I * +--------->I SSBFPB I * +-------------+ I I I * I I I +-------------+ * I SSOEOP +----------+ * I I I +-------------+ * +-------------+ I I I * +--------->I SSOJOP I * I I I * I +-------------+ * I * I +-------------+ * I I I * +--------->I SSSAWR I * I I * +-------------+ * * * SSOCOL -- CONTROL OVERLAY LOADING * READ -- INITIATE CIO READ ON FILE * SSSAWR -- ACCEPT WORKLIST REQUEST * SSTSDA -- SET DYNAMIC TABLE AREA * SSOEOP -- EXECUTE OVERLAY PROGRAM * SSBCBW -- CLEAR BIT IN WORD * SSBFPB -- FIND PRIORITY BIT * SSOJOP -- JUMP TO OVERLAY PROGRAM *E * * * 4.4 COMMAND RECOGNITION ROUTINES * * * * * +-------------+ * I I * I SSRGNT I * I I * +------+------+ * I * +---------------+---------------+ * I I * +------+------+ +------+------+ * I I I I * I SSBEBF I I SSBSBF I * I I I I * +-------------+ +-------------+ * * * * +-------------+ * I I * I SSRRCS I * I I * +------+------+ * I * +-----------------+------------------+ * I I I * +------+------+ +------+------+ +------+-------+ * I I I I I I * I SSRGNT I I SSBEBF I I SSBSBF I * I I I I I I * +-------------+ +-------------+ +--------------+ * * * SSRGNT -- GET NEXT TOKEN * SSBEBF -- EXTRACT BIT FIELD * SSBSBF -- STORE BIT FIELD * SSRRCS -- RECOGNIZE COMMAND STRING *E * * * 4.5 SEQUENCE ROUTINES * * * * * +-------------+ +-------------+ * I I I I * I SSSAOR +------------>I SSBSBW I * I I I I * +-------------+ +-------------+ * * * * * * +-------------+ * I I * I SSSAWR I * I I * +------+------+ * I * +--------------+---------------+ * I I * +------+-------+ +------+------+ * I I I I * I SSSAOR I I SSBSBW I * I I I I * +--------------+ +-------------+ * * * * * * * +-------------+ +-------------+ * I I I I * I SSSESP +--------------->I SSSCRR I * I I I I * +-------------+ +-------------+ * * * SSSAOR -- ACCEPT OVERLAY REQUEST * SSSCRR -- CALL REQUESTED ROUTINE * SSSAWR -- ACCEPT WORKLIST REQUEST * SSBSBW -- SET BIT IN WORD * SSSESP -- EXECUTE STATUS WORKLIST PROGRAM *E * * * 4.5 SEQUENCE ROUTINES (CONT.) * * * * * +-------------+ * I I * I SSSEWP I * I I * +------+------+ * I * +-----------------+------------------+ * I I I * +------+------+ +------+------+ +------+------+ * I I I I I I * I SSSCRR I I SSBCBW I I SSBFBP I * I I I I I I * +-------------+ +-------------+ +-------------+ * * * * +-------------+ * I I * I SSSPSI I * I I * +------+------+ * I * +---------------+-----------------+ * I I * +------+------+ +------+------+ * I I I I * I NETLGS I I XCDD I * I I I I * +-------------+ +-------------+ * * * SSSEWP -- EXECUTE WORKLIST PROGRAM * SSSCRR -- CALL REQUESTED ROUTINE * SSBCBW -- CLEAR BIT IN WORD * SSBFPB -- FIND PRIORITY BIT * SSSPSI -- PREPARE STATISTICS INFORMATION * NETLGS -- LOG NETWORK STATISTICS * XCDD -- CONVERT INTEGER TO DISPLAY CODE DECIMAL *E * * * 4.5 SEQUENCE ROUTINES (CONT.) * * * * * * +-------------+ * I I * +------------>I MESSAGE I * I I I * I +-------------+ * I * I +-------------+ * I I I * +------------>I REPRIEVE I * I I I * I +-------------+ * I * +-------------+ I +-------------+ * I I I I I * I SSSPAT +------+------------>I DMB I * I I I I I * +-------------+ I +-------------+ * I * I +-------------+ * I I I * +------------>I NETSTC I * I I I * I +-------------+ * I * I +-------------+ * I I I * +------------>I WRITER I * I I * +-------------+ * * * SSSPAT -- PROCESS ABNORMAL TERMINATION * MESSAGE -- SEND MESSAGE TO DAYFILE * REPRIEVE -- REPRIEVE PROCESSOR * DMB -- GENERATE BINARY DUMP * NETSTC -- FLUSH NAM STATISTICS * WRITER -- FLUSH CIO BUFFER AND EOR ON FILE *E * * * * 4.5 SEQUENCE ROUTINES (CONT.) * * * * * * +-------------+ * I I * +------------>I NETCHEK I * I I I * I +-------------+ * I * I +-------------+ * I I I * +------------>I SSCUTD I * I I I * I +-------------+ * I * +-------------+ I +-------------+ * I I I I I * I SSSPES +----+------------>I SSSESP I * I I I I I * +-------------+ I +-------------+ * I * I +-------------+ * I I I * +------------>I SSSEWP I * I I I * I +-------------+ * I * I +-------------+ * I I I * +------------>I SSSWNR I * I I * +-------------+ * * * SSSPES -- PROGRAM EXECUTION SEQUENCE * NETCHEK - UPDATE NSUP WORD * SSCUTD -- UPDATE TIME OF DAY * SSSESP -- EXECUTE STATUS WORKLIST PROGRAM * SSSEWP -- EXECUTE WORKLIST PROGRAM * SSSWNR -- WAIT FOR NEW REQUEST *E * * * 4.5 SEQUENCE ROUTINES (CONT.) * * * * * * * +-------------+ * I I * I SSSWNR I * I I * +------+------+ * I * +----------------+----------------+ * I I I * +------+------+ +------+------+ +------+------+ * I I I I I I * I NETWAIT I I RECALL I I SSTDFL I * I I I I I I * +-------------+ +-------------+ +-------------+ * * * SSSWNR -- WAIT FOR NEW REQUEST * NETWAIT -- REQUEST NAM TO ROLLOUT PROGRAM * RECALL -- RETURN CONTROL AFTER COMPLETE BIT IS SET * SSTDFL -- DECREASE FIELD LENGTH *E * * * 4.6 TABLE/QUEUE MANAGEMENT ROUTINES * * * * * * +-------------+ * I I * I SSTAQE I * I I * +------+------+ * I * +----------------+----------------+ * I I I * +------+------+ +------+------+ +------+------+ * I I I I I I * I MOVEI I I SSTATS I I SSSAWR I * I I I I I I * +-------------+ +-------------+ +-------------+ * * * * +-------------+ * I I * I SSTRQE I * I I * +------+------+ * I * +------------+------------+ * I I * +------+------+ +------+------+ * I I I I * I MOVEI I I SSTRTS I * I I I I * +-------------+ +-------------+ * * * SSTAQE -- ACCEPT QUEUE ENTRY * MOVEI -- MOVE WORDS (INDIRECT ADDRESSING) * SSTATS -- ALLOCATE TABLE SPACE * SSSAWR -- ACCEPT WORKLIST REQUEST * SSTRQE -- REMOVE QUEUE ENTRY * SSTRTS -- REMOVE TABLE SPACE *E * * * 4.6 TABLE/QUEUE MANAGEMENT ROUTINES (CONT.) * * * * +-------------+ * I I * I SSTRTS I * I I * +------+------+ * I * +------------+------------+ * I I * +------+------+ +------+------+ * I I I I * I MOVEI I I SSTASU I * I I I I * +-------------+ +-------------+ * * * * +-------------+ * I I * I SSTSDA I * I I * +------+------+ * I * +-----------+------------+ * I I * +------+------+ +------+------+ * I I I I * I SSTASU I I RFL I * I I I I * +-------------+ +-------------+ * * * SSTRTS -- REMOVE TABLE SPACE * MOVEI -- MOVE WORDS (INDIRECT ADDRESSING) * SSTASU -- ACCUMULATE STORAGE USED * SSTSDA -- SET DYNAMIC TABLE AREA * RFL -- REQUEST FIELD LENGTH * *E * 5.0 TABLE STRUCTURES * * 5.1 POINTER TABLE-- * * THIS TABLE CONTAINS POINTERS TO IMPORTANT PARTS OF THE PROGRAM. * *T 42/NAME,18/ADDR * * NAME - DISPLAY CODE POINTER NAME. * ADDR - POINTER VALUE. * * * 5.2 WORKLIST REQUEST QUEUE * * THIS IS A ONE WORD ITEM THAT HAS A BIT SET FOR EACH TYPE ZERO * WORKLIST REQUEST TO BE EXECUTED. * *T 12/RES,48/BIT$MAP * * RES - UNUSED FIELD. * BIT$MAP - THE FIRST BIT ON THE LEFT CORRESPONDS TO THE FIRST * WORKLIST DEFINITION AND HAS THE HIGHEST PRIORITY, THE * SECOND BIT CORRESPONDS TO THE SECOND WORKLIST, AND SO * ON. *E * 5.3 WORKLIST DEFINITION TABLE * * THIS TABLE CONTAINS THE WORKLIST DEFINITIONS FOR THE PROGRAM. * * THERE ARE THREE FORMATS FOR AN ENTRY IN THIS TABLE. THEY ARE AS * FOLLOWS: * * WORKLIST TYPE ZERO -- RESIDENT ROUTINE * *T 12/TYPE0,30/RES,18/RADD * * TYPE0 - WORKLIST TYPE (SET TO ZERO) * RES - UNUSED FIELD * RADD - ROUTINE ENTRY POINT ADDRESS * * * WORKLIST TYPE ONE -- STATUS WORKLIST DRIVEN. * *T 12/TYPE1,30/RES,18/CADDR * * TYPE1 - WORKLIST TYPE (SET TO ONE) * RES - UNUSED FIELD * CADDR - INTERUPT CELL ADDRESS * * * WORKLIST TYPE TWO -- OVERLAY RESIDENT ROUTINE. * *T 12/TYPE2,12/OVNUM,12/OVEPT,24/RES * * TYPE2 - WORKLIST TYPE (SET TO TWO) * OVNUM - OVERLAY NUMBER * OVEPT - OVERLAY ENTRY POINT NUMBER * RES - UNUSED FIELD *E * 5.4 QUEUE TO WORKLIST DEFINITION TABLE * * EACH ENTRY IN THIS TABLE CORRESPONDS TO A TABLE/QUEUE MANAGED * BY THE TABLE MANAGER. EACH ENTRY CONTAINS A POINTER TO THE * WORKLIST DEFINITION ENTRY THAT MUST BE INVOKED WHEN AN ENTRY IS * MADE IN THE QUEUE. * *T TBL1 60/WLD$NUM *T TBL2 60/WLD$NUM * * WLD$NUM - WORKLIST DEFINITION NUMBER * *E * 5.5 STATUS WORKLIST DEFINITION * STATUS WORKLIST DEFINITIONS * * THIS TABLE CONTAINS THE CURRENT CONDITIONS TO BE WATCHED FOR, * THE MONITORS AND THE ADDRESSES TO BE EXECUTED WHEN THE * CONDITIONS CHANGE. * *T WORD1 6/RES,18/ADDR1,18/ADDR2,18/RADDR *T WORD2 60/INIT1 *T WORD3 60/INIT2 * * RES - UNUSED FIELD * ADDR1 - ADDRESS OF FIRST CELL TO BE WATCHED * ADDR2 - ADDRESS OF SECOND CELL TO BE WATCHED * RADDR - ENTRY POINT ADDRESS OF ROUTINE TO CALL * INIT1 - INITIAL VALUE OF FIRST CELL * INIT2 - INITIAL VALUE OF SECOND CELL * * * 5.6 OVERLAY DEFINITION TABLE * * THIS TABLE IS THE INDEX FOR THE OVERLAY FILE. IT CONTAINS THE * OVERLAY NAMES, ENTRY POINTS, AND DISK ADDRESSES FOR THE * OVERLAYS. * *T WORD1 42/OVNAME,18/FWA *T WORD2 12/LEVEL,12/RES,18/PADDR,18/LWA * * OVNAME - OVERLAY NAME * FWA - FIRST WORD ADDRESS OF OVERLAY * LEVEL - OVERLAY LEVEL * RES - UNUSED FIELD * PADDR - RELATIVE PRU ADDRESS ON OVERLAY FILE * LWA - LAST WORD ADDRESS OF OVERLAY *E * 5.7 OVERLAY CONTROL ITEMS * * THE FOLLOWING ITEMS ARE USED FOR LOADING AND EXECUTING OVERLAYS. * * OVNUM = PRIMARY LEVEL NUMBER OF OVERLAY CURRENTLY EXECUTING * OVENUM = OVERLAY ENTRY POINT NUMBER TO EXECUTE * OVC = NUMBER OF OVERLAY REQUESTS MADE * * * 5.8 OVERLAY REQUEST TABLE * * THIS IS A BIT MAP WHERE EACH BIT CORRESPONDS TO AN OVERLAY THAT * NEEDS TO BE LOADED. * *T 12/RES,42/BIT$MAP * * RES - UNUSED FIELD * BIT$MAP - BEGINNING WITH THE LEFT MOST BIT: BIT ONE CORRESPONDS * TO OVERLAY ONE, BIT TWO TO OVERLAY TWO, AND SO ON. * * * 5.9 ROLLOUT TABLE * * THIS TABLE USED TO CHECK IF THERE ARE ANY OUTSTANDING EXTERNAL * REQUESTS BEING MADE. EACH ENTRY POINTS TO A WORD AND THE BIT * POSITION OF THE COMPLETE BIT. * *T WORD1 48/RES,12/ECOUNT *T WORD2+ 30/BPOS,30/WADDR * * RES - UNUSED FIELD * ECOUNT - ENTRY COUNT * BPOS - BIT POSITION OF COMPLETE BIT * WADDR - POINTER TO WORD CONTAINING COMPLETE BIT * *E * 5.10 TIMER REQUEST BLOCK * * THIS IS THE FORMAT OF THE BLOCK USED WHEN MAKING A TIMER REQUEST. * *T WORD1 48/RES,12/ECOUNT *T WORD2 18/RES,18/CNUM,24/RES *T WORD3 60/RES *T WORD4 24/FTIME,18/DELAY,18/QNUM * * RES - RESEVRED FOR USE BY PROGRAM (NVF/CS) * ECOUNT - ENTRY WORD COUNT (SET TO FOUR) * CNUM - CANCEL NUMBER * FTIME - FIRE TIME (TIME IN WHICH TO PUT THIS BLOCK INTO A Q) * DELAY - DELAY TIME (NUMBER OF SECONDS TO ADD TO CURRENT TIME * TO DETERMINE THE FIRE TIME) * QNUM - NUMBER OF THE QUEUE TO PLACE THIS BLOCK IN AFTER IT * HAS REACHED ITS FIRE TIME * * * 5.11 CURRENT TIME AND DAY * * THIS BLOCK CONTAINS THE CURRENT TIME AND DATE TO BE USED BY * SERVICES AND SCHEDULING, AND BY THE PROGRAM (NVF/CS) * *T WORD1 30/RES,30/PDATE *T WORD2 60/DDATE *T WORD3 60/DTIME *T WORD4 24/RTSEC,36/RTMIL *T WORD5 24/FTIME,36/RES * * RES - UNUSED FIELD * PDATE - PACKED DATE AND TIME * DDATE - DISPLAY CODED DATE * DTIME - DISPLAY CODED TIME * RTSEC - NUMBER OF SECONDS SINCE DEADSTART * RTMIL - MILLISECONDS * FTIME - NEXT FIRE TIME (WITH RELATIION TO RTSEC) *E * * 5.12 TYPICAL QUEUE ENTRY * * THE FOLLOWING IS THE FORMAT FOR A TYPICAL QUEUE ENTRY IN NVF * OR CS. * *T WORD1,48/RES,12/ECOUNT *T WORD2,60/ABHWORD *T WORD3,60/ENTRY *T WORD4,60/ * . * . * . *T,ECOUNT,60/ * * RES - USED BY PROGRAM * ECOUNT - ENTRY WORD COUNT * ABHWORD - APPLICTAION BLOCK HEADER WORD * ENTRY - BODY OF QUEUE ENTRY *E * 6.0 DEBUGGING TIPS * * THE FOLLOWING LIST ARE THINGS TO LOOK AT OR LOOK FOR WHEN READING * OR ANALYZING AN NVF/CS DUMP. THIS LIST IS NOT IN ANY SPECIFIC * ORDER. THE ITEMS THAT APPLY DEPEND ON WHAT THE PROBLEM IS. * * 1. FOR QUICK REFERENCE TO KEY PLACES IN A DUMP USE THE POINTER * TABLE WHICH SHOULD BE THE FIRST THING LOADED AFTER THE * LOADER TABLE. IT WILL POINT TO SUCH THINGS AS THE NSUP WORD * AND THE BEGINNING OF THE MANAGED TABLES POINTERS. * * 2. CHECK THE REPRIEVE BLOCK FOR ANY APPLICABLE INFORMATION. FOR * THE FORMAT OF THE BLOCK SEE THE NOS VOLUME 4 REFERENCE * MANUEL. * * 3. THE FIRST WORD RIGHT AFTER THE REPRIEVE BLOCK CONTAINS THE * CONTENTS OF *SYS=* JUST AFTER THE ABORT. * * 4. CHECK OVNUM, OVENUM, ORQ, AND ORC FOR THE STATE OF OVERLAY * LOADING. THESE ITEMS WILL TELL YOU SUCH THINGS AS WHAT * OVERLAY IS LOADED, WHICH ENTRY POINT IS BEING EXECUTED, AND * WHAT OVERLAYS STILL NEED TO BE LOADED * * 5. CHECK THE CONTENTS OF WCB, ABH, AND MSG BUFFERS. * * 6. CHECK FOR MANAGED TABLES CONTAINING DATA. THESE ARE ALL THE * TABLES WHOSE LENGTH VALUES ARE NON-ZERO. * * 7. CHECK THE CONTENTS OF MEMLOC. THIS WILL TELL YOU WHERE THE * MANAGED TABLE AREA BEGINS. * * 8. TO VERIFY THAT THE LOAD MAP MATCHES THE DUMP, THE BUILD DATE * AND TIME INDICATED IN THE COMMENT PORTION OF PROC *SSSPAT* * (IN THE LOAD MAP) SHOULD MATCH THE DATE AND TIME FOUND * RIGHT AFTER THE POINTER TABLE. * *E # *ENDTEXT *ENDIF # TITLE SSSPES - PROGRAM EXECUTION SEQUENCER. # BEGIN # SSSPES # # ** SSSPES - PROGRAM EXECUTION SEQUENCER. * * S. H. FISCHER. 81/08/27. * * THIS IS THE MAIN LOOP. * * PROC SSSPES * * ENTRY NONE. * * EXIT NEVER. * * METHOD TRY AND FIND WORK TO TO, IF NONE CALL IDLE ROUTINE * AND REPEAT. * # # **** PROC SSSPES - XREF LIST. # XREF BEGIN PROC NETCHEK; # CHECK WORKLIST PROCESSING COMPLETION # PROC SSCUTD; # UPDATE TIME OF DAY # PROC SSSESP; # EXECUTE STATUS PROGRAM # PROC SSSEWP; # EXECUTE WORKLIST PROGRAM # PROC SSSWNR; # WAIT NEW REQUEST # END # **** # ITEM ACTIVE B; TOP: # TOP OF MAIN LOOP # NETCHEK; # CHECK WORKLIST PROCESSING COMPLETION # SSCUTD; # UPDATE TIME OF DAY # SSSESP( ACTIVE ); # EXECUTE STATUS PROGRAM # IF ACTIVE THEN GOTO TOP; SSSEWP( ACTIVE ); # EXECUTE WORKLIST PROGRAM # IF ACTIVE THEN GOTO TOP; SSSWNR; # WAIT NEW REQUEST # GOTO TOP; END # SSSPES # TERM