top - download
⟦0111713e7⟧ Wang Wps File
Length: 39766 (0x9b56)
Types: Wang Wps File
Notes: FIX/1256/PSP/0078
Names: »3108A «
Derivation
└─⟦724639acf⟧ Bits:30006131 8" Wang WCS floppy, CR 0293A
└─ ⟦this⟧ »3108A «
WangText
4…00……00…?…02…?
…00……00…? ?…06…>…07…=…0f…= =…06…=…07…<…0c…<…01…<…06…;…0c…;…0f…;…01…; ;…07…:…09…:…0d…:…00…: 9…08…9…0c…9…00…9 8…09…8…0e…8…02…8
8 8…05…8…06…8…07…7…08…7…0b…7…0c…7…86…W …02… …02… …02… …02…
3108A/ape…86…1 …02… …02… …02…
…02…FIX/1256/PSP/0078
…02…APE/880915…02……02…#
QACCESS MONITOR PSP
…02…OK/840228…02…FK 7809
FIKS QACCESS MONITOR PSP
FIX/1256/PSP/0078
AK
FMK
FMK(5), AK(4)
…0f… FIKS S/W Mgr
FIKS Conf Mgr
1.1
880915
…0e……86…W …02… …02… …02… …02… …02…
REVISION RECORD
REVISION RECORD
REVISION RECORD
REVISION RECORD
REVISION RECORD
Wang/Disk:
3108A/293A
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲…06…1 …02… …02… …02…
ISSUE DATE PAGES BRIEF
DESCRIPTION
OF
CHANGE
ISSUE DATE PAGES BRIEF
DESCRIPTION
OF
CHANGE
ISSUE DATE PAGES BRIEF
DESCRIPTION
OF
CHANGE
ISSUE DATE PAGES BRIEF
DESCRIPTION
OF
CHANGE
ISSUE DATE PAGES BRIEF
DESCRIPTION
OF
CHANGE
AFFECTED
AFFECTED
AFFECTED
AFFECTED
AFFECTED
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ^ ^
^
1 ^840228 ^ All ^
Original
issue
of
document.
^ ^ ^
1.1 ^880915 ^ DCN1 ^
Changed
in
accordance
with
Order
No:
^ ^ ^
02/87
and
09/88
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
^ ^ ^
TABLE OF CONTENTS Page
1. INTRODUCTION ...................................... 1
1.1 Scope ....................................... 1
1.2 Abbreviations ............................... 1
2. APPLICABLE DOCUMENTS .............................. 2
3. MODULE SPECIFICATION .............................. 3
3.1 Functional Capabilities ..................... 3
3.1.1 Queue Procedures ...................... 4
3.2 Interface Description .......................
3.2.1 SWELL call format .....................
3.2.2 QUEUE i/o control block ...............
3.2.3 Parameter transfer block ..............
3.2.4 Format of OPCOMP-CODE for each call ...
3.2.5 Format of IOCB for each call ..........
3.2.6 Format of PARTB for each call .........
3.3 Functional Overview .........................
3.3.1 QUEUE Structure .......................
3.3.2 Queue Data Area .......................
3.3.3 Visual Table of Contents ..............
3.3.4 Subsystem Overview HIPO Diagram .......
3.3.5 Detailed QACCESS Description ..........
3.3.5.1 QACCESS main branch ................
3.3.5.1.1 Function ........................
3.3.5.1.2 Flow Chart ......................
3.3.5.2.1 Return queue length, single ..
3.3.5.2.1.1 Function .................
3.3.5.2.2 Return length of terminal queues
3.3.5.2.2.1 Function .................
3.3.5.2.3 Read queue entry,
non destructive ..............
3.3.5.2.3.1 Function .................
3.3.5.2.4 Read queue entry, destructive
3.3.5.2.4.1 Function .................
3.3.5.2.5 Delete queue entry ...........
3.3.5.2.5.1 Function .................
3.3.5.2.6 Read group entry.
non destructive ..............
3.3.5.2.6.1 Function .................
3.3.5.2.7 Write queue entry ............
3.3.5.2.8 Append queue .................
3.3.5.2.9 Reorganize queue .............
3.3.5.2.10 QACCESS Internal Procedures ..
3.3.5.2.10.1 Change Page ................
3.3.5.2.10.2 Point to Q-HEAD ............
3.3.5.2.10.3 Point to Q-ENTRY ...........
3.3.5.2.10.4 Insert queue entry .........
3.3.5.2.10.5 Release queue entry ........
3.3.5.2.10.6 Activate receiving process .
3.4 Data Organization ...........................
3.5 Storage Allocation ..........................
3.6 Performance Characteristics .................
3.7 Limitations .................................
3.8 Error Codes/Error Locations .................
3.9 Listing References ..........................
4. QUALITY ASSURANCE .................................
5. PREPARATIONS FOR DELIVERY .........................
1. I̲n̲t̲r̲o̲d̲u̲c̲t̲i̲o̲n̲
1.1 S̲c̲o̲p̲e̲
The document describes the design of the FIKS system support for queue management.
A general monitor procedure QACCESS, performs the required functions.
The QACCESS is used by all FIKS subsystems, and both on the NODE/MEDE's and at the SCC.
1.2 A̲B̲B̲R̲E̲V̲I̲A̲T̲I̲O̲N̲S̲
Please refer to FIKS DATA INTERFACE FIX/0100/MAN/0004
2. A̲p̲p̲l̲i̲c̲a̲b̲l̲e̲ ̲D̲o̲c̲u̲m̲e̲n̲t̲s̲
3. M̲O̲D̲U̲L̲E̲ ̲S̲P̲E̲C̲I̲F̲I̲C̲A̲T̲I̲O̲N̲
The monitor provides a common access method for processes that interface to one of three
types of queues:
o SUBSYSTEM queues
o Terminal display queues
o Terminal print queues
3.1 F̲U̲N̲C̲T̲I̲O̲N̲A̲L̲ ̲c̲a̲p̲a̲b̲i̲l̲i̲t̲i̲e̲s̲
Entries in queues are index numbers to a MTCB pool.The queue elements are timetagged at queue
insertion.
Threshold values are specified for each queue. An option in each request is to specify wait
for a free element. (if no queue elements available).
Precedence queues are grouped, and in some cases are logically handled as one queue. The
dequeueing of the first element in the queue of highest priority is considered to the "First
in queue" outqueueing.
For each defined queue or group a "receiver process" is defined. It is invoked when the first
element is inserted into a previously empty queue, or group of queues.
The queue elements are taken from a common pool of a fixed size.
3.1.1 Q̲u̲e̲u̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
o R̲e̲t̲u̲r̲n̲ ̲l̲e̲n̲g̲t̲h̲ of queue.
The funciton returns the actual length of a specified queue.
o R̲e̲t̲u̲r̲n̲ ̲l̲e̲n̲g̲t̲h̲ ̲of terminal queues.
The function returns the actual length of all the terminal queues (display and print).
The length is given for each queue individually. A bit map indicates, for each queue,
if a change has occured since the last call to the monitor. This bit map is optionally
cleared.
o R̲e̲a̲d̲ ̲e̲l̲e̲m̲e̲n̲t̲,̲ non destructive.
The function will read a specified element from a specified queue, without removing the
element from the queue.
In addition the actual queue length is returned.
If first element is specified, then as an option the queue entry which resides in the
queue, is marked "entry active".
This implies that the active element cannot be deleted or moved to another position in
the queue until a d̲e̲l̲e̲t̲e̲ ̲e̲l̲e̲m̲e̲n̲t̲ command has been ordered to the queue in question. Note
that only the first entry of a queue can be flagged active. If first entry already active,
the caller will be notified.
o R̲e̲l̲e̲a̲s̲e̲ ̲a̲c̲t̲i̲v̲e̲ ̲f̲l̲a̲g̲
This procedure removes the active flag from an element, which is marked "entry active".
o R̲e̲a̲d̲ ̲e̲l̲e̲m̲e̲n̲t̲,̲ destructive.
The function will read a specified aelement from a specified queue, and remove the element
from that queue.
It is checked that the element is non-active. If not, the caller is notified
In addition the actual queue length is returned, after removal.
The MTCB-USE-COUNT in the MTCB is not updated.
o D̲e̲l̲e̲t̲e̲ ̲e̲l̲e̲m̲e̲n̲t̲
The function is used to delete a specified element from a specified queue. If first element
is specified, then the entry is required to be active. For synchronization with the MTCB
monitor the "MTCB-USE-COUNT" in the MTCB is decremented (-1).
The length after delete is returned.
o R̲e̲a̲d̲ ̲g̲r̲o̲u̲p̲ ̲e̲l̲e̲m̲e̲n̲t̲,̲ non destructive.
The function is to read the queue element with the highest priority in the specified
group of queues i.e the first element in the queue with highest precedence.
The element is not removed from the queue.
In addition the identification of the queue from where the element has been read and
the total length
of the "group queue" is returned.
The element is optionally marked "entry active". If it has already been set active, the
caller is notified.
o W̲r̲i̲t̲e̲ ̲e̲l̲e̲m̲e̲n̲t̲
The function will insert a queue element into a specified queue.
The function supports insertion of an entry into first or last position of the queue.
If insertion into first position is demanded and this position is active, the element
will be inserterd as entry no. 2.
Before writing to the queue the queue element is time tagged.
For synchronization with MTCB monitor the "MTCB-USE-COUNT" in the MTCB is incremented
(+1).
If the queue element is written into an empty queue or empty group, the process which
has this queue/group of queues as input will be awoked via a "SIGNAL". The queue length
is returned.
o A̲p̲p̲e̲n̲d̲ ̲q̲u̲e̲u̲e̲
The function supports the move of a specified queue (subject) to another specified queue
(object). The number of elements to be moved from the subject queue is from a given entry
number and to the last element. The moved entries are appended to the object queue. In
case the ordered move implies an entry marked active (non destructive read pending on
first element) this element is left back in the queue.
A notification is given in case the threshold is exceeded.
o R̲e̲o̲r̲g̲a̲n̲i̲z̲e̲ ̲q̲u̲e̲u̲e̲
The function supports reorganization of elements inside one specified queue.
A specified entry is moved to the first or last position in queue according to the request.
In case the first element is involved, and marked as active (i.e. non destructive read
pending) following takes place:
- move first element to last position:
no action except a notification to caller.
- move specified element to first position:
element moved to second entry in the queue
3.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲d̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
QACCESS is invoked by a monitor call.
A completion code is returned to the calling application giving the result of the action.
A working area is used for transfer of input and output parameters.
A parameter transfer block is used in function "length of group queues".
Dedicated SWELL I/F is defined as given below.
3.2.1 S̲W̲E̲L̲L̲ ̲c̲a̲l̲l̲ ̲f̲o̲r̲m̲a̲t̲:̲
The data transfer is performed using a QIOCB/PARTB.
The selected QACCESS function is branched to by the call:
MON (QACCESS, x, R4, R7) : (0,1)
x: 2 = LENGTH x: UPCODE
3 = LENGTH ̲GR
4 = READ ̲NON
5 = READ ̲DEST
6 = READ ̲GR ̲EL
7 = DEL
8 = INS
9 = APPEND
10 = REORG
11 = REL ̲ACT ̲FLAG
Exit Range Completion Code
0 = Error 801-806
1 = OK 0
R̲e̲g̲i̲s̲t̲e̲r̲ ̲u̲s̲e̲ ̲a̲t̲ ̲c̲a̲l̲l̲ ̲a̲n̲d̲ ̲e̲x̲i̲t̲
R̲e̲g̲i̲s̲t̲e̲r̲ ̲ C̲a̲l̲l̲ E̲x̲i̲t̲
R4 ref. (QIOCB)
or ref. (PARTB)
R7 link completion
code
3.2.2 Q̲U̲E̲U̲E̲ ̲i̲/̲o̲ ̲c̲o̲n̲t̲r̲o̲l̲ ̲b̲l̲o̲c̲k̲:̲
QIOCB ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ W1
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ W2
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ W3
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ W4 13 word integer
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ W5
…0f… -------------…0e… S0
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ S1
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ S7
The QIOCB is used for transfer of:
o queue id
o queue length
o queue threshold
o queue entry no.
o MTCB index
o queue element
o queue precedence
o registers (last 8 words used as save locations)
3.2.3 P̲a̲r̲a̲m̲e̲t̲e̲r̲ ̲t̲r̲a̲n̲s̲f̲e̲r̲ ̲b̲l̲o̲c̲k̲:̲
P̲A̲R̲T̲B̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ W1
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ W2 23 word integer
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ W15
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ S0
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ S7
The PARTB is used for transfer of:
o length of queues in group…86…W …02… …02… …02… …02… …02… …02… …02…
3.2.4 F̲o̲r̲m̲a̲t̲ ̲o̲f̲ ̲O̲P̲C̲O̲M̲P̲-̲C̲O̲D̲E̲ ̲f̲o̲r̲ ̲e̲a̲c̲h̲ ̲c̲a̲l̲l̲.̲
The OPCOMP-CODE is used at the nput to define the operation to be performed. (OP-CODE). The
result of the action is given as output completion code (COMP-CODE) #080x.
Procedure IN OUT Result
…0e… #80x…0f…
--------------------------------------------------------
Length of queue 2 0 ok
1 operation failed
2 illegal input parm.
Length of group 3 0 ok
1 operation failed
2 illegal input parm.
Read non destructive 4 0 ok
1 operation failed
2 illegal input parm.
3 queue empty
6 first entry pending read
Read destructive 5 0 ok
1 operation failed
2 illegal input parm.
3 queue empty
6 first entry pending read.
Procedure IN OUT Result
--------------------------------------------------------
Read group element 6 0 ok
1 operation failed
2 illegal input parm.
3 queue empty
6 first entry pending read
Delete element 7 0 ok
1 operation failed
2 illegal input parm.
4 first entry not active
3 queue empty
Write element 8 0 ok
1 operation failed
2 illegal input parm.
5 queue overflow
6 first entry pending read
Append queue 9 0 ok
1 operation failed
2 illegal input parm.
5 queue overflow
6 first entry pending read
Procedure IN OUT Result
--------------------------------------------------------
Reorganize queue 10 0 ok
1 operation failed
2 illegal input parm.
3 queue empty
6 first entry pending read
Release active 11 0 ok
flag
1 operation failed
2 illegal input param.
4 first entry not active
Further explanations:
"C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲c̲o̲d̲e̲s̲ ̲f̲r̲o̲m̲ ̲Q̲A̲C̲C̲E̲S̲S̲
INVALID-QUEUE-NO = #802;
INVALID-TERM-NO = #802
INDEX-EXCEEDS-LENGTH = #802;
INVALID-INDEX = #802;
QUEUE-EMPTY = #803;
FIRST-ENTRY-NOT-ACTIVE = #804;
FIRST-ENTRY-ACTIVE = #806;
QUEUE-OVERFLOW = #805;
NO-QUEUE-ELEMENTS = #801;
NO-GROUP-QUEUE = #802;
OPERATION-FAILED = #801;
ILLEGAL-OPCODE = #801;
3.2.5 F̲o̲r̲m̲a̲t̲ ̲o̲f̲ ̲I̲O̲C̲B̲ ̲f̲o̲r̲ ̲e̲a̲c̲h̲ ̲c̲a̲l̲l̲
The IOCB is used to transfer "standard information" between the caller and QACCESS.
Procedure QIOCB
IN OUT PARM
----------------------------------------------------------
Length of queue terminal no. length W1
queue no. not used W2
not used - - W3
- - - . W4
- - - - W5
Read nondestruct. terminal no. MTCB index W1
queue no. time tag W2
entry no. time tag W3
simple read flag queue length W4
not used not used W5
Read destructive terminal no. MTCB index W1
queue no. time tag W2
entry no. time tag W3
not used queue length W4
- - not used W5
Procedure QIOCB
IN OUT PARM
----------------------------------------------------------
Read group element terminal no. MTCB index W1
simple read flag length group W2
not used time tag W3
time tag W4
queue no. W5
Delete element terminal no. length W1
queue no. purge flag W2
entry no. - - W3
not used - - W4
- - - - W5
Write element terminal no. length W1
queue no. not used W2
entry no.(0,1) - - W3
MTCB index - - W4
Wait for free
entry (0= No wait,
1= Wait,
2= No wait,priv.;
3= Wait, priv. W5
Append queue subject terminal object queue
no.* length W1
subject queue no not used W2
object terminal
no.* - - W3
object queue no - - W4
subject entry no - - W5
Procedure QIOCB
IN OUT PARM
----------------------------------------------------------
Reorganize queue terminal no not used W1
queue no. - - W2
entry no. - - W3
destination(0,1) - - W4
not used - - W5
Release active terminal no. not used W1
flag queue no. - - W2
----------------------------------------------------------
Notation :
Destination (entry No.): last = 0
first = 1
spec. = x
Simple read flag: 0 first entry set active
1 no activation
*Terminal no.: if bit 14 set: unblock queue
if bit 15 set: block queue
3.2.6 F̲o̲r̲m̲a̲t̲ ̲o̲f̲ ̲P̲A̲R̲T̲B̲ ̲f̲o̲r̲ ̲e̲a̲c̲h̲ ̲c̲a̲l̲l̲
The PARTB is used to transfer a parameter block between the caller and QACCESS.
Procedure PARTB
IN OUT PARM
----------------------------------------------------------
Length of group terminal no. change map W1
clear bit map length queue 0 W2
supervisor q - - 1 W3
flag
- - 2 W4
- 3 W5
- 4 W6
- 5 W7
- 6 W8
- 7 W9
- 8 W10
- 9 W11
- 10 W12
- 11 W13
- 12 W14
- 13 W15
----------------------------------------------------------
Note: queue 0 - 6 print queues
- 7 - 11 display queues
- 12 - 13 supervisor queues
The change map indicates which queues have changed since last procedure request.
Change map
set for corresponding queue when change has appeared.
3.3 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲o̲v̲e̲r̲v̲i̲e̲w̲
The functions necessary to support the queue access operation are implemented inside a common
monitor procedure, QACCESS.
There is one code block for each of the defined function described previously. The application
program calls the …02…QACCESS procedure with an operation code, and other I/F parameters appropriate
for the function to be performed
The QACCESS branches to the requested function and access the queue area accordingly.
Critical operations on the queue elements i.e. dynamic linking of elements, are protected
by means of a global semphore.
An option in the I/F to QACCESS is to specify wait/no wait for a free queue element, in case
of no queue elements available. Another option is to specify if the call is priviledged
or not, meaning whether or not the caller is allowed to use queue elements when less than
20% is free.
When enqueueing or dequeueing an MTCB index, the use count of the MTCB is incremented/decremented
calling RESERVE-MTCB or RELEASE-MTCB (ref. MTCB-MONITOR).
N̲o̲d̲e̲/̲M̲E̲D̲E̲ ̲i̲m̲p̲l̲e̲m̲e̲n̲t̲a̲t̲i̲o̲n̲ ̲(̲N̲/̲M̲)̲
The functions described above are implemented. The queues defined as dedicated SCC queues
are excluded.
S̲C̲C̲ ̲i̲m̲p̲l̲e̲m̲e̲n̲t̲a̲t̲i̲o̲n̲
The SCC queue support is different from the N/M in following areas:
- Only the queues defined as dedicated SCC queues
are supported.
- Reorganize queue not to be supported
the indentified differences between the Node/MEDE and the SCC version of QACCESS are items
used at compilation tiime to generate the concerned version
3.3.1 Q̲U̲E̲U̲E̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
A common pool of queue elements is used to support the interfacing between the defined subsystems.
Inside the queue pool a logical partition is made to support the different queue types:
o terminal print queues
o terminal display queues
o subsystem I/F queues
The different queues are handled indentical as terminal queues, i.e. each queue is referenced
via a terminal number and a serial queue number inside the terminal. This concept implies
that the subsystems are considered to be pseudo terminals with a dedicated number for queue
identification.
Precedence queues which are logically related to each other are defined to constitute a "group"
to be processed
according to the defined functions.
The group queues are referenced by giving the "terminal no" for the the group. Access to
a specific queue inside a group can be peformed by giving both the terminal number and the
defined queue serial number.
The different queues are linked elements from entries in the common pool of queue entries
and contains references to the MTCB's for the related messages/remarks queued up to the subsystem
or terminal.
Please refer to Q - INIT Procedure PSP FIX/1200/PSP/0079
Concerning the actual layout of queues: Refer to
FIKS DATA I/F REFFERENCE, FIX/0100/MAN/0004,
Section 6. QUEUES
THIS PAGE IS INTENTIONALLY LEFT BLANK
THIS PAGE IS INTENTIONALLY LEFT BLANK
THIS PAGE IS INTENTIONALLY LEFT BLANK
THIS PAGE IS INTENTIONALLY LEFT BLANK
THIS PAGE IS INTENTIONALLY LEFT BLANK
THIS PAGE IS INTENTIONALLY LEFT BLANK
3.3.2 Q̲u̲e̲u̲e̲ ̲D̲a̲t̲a̲ ̲A̲r̲e̲a̲
Please refer to Q-INIT oricedure PSP FIX/1200/PSP/0079
3.3.3 V̲i̲s̲u̲a̲l̲ ̲T̲a̲b̲l̲e̲ ̲o̲f̲ ̲c̲o̲n̲t̲e̲n̲t̲s̲
Figure 3.3.3-1 provides a visual table of contents of the functional elements that comprise
the QACCESS.
Please note that an AMOS signal is sent to the signal module (if the queue has a such) in
case an element is entered into an empty queue. An exception from this is the NSS and DTS
queues to which a signal is sent each time an element is inserted in these queues. AN other
exception concerns the SRR input queue. If a 'SRR0'-, 'SRR1'-, (etc.) process exists then
a signal is sent to these processes too.
Figure 3.3.3-1
3.3.4 S̲u̲b̲s̲y̲s̲t̲e̲m̲ ̲o̲v̲e̲r̲v̲i̲e̲w̲ ̲H̲I̲P̲O̲ ̲d̲i̲a̲g̲r̲a̲m̲
Figure 3.3.4-1(-4) provides an overview of the functions to support the access to queue data
Figure 3.3.4-1
Figure 3.3.4-2
Figure 3.3.4-3
Figure 3.3.4-4
3.3.5 D̲e̲t̲a̲i̲l̲e̲d̲ ̲Q̲A̲C̲C̲E̲S̲S̲ ̲d̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
3.3.5.1 Q̲A̲C̲C̲E̲S̲S̲ ̲m̲a̲i̲n̲ ̲b̲r̲a̲n̲c̲h̲
3.3.5.1.1 Function
The purpose of the procedure is to support the actual I/F to the application caller for the
queue management, and to perform the branching to the requested QACCESS function.
3.3.5.1.2 F̲l̲o̲w̲ ̲c̲h̲a̲r̲t̲
The QACCESS is described by means of flowcharts in the following.
The main branch of the QACCESS is shown in this section, where as the subbranches which support
the different QACCESS functions are described in subsequent sections 3.3.5.2.1 - 3.3.5.2.9
Procedures used internally in the QACCESS are described in section 3.3.5.2.10.
Flowchart, figure 3.3.5-1
3.3.5.2.1 R̲e̲t̲u̲r̲n̲ ̲q̲u̲e̲u̲e̲ ̲l̲e̲n̲g̲t̲h̲,̲ ̲s̲i̲n̲g̲l̲e̲
3.3.5.2.1.1
Function
The purpose of the procedure is to read the current length for a specified queue:
o check given queue reference
o get queue description via the SI-HEAD
o get the actual length from the Q-HEAD, L-ACTUAL
o protect during read of length
QACCESS subbranch, Flowchart Fig. 3.3.5-2
3.3.5.2.2 R̲e̲t̲u̲r̲n̲ ̲l̲e̲n̲g̲t̲h̲ ̲o̲f̲ ̲t̲e̲r̲m̲i̲n̲a̲l̲ ̲q̲u̲e̲u̲e̲s̲
3.3.5.2.2.1 Function
The purpose of the procedure is to read the current length of each of the queues inside
a terminal
o get queue description via the GR-HEAD
o get the actual length of each queue in the group, from the Q-HEAD
o get requests mode
- if supervisor flag, then get actual length of each supervisor queue from the
Q-HEAD
o protect during read of length
QACCESS Subbranch, Flowchart, fig. 3.3.5-3
3.3.5.2.3 R̲e̲a̲d̲ ̲q̲u̲e̲u̲e̲ ̲e̲n̲t̲r̲y̲,̲ ̲n̲o̲n̲ ̲d̲e̲s̲t̲r̲u̲c̲t̲i̲v̲e̲
3.3.5.2.3.1
Function
The purpose of the procedure is to read, without deletion a specified queue element
o check given queue reference
o get queue descriptionvia SI-HEAD
o check if requested element exists and not already active (active check, only if n̲o̲t̲ simple
read)
o mark element with "pending read", if specified
o read queue element
o get queue length from the Q-HEAD
o protect during read of element
QACCESS Subbranch, Flowchart, fig. 3.3.5-4
3.3.5.2.4 R̲e̲a̲d̲ ̲q̲u̲e̲u̲e̲ ̲e̲n̲t̲r̲y̲,̲ ̲d̲e̲s̲t̲r̲u̲c̲t̲i̲v̲e̲
3.3.5.2.4.1
Function
The purpose of the procedure is to read and delete a specified queue element.
o check given queue reference
o get queue description via SI-HEAD
o check if queue is empty
o check if requested element exist, and not active (pending read)
o read queue element
o delete queue element, by relink the element into the empty queue, (in Q-HEAD)
o update queue length in Q-HEAD
o update status flag in Q-STATUS
o protect during read/delete of element
QACCESS Subbranch, Floqchart, fig. 3.3.5-5
3.3.5.2.5 D̲e̲l̲e̲t̲e̲ ̲q̲u̲e̲u̲e̲ ̲e̲n̲t̲r̲y̲
3.3.5.2.5.1
Function
The purpose of the procedure is to delete a specified queue element.
o check given queue reference
o get queue description via SI-HEAD
o check if requested element exist and is active (=pending read)
o delete queue element, by relink the element into the empty queue, (in Q-HEAD)
o update queue length in Q-HEAD
o update status flag in Q-STATUS
o flag for MTCB synchronization
o protect during delete of element
QACCESS Subbranch, Flowchart, fig. 3.3.5-6
3.3.5.2.6 R̲e̲a̲d̲ ̲g̲r̲o̲u̲p̲ ̲e̲n̲t̲r̲y̲,̲ ̲n̲o̲n̲ ̲d̲e̲s̲t̲r̲u̲c̲t̲i̲v̲e̲
3.3.5.2.6.1
Function
The purpose of the procedure is to read from a queue, the entry with the highest precedence.
o get queue description via the GR-HEAD
o check if queue group is empty
o check if requested element exists, and not already active (=pending read)
o mark element with "pending read " (in Q-HEAD)
o read queue element
o save the "queue identification"
o get the actual length of group queue
o protect during read of length
QACCESS Subbranch, Flowchart, fig. 3.3.5-7
3.3.5.2.7 W̲r̲i̲t̲e̲ ̲q̲u̲e̲u̲e̲ ̲e̲n̲t̲r̲y̲
The purpose of the procedure is to insert an entry into a specified queue.
o check given queue reference
o get queue description via SI-HEAD
o check if free element in queue pool
o if specified entry position is active (= pending read) insert into next position
o insert element by relink one element from the empty queue (in Q-HEAD)
o update queue length in Q-HEAD
o activate "receiving" application
o synchronize with the MTCB monitor
o time stamp the queue element
o update status flag in Q-STATUS
O protect during insertion of element and update of queue length
QACCESS Subbranch, Flowchart, fig 3.3.5-8.1
QACCESS Subbranch, Flowchart, fig. 3.3.5-8.2
3.3.5.2.8 A̲p̲p̲e̲n̲d̲ ̲q̲u̲e̲u̲e̲
The purpose of the procedure is to append one queue to another queue.
o check subject/object queue reference
o get queue descriptions via SI-HEAD
o check if free elements in the destination queue
o check if specified element(s) exists
o check if active element (=pending read) in the source queue
o move "non active" elements to the destination queue, back in queue, from the source queue
o the elements are inserted into the queue by relink of elements from the empty queue
o update queue length in Q-HEAD
o activate "receiving" application
o update status flag in Q-STATUS
o protect during the logical queue movement and update of the queue length
QACCESS Subbranch, Flowchart, fig. 3.3.5-9.1
QACCESS Subbranch, Flowchart, fig. 3.3.5-9.2
3.3.5.2.9 R̲e̲o̲r̲g̲a̲n̲i̲z̲e̲ ̲q̲u̲e̲u̲e̲
The purpose of the procedure is to move, inside a queue, one element from one position to
another.
o check given queue reference
o get queue description via SI-HEAD
o check if requested entry exists, and not active (= pending read)
o move queue entry logically be relink of elements
o protect during the link operation
QACCESS Subbranch, Flowchart, fig. 3.3.5-10.1
QACCESS Subbranch, flowchart, fig. 3.3.5-10.2
3.3.5.2.10 Q̲A̲C̲C̲E̲S̲S̲ ̲I̲n̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
This section contains a short description of procedures internally used by QACCESS:
CHANGE, change to Q-DATA page
PQUEUE, get pointer to Q-HEAD
PQENTRY, get pointer to Q-ENTRY
INSQENTRY, insert given entry in given q
RELQENTRY, move entry from q to empty pool
ACTPROC, signal receiving process if necessary
3.3.5.2.10.1
C̲h̲a̲n̲g̲e̲ ̲P̲a̲g̲e̲
N̲a̲m̲e̲.̲ CHANGE
F̲u̲n̲c̲t̲i̲o̲n̲:̲ The procedure adjusts terminal no. for non-existing terminal processes (message-terminals),
and changes memory-page to Q-AREA page.
I̲n̲p̲u̲t̲:̲
o Terminal no.
o Process memory page
O̲u̲t̲p̲u̲t̲:̲ o Terminal no. (adjusted
o Pointer to Q-AREA
o Q-AREA memory page
QACCESS Internal procedure, Flowchart fig. 3.3.5-11
3.3.5.2.10.2 P̲o̲i̲n̲t̲ ̲t̲o̲ ̲Q̲-̲H̲E̲A̲D̲
N̲a̲m̲e̲:̲ PQUEUE
F̲u̲n̲c̲t̲i̲o̲n̲:̲ The procedure gets a pointer to Q-HEAD for a specified queue.
I̲n̲p̲u̲t̲:̲ o Terminal no.
o Queue no.
o Pointer to Q-AREA
O̲u̲t̲p̲u̲t̲:̲ o Pointer to Q-HEAD
QACCESS Internal procedures, Flowchart fig 3.3.5-12
3.3.5.2.10.3 P̲o̲i̲n̲t̲ ̲t̲o̲ ̲Q̲-̲E̲N̲T̲R̲Y̲
N̲a̲m̲e̲:̲ PQENTRY
F̲u̲n̲c̲t̲i̲o̲n̲:̲ The procedure gets the pointer to a queue entry in the specified queue.
I̲n̲p̲u̲t̲:̲ o Entry No.
= o, last
= 1, first
= n, specific
o Pointer to Q-HEAD
o Pointer to Q-AREA
O̲u̲t̲p̲u̲t̲:̲ o Pointer to Q-ENTRY
QACCESS Internal procedure, Flowchart fig. 3.3.5-13
3.3.5.2.10.4 I̲n̲s̲e̲r̲t̲ ̲q̲u̲e̲u̲e̲ ̲e̲n̲t̲r̲y̲
N̲a̲m̲e̲:̲ INSQENTRY
F̲u̲n̲c̲t̲i̲o̲n̲:̲ The procedure reserves an entry from the pool of free queue elements,
and inserts into a specified queue.
I̲n̲p̲u̲t̲:̲ o Entry no. (position for insert)
= o, last
= 1, first
= n, specific
o Pointer to Q-HEAD
o Pointer to Q-AREA
O̲u̲t̲p̲u̲t̲:̲ o Pointer to Q-ENTRY
QACCESS Internal procedure, flowchart fig. 3.3.5-14.1
QACCESS, insert entry, fig. 3.3.5-14.2
3.3.5.2.10.5 R̲e̲l̲e̲a̲s̲e̲ ̲q̲u̲e̲u̲e̲ ̲e̲n̲t̲r̲y̲
N̲a̲m̲e̲:̲ RELQENTRY
F̲u̲n̲c̲t̲i̲o̲n̲:̲ The procedure removes an entry from a specified queue, and releases it
to the pool of free queue elements.
I̲n̲p̲u̲t̲:̲ o Entry No.
= 0, last
= 1, first
= n, specific
o Pointer to Q-HEAD
o Pointer to Q-ENTRY
o Pointer to Q-AREA
O̲u̲t̲p̲u̲t̲:̲ o None
ACCESS Internal procedure, Flowchart fig. 3.3.5-15.1
QACCESS RELQUENTRY, fig. 3.3.5-15.2
3.3.5.2.10.6 A̲c̲t̲i̲v̲a̲t̲e̲ ̲r̲e̲c̲e̲i̲v̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲s̲s̲
N̲a̲m̲e̲: ACTPROC
F̲u̲n̲c̲t̲i̲o̲n̲:̲ The procedure activates the receiver process defined for an actual queue,
when the first entry is made to the queue.
I̲n̲p̲u̲t̲:̲ o Terminal No.
o Queue No.
o Original Terminal No.
o Pointer to Q-HEAD
o Pointer to Q-AREA
O̲u̲t̲p̲u̲t̲:̲ None
QACCESS Internal procedure, flowchart fig. 3.3.5-16
3.4 D̲a̲t̲a̲ ̲O̲r̲g̲a̲n̲i̲z̲a̲t̲i̲o̲n̲
Please refer to chapter 3.3.1 and Q-INIT procedure PSP FIX/1200/PSP/0079
3.5 S̲t̲o̲r̲a̲g̲e̲ ̲A̲l̲l̲o̲c̲a̲t̲i̲o̲n̲
N/A
3.6 P̲e̲r̲f̲o̲r̲m̲a̲n̲c̲e̲ ̲C̲h̲a̲r̲a̲c̲t̲e̲r̲i̲s̲t̲i̲c̲s̲
N/A
3.7 L̲i̲m̲i̲t̲a̲t̲i̲o̲n̲s̲
None
3.8 E̲r̲r̲o̲r̲ ̲C̲o̲d̲e̲s̲/̲E̲r̲r̲o̲r̲ ̲L̲o̲c̲a̲t̲i̲o̲n̲s̲
Since we are dealing with a monitor no. Error Locations will apply.
Beside the possible error-codes from the MTCB-monitor ref. FIX/1256/PSP/0066, the QACCESS-monitor
returns the following Error Codes:
"C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲c̲o̲d̲e̲s̲ ̲f̲r̲o̲m̲ ̲Q̲A̲C̲C̲E̲S̲S̲"̲
INVALID-QUEUE-NO. = #802;
INVALID-TERM-NO. = #802;
INDEX-EXCEEDS-LENGTH = #802;
INVALID-INDEX = #802;
QUEUE-EMPTY = #803;
FIRST-ENTRY-NOT-ACTIVE = #804;
FIRST-ENTRY-ACTIVE = #806;
QUEUE-OVERFLOW = #805;
NO-QUEUE-ELEMENTS = #801;
NO-GROUP-QUEUE = #802;
OPERATION-FAILED = #801;
ILLEGAL-OPCODE = #801;
3.9 L̲i̲s̲t̲i̲n̲g̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
Please refer to SCCLDD and s/w library FIXLIB.
4. Q̲u̲a̲l̲i̲t̲y̲ ̲A̲s̲s̲u̲r̲a̲n̲c̲e̲
Please refer to System tests S010-S090
5. P̲r̲e̲p̲a̲r̲a̲t̲i̲o̲n̲s̲ ̲f̲o̲r̲ ̲D̲e̲l̲i̲v̲e̲r̲y̲
Please refer to SCCLDD