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