General
Application area: | Memory pools; see "Common memory areas shared by several users (Memory pools)" |
Macro type: | Type S, MF format 1: standard/L/E form; see "S-type macros" |
A memory pool is a memory area (class 6 memory) that can be used by several users together. With ENAMP, a user can create a memory pool or declare participation in an existing memory pool. With DISMP, a user can explicitly terminate participation in a memory pool; participation is terminated implicitly with program termination.
A memory pool is addressed either via the pool name or via its ID (see ENAMP).
Following DISMP, participation in the same (still existing) memory pool must be declared again via ENAMP. The caller is given a new ID for the memory pool.
Macro description
A memory pool participant can sever the connection to the memory pool with the DISMP macro. The memory pool is deleted if the caller is the last (or only) user. All pages of the pool are implicitly released in this case.
Macro format and description of operands
DISMP |
{ {MPNAME=name / MPNAMAD={addr / (r)}[,MPNAMLN={length / (r)}] } ,SCOPE={LOCAL / GROUP / USER_GROUP / GLOBAL} / MPID={addr / (r) } [,PARMOD=24 / 31] [,MF=L / (E,..)] |
MPNAME=
Specifies the name of the memory pool. Note the connection with the SCOPE operand.
name
Name of the memory pool.
MPNAMAD=
Defines the address of the field with “name”.
(Note the connection with the SCOPE operand).
addr
Symbolic address (name) of the field.
(r)
Register containing the address value of the field.
MPNAMLN=
Defines the length of the name specified under MPNAMAD.
If not specified: length attribute of the addr field or, if MPNAMAD=(r) was specified, 54 bytes.
length
Length in bytes.
(r)
Register containing the length.
SCOPE=
Defines the scope (authorized users) of the memory pool. The specification is used to identify the memory pool uniquely and must always be specified in conjunction with the MPNAME and MPNAMAD operands.
LOCAL
The memory pool is used only by the user who created it.
GROUP
Memory pool users can be all the tasks with the same user ID as the user that created the memory pool.
USER_GROUP
All the tasks, whose user IDs belong to the same user group as the user ID of the creating participant, can be participants.
The operand value assumes the existence of user groups and may therefore only be specified when the SRPM function unit of the SECOS software product is available in the system. This is why the GETUGR macro (see the “SECOS” manual [14 (Related publications)]) has to check whether SRPM is available prior to a macro call with SCOPE=USER_GROUP. The program reaction is dependent on the result (return code).
GLOBAL
All the tasks in the system are participants.
MPID=
Defines the address of a field (length = 4 bytes) with the ID for the memory pool (see ENAMP). The ID identifies the memory pool uniquely. Identifying the memory pool by the ID instead of by the name reduces processing time.
addr
Symbolic address (name) of the field containing the ID.
(r)
Register containing the address value of the field.
MF=
For a general description of the MF operand, its operand values and any subsequent operands (e.g. for a prefix), see "S-type macros". The valid MF values are given at the start of the macro description under “Macro type” and are included in the macro format.
PARMOD=
Controls macro expansion. Either the 24-bit or the 31-bit interface is generated.
If PARMOD is not specified here, macro expansion is performed according to the specification for the GPARMOD macro or according to the default setting for the assembler (= 24-bit interface).
24
The 24-bit interface is generated. Data lists and instructions use 24-bit addresses (address space <= 16 Mb).
31
The 31-bit interface is generated. Data lists and instructions use 31-bit addresses (address space <= 2 Gb). Data lists start with the standard header.
Return information and error flags
After macro processing, register R1 contains the operand list address.
R15:
+---------------+ | | | | | |b|b|0|0|0|0|a|a| +---------------+
A structured return code (aa=primary return code, bb=secondary return code) relating to the execution of the DISMP macro is transferred in register R15.
aa=X'00' : normal execution;
aa=X'04' : function not executed.
X'bb' | X'aa' | Meaning |
X'0C' | X'00' | Normal execution; caller is the last or only participant; memory pool is deleted. |
X'10' | X'00' | Normal execution; end of participation in memory pool; memory pool is retained. |
X'04' | X'04' | Function was not carried out. The caller is not a participant in the memory pool in |
X'1C' | X'04' | Function was not carried out; operand error:
|
X'24' | X'04' | Function not carried out; authorization error:
|
31-bit interface:
In the event of errors in the alignment or initialization of the standard header, the return codes X'0001FFFF' / X'0003FFFF'/ X'0004FFFF' are additionally transferred in register R15; see the table “Standard return codes” (Standard header).
No return codes are transferred in the standard header.