Allgemeines
Anwendungsgebiet: | Anwendungsgebiet: Arbeiten mit virtuellem Speicher; siehe "Arbeiten mit virtuellem Speicher"; Memory-Pool-Technik; siehe "Gemeinsamer Speicherbereich für mehrere Anwender (Memory Pool)"; Abfragen und Zugriff zu Listen und Tabellen; siehe "Abfragen und Zugriff zu Listen und Tabellen" |
Makrotyp: | S-Typ, MF-Format 1 (31-Bit-Schnittstelle): Standardform/L-/D-/E-Form; siehe "S-Typ-Makroaufrufe" |
Die Größe des Klasse-6-Speichers kann sich während des Programmlaufs verändern, abhängig von den Anforderungen an den Klasse-5- und Klasse-6-Speicher.
Makrobeschreibung
Der Makro MINF informiert den Anwender über Größe und Belegung seines
Klasse-6-Speichers oder eines
Memory Pools im Klasse-6-Speicher.
In Form einer Bittabelle wird ausgegeben, ob die Seite belegt ist oder nicht.In der Bittabelle bedeuten:
Byte 0, Bit 27 repräsentiert die 1. (angeforderte) Speicherseite,
Byte 0, Bit 26 repräsentiert die 2. Speicherseite,
:
:
Byte 0, Bit 20 repräsentiert die 8. Speicherseite,
Byte 1, Bit 27 repräsentiert die 9. Speicherseite,
usw.
Für die Belegung gilt:
Bit 2n = 0: Speicherseite ist belegt.
Bit 2n = 1: Speicherseite ist nicht belegt.
Hinweis
Sollen Informationen über den Klasse-6-Speicher ausgegeben werden (Operand CL6), gilt jede Seite innerhalb eines Memory Pools als belegt. Dabei ist es unabhängig, ob die Seite bereits mittels REQMP angefordert wurde oder nicht.
Sollen Informationen über den Memory Pool selbst ausgegeben werden (Operand MP), gelten nur die Seiten als belegt, die bereits mittels REQMP angefordert wurden.
Makroaufrufformat und Operandenbeschreibung
MINF |
{CL6 / MP} ,INF= {SIZE / FREE,MAP=adr} ,ADDR=adr ,MF=S / (E,...) / L / (D,pre) / D |
CL6
Informationen über die Speicherseitenbelegung des Klasse-6-Speichers des Anwenders werden ausgegeben. Speicherseiten eins Memory Pools werden immer als belegt gekennzeichnet.
MP
Informationen über die Speicherseitenbelegung eines Memory Pools (Klasse-6-Speicher) werden ausgegeben. Es werden nur die Speicherseiten als belegt gekennzeichnet, die mit REQMP angefordert waren.
INF=
bezeichnet die Art der angeforderten Information.
SIZE
Die virtuelle Seitennummer (VPN) der ersten Speicherseite und die Größe (Anzahl Speicherseiten) des Klasse-6-Speichers/ Memory Pools werden ausgegeben. Die Ausgabe erfolgt in das beim Operanden ADDR angegebene Feld.
FREE,MAP=adr
Eine Bittabelle über die Belegung der Speicherseiten des beim Operanden ADDR angegebenen Speicherbereichs wird ausgegeben. Die Ausgabe erfolgt in das beim Operanden MAP angegebene Feld. Eine Zusatzinformation über die Länge der Bittabelle wird in das bei ADDR angegebene Feld eingetragen.
adr = symbolische Adresse (Name) eines Feldes
(Für je 8 Speicherseiten wird 1 Byte Feldlänge benötigt).
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei der D-Form des Makroaufrufs kann ein Präfix (pre = 1..3 Buchstaben), wie im Aufrufformat dargestellt, angegeben werden.
Voreinstellung: pre = MNF
ADDR=adr
bezeichnet ein Feld, das sowohl zur Eingabe als auch zur Ausgabe dient (Operand INF). Feldlänge = 16 Byte (4 Worte). Das Feld ist auf Wortgrenze auszurichten.
adr
symbolische Adresse (Name) des Feldes
Der Inhalt ist wie folgt von der Angabe CL6/MP/SIZE abhängig:
CL6, INF=SIZE: (nur Ausgabefeld)
Byte | Output |
0 - 3 | VPN der ersten Speicherseite unterhalb 16 MB |
4 - 7 | Anzahl Speicherseiten unterhalb 16 MB |
8 - 11 | VPN der ersten Speicherseite oberhalb 16 MB oder X' 00000000' |
12 - 15 | Anzahl Speicherseiten oberhalb 16 MB od. X' 00000000' |
X'00000000' wird ausgegeben, wenn oberhalb 16 MB kein Klasse-6-Speicher existiert. |
MP,INF=SIZE:
Byte | Input | Output |
0 - 3 | VPN einer beliebigen Poolseite | VPN der ersten Speicherseite des Memory |
4 - 7 | nicht benutzt | Größe (Anzahl der Seiten) des Memory Pools |
8 - 11 | nicht benutzt | nicht verändert 1) |
12 - 15 | nicht benutzt | nicht verändert 1) |
1)nicht verändert bedeutet: Bei mehreren aufeinander folgenden MINF-Aufrufen steht der beim |
CL6/MP,INF=FREE:
Byte | Input | Output |
0 - 3 | VPN der ersten Seite des | nicht verändert |
4 - 7 | Anzahl Speicherseiten über die | Anzahl Speicherseiten, die durch die Bittabelle |
8 - 11 | nicht benutzt | nicht verändert |
12 - 15 | nicht benutzt | nicht verändert |
Die angegebene VPN muss ein n-faches von 16 sein (n=0,1,...). |
Rückinformation und Fehleranzeigen
Nach der Makrobearbeitung enthält Register R1 die Adresse der Operandenliste.
R15:
+---------------+ | | | | | |0|0|0|0|0|0|a|a| +---------------+
Über die Ausführung des Makros MINF wird ein Returncode (aa=primärer RC, bb=sekundärer RC) im Register R15 übergeben. Dieser Returncode wird auch im Standardheader der Operandenliste übergeben.
X'aa' | Erläuterung |
X'00' | Funktion ausgeführt. |
X'04' | Operandenfehler (ungültige Adresse bei MF=(E,...) angegeben). |
X'08' | Ungültige VPN (die angegebene Seite befindet sich nicht im Klasse-6-Speicher / Memory |
X'0C' | Adressenfehler (Datenbereich/ADDR-Feld/MAP). |
Beispiel
In dem Beispiel soll die Größe, Lage und Seitenbelegung eines Memory Pools abgefragt werden, der oberhalb der 16MB-Grenze eingerichtet ist.
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'
Ablaufprotokoll:
/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) | Einrichten eines Memory Pools oberhalb der 16MB-Grenze. Größe des Memory Pools = 48 Speicherseiten (wird auf 1 MB gerundet). |
(2) | Es werden 5 Speicherseiten ab der Anfangsadresse angefordert. |
(3) | REQMP liefert in Register R1 die Anfangsadresse des Memory Pools. Das Feld |
(4) | Erster MINF-Aufruf:Größe und Lage des Memory Pools sollen ausgegeben werden.Die Ausgabe erfolgt in das Feld |
(5) | Zweiter MINF-Aufruf:Eine Bittabelle über die ersten 16 Seiten des Memory Pools soll ausgegeben werden (der vorhergegangene MVC überträgt die Zahl 16 in das zweite Eingabefeld |
(6) | Nach Ausführung des ENAMP werden die Anfangsadresse und der Returncode abgefragt. Der Memory Pool beginnt auf Adresse X'01100000'.RC = X'04000000' bedeutet: ein neuer Memory Pool wurde eingerichtet. |
(7) | Nach Ausführung des REQMP werden die Adresse des reservierten Bereichs und der Returncode abgefragt. Der reservierte Bereich beginnt ab Adresse X'01100000'; RC = X'00000000'. |
(8) | Im MINF-Inputfeld steht X'00001101' = 4353 als VPN einer Memory Pool-Seite. |
(9) | Nach dem ersten MINF:Die VPN der ersten Seite und die Größe des Memory Pools werden ausgegeben: VPN = 4352 (entspricht X'1100'); Größe = 256 Seiten (entspricht X'100'). Die VPN der ersten Seite bleibt als Input für den zweiten MINF-Aufruf. |
(10) | Nach dem zweiten MINF:
|