DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Wang WCS documentation floppies

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Wang WCS documentation floppies

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦531f7d91b⟧ Wang Wps File

    Length: 56219 (0xdb9b)
    Types: Wang Wps File
    Notes: CPS/SDS/024               
    Names: »1463A «

Derivation

└─⟦fa4d101ea⟧ Bits:30005807 8" Wang WCS floppy, CR 0112A
    └─ ⟦this⟧ »1463A « 

WangText

%…00……00……00……00….…02……00……00….
.…05….…06…-…0a…-…0f…-…00…-…01…-…02…-…06…,…0a…,…0e…,…02…,
, ,…06…+…0b…+…01…+…06…*…08…*…09…*…0e…*…02…*…06…)…09…)…0c…)…00…) (…08…(…0c…(…0d…(…01…(…06…'…0a…'…86…1                                             …02…           …02… 
                 …02…        

…02…CPS/SDS/024

…02…850901 …02…
CAMPS SYSTEM FUNCTIONS
DETAILED DESIGN SPECIFICATION   ISSUE 2 CAMPS








4.2      S̲U̲B̲P̲A̲C̲K̲A̲G̲E̲ ̲S̲P̲E̲C̲I̲F̲I̲C̲A̲T̲I̲O̲N̲S̲



4.2.1    C̲S̲F̲ ̲U̲t̲i̲l̲i̲t̲y̲ ̲F̲u̲n̲c̲t̲i̲o̲n̲s̲



4.2.1.1  F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The CSF Utility Functions are grouped as shown on figure
         4.2.1.1-1.

         Except from the BUFFER MANAGER, the Utility Functions
         are mainly used by other CSF subpackages. The STATISTICS
         and TRACE functions are used for auditing purposes.

         Refer to Module Specifications 4.2.1.4.2 - 4.2.1.4.8.















































          FIGURE 4.2.1.1-1…01…CSF UTILITY FUNCTIONS


4.2.1.2  S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲



4.2.1.2.1    C̲S̲F̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         -   Reserve Buffer                    4.2.1.4.1.5.a
         -   Dismantle Buffer                  4.2.1.4.1.5.b
         -   Write Buffer                      4.2.1.4.1.5.c
         -   Read Buffer                       4.2.1.4.1.5.d
         -   Change Subprocess                 4.2.1.4.2.5.a
         -   Change Subprocess Attributes      4.2.1.4.2.5.b
         -   Reserve Variable                  4.2.1.4.2.5.c
         -   Release Variable                  4.2.1.4.2.5.d
         -   Read CSF Statistics               4.2.1.4.4.5.a
         -   CMON Trace                        4.2.1.4.6.5.b
         -   Init Trace                        4.2.1.4.6.5.c
         -   Get Report                        4.2.1.4.4.5.b



4.2.1.2.2    I̲n̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         -   New Buffer Reference              4.2.1.4.1.5.e
         -   Check Page Access                 4.2.1.4.2.5.e
         -   Allocate Resource                 4.2.1.4.5.5.a
         -   Release Resource                  4.2.1.4.5.5.b
         -   CSF Return                        4.2.1.4.7.5.b
         -   CSF Retire                        4.2.1.4.7.5.c
         -   CSF Trace                         4.2.1.4.6.5.a



4.2.1.2.3    C̲o̲r̲o̲u̲t̲i̲n̲e̲s̲

         -   Report Module                     4.2.1.4.3



4.2.1.2.4    S̲h̲a̲r̲e̲d̲ ̲C̲o̲r̲o̲u̲t̲i̲n̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         -   Get Buffer                        4.2.1.4.3.5.b



4.2.1.3  D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲


4.2.1.3.1    C̲S̲F̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲F̲l̲o̲w̲

         Refer to figure 4.1.3-4. This general control flow
         applies to the CSF procedures listed in section 4.2.1.2.1.



4.2.1.3.2    B̲u̲f̲f̲e̲r̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲F̲l̲o̲w̲

         Figure 4.2.1.3-1 shows how Buffer Manager module interacts
         with:

         -   QMON Subpackage
         -   Resource Module
         -   Access Module
         -   Trace Module

         Figure 4.2.1.3-2 shows the typical sequences for application
         processes using shared buffers.



4.2.1.3.3    R̲e̲p̲o̲r̲t̲ ̲G̲e̲n̲e̲r̲a̲t̲i̲o̲n̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲F̲l̲o̲w̲

         Figure 4.2.1.3-3 shows this flow. Refer also 4.2.1.7.3.

         The QMON SEND function can generate Queue Threshold
         Reports. The ALLOCATE RESOURCE function can generate
         QEL or HCB Threshold Reports when invoked by QMON and
         MMON respectively.

         When a report shall be generated, a Report Flag is
         set in the appropriate Control Block, and the Report
         PCF Semaphore is signalled. This activates the Report
         Module.



4.2.1.3.4    T̲r̲a̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲F̲l̲o̲w̲

         Refer to 4.1.1.7.3















































       FIGURE 4.2.1.3-1…01…BUFFER MANAGER CONTROL FLOW















































FIGURE 4.2.1.3-2…01…TYPICAL SEQUENCES FOR USE OF SHARED BUFFERS















































     FIGURE 4.2.1.3-3…01…REPORT GENERATION CONTROL FLOW


4.2.1.4  M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲s̲



4.2.1.4.1    B̲u̲f̲f̲e̲r̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲M̲o̲d̲u̲l̲e̲



4.2.1.4.1.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The Buffer Manager in UTIL Subpackage manages shared
         buffers as described in section 2.2.1.1 and 4.1.1.1
         a).

         The Buffer Manager module contains 5 functions, the
         functional descriptions of which can be found as follows:

         a)  Reserve Buffer:                   4.1.7.2.1.1
         b)  Dismantle Buffer:                 4.1.7.2.1.2
         c)  Write Buffer:                     4.1.7.2.1.3
         d)  Read Buffer:                      4.1.7.2.1.4
         d)  New Buffer Reference:             4.2.1.7.1



4.2.1.4.1.2 B̲u̲f̲f̲e̲r̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         Buffer Manager has 4 Package Interfaces:

         a)  Reserve Buffer:                   4.1.7.2.1.1
         b)  Dismantle Buffer:                 4.1.7.2.1.2
         c)  Write Buffer:                     4.1.7.2.1.3
         d)  Read Buffer:                      4.1.7.2.1.4

         and one Subpackage Interface:

         e)  New Buffer Reference              4.2.1.7.1



4.2.1.4.1.3 B̲u̲f̲f̲e̲r̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         Ref. figure 4.2.1.4.1-1.

         The components a) - d) are CSF Procedures.

         The e) component in an internal procedure


4.2.1.4.1.4 B̲u̲f̲f̲e̲r̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             a1) Queue Elements            4.1.4.1.1
             a2) Process Record            4.1.4.2.1

         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲

             b1) QEL. OWNER
             b2) QEL. OBJECT TYPE
             b3) QEL. OBJECT ̲REF
             b4) QEL. OBJECT ̲LINK (m)
             b5) SUBPROCESS

         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

         c1) S̲h̲a̲r̲e̲d̲ ̲B̲u̲f̲f̲e̲r̲ ̲A̲r̲r̲a̲y̲

             VAR SHARED ̲BUFFER ̲ARRAY:

             ARRAY(1..NUMBER ̲OF ̲SHARED ̲BUFFERS) OF SHARED BUFFER
             


         TYPE    SHARED ̲BUFFER=
                 RECORD

                     REFLINK:              POINTER
                                           List of re-
                                           ferencing QELs

                     REFCOUNT:             INTEGER;
                                           The number of QELS
                                           referencing this
                                           Buffer
                                           A zero refcount means
                                           that the buffer is
                                           free.

                     DATA:                 ARRAY(1.. MAX ̲BUFFER
                                           ̲SIZE) OF INTEGER

                 END;


         Ref. figure 4.2.1.4.1-2



         c2) C̲r̲e̲a̲t̲e̲ ̲Q̲E̲L̲ ̲P̲a̲r̲a̲m̲

             Used as parameter to the QMON function Create QEL.

             VAR     QEL ̲PARAM:            PRIMARY QEL

             INIT    QEL ̲PARAM.OBJECT ̲TYPE= BUFFER,



4.2.1.4.1.5 B̲u̲f̲f̲e̲r̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲D̲e̲s̲i̲g̲n̲

         Each of the components a)-d) is entered directly from
         the CSF Monitor Procedure. Each of these returns via
         CSF ̲RETURN.

         The last component e) is internal to CSF. It is called
         as a normal SWELL procedure.

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

         CSF ̲TRACE                         4.1.7.2.1.1.2
         CREATE ̲QEL                        4.2.2.7.2
         DISMANTLE ̲QEL                     4.2.2.7.3
         CHECK ̲PAGE ̲ACCESS                 4.2.1.7.2
         CSF ̲RETURN                        4.2.1.7.6
         CSF ̲RETIRE                        4.2.1.7.7

         a)  R̲e̲s̲e̲r̲v̲e̲ ̲B̲u̲f̲f̲e̲r̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲\̲

             Generate Trace Record.

             Check BUFFER ̲SIZE and retire if two large. Allocate
             a resource from Shared Buffer Pool. Return if pool
             empty. Create a QEL referencing it. Include QEL
             in reference list of buffer.

             Calculate buffer ref. and return.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         b)  D̲i̲s̲m̲a̲n̲t̲l̲e̲ ̲B̲u̲f̲f̲e̲r̲



             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Generate Trace Record. Find QEL and check ownership
             and object type. Retire if error. Remove QEL from
              buffer reference list and dismantle it. Decrement
             buffer reference count. If it becomes zero, the
             buffer is free, thus release it to Shared Buffer
             Pool. 

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         c)  W̲r̲i̲t̲e̲ ̲B̲u̲f̲f̲e̲r̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Generate Trace Record. Find QEL and check ownership
             and object type. Retire if error. Check SIZE, and
             adjust if too long. Move SIZE words to buffer at
             specified OFFSET.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         d)  R̲e̲a̲d̲ ̲B̲u̲f̲f̲e̲r̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Generate Trace Record. Find QEL and check ownership
             and object type. Retire if error. Check SIZE and
             adjust if too long. Check write access right to
             DESTINATION. Retire if error.
             Move SIZE words from buffer at specified OFFSET.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         e)  N̲e̲w̲ ̲B̲u̲f̲f̲e̲r̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲

             Ref. flowgram on figure 4.2.1.4.1-3















































       FIGURE 4.2.1.4.1-1…01…BUFFER MANAGER COMPONENTS















































             FIGURE 4.2.1.4.1-2…01…SHARED BUFFER



 NEW ̲BUFFER ̲REFERENCE(QEL:                 PRIMARY ̲QEL)


 START


 BUF = QEL.OBJECT ̲REF


 INCREMENT(BUF.REFCOUNT)


 QEL.OBJECT ̲LINK = BUF. REFLINK

 BUF.REFLINK = QEL


 RETURN (OK)



























 FIGURE 4.2.1.4.1-3…01…NEW BUFFER REFERENCE FLOWGRAM


4.2.1.4.2    A̲C̲C̲E̲S̲S̲ ̲M̲o̲d̲u̲l̲e̲



4.2.1.4.2.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The Access Module in UTIL Subpackage contains a set
         of functions related to access control and access synchronization.

         The main area of responsibility is subprocess management
         as described in section 4.1.1.1.

         The Access Module contains 5 functions, the functional
         specifications of which can be found as follows:


         a)  Change Subprocess                4.1.7.2.1.5
         b)  Change Subprocess Attributes     4.1.7.2.1.6
         c)  Reserve Variable                 4.1.7.2.1.7
         d)  Release Variable                 4.1.7.2.1.8
         e)  Check Page Access                4.2.1.7.2



4.2.1.4.2.2 A̲c̲c̲e̲s̲s̲ ̲M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         Access Module has 4 Package Interfaces:


         a)  Change Subprocess                4.1.7.2.1.5
         b)  Change Subprocess Attributes     4.1.7.2.1.6
         c)  Reserve Variable                 4.1.7.2.1.7
         d)  Release Variable                 4.1.7.2.1.8

         and one Subpackage Interface:

         e)  Check Page Access                4.2.1.7.2



4.2.1.4.2.3 A̲c̲c̲e̲s̲s̲ ̲M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         Ref. figure 4.2.1.4.2-1

         The components a)-d) are CSF procedures.

         The component e) is an internal procedure.





4.2.1.4.2.4 A̲c̲c̲e̲s̲s̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             a1)     Process Record           4.1.4.2.1
             a2)     Subprocess Records       4.1.4.1.2
             a3)     Subprocess Attributes    4.1.6.1.1.


         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲

             b1)     PROCESS RECORD
             b2)     SUBPROCESS ̲RECORD.PROCESS (m)
             b3)     SUBPROCESS ̲RECORD.FUNCTIONS (m)
             b4)     SUBPROCESS ̲RECORD.PROFILE (m)
             b5)     SUBPROCESS ̲RECORD.PROCESS ̲TYPE (m)
             b6)     SUBPROCESS ̲RECORD.QEL ̲CLAIM (m)


         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

         c1) L̲o̲c̲k̲ ̲C̲o̲u̲n̲t̲s̲

             VAR LOCK ̲COUNTS:
                 ARRAY(1..NUMBER ̲OF ̲VAR) OF INTEGER
             INIT LOCK ̲COUNTS(1..NUMBER ̲OF ̲VAR) = 1


             The Lock Count for a Reservation Variable contains
             the negative number of processes awaiting access
             to the variable.



4.2.1.4.2.5 A̲c̲c̲e̲s̲s̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Each of the components a)-d) is a CSF Procedure. The
         last component e) is an internal procedure.

         The Variable Reservation procedures use a PCF Semaphore
         per variable to synchronize access. The PCF Semaphore
         is only used when more than one process attempts to
         access the variable concurrently.

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

         CSF ̲RETURN                           4.2.1.7.6
         CSF ̲RETIRE                           4.2.1.7.7
         CSF ̲TRACE                            4.1.7.2.1.12
         AWAIT ̲PCF ̲SEM                        4.1.5.2
         SIGNAL ̲PCF ̲SEM                       4.1.5.1
         PM ̲CHECK ̲PAGE ̲ACCESS                 (b) TBD



         a)  C̲h̲a̲n̲g̲e̲ ̲S̲u̲b̲p̲r̲o̲c̲e̲s̲s̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Find subprocess record corresponding to SUBPROCESS
             ̲ID. If array reference error or subprocess does
             not belong to this process, retire. Otherwise change
             SUBPROCESS, SUBPROCESS ̲ID and CAPABILITIES of PROCESS
             RECORD.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         b)  C̲h̲a̲n̲g̲e̲ ̲S̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲A̲t̲t̲r̲i̲b̲u̲t̲e̲s̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Check that calling subprocess has capability to
             the function. Retire if not. Find subprocess record
             corresponding to SUBPROCESS ̲ID. Retire if array
             reference error.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

             Update profile.

             If the boolean 'profile flag' in subprocess attributes
             is false, the other attributes of the subprocess
             are updated.

         c)  R̲e̲s̲e̲r̲v̲e̲ ̲V̲a̲r̲i̲a̲b̲l̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Generate Trace Record. Check that VAR ̲REF within
             limits. If not, retire. Decrement corresponding
             lockcount. If it becomes negative, and WAIT is
             true, unlock CSF HW-Semaphore and await PCF-Semaphore
             corresponding to VAR ̲REF. Lock CSF HW-semaphore
             and return.
             If WAIT is false, just return.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None



         d)  R̲e̲l̲e̲a̲s̲e̲ ̲V̲a̲r̲i̲a̲b̲l̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Generate Trace Record. Check that VAR ̲REF within
             limits. If not, retire.
             Increment corresponding lockcount. If it is not
             positive then, signal the associated PCF ̲semaphore.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         e)  C̲h̲e̲c̲k̲ ̲P̲a̲g̲e̲ ̲A̲c̲c̲e̲s̲s̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Call the PM ̲CHECK ̲PAGE ̲ACCESS procedure.















































       FIGURE 4.2.1.4.2-1…01…ACCESS MODULE COMPONENTS


4.2.1.4.3    R̲e̲p̲o̲r̲t̲ ̲M̲o̲d̲u̲l̲e̲



4.2.1.4.3.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The Report Module generates warning reports on behalf
         of other CSF modules and sends the reports to the Supervisor
         Report Queue.

         The buffer allocation procedure Get Buffer is available
         for MMON coroutines as a shared coroutine procedure.



4.2.1.4.3.2 R̲e̲p̲o̲r̲t̲ ̲M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         a)  A̲c̲t̲i̲v̲a̲t̲i̲o̲n̲

             -   The Report Module is invoked via the PCF Semaphore.
                 Ref. 4.2.1.7.3.

             -   Get Buffer. Refer 4.2.1.7.8

         b)  S̲u̲p̲e̲r̲v̲i̲s̲o̲r̲ ̲R̲e̲p̲o̲r̲t̲ ̲Q̲u̲e̲u̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

             Ref. 4.1.7.2.1.13

         c)  B̲u̲f̲f̲e̲r̲ ̲T̲i̲m̲e̲o̲u̲t̲

             Ref. 4.2.1.7.9



4.2.1.4.3.3 R̲e̲p̲o̲r̲t̲ ̲M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         a)  Report Coroutine is a Coroutine in the CSF Process,
             cf 4.1.2 d

         b)  Get Buffer is a reentrant coroutine procedure.



4.2.1.4.3.4 R̲e̲p̲o̲r̲t̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲s̲

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             Buffer Timeout Count      4-1-4-3-1
             Buffer Timeout Semaphore  4-1-4-3-1



         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲

             BUFFER ̲TIMEOUT ̲COUNT (m)
             BUFFER ̲TIMEOUT ̲SEMAPHORE

         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             c1)     R̲e̲p̲o̲r̲t̲

             VAR REPORT:
                     RECORD
                        HEAD:    REPORT ̲HEAD;

                        INDEX:   INTEGER;
                                 Identification of incarnation
                                 with report type, e.g.
                                 Main Queue Number

                        VALUE:   INTEGER;
                                 The current Threshold
                                 Value


                     END



             c2) Q̲U̲E̲U̲E̲ ̲P̲A̲R̲A̲M̲A̲T̲E̲R̲S̲

                 VAR
                     REPORT ̲SEND ̲PARAMS:   SEND ̲PARAMS
                     CSF ̲REPORT ̲QUEUE,
                     REPORT ̲QUEUE:         QUEUE ̲REFERENCE

                 ATTRIBUTES:               QEL ̲ATTRIBUTES

             C3)     R̲e̲p̲o̲r̲t̲ ̲C̲o̲r̲o̲u̲t̲i̲n̲e̲ ̲R̲e̲c̲o̲r̲d̲

             VAR     REPORT ̲COROUTINE:

                        RECORD

                                 HEAD:     COROUTINE
                                           ̲RECORD

                                 RETURN:   INTEGER


                        END


         The return field is used by the GET ̲BUFFER
         procedure





4.2.1.4.3.5 R̲e̲p̲o̲r̲t̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

         AWAIT ̲SYNCEL                      4.1.7.2.6.7
         GET ̲REPORT                        4.2.1.4.4.5 b
         READ ̲TIME                         4.1.7.2.3.5
         SEND                              4.1.7.2.2.5
         RESERVE ̲BUFFER                    4.1.7.2.1.1
         DISMANTLE ̲BUFFER                  4.1.7.2.1.2
         WRITE ̲BUFFER                      4.1.7.2.1.3
         DISMANTLE                         4.1.7.2.2.4

         a)  R̲e̲p̲o̲r̲t̲ ̲C̲o̲r̲o̲u̲t̲i̲n̲e̲
             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Awaits a signal in Report-syncel. Then calls the
             GET ̲REPORT in order to obtain the contents of the
             report.

             Gets a shared buffer and writes report into it.

             The buffer is sent to Supervisor Report Queue and
             dismantled.

             F̲l̲o̲w̲g̲r̲a̲m̲

             Ref figure 4.2.1.4.3-1

         b)  G̲e̲t̲ ̲B̲u̲f̲f̲e̲r̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Attempts to reserve a shared buffer. If no buffer
             available, it increments the BUFFER ̲TIMEOUT ̲COUNT
             and waits in BUFFER ̲TIMEOUT ̲SEMAPHORE for a signal
             from Timer Monitor.

             This is repeated until a buffer is available.

             F̲l̲o̲w̲g̲r̲a̲m̲

             Refer Figure 4.2.1.4.3-2.


 REPORT ̲COROUTINE


 START


 REPORT ̲COROUTINE LOOP


         AWAIT ̲SYNCEL(REPORT ̲SYNCEL)


         GET ̲REPORT(REPORT ̲TYPE, VALUE, INDEX)

         CC NE OK ?


         PUT REPORT ̲TYPE, VALUE, INDEX into REPORT

         READ ̲TIME(TOC ̲FORMAT, REPORT, TOC)

         GET ̲BUFFER(  ) (BUFFER)


         WRITE ̲BUFFER(BUFFER, REPORT, CSF ̲REPORT ̲SIZE,
         1)

         SEND(REPORT ̲SEND ̲PARAMS, BUFFER, REPORT ̲QUEUE)

         DISMANTLE ̲BUFFER (BUFFER)


 END REPORT ̲COROUTINE LOOP


 STOP










   FIGURE 4.2.1.4.3-1…01…REPORT COROUTINE FLOWGRAM


 PROCEDURE GET ̲BUFFER (  )(BUFFER: BUFFER ̲REFERENCE)

 START

 SAVE LINK in COROUTINE.RETURN
 GET ̲A ̲BUFFER LOOP

         CASE RESERVE ̲BUFFER(CSF ̲REPORT ̲SIZE,
                             CSF ̲REPORT ̲QUEUE)
                             (BUFFER, CC): ERROR ̲OK


                 OK?    EXIT

             ERROR?     INCREMENT(BUFFER ̲TIMEOUT ̲COUNT)

                        WAIT ̲SEMAPHORE(BUFFER ̲TIMEOUT
                        ̲SEMAPHORE)






         END CASE RESERVE ̲BUFFER

 END GET ̲A ̲BUFFER LOOP



 RETURN   (COROUTINE.RETURN)


 STOP












      FIGURE 4.2.1.4.3-2…01…GET BUFFER FLOWGRAM


4.2.1.4.4    C̲o̲l̲l̲e̲c̲t̲i̲o̲n̲ ̲M̲o̲d̲u̲l̲e̲



4.2.1.4.4.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Contains functions for reading and resetting CSF Statistics
         and Report Information.

         a)  R̲e̲a̲d̲ ̲C̲S̲F̲ ̲S̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

             Ref 4.1.7.2.1.9
             
             The function is called by STP Package, ref (i).

         b)  G̲e̲t̲ ̲R̲e̲p̲o̲r̲t̲

             The function is called by the Report Module, ref
             4.2.1.4.3. It finds the next pending report and
             delivers its type, index and threshold value.



4.2.1.4.4.2 C̲o̲l̲l̲e̲c̲t̲i̲o̲n̲ ̲M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         a)  R̲e̲a̲d̲ ̲C̲S̲F̲ ̲S̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

             Ref 4.1.7.2.1.9

         b)  G̲e̲t̲ ̲R̲e̲p̲o̲r̲t̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             b1) GET ̲REPORT (            )
                            (REPORT ̲TYPE:  (QUEUE ̲REPORT,
                                           RESOURCE ̲REPORT),
                            INDEX,         Identification Number
                                           within report-type,
                                           e.g. Main Queue Index
                            VALUE:         The threshold value
                                           triggering 
                              INTEGER      the report,
                            CC:            COMPLETION ̲CODE):
                                           ERROR ̲OK


         b2) MON(CSF,GET ̲REPORT, R0, R1, R2, R7):ERROR ̲OK


             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

                 NA

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R0  REPORT ̲TYPE
             R1  INDEX
             R2  VALUE
             R7  CC                          (OK,
                                             No PENDING REPORT)

             R3,R4,R5,R6 destroyed



4.2.1.4.4.3 C̲o̲l̲l̲e̲c̲t̲i̲o̲n̲ ̲M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         Ref figure 4.2.1.4.4-1.
         The components a)-b) are CSF procedures.



4.2.1.4.4.4 C̲o̲l̲l̲e̲c̲t̲i̲o̲n̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             a1) Main Queue Array            4.2.2.5.2
             a2) Resource Pool Array         4.2.1.5.1
             a3) Process Statistics Array    4.1.4.2.1

         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲e̲

             b1)     MAIN ̲QUEUE.TWARNING
             b2      MAIN ̲QUEUE.PENDING ̲REPORT (m)
             b3)     MAIN ̲QUEUE.SEND.COUNT (m)
             b4)     MAIN ̲QUEUE.PMLENGTH (m)
             b5)     MAIN ̲QUEUE.IDLE ̲TIME (m)
             b6)     RESOURCE ̲POOL.STATISTICS (m)
             b7)     RESOURCE ̲POOL.PENDING ̲REPORT (m)
             b8)     PROCESS STATISTICS (m)


         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             NA



4.2.1.4.4.5 C̲o̲l̲l̲e̲c̲t̲i̲o̲n̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Each of the components a)-b) is entered directly from
         the Monitor Procedure CSF. They both return via CSF
         ̲RETURN.

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             CSF ̲RETIRE                      4.2.1.7.7
             CSF ̲RETURN                      4.2.1.7.6
             CHECK ̲PAGE ̲ACCESS               4.2.1.7.2

         a)  R̲e̲a̲d̲ ̲C̲S̲F̲ ̲S̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Check for buffer address error. Retire if error.
             Check statistics type. Retire if not legal. Check
             FIRST, LAST bounds. Retire if not within limits.
             Move the appropriate statistics information to
             output buffer and reset statistics counters.

             F̲l̲o̲w̲g̲r̲a̲m̲

             Ref figure 4.2.1.4.4-2

         b)  G̲e̲t̲ ̲R̲e̲p̲o̲r̲t̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Searches all Main Queue Control Blocks and all
             Resource Pools until it finds one with REPORT ̲PENDING
             = TRUE. If none are found, error return is made.
             Otherwise the report parameters found are returned.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None



         c)  P̲u̲t̲ ̲p̲r̲o̲c̲e̲s̲s̲ ̲s̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

             PUT ̲PROCESS ̲STATISTICS  (FIRST,
                                     LAST, COUNT: INTEGER)
                                     (BUFFER: POINTER,
                                     LAST, COUNT: INTEGER)

             N̲a̲r̲r̲a̲t̲i̲v̲e̲

             Pointer to FIRST is found. The statistics record
             is moved from this pointer to specified buffer.
             The pointers are updated.

             This is repeated until the statistics record specified
             by LAST has been moved or the total number of words
             MOWED have reached COUNT.RETIRE if any errors.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         d)  P̲u̲t̲ ̲q̲u̲e̲u̲e̲ ̲s̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

             As put process statistics but works on main queue
             array.

         e)  P̲u̲t̲ ̲r̲e̲s̲o̲u̲r̲c̲e̲ ̲s̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

             As put process statistics but works on resource
             pool array.


















































     FIGURE 4.2.1.4.4-1…01…COLLECTION MODULE COMPONENTS



 READ ̲CSF ̲STATISTICS(STATISTICS ̲TYPE:      (PROCESS
                                           ̲STATISTICS,
                                           QUEUE ̲STATISTICS,
                                           RESOURCE
                                           ̲STATISTICS),
                 FIRST,LAST,COUNT:         INTEGER)
                 (BUFFER:                  ARRAY(1..COUNT)OF
                                           INTEGER,
                 LAST,COUNT:               INTEGER,
                 CC:                       COMPLETION
                                           ̲CODE):ERROR
                                           ̲OK

 START

 CHECK ̲PAGE ̲ACCESS(BUFFER,COUNT,WRITE ̲ACCESS) NE OK?

                                 CC = BUFFER ̲ADDRESS
                                 ̲ERROR

 CASE STATISTICS ̲TYPE
                                 put ̲process ̲statistics
                                 (FIRST,LAST, COUNT)(BUFFER)
         PROCESS ̲STATISTICS?     NEXT GT NO ̲OF ̲PROCESSES
                                 ?

                                 p̲u̲t̲ ̲p̲r̲o̲c̲e̲s̲s̲ ̲s̲t̲a̲t̲i̲s̲t̲i̲c̲s̲
                                 ̲

                                 PUT ̲queue ̲statistics
                                 (FIRST, LAST, COUNT)(BUFFER)
         QUEUE ̲STATISTICS?       NEXT GT NO ̲OF ̲MAIN
                                 ̲QUEUES?

                                 p̲u̲t̲ ̲q̲u̲e̲u̲e̲ ̲s̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

         RESOURCE ̲STATISTICS?    put ̲resource ̲statistics
                                 (FIRST, LAST, COUNT)(BUFFER)

                                 p̲u̲t̲ ̲r̲e̲s̲o̲u̲r̲c̲e̲ ̲s̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

         OTHERWISE?

 end case STATISTICS ̲TYPE

 CSF ̲RETURN(LAST,COUNT,BUFFER, CC, OK)



 STOP
 FIGURE 4.2.1.4.4-2…01…READ CSF STATISTICS FLOWGRAM


4.2.1.4.5    R̲e̲s̲o̲u̲r̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲



4.2.1.4.5.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Utility functions for CSF used to manage internal pools
         of resources, cf 4.1.1.1.e.

         Contains two functions:

         a)  Allocate Resource, cf 4.2.1.7.4
         b)  Release Resource, cf 4.2.1.7.5



4.2.1.4.5.2 R̲e̲s̲o̲u̲r̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The Resource Module has two Subpackage Interfaces:

         a)  Allocate Resource, cf 4.2.1.7.4
         b)  Release Resource, cf 4.2.1.7.5

         The module generates Warning Reports using the Generate
         Report interface 4.2.1.7.3.



4.2.1.4.5.3 R̲e̲s̲o̲u̲r̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         The components a) and b) are internal procedures.

         Ref figure 4.2.1.4.5-2



4.2.1.4.5.4 R̲e̲s̲o̲u̲r̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             a1)     Queue Elements          4.1.4.1.1
             a2)     Handle Control Blocks   4.2.4.5.1
             a3)     Shared Buffer           4.2.1.4.1.3 c1
             a4)     Resource Pool           4.2.1.5.1

         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲

             b1)     QEL.NEXT
             b2)     HCB.NEXT
             b3)     SHARED ̲BUFFER.NEXT
             B4)     RESOURCE ̲POOL, all fields



         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             NA



4.2.1.4.5.5 R̲e̲s̲o̲u̲r̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         The Resource Module consists of two separate procedures,
         cf figure 4.2.1.4.5-2.

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

         SIGNAL ̲PCF ̲SEM                      4.1.5.1

         a)  A̲l̲l̲o̲c̲a̲t̲e̲ ̲R̲e̲s̲o̲u̲r̲c̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Find POOL from Resource Type. Error return if pool
             empty. Decrement free count and update statistics
             information. Generate Threshold Warning Report
             if necessary. Then take first element in pool free
             list.

             F̲l̲o̲w̲g̲r̲a̲m̲

             Ref figure 4.2.1.4.5-3

         b)  R̲e̲l̲e̲a̲s̲e̲ ̲R̲e̲s̲o̲u̲r̲c̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Find Pool from Resource Type.
             Insert resource into free list and increment free
             count. If larger than enable threshold, set warning
             enable to true.

             F̲l̲o̲w̲g̲r̲a̲m̲

             Ref figure 4.2.1.4.5-4















































      FIGURE 4.2.1.4.5-2…01…RESOURCE MODULE COMPONENTS



 ALLOCATE ̲RESOURCE(RESOURCE ̲TYPE: (QEL ̲RESOURCE,HANDLE
 ̲RESOURCE,
                                   BUFFER ̲RESOURCE))
                     (RESOURCE:    POINTER):ERROR ̲OK

 START

 POOL = POOL ̲ARRAY(RESOURCE ̲TYPE)

 POOL.FREE ̲COUNT LE 0 ?          RETURN(ERROR)


 INCREMENT(POOL.ALLOCATE ̲COUNT)

 DECREMENT(POOL.FREE ̲COUNT) GE POOL.MIN ̲FREE ̲COUNT?

 POOL.MIN ̲FREE ̲COUNT = POOL.FREE ̲COUNT


 POOL.FREE ̲COUNT GT POOL.WARNING ̲THRESHOLD or
                                               ?
 POOL.WARNING ̲ENABLE EQ FALSE

 POOL.WARNING ̲ENABLE = FALSE

 POOL.REPORT ̲FLAG = TRUE

 SIGNAL ̲PCF ̲SEM(CSF ̲REPORT ̲SEM, 0)


 RESOURCE = POOL.FREE ̲LIST

 POOL.FREE ̲LIST = RESOURCE.NEXT

 RETURN(OK)


 STOP







  FIGURE 4.2.1.4.5-3…01…ALLOCATE RESOURCE FLOWGRAM


 RELEASE ̲RESOURCE(RESOURCE ̲TYPE:           (QEL ̲RESOURCE,HANDLE
                                           ̲
                                           RESOURCE,
                                           BUFFER ̲RE-
                                           SOURCE),

                 RESOURCE:                 POINTER)

 START


 POOL = POOL ̲ARRAY(RESOURCE ̲TYPE)

 RESOURCE.NEXT = POOL.FREE ̲LIST

 POOL.FREE ̲LIST = RESOURCE


 INCREMENT(POOL.FREE ̲COUNT) LE POOL.ENABLE ̲THRESHOLD?

 POOL.WARNING ̲ENABLE = TRUE



 RETURN(OK)






















FIGURE 4.2.1.4.5-4…01…RELEASE RESOURCE FLOWGRAM…86…1         …02…   …02…   …02…   …02…                    
     …02…                 
4.2.1.4.6    T̲r̲a̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲



4.2.1.4.6.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

 The Trace Module generates Trace Records as described
 in 4.1.1.7.

 The module contains the following functions:

 a)      CSF Trace,  refer 4.1.7.2.1.12
 b)      CMON Trace, refer 4.1.7.2.1.10
 c)      Init Trace, refer 4.1.7.2.1.11
 d)      USER Trace, refer 4.1.7.2.1.17



4.2.1.4.6.2 T̲r̲a̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

 Trace Module has the following Package Interfaces:

 a)      CSF Trace,  refer 4.1.7.2.1.12
 b)      CMON Trace, refer 4.1.7.2.1.10
 c)      Init Trace, refer 4.1.7.2.1.11
 d)      USER Trace, refer 4.1.7.2.1.17



4.2.1.4.6.3 T̲r̲a̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

 Trace Module has 3 components:

 CSF procedures:

 -       CMON ̲TRACE  cf 4.2.1.4.4.5.c
 -       INIT ̲TRACE  cf.4.2.1.4.4.5.a
 -       USER ̲TRACE  cf.4.2.1.4.4.5.d

 Internal procedure:

 -       CSF ̲TRACE   cf.4.2.1.4.4.5.b





4.2.1.4.6.4 T̲r̲a̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             a1) Function Descriptor           4.1.6.1.1
             a2) Data Descriptor               4.1.6.1.1
             a3) CMON Trace Param              4.1.6.1.1
             a4) LOG ̲DATA              (e)     3.4.2.1
             a5) RECORD ̲DESCRIPTOR     (e)     3.4.1.1

         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲

             NA

         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             c1) L̲O̲G̲ ̲P̲a̲r̲a̲m̲e̲t̲e̲r̲s̲

                 VAR

                 NO ̲OF ̲BLOCKS:                 INTEGER;

                     Specifies no. of block in LOG file initialized
                     as part of UTILITY functions initialization.

                 LOG ̲REF:                      POINTER;

                     A reference to the LOG DESCRIPTOR.
                     Initialized as part of UTILITY functions
                     initialization.

                 IDENT:                        INTEGER

                     identification of call
                     initialization:           None

                 PRIO:                         INTEGER;

                     Priority of call
                     Initialization: None

                 DATA ̲REF:                     POINTER;

                     A reference to the DATA ̲DESCRIPTOR.

                     Initialized as part of UTILITY functions
                     initialization.


             c2) L̲O̲G̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲o̲r̲

                 VAR

                 LOG ̲DESCRIPTOR:               LOG ̲DATA;

                 DATA ̲DESCRIPTOR:              RECORD ̲DESCRIPTOR



4.2.1.4.6.5 T̲r̲a̲c̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         INIT ̲LOG    cf. (e) 3.1.2.1.1
         LOG         cf. (e) 3.1.2.1.2

         a)  I̲n̲i̲t̲ ̲T̲r̲a̲c̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲:̲

             The Data is initialized with specified FDCB ̲INDEX,NO
             ̲OF ̲BLOCKS and a reference to LOG ̲DESCRIPTOR.

             FLOWGRAM: None

         b)  C̲S̲F̲ ̲T̲r̲a̲c̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             The DATA descriptor is updated according to the
             specified parameters. Then a Log file record is
             made

             FLOWGRAM: None









                    FIGURE 4.2.1.4.6-1



         c) C̲M̲O̲N̲ ̲T̲r̲a̲c̲e̲ ̲

             The Data descriptor is updated according to the
             specified TRACE ̲PARAMS. Then a Log file record
             is made.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None



4.2.1.4.7    C̲S̲F̲ ̲M̲o̲n̲i̲t̲o̲r̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲M̲o̲d̲u̲l̲e̲



4.2.1.4.7.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The module contains three functions:

         a)  CSF Entry
             Entry point for the Monitor Procedure CSF, refer
             4.1.2b).
             It checks the function code and branches to the
             specified function.

         b)  CSF Return.
             Normal return point for a CSF procedure.
             Refer 4.2.1.7.b.

         c)  CSF Retire
             Fatal error return point for a CSF procedure and
             for the SCM procedures in QMON and MMON.
             Refer 4.2.1.7.7.

         The CSF Return and CSF Retire perform the necessary
         clean up before returning or retiring.



4.2.1.4.7.2 C̲S̲F̲ ̲M̲O̲D̲U̲L̲E̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         a)  M̲o̲n̲i̲t̲o̲r̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲C̲S̲F̲

             The Monitor Procedure CSF is called from Application
             Processes and from the CSF Process, cf 4.1.2.d



             The call is:

         MON(CSF, function code, register parameters, R7):ERROR-OK

         f̲u̲n̲c̲t̲i̲o̲n̲ ̲c̲o̲d̲e̲ is a constant parameter
         r̲e̲g̲i̲s̲t̲e̲r̲ ̲p̲a̲r̲a̲m̲e̲t̲e̲r̲s̲ can be any subset of registers
         RO-R6.

         b)  CSF Return                        Refer 4.2.1.7.6
         c)  CSF Retire                        Refer 4.2.1.7.7



4.2.1.4.7.3 C̲S̲F̲ ̲M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         Refer Figure 4.2.1.4.7-1.

         CSF Entry is a Monitor Procedure.
         CSF Return and CSF Retire are internal procedures



4.2.1.4.7.4 C̲S̲F̲ ̲M̲O̲D̲U̲L̲E̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             CSF HW Semaphore                  4.1.4.1.3

         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲

             CSF ̲HW ̲SEM                        (m)

         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             NA



4.2.1.4.7.5 C̲S̲F̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             RETURN FROM CLEAN                 (d) 4.1.3
             RETIRE                            (d) 4.1.3
             DISABLE INTERRUPTS                    4.1.5.3



         a)  C̲S̲F̲ ̲E̲N̲T̲R̲Y̲

             Disable Interrupts. Lock CSF HW Semaphore. Branch
             on function code to specified function. If illegal
             function code, retire.

         b)  C̲S̲F̲ ̲R̲e̲t̲u̲r̲n̲

             Unlock CSF HW Semaphore. Then return from Monitor
             Call with registers and exitnumber as specified.

         c)  C̲S̲F̲ ̲R̲E̲T̲I̲R̲E̲

             Unlocks the CSF HW-SEMAPHORE. Then calls Retire
             with cause codes as follows:

             -   Primary:  Subpackage ID
             -   Secondary:  CC
             -   Tertiary:  LINK

             and with the boolean Restart Allowed = false.

             After return from Retire, it calls Return from
             Clean.















































           FIGURE 4.2.1.4.7-1…01…MODULE COMPONENTS


4.2.1.4.8    S̲e̲g̲m̲e̲n̲t̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲M̲o̲d̲u̲l̲e̲



4.2.1.4.8.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The segment manager in util subpackage manages the
         segments described in section 2.2.1.8.

         The segment manager module contains 13 functions, the
         functional description of which can be found as follows:
         

         a)  CONVERT ̲OB7 ̲REP                   4.1.7.2.1.18
         b)  CONVERT ̲QUEUE ̲REF                 4.1.7.2.1.19
         c)  COMPUTE ̲QEL ̲REF                   4.1.7.2.1.20
         d)  PTR ̲TO ̲SEGM ̲ID                    4.1.7.2.1.21
         e)  COMPUTE ̲SEGM ̲ADDR                 4.1.7.2.1.22
         f)  CHECK ̲SEGM                        4.1.7.2.1.23
         g)  ALLOCATE                          4.1.7.2.1.24
         h)  SAVE ̲CSF ̲LOW                      4.1.7.2.1.25
         i)  UPDATE ̲CSF ̲LOW                    4.1.7.2.1.26
         j)  REMOVE ̲Q ̲ELEMENT                  4.1.7.2.1.27
         k)  INSERT ̲Q ̲ELEMENT                  4.1.7.2.1.28
         l)  UF ̲MAP ̲OUT ̲CSF ̲DATA               4.1.7.2.1.29
         m)  UF ̲MAP ̲IN ̲CSF ̲DATA                4.1.7.2.1.30



4.2.1.4.8.2 S̲e̲g̲m̲e̲n̲t̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         a)  CONVERT ̲OB7 ̲REP                   4.1.7.2.1.18
         b)  CONVERT ̲QUEUE ̲REF                 4.1.7.2.1.19
         c)  COMPUTE ̲QEL ̲REF                   4.1.7.2.1.20
         d)  PTR ̲TO ̲SEGM ̲ID                    4.1.7.2.1.21
         e)  COMPUTE ̲SEGM ̲ADDR                 4.1.7.2.1.22
         f)  CHECK ̲SEGM                        4.1.7.2.1.23
         g)  ALLOCATE                          4.1.7.2.1.24
         h)  SAVE ̲CSF ̲LOW                      4.1.7.2.1.25
         i)  UPDATE ̲CSF ̲LOW                    4.1.7.2.1.26
         j)  REMOVE ̲Q ̲ELEMENT                  4.1.7.2.1.27
         k)  INSERT ̲Q ̲ELEMENT                  4.1.7.2.1.28
         l)  UF ̲MAP ̲OUT ̲CSF ̲DATA               4.1.7.2.1.29
         m)  UF ̲MAP ̲IN ̲CSF ̲DATA                4.1.7.2.1.30




4.2.1.4.8.3 S̲e̲g̲m̲e̲n̲t̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         Following procedures are used as internal procedures:

         a) UPDATE ̲LRU
            NARRATIVE DESCRIPTION

         Q̲u̲e̲u̲e̲ ̲S̲e̲g̲m̲e̲n̲t̲ ̲S̲w̲o̲p̲p̲i̲n̲g̲

         In order to ease and generalise the initialisation
         and use of QUEUE ̲SEGMENTS an algorithm for swopping
         of Queue ̲Segments are here suggested. The swopping
         of Queue segments are managed by using an LRU (Least
         Recenly Used) algorithm.

                     LAST ̲USED              LEAST ̲RECENTLY ̲USED
                      ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲   ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
                     ̲ ̲ ̲ ̲
         LRU QUEUE:   ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲   ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
                     ̲ ̲ ̲ ̲

         Each process has as part of its local data area a LRU-Queue,
         actual implemented as an array, the number of element
         of which correspond to max number of Queue segments
         simultaniously mapped in.

         Each time an access is made on a Queue (a segment)
         the corresponding segment id is inserted as/moved to
         LAST ̲USED of the queue and other elements residing
         in the queue are moved towards the end of LEAST ̲RECENTLY
         ̲USED.

         If swopping is to be performed, i.e. an insertion results
         in a LRU-Queue length exceeded, the segment corresponding
         to LEAST ̲RECENTLYU ̲USED is mapped out and the inserted
         segment mapped in these swopping algorithms must be
         implemented as part of the procedure CONVERT ̲QUEUE
         ̲REF.

         S̲t̲a̲t̲i̲s̲t̲i̲c̲s̲

         In order to enable detailed performance analyses some
         statistics.

         Variables showing the need to swopping of CSF segments
         of each process should be maintained.

         The type STAT-elements is expanded with the following:

                 NO ̲OP ̲QUEUE ̲SEGM ̲SWOP,
                 NO ̲OF ̲QEL ̲SEGM ̲SWOP,
                 NO ̲OF ̲CIF ̲SEGM ̲SWOP,
                 NO ̲OF ̲BUFFER ̲SEGM ̲SWOP

         and the procedure UPDATE ̲STATISTICS is called each
         time a swop is made.


















































                   FIGURE 4.2.1.4.8.3-1
                     CSF SEGMENTATION


         b)  F̲i̲n̲d̲-̲S̲e̲g̲m̲e̲n̲t̲

             The procedure finds the segment with the largest
             amount of free resources and a resource is allocated.

             F̲L̲O̲W̲G̲R̲A̲M̲

             NONE

         c)  R̲E̲S̲E̲T̲ ̲C̲S̲F̲ ̲L̲O̲W̲

             The procedure resets the current CSF ̲LOW ̲DESCR
             and the CRU Queue.

             F̲L̲O̲W̲G̲R̲A̲M̲

             NONE



4.2.1.4.8.4 S̲e̲g̲m̲e̲n̲t̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         a)  Data references

             The segment manager uses the following data-structures:

             VAR
                 MAIN ̲QUEUE ̲ARRAY:   (1 .. NUMBER ̲OF ̲MAIN ̲QUEUES)
                                     of MAINQ ̲REF;

                 OBJECT ̲SEGMS:       ARRAY (1 .. NO ̲OF ̲OB7 ̲SEGM)
                                     OF OB7 ̲SEGM ̲DESCR;

                 QUEUE ̲SEGMS:        ARRAY (1 .. NO ̲OF ̲QUEUE
                                     ̲
                                     SEGM) of Q ̲SEGM ̲DESCR;

                 SEGMENT ̲CBS:        ARRAY (1 .. NO ̲OF ̲QUEUE
                                     ̲
                                     SEGM + NO ̲OF ̲OB7 ̲SEGM)
                                     OF SEGM ̲CB ̲DESCR;

         How the data are connected are shown in Figure 4.2.1.4.8.4-1
         to 4.2.1.4.8.4-3.

















































                   FIGURE 4.2.1.4.8.4-1

















































                   FIGURE 4.2.1.4.8.4-2
                    SEGMENT SELECTION




























                    Fig. 4.2.1.4.8.4-3

         This figure shows how the reference (in the sense of
         DAMOS) is found from the SEGM ̲MAIN ̲QUEUE ̲ARRAY and
         the SEGM ̲SUB ̲QUEUE ̲ARRAY. This operation is in the
         other figure shown with the signature           .

         When the index to SEGMENT ̲CB is found, it should be
         checked in the CSF ̲LOW ̲DESCR if the segment allready
         is swopped in by campaining the index in the SEGMENT
         ̲CB with the ones in CSF ̲LOW ̲DESCR.DATA(6). REF(DAMOS)
         is used as the natation for to DAMOS mapping reference.


4.2.1.4.8.5 S̲e̲g̲m̲e̲n̲t̲ ̲M̲a̲n̲a̲g̲e̲r̲ ̲D̲e̲s̲i̲g̲n̲

         See 4.1.7.2.1.18 to 4.1.7.2.1.30.






4.2.1.5  S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲



4.2.1.5.1    R̲e̲s̲o̲u̲r̲c̲e̲ ̲P̲o̲o̲l̲

         Resource Pools are used by the Resource Module, 4.2.1.4.5.

             VAR POOL ̲ARRAY:

                     ARRAY(1..NO ̲OF ̲RESOURCE ̲POOLS) OF RESOURCE
                     ̲POOL

         Initialization:

             As part of CSF initialization, all QELs, HCBs and
             Shared Buffers are chained to their respective
             pool, and the Threshold Values are set for the
             pools.



 TYPE RESOURCE ̲POOL=

         RECORD

             FREE ̲LIST:          POINTER;
                                 "The list of free elements

             FREE ̲COUNT,         "The current number
                                 of
                                 "free elements in list

             MIN-FREE ̲COUNT,     "The minimum value
                                 that
                                 "FREE ̲COUNT has assumed

             ALLOCATE ̲COUNT,     "The number of allocations
                                 "from pool

             WARNING ̲THRESHOLD,
             ENABLE ̲THRESHOLD:   INTEGER;
             WARNING ̲ENABLE,REPORT ̲FLAG:   BOOLEAN

         END


         Refer figure 4.2.1.5-1















































          FIGURE 4.2.1.5-1…01…RESOURCE POOL


4.2.1.6  C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         NA



4.2.1.7  S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         For an overview of Subpackage Interfaces, refer to
         4.1.7.3



4.2.1.7.1    N̲e̲w̲ ̲B̲u̲f̲f̲e̲r̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         This is the "QEL COPIED" entry point in Buffer Manager.
         It is called from QMON, whenever a new QEL referencing
         a buffer is created by the QMON SEND module.

         I̲n̲t̲e̲r̲f̲a̲c̲e̲

         a)  NEW ̲BUFFER ̲REFERENCE (QEL:      PRIMARY ̲QEL)

         b)  NEW ̲BUFFER ̲REFERENCE(R4, R6)

         R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲

         C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

         R4      QEL                         (Kept)

         R6      LINK                        (Destr.)



4.2.1.7.2    C̲h̲e̲c̲k̲ ̲P̲a̲g̲e̲ ̲A̲c̲c̲e̲s̲s̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Checks that calling process has the specified access
         right to the specified memory area.

         The function shall be called by CSF system level functions
         before access to memory areas specified by the application.



         I̲n̲t̲e̲r̲f̲a̲c̲e̲

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         a)  CHECK ̲PAGE ̲ACCESS(BUFFER:       POINTER,
                               SIZE:         INTEGER,
                               ACCESS:       (READ ̲ACCESS,
                                             WRITE ̲ACCESS)):

                               ERROR ̲OK

         b)  CHECK ̲PAGE ̲ACCESS(R1,R2,R3,R6): ERROR ̲OK

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1      ACCESS                  (kept)

             R2      BUFFER                  (kept)

             R3      SIZE                    (kept)

             R6      LINK                    (destr)

             Error Return when access not allowed.

             R4, R5, R7 kept.



4.2.1.7.3    G̲e̲n̲e̲r̲a̲t̲e̲ ̲R̲e̲p̲o̲r̲t̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Invokes the Report Module when a warning report shall
         be sent. Cf 4.1.1.1 f).

         I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The function is invoked by signalling the PCF-semaphore
         REPORT ̲SEM.

         In addition a Report Flag shall be set to TRUE in the
         appropriate control block, e.g.

             -   Main Queue Control Block
             -   Resource Control Block



         The Report Module of UTIL Subpackage will then be invoked
         and will generate the report and send it to Supervisor
         Report Queue.



4.2.1.7.4    A̲l̲l̲o̲c̲a̲t̲e̲ ̲R̲e̲s̲o̲u̲r̲c̲e̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         Allocates a resource from specified resource pool.
         If pool is empty, error exit is taken. If number of
         free resources comes below warning threshold, a warning
         report is generated.

         I̲n̲t̲e̲r̲f̲a̲c̲e̲

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         a)  ALLOCATE ̲RESOURCE(RESOURCE ̲TYPE:    (QEL ̲RESOURCE,
                                                 HANDLE ̲RESOURCE,
                                                 BUFFER ̲RESOURCE))
                               (RESOURCE:        POINTER)ERROR
                                                 ̲OK

         b)  ALLOCATE ̲RESOURCE(RESOURCE ̲TYPE,R4,R6):ERROR ̲OK

         R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲

         C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲

         R6      LINK                        (destr)

         R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲

         R4      RESOURCE

         Error Return when pool empty



4.2.1.7.5    R̲e̲l̲e̲a̲s̲e̲ ̲R̲e̲s̲o̲u̲r̲c̲e̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         Releases a resource to specified resource pool



         I̲n̲t̲e̲r̲f̲a̲c̲e̲

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         a)  RELEASE ̲RESOURCE(RESOURCE ̲TYPE:     (QEL ̲RESOURCE,
                                                  HANDLE ̲RESOURCE,
                                                  BUFFER ̲RESOURCE),
                               RESOURCE:         POINTER)

         b)  RELEASE ̲RESOURCE(RESOURCE ̲TYPE, R4, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4      RESOURCE                (kept)
             R6      LINK                    (destr)

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             NA



4.2.1.7.6    C̲S̲F̲ ̲R̲E̲T̲U̲R̲N̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Returns from Monitor Call to User Mode with the specified
         register setting. Must be used by any component of
         the Monitor Procedure CSF, when returning to User Mode.

         I̲n̲t̲e̲r̲f̲a̲c̲e̲

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         a)  CSF ̲RETURN(REGISTERS:           BITMASK,
                                             A bit for each
                                             of the 8
                                             registers specifying
                                             that the
                                             register contents
                                             shall be returned
                                             to calling application

                     EXIT NO:                ERROR ̲OK)



         b)  CSF ̲RETURN(REGISTERS, EXITNO, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R0-R5 and R7 can contain return parameters. BITMASK
             specifies those actually containing such parameters.
             R6 can not contain a return parameter.

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             NA



4.2.1.7.7    C̲S̲F̲ ̲R̲e̲t̲i̲r̲e̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Retires the calling process. Shall be used by any component
         of the Monitor Procedure CSF and any component of the
         Monitor Procedure SCM, which works on the shared CSF
         data.

         I̲n̲t̲e̲r̲f̲a̲c̲e̲

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         a)  CSF ̲RETIRE(SUBPACKAGE:          SUBPACKAGE ̲ID
                               CC:           COMPLETION ̲CODE)

         b)  CSF ̲RETIRE(SUBPACKAGE ̲ID, R7, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R6      LINK
             R7      CC

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             NA





4.2.1.7.8    G̲e̲t̲ ̲B̲u̲f̲f̲e̲r̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         Can be called from coroutines in the CSF Process, cf.
         4.1.2.d in order to get a shared buffer. Must not be
         called from Timer Coroutine.

         Assumes a coroutine record of the following format:

         TYPE GB ̲COROUTINE=
                 RECORD
                     HEAD: COROUTINE ̲RECORD
                     RETURN: INTEGER

                 END

         The RETURN field is destroyed by the procedure

         Modifier Buffer Timeout Data, refer 4.1.4.3.1.

         The procedure has a waiting point.

         I̲n̲t̲e̲r̲f̲a̲c̲e̲

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         a)  GET ̲BUFFER(   ) (BUFFER: BUFFER ̲REFERENCE)

         B)  GET ̲BUFFER(R2,R6)

         R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲

         C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲

             R6      LINK      (destroyed)

         R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲

             R2      BUFFER

         R0,R3,R4,R5,R7        (destroyed)





4.2.1.7.9    S̲i̲g̲n̲a̲l̲ ̲B̲u̲f̲f̲e̲r̲ ̲T̲i̲m̲e̲o̲u̲t̲

         This is a signal from Timer Coroutine in CSF Process
         (cf 4.1.2 d) to the Get Buffer procedure that a timeout
         has occurred.

         Each time the Timer Coroutine is activated, it shall
         signal the BUFFER ̲TIMEOUT ̲SEMAPHORE (cf.4.1.4.3.1)
         as many times as specified by BUFFER ̲TIMEOUT ̲COUNT
         (cf.4.1.4.3.1) and then reset BUFFER ̲TIMEOUT ̲COUNT.



4.2.2    Q̲u̲e̲u̲e̲ ̲M̲o̲n̲i̲t̲o̲r̲

         The Queue Monitor (QMON) manipulates QELs.(refer 4.1.4.1.1.)
         The QELs are a record type which normally is held in
         a single linked list, a Queue (Q). The main purpose
         of the QELs is that they are used as reference to objects
         which are sent from one application module to another.



4.2.2.1  F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         This functional breakdown shows which functions QMON
         must contain to fulfil its functional requirement.

         QMON will be implemented as 8 modules and a set of
         common procedures. 
         Refer to section 4.1.1.2 and to module specifications
         4.2.2.4.1 - 4.2.2.4.8.

         In the following each module will be broken down so
         each main function and the common functions used by
         it can be identified.















































                     FIGURE 4.2.2.1-1
            QUEUE MONITOR FUNCTIONAL BREAKDOWN




4.2.2.2  S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲



4.2.2.2.1    S̲C̲M̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         -   Receive First QEL                  4.2.2.4.1.5.a
         -   Inspect Receive                    4.2.2.4.1.5.b
         -   Cancel Receive                     4.2.2.4.1.5.c
         -   Complete Receive                   4.2.2.4.1.5.d



4.2.2.2.2    C̲S̲F̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         -   Receive Next QEL                   4.2.2.4.1.5.e
         -   Return                             4.2.2.4.2.5.a
         -   Dismantle                          4.2.2.4.2.5.b
         -   Send QEL                           4.2.2.4.3.5.a
         -   Send Request                       4.2.2.4.3.5.b
         -   Send Reply                         4.2.2.4.3.5.c
         -   Set Profile                        4.2.2.4.4.5.a
         -   Block Queue                        4.2.2.4.4.5.b
         -   Unblock Queue                      4.2.2.4.4.5.c
         -   Set Capability                     4.2.2.4.7.5.b
         -   Get Queue Attributes               4.2.2.4.5.5.a
         -   Get Queue Length                   4.2.2.4.4.5.d
         -   Initialize Queues                  4.2.2.4.6.5.a
         -   Set Queue Threshold                4.2.2.4.6.5.b
         -   Send Timeout                       4.2.2.4.3.5.d



4.2.2.2.3    I̲n̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         -   Create QEL                         4.2.2.4.3.5.e
         -   Dismantle QEL                      4.2.2.4.2.5.c
         -   Reinsert in Queue                  4.2.2.4.8.5.a
         -   Check Capability                   4.2.2.4.7.5.a
         -   Compare Profile                    4.2.2.4.4.5.e



4.2.2.2.4    M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         Refer to Module Specifications 4.2.2.4.1 - 4.2.2.4.8.





4.2.2.3  D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲



4.2.2.3.1    S̲C̲M̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲

         Refer to figure 4.2.2.3-1. The SCM procedure RECEIVE
         FIRST QEL is the only way for an application process
         to wait for an empty queue.

         When some other process sends to the queue, QMON in
         the sending process will recognize that one or more
         processes is waiting for the queue. QMON will then
         signal the event to the QMON-Synchronization Element(s)
         associated with the queue. The signal activates SCM
         in the waiting process, which in turn calls the INSPECT
         RECEIVE procedure in QMON.

         For further details of SCM logic refer to subpackage
         specification 4.2.6.

         For Retire from a SCM procedure, refer figure 4.1.3-4.



4.2.2.3.2    C̲S̲F̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲F̲l̲o̲w̲

         Refer to figures 4.1.3-1 and 4.1.3-4. This general
         control flow applies to the CSF procedures listed in
         4.2.2.2.2.



4.2.2.3.3    Q̲u̲e̲u̲e̲-̲w̲a̲i̲t̲ ̲a̲n̲d̲ ̲S̲e̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲F̲l̲o̲w̲

         When a process has issued a Receive First QEL command
         to an empty queue and has thus a pending Receive Request
         at the queue, it must be activated when another process
         sends a QEL to the queue.

         Each process has a QMON Synchronization Element associated
         with it, cf. 2.2.1.6. Whenever this QMON SEL is signalled,
         and the process is waiting for external event, the
         Queue Monitor will be activated in its Inspect Receiver
         entry point, cf 4.2.2.4.1.3b.

         To each Main Queue is associated a list of QMON Synchronization
         Elements, namely those of the processes which may receive
         from the queue with WAIT= TRUE, cf 4.2.2.4.1.3a.



         Whenever some process has a pending receive for a queue,
         the wait count of the queue is incremented. Whenever
         a pending receive is satisfied, the wait count is decremented.

         Whenever a QEL is sent to a previously empty queue,
         and the waitcount of the queue or its associated main
         queue is nonzero, all QMON SELs associated with the
         main queue are signalled. Thus all processes having
         a pending receive at the queue will eventually have
         the opportunity to inspect the queue.















































    FIGURE 4.2.2.3-1…01…QMON SCM PROCEDURES CONTROL FLOW















































       FIGURE 4.2.2.3-2…01…RECEIVE MODULE CONTROL FLOW















































        FIGURE 4.2.2.3-3…01…SEND MODULE CONTROL FLOW


4.2.2.4  M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲



4.2.2.4.1    R̲e̲c̲e̲i̲v̲e̲

         Receive manages the work in connection with receiving
         QEL from Queues. All QELs may be received if caller
         has capability to the queue where they reside, but
         if the QEL profile exceeds the calling subprocess profile,
         the QEL can not be used as a view reference.

         Every time a QEL is received by a subprocess the corresponding
         QEL claim is decreased by one.



4.2.2.4.1.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         a)  Receive-first-QEL              cf section 4.1.7.2.2.1
         b)  Inspect Receive:

             The list of pending SOCB's is scanned. If a Queue
             had  received a QEL the SOCB is marked as done.
             If not, nothing is done.

         c)  Cancel receive.

             A previous receive is cancelled

         d)  Complete receive.

             The output parameters to application are unpacked
             from SOCB and returned

         e)  Receive next QEL               cf section 4.1.7.2.2.2.

         f)  Decrement Queue Length

             Decrements the lenght of a subqueue and its associated
             main queue.





4.2.2.4.1.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲

         Receive has 3 independent interfaces:

         -   Receive first QEL                 cf section 4.1.7.2.2.1

         -   Receive next QEL                  cf section 4.1.7.2.2.2

         -   Decrement Queue Length

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             a)  DECREMENT ̲QUEUE ̲LENGTH(QUEUE: SUBQUEUE)

             b)  DECREMENT ̲QUEUE ̲LENGTH(R3, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

                 R3  QUEUE                     (destr.)
                 R6  LINK                      (destr.)

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲

             R0, R1, R2, R4, R5, R7            destroyed



4.2.2.4.1.3 C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         Refer to figure 4.2.2.4.1-1.

         a)  R̲e̲c̲e̲i̲v̲e̲ ̲F̲i̲r̲s̲t̲ ̲Q̲E̲L̲

             SCM procedure INIT FUNCTION

         b)  I̲n̲s̲p̲e̲c̲t̲ ̲R̲e̲c̲e̲i̲v̲e̲

             SCM procedure ANSWER RECEIVED

         c)  C̲a̲n̲c̲e̲l̲ ̲R̲e̲c̲e̲i̲v̲e̲

             SCM procedure CANCEL

         d)  C̲o̲m̲p̲l̲e̲t̲e̲ ̲R̲e̲c̲e̲i̲v̲e̲

             SCM procedure COMPLETE FUNCTION



         e)  R̲e̲c̲e̲i̲v̲e̲ ̲N̲e̲x̲t̲ ̲Q̲E̲L̲

             CSF Procedure

         f)  I̲n̲s̲p̲e̲c̲t̲ ̲S̲u̲b̲q̲u̲e̲u̲e̲

             Internal Procedure

             Refer 4.2.2.4.1.4 f

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

                 INSPECT ̲SUBQUEUE(QUEUE:       SUBQUEUE ̲REFERENCE)
                                 (QEL:         PRIMARY ̲QEL
                                 QEL ̲REF:      QEL ̲REFERENCE
                                 CC:           COMPLETION ̲CODE):
                                               ERROR ̲OK

         g)  I̲n̲s̲p̲e̲c̲t̲ ̲M̲a̲i̲n̲ ̲Q̲u̲e̲u̲e̲

             Internal Procedure

             Refer 4.2.2.4.1.4 g

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

                 INSPECT ̲MAIN ̲QUEUE(QUEUE:     MAIN ̲QUEUE ̲INDEX)
                             (QEL:             PRIMARY ̲QEL
                              QEL ̲REF:         QEL ̲REFERENCE,
                              SUBQUEUE:        SUBQUEUE ̲INDEX,
                              CC:              COMPLETION ̲CODE):
                                               ERROR ̲OK

         h)  I̲n̲s̲p̲e̲c̲t̲ ̲Q̲u̲e̲u̲e̲

             Internal Procedure

             Refer 4.2.2.4.1.4 h

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

                 INSPECT ̲QUEUE(QUEUE:          QUEUE ̲INDEX)
                              (QEL:            PRIMARY ̲QEL
                               QEL ̲REF:        QEL ̲REFERENCE,
                               SUBQUEUE:       SUBQUEUE ̲INDEX
                               CC:             COMPLETION ̲CODE):
                                                ERROR ̲OK



         i)  D̲e̲c̲r̲e̲m̲e̲n̲t̲ ̲Q̲u̲e̲u̲e̲ ̲L̲e̲n̲g̲t̲h̲

             I̲n̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲

             Refer 4.2.2.4.1.4 i

         j)  R̲e̲s̲e̲r̲v̲e̲ ̲Q̲E̲L̲

             Internal Procedure

             Refer 4.2.2.4.1.4 j

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

                 RESERVE ̲QEL(QEL:              PRIMARY ̲QEL
                             QUEUE:            SUBQUEUE)
                            (CC)               



4.2.2.4.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         Receive operates on the following data

         a)  D̲a̲t̲a̲ ̲r̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             PROCESS ̲RECORD                    (section 4.1.4.2.1)
             MAIN ̲QUEUE ̲ARRAY                  (section 4.2.2.5.2)
             SUB ̲QUEUE ̲ARRAY                   (section 4.2.2.5.2)
             QEL ̲ARRAY                         (section 4.1.4.1.1)
             QEL ̲ATTRIBUTES                    (section 4.1.6.1.2.2)
             SOCB ̲LIST                         (section 4.1.6.1.6.1)

         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲d̲a̲t̲a̲

             MAIN ̲QUEUE  (m)
             SUB ̲QUEUE   (m)
             PRIMARY ̲QEL (m)
             SECONDARY ̲QEL (m)
             SOCB        (m)

         c)  L̲o̲c̲a̲l̲ ̲d̲a̲t̲a̲

             NA





















































                    FIGURE 4.2.2.4.1-1


4.2.2.4.1.5 R̲e̲c̲e̲i̲v̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

         CHECK ̲PAGE ̲ACCESS                      4.2.1.7.2
         CSF ̲TRACE                              4.1.7.2.1.12
         CSF ̲RETIRE                             4.2.1.7.7
         GET ̲PROFILE                            4.2.4.7.2

         CHECK CAPABILITY                       4.2.2.7.1.2
         COMPARE ̲PROFILE                        4.2.2.7.6.2
         CHECK ̲QEL                              4.2.2.6.4



         a)  PROCEDURE RECEIVE ̲FIRST ̲QEL 

             N̲a̲r̲r̲a̲t̲i̲v̲e̲:̲

             This is the "init function" entry point from System
             Call Monitor.

             The capability of caller is checked.

             If queue is empty and wait is false, a nil QEL
             reference is put into SOCB and SOCB Call Status
             is set to "done".

             If queue is empty and wait is true, the absolute
             queue reference and owner reference are put into
             SOCB. It is checked that wait is allowed on this
             queue.

             If queue is not empty, the first QEL is marked
             as owned by calling subprocess and queue length
             is decreased by one. The QEL is put into SOCB and
             SOCB Call status is set to "done".

             Finally the profile of the QEL is compared with
             the profile of the subprocess.

             CSF shared accessed in CRITICAL REGION

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None




         b)  PROCEDURE      INSPECT ̲RECEIVE

             N̲a̲r̲r̲a̲t̲i̲v̲e̲

             This is the "answer received" entry point from
             System Call Monitor.

             The list of pending SOCBs is scanned. For each
             SOCB, an inspection is made as to whether a QEL
             has been sent to the referenced queue.

             If the queue is still empty nothing is done. If
             the queue is not empty, the first QEL is reserved
             and its reference is put into the SOCB which is
             then marked as "done".

             When all SOCBs have been inspected, QMON returns
             to System Call Monitor with parameters telling
             how many SOCBs have been marked as "done" indicating
             the first in the list.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None

         c)  PROCEDURE CANCEL ̲RECEIVE

             N̲a̲r̲r̲a̲t̲i̲v̲e̲:̲

             Terminates the waiting on a Queue. The SOCB status
             is set to "done" and QEL reference to NIL.

             CSF ̲TRACE is activated.

             The waitcount of the queue specified in SOCB is
             decremented.

             Completion code in SOCB is set to cancelled.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None

         d)  PROCEDURE COMPLETE ̲RECEIVE

             N̲a̲r̲r̲a̲t̲i̲v̲e̲

             The output parameter to Receive-first-QEL is

             unpacked from the SOCB



             QEL-ATTRIBUTES is updated according to the

             QEL received.

             F̲l̲o̲w̲g̲r̲a̲m̲:̲ 

             None

         e)  R̲e̲c̲e̲i̲v̲e̲ ̲N̲E̲X̲T̲ ̲Q̲E̲L̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲:

             If QEL is owned by caller, the next QEL, if any,
             in same Queue is reserved, and the profile of this
             is compared with the profile of calling subprocess.

             QEL attributes are updated according to the reserved
             QEL.

             F̲l̲o̲w̲g̲r̲a̲m̲:̲

             None

         f)  P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲I̲n̲s̲p̲e̲c̲t̲ ̲S̲u̲b̲q̲u̲e̲u̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Inspects a subqueue and returns the first not owned
             QEL, and a CC specifying, if profile check was
             ok. Error return, if queue empty.

             Calls Reserve QEL.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None

         g)  P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲I̲n̲s̲p̲e̲c̲t̲ ̲M̲a̲i̲n̲ ̲Q̲u̲e̲u̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Inspects a Main Queue and returns the first QEL,
             the subqueue, where it was found and a CC specifying
             if profile check was ok. Error return if queue
             empty. 

             Calls Inspect Subqueue.



             F̲l̲o̲w̲g̲r̲a̲m̲

             Refer to figure 4.2.2.4.1-2

         h)  P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲I̲n̲s̲p̲e̲c̲t̲ ̲Q̲u̲e̲u̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Inspects depending on QUEUE ̲TYPE ̲ID in the input
             parametre QUEUE ̲INDEX a Main Queue or a Subqueue
             and returns the first QEL and a completion code
             specifying if profile check was ok. If Main Queue,
             a Subqueue Index is returned as for Inspect Main
             Queue.
             Error Return if Queue empty.
             Calls Inspect Main Queue or Inspect Subqueue.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None

         i)  P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲D̲e̲c̲r̲e̲m̲e̲n̲t̲ ̲Q̲u̲e̲u̲e̲ ̲L̲e̲n̲g̲t̲h̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Decrements the length of a Subqueue and its associated
             Main Queue.

             Decrement SUBQUEUE.LENGTH. Locate associated Main
             Queue. Decrement MAIN.QUEUE.LENGTH. If length becomes
             zero, adjust MAIN ̲QUEUE ̲IDLE ̲TIME.

             If WARNING ̲ENABLE is FALSE, and LENGTH becomes
             less than WARNING ̲ENABLE ̲THRESHOLD, set WARNING
             ̲ENABLE = TRUE.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None

         j)  P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲s̲e̲r̲v̲e̲ ̲Q̲E̲L̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Reserves a QEL by setting owner. Updates Queue
             Length. Decrements QEL ̲CLAIM and retires if it
             becomes negative. If object type is view, the QEL
             profile is compared with the subprocess profile.
             Completion code is set, if QEL profile not contained.



             F̲l̲o̲w̲g̲r̲a̲m̲:

             Refer to figure 4.2.2.4.1-3

 PROCEDURE INSPECT ̲MAIN ̲QUEUE(QUEUE:       MAIN ̲QUEUE
                                           ̲INDEX)
                        (QEL:              PRIMARY ̲QEL
                         QEL ̲REF:          QEL ̲REFERENCE,
                         SUBQUEUE:         SUBQUEUE
                                           ̲INDEX,
                         CC:               COMPLETION
                                           ̲CODE):
                                           ERROR ̲OK

 Start

 MAIN ̲QUEUE = MAIN ̲QUEUE ̲ARRAY(QUEUE)

 MAIN ̲QUEUE EMPTY?      RETURN (ERROR)


 SUBQUEUE = 1

 SUBQUEUE ̲NO = MAIN ̲QUEUE.SUBQUEUES

 COUNT = MAIN ̲QUEUE.SUBCOUNT

 SUBQUEUE LOOP

         CASE INSPECT ̲SUBQUEUE(SUBQUEUE ̲NO)

                        (QEL, QEL-REF, CC):    ERROR
                                               ̲OK

             OK?     RETURN(OK)

             ERROR?


         End Case


         Increment SUBQUEUE ̲NO

         Decrement (COUNT) EQ 0? EXIT

 End Subqueue Loop


 Stop


FIGURE 4.2.2.4.1-2…86…1         …02…   …02…   …02…   …02…                                
           

 PROCEDURE RESERVE ̲QEL (QEL:                   PRIMARY
                                               ̲QEL
                        QUEUE:                 SUBQUEUE)
                        (CC)

 Start


 DECREMENT(SUBPROCESS.QEL ̲CLAIM) LT O?         CSF ̲RETIRE(QMON,

                                               QEL ̲CLAIMS
                                               ̲EXCEEDED)


 DECREMENT ̲QUEUE ̲LENGTH(QUEUE)

 QEL.OWNER = SUBPROCESS

 QEL ̲OBJECT ̲TYPE NE VIEW?                      CC =
                                               OK

 GET ̲PROFILE (QEL)(PROFILE)

 COMPARE ̲PROFILE(SUBPROCESS.PROFILE, PROFILE)

                     (CC)




 RETURN(OK)




 Stop












                FIGURE 4.2.2.4.1-3



4.2.2.4.2    C̲l̲e̲a̲r̲i̲n̲g̲

         The Clearing function is used when the owner of a QEL
         no longer wants to use it.



4.2.2.4.2.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         Clearing consists of the following:

         a)  Return                       cf section 4.1.7.2.2.3
         b)  Dismantle                    cf section 4.1.7.2.2.4
         c)  Dismantle QEL                cf section 4.2.2.7.3.1



4.2.2.4.2.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲

         Clearing has 3 independent interfaces:

         a)  Return                       cf section 4.1.7.2.2.3
         b)  Dismantle                    cf section 4.1.7.2.2.3
         c)  Dismantle QEL                cf section 4.2.2.7.3.2



4.2.2.4.2.3 C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         Clearing has 3 components

         -   RETURN ̲QEL:                  CSF Procedure
         -   DISMANTLE:                   CSF Procedure
         -   DISMANTLE QEL:               Internal Procedure

         Clearing is broken down on fig. 4.2.2.4.2.3-1.



4.2.2.4.2.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         Clearing operates on the following data:

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             MAIN ̲QUEUE ̲ARRAY             (section 4.2.2.5.2)

             SUB ̲QUEUE ̲ARRAY              (section 4.2.2.5.2)

             QEL ̲ARRAY                    (section 4.1.4.1.1)

             SUBPROCESS ̲RECORD            (section 4.1.4.1.2)



         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲

             MAINQUEUE.LENGTH (m)

             PROCESS ̲RECORD ̲QELCLAIM (m)
             SUBQUEUE.LENGTH (m)
             QEL.OWNER (m)

         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲



4.2.2.4.2.5 C̲l̲e̲a̲r̲i̲n̲g̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Clearing module consists of 2 CSF procedures (a-b)
         and one internal procedure (c)

         E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

         CSF ̲TRACE                        4.1.7.2.1.12

         CSF ̲RETIRE                       4.2.1.7.7

         REMOVE ̲QEL                       4.2.2.6.1

         a)

             PROCEDURE RETURN ̲QEL

             N̲a̲r̲r̲a̲t̲i̲v̲e̲:

             If caller owns the QEL, the owner reference in
             the QEL is cleared and queue length is increased
             by one. If the queue was empty before return and
             its waitcount is nonzero, the Sync. Elements associated
             with the queue are signalled 

             The QEL claim of calling subprocess is incremented.
             CSF shared accessed in CRITICAL REGION.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None

         b)  

             PROCEDURE DISMANTLE 



             N̲a̲r̲r̲a̲t̲i̲v̲e̲:

             The QEL is removed from the list where it resides
             and returned to QEL resource pool if the following
             conditions are fulfilled:

             -   The caller is owner of the QEL.

             -   The QEL does not refer to a view.

             -   The QEL does not refer to a buffer.

             The QEL claim of calling subprocess is incremented.
             CSF shared accessed in CRITICAL REGION.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None

         c)

             PROCEDURE DISMANTLE ̲QEL      (QEL:PRIMARY ̲QEL)

             N̲a̲r̲r̲a̲t̲i̲v̲e̲:

             The QEL is removed from the List where it resides
             and returned to CSF shared data.

             The QEL claim of the calling subprocess is incremented.
             CSF shared accessed in CRITICAL REGION.

             F̲l̲o̲w̲g̲r̲a̲m̲:

             None


















































                FIGURE 4.2.2.4.3-1