General
Application areas: | Working with virtual memory; see "Working with virtual memory" |
Macro type: | Type S, MF format 1: |
The size of class 6 memory may vary within a program run, depending on class 5 and class 6 memory space requirements.
Macro description
The MINF macro provides the user with information about the utilization of
the class 6 memory allocated to the user, or
a memory pool in class 6 memory.
The information is output in the form of a bit table which indicates for a particular memory page whether it is occupied or not. The entries in the bit table have the following meaning:
byte 0, bit 27 represents the 1st (requested) memory page,
byte 0, bit 26 represents the 2nd memory page,
:
:
byte 0, bit 20 represents the 8th memory page,
byte 1, bit 27 represents the 9th memory page,
etc.
Memory page utilization is indicated thus:
bit 2n = 0: memory page is occupied.
bit 2n = 1: memory page is not occupied.
Note
If information on class 6 memory is to be output (CL6 operand), each page within a memory pool is considered to be occupied, regardless of whether or not the page has already been requested by means of REQMP.
If information on the memory pool itself is to be output (MP operand), only those pages that have already been requested by means of REQMP are considered to be occupied.
Macro format and description of operands
MINF |
{CL6 / MP} ,INF= {SIZE / FREE,MAP=addr} ,ADDR=addr ,MF=S / (E,...) / L / (D,pre) / D |
CL6
Information about the utilization of the class 6 memory allocated to the user is output. Pages of a memory pool are always marked as in use.
MP
Information about the utilization of a memory pool (class 6 memory) is output. Only those pages are marked as in use which have been requested by means of REQMP.
INF=
Specifies the type of information requested.
SIZE
The virtual page number (VPN) of the first page and the size (number of pages) of the class 6 memory/memory pool are output. The information is output to the field specified by the ADDR operand.
FREE,MAP=addr
A bit table is output, indicating the utilization of pages of the memory area specified with the ADDR operand. The bit table is output to the field specified by the MAP operand. Additional information about the length of the bit table is entered in the field specified with ADDR.
“addr“ is the symbolic address (name) of a field (1 byte of the field's length is required for every 8 memory pages).
MF=
For a general description of the MF operand, its operand values and any subsequent operands (e.g. for a prefix), see section “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.
A prefix (pre = 1..3 letters) can be specified in the D form of the macro, as shown in the macro format.
Default setting: pre = MNF
ADDR=addr
Specifies a field which is used for both input and output (operand INF).
Field length = 16 bytes (4 words). The field must be aligned on a word boundary.
addr
Symbolic address (name) of the field.
The contents depend on the specification for CL6/MP/SIZE, as illustrated below:
CL6, INF=SIZE: (output field only)
Byte | Output |
0 - 3 | VPN of first memory page below 16 Mb |
4 - 7 | Number of memory pages below 16 Mb |
8 - 11 | VPN of first memory page above 16 Mb or X' 00000000' |
12 - 15 | Number of memory pages above 16 Mb or X' 00000000' |
X'00000000' is output if no class 6 memory exists above 16 Mb. |
MP,INF=SIZE:
Byte | Input | Output |
0 - 3 | VPN of any pool page | VPN of 1st memory pool page |
4 - 7 | not used | size (number of pages) of memory pool |
8 - 11 | not used | not changed 1) |
12 - 15 | not used | not changed 1) |
1)'not changed' means: In the event of a number of consecutive MINF calls, the contents specified with the preceding call are retained. |
CL6/MP,INF=FREE:
Byte | Input | Output |
0 - 3 | VPN of 1st page of requested area | not changed |
4 - 7 | Number of memory pages about | Number of memory pages actually described by |
8 - 11 | not used | not changed |
12 - 15 | not used | not changed |
The specified VPN must be a multiple of 16 (n=0,1,...) |
Return information and error flags
After macro processing, register R1 contains the operand list address.
R15:
+---------------+ | | | | | |0|0|0|0|0|0|a|a| +---------------+
A return code relating to the execution of the MINF macro is transferred in register R15. The same RC is additionally transferred in the standard header of the operand list.
X'aa' | Meaning |
X'00' | Function has been executed |
X'04' | Operand error (illegal address specified with MF=(E,...) |
X'08' | Invalid VPN (the specified page is not located in class 6 memory/memory pool, or the value |
X'0C' | Address error (operand list/ADDR field/MAP) |
Example
In the example, information about the size, location and page utilization of a memory pool is requested; the memory pool has been created above the 16-Mb boundary.
MINF START PRINT NOGEN MINF AMODE 31 MINF RMODE ANY GPARMOD 31 1 *,MACRO: GPARMOD, VERSION: VER121 BALR 3,0 USING *,3 ENAMP MPNAME=MEMP,SCOPE=GLOBAL,MPIDRET=PID,BSIZE=48 ———————— (1) 1 *,ENAMP: 144/951025 REQMP REQMP MPID=PID,BSIZE=5 ————————————————————————————————————— (2) 1 *,REQMP: 141 / 950210 * DTH1 LR 4,1 —————————————————————————————————————————————————— (3) LA 4,4095(1) LA 4,1(4) LR 5,4 SRL 5,12 ST 5,MPINF1 MINF1 MINF MP,ADDR=MPINF,INF=SIZE ——————————————————————————————— (4) 1 *,MACRO: MINF, VERSION: VER174
DTH2 MVC MPINF2,=F'16' MVC 0(27,4),TEXT MINF2 MINF MP,ADDR=MPINF,INF=FREE,MAP=BITTAB ———————————————————— (5) 1 *,MACRO: MINF, VERSION: VER174 TERM TERM * **** Definitions **** * MPINF DS 0F MPINF1 DS F MPINF2 DS F MPINF3 DS F MPINF4 DS F PID DS F BITTAB DS CL4 TEXT DC C'2ND PAGE OF MEMORY POOL' END =F'16'
Runtime log:
/start-assembh % BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED % ASS6010 <ver> OF BS2000 ASSEMBH READY //compile source=*library-element(macexmp.lib,minf), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,minf)), - // test-support=*aid % ASS6011 ASSEMBLY TIME: 358 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 82 MSEC //end % ASS6012 END OF ASSEMBH /load-executable-program library=macexmp.lib,element-or-symbol=minf, - / test-options=*aid,prog-mode=*any % BLS0523 ELEMENT 'MINF', VERSION '@' FROM LIBRARY ':2OSG:$QM212.MACEXMP.LIB' IN PROCESS % BLS0524 LLM 'MINF', VERSION ' ' OF '<date> <time>' LOADED /%in reqmp <%d c' ',c'- label reqmp:',%1,%15> /%in dth1 <%d c' ',c'- label dth1:',%1,%15> /%in minf1 <%d c' ',c'- label minf1:',mpinf1, mpinf1 %x> /%in dth2 <%d c' ',c'- label dth2:',mpinf1, mpinf1 %x,mpinf2, mpinf2 %x> /%in term <%d c' ',c'- label term:',%@(bittab) -> %xl4;%d %4 -> %xl30> /%r
- LABEL REQMP: ———————————————————————————————————————————————————————— (6) *** TID: 005000D8 *** TSN: 2QSE ********************************************* CURRENT PC: 01000040 CSECT: MINF **************************************** ** %1 = 01100000 %15 = 04000000 - LABEL DTH1: ————————————————————————————————————————————————————————— (7) CURRENT PC: 0100006A CSECT: MINF **************************************** %1 = 01100000 %15 = 00000000 - LABEL MINF1: ———————————————————————————————————————————————————————— (8) SRC_REF: 100 SOURCE: MINF PROC: MINF ************************************ MPINF1 = 4353 CURRENT PC: 01000080 CSECT: MINF **************************************** V'010000E0' = MPINF1 + #'00000000' 010000E0 (00000000) 00001101 .... - LABEL DTH2: ————————————————————————————————————————————————————————— (9) SRC_REF: 117 SOURCE: MINF PROC: MINF ************************************ MPINF1 = 4352 CURRENT PC: 0100009A CSECT: MINF **************************************** V'010000E0' = MPINF1 + #'00000000' 010000E0 (00000000) 00001100 .... SRC_REF: 117 SOURCE: MINF PROC: MINF ************************************ MPINF2 = 256 CURRENT PC: 0100009A CSECT: MINF **************************************** V'010000E4' = MPINF2 + #'00000000' 010000E4 (00000000) 00000100 .... - LABEL TERM: ————————————————————————————————————————————————————————— (10) CURRENT PC: 010000C2 CSECT: MINF **************************************** V'010000F4' = MINF + #'000000F4' 010000F4 (000000F4) 07FF0000 .~.. V'01101000' = ABSOLUT + #'01101000' 01101000 (01101000) F2D5C440 D7C1C7C5 40D6C640 D4C5D4D6 2ND PAGE OF MEMO 01101010 (01101010) D9E840D7 D6D6D300 00000000 0000 RY POOL.......
(1) | Create a memory pool above the 16-Mb boundary.Size of the memory pool = 48 memory pages (rounded to 1 Mb). |
(2) | Reserve 5 memory pages beginning with the start address. |
(3) | REQMP supplies the start address of the memory pool in register R1. The field |
(4) | First MINF call:Output size and location of the memory pool.Output is to the field |
(5) | Second MINF call:A bit table of the first 16 pages of the memory pool is to be output (the preceding MVC transfers the figure 16 into the second input field |
(6) | After execution of ENAMP, the start address and the return code are interrogated. The memory pool starts at address X'01100000'.RC = X'04000000' means: a new memory pool has been created. |
(7) | After execution of REQMP, the address of the reserved area and the return code are interrogated. The reserved area starts at address X'01100000'; RC = X'00000000'. |
(8) | The input field for MINF contains X'00001101' = 4353 as the VPN of a memory pool page. |
(9) | After the first MINF:The VPN of the first page and the size of the memory pool are output: VPN = 4352 (corresponds to X'1100'); size = 256 pages (corresponds to X'100'). The VPN of the first page is retained as input for the second MINF call. |
(10) | After the second MINF:
|