Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

RELMP - Seiten im Memory Pool freigeben

&pagelevel(3)&pagelevel

Allgemeines

Anwendungsgebiet:

Memory Pool Technik; siehe "Gemeinsamer Speicherbereich für mehrere Anwender (Memory Pool)"

Makrotyp:

S-Typ, MF-Format 1: Standardform/L-/E-Form;

siehe "S-Typ-Makroaufrufe"


Ein Anwender kann explizit (zusammenhängenden) Speicherplatz in einem Memory Pool anfordern (REQMP) und auch wieder freigeben (RELMP). Für die Freigabe von Speicherplatz in einem Memory Pool gilt:

  • der Aufrufer muss Pool-Teilnehmer sein (ENAMP),

  • es ist ohne Bedeutung, wer von den Pool-Teilnehmern den Speicherplatz angefordert hatte und in welchen Portionen dies erfolgte.

Makrobeschreibung

Mit dem Makro RELMP kann der Anwender zusammenhängenden Speicherplatz in einem Memory Pool freigeben. Die Freigabe erfolgt in Speicherseiten (4KB).

Hinweise

  • Ein Memory Pool wird über den Pool-Namen oder über seine Kurzkennung (siehe ENAMP) angesprochen.

  • Die Freigabe von Poolseiten verändert nicht die im ENAMP-Aufruf festgelegte Größe eines Memory Pools.

  • Der freizugebende Speicherplatz muss nicht zusammenhängend zugewiesen worden sein.

  • RELMP wird abgewiesen, wenn für den Memory Pool mit CSTMP Schreibschutz vereinbart wurde.

Makroaufrufformat und Operandenbeschreibung

RELMP

{ {MPNAME=name / MPNAMAD={adr / (r)}[,MPNAMLN={länge / (r)}]} [,SCOPE={LOCAL / GROUP /

USER_GROUP / GLOBAL}] /

MPID={adr / (r)} }

[,ADDR=adr / (r)]

[,BSIZE=anzahl / (r) / ALL]

[,PARMOD=24 / 31]

[,MF=L / (E,..)]

MPNAME=
beschreibt den Namen des Memory Pools (Verbindung mit Operand SCOPE beachten).

name
Name des Memory Pools.

MPNAMAD=
beschreibt die Adresse des Feldes mit name (Verbindung mit Operand SCOPE beachten).

adr
symbolische Adresse (Name) des Feldes.

(r)
r = Register mit dem Adresswert des Feldes.

MPNAMLN=
bezeichnet die Länge des unter MPNAMAD angegebenen Namens.
Wenn nicht spezifiziert:
Längenattribut des Feldes adr oder 54 Byte, wenn MPNAMAD=(r) angegeben wurde.

länge
Länge in Byte.

(r)
r = Register, das länge enthält.

SCOPE=

beschreibt den Geltungsbereich (Teilnehmerkreis) des Memory Pools. Die Angabe dient der eindeutigen Identifizierung des Memory Pools und muss immer in Verbindung mit dem Operanden MPNAME bzw. MPNAMAD spezifiziert werden.

LOCAL
Der Memory Pool wird nur von dem einrichtenden Teilnehmer benutzt.

GROUP
Teilnehmer können alle Tasks unter der Benutzerkennung des einrichtenden Teilnehmers sein.

USER_GROUP
Teilnehmer können alle Tasks sein, deren Benutzerkennungen der gleichen Benutzergruppe angehören wie die Benutzerkennung des einrichtenden Teilnehmers. Der Operandenwert setzt die Existenz von Benutzergruppen voraus und kann daher nur angegeben werden, wenn die Funktionseinheit SRPM des Software-Produkts SECOS im System vorhanden ist. Vor einem Makroaufruf mit SCOPE=USER_GROUP muss deshalb mit dem Makro GETUGR (siehe Handbuch „SECOS“ [14]) geprüft werden, ob SRPM zur Verfügung steht; abhängig vom Ergebnis (Returncode) ist im Programm zu reagieren.

GLOBAL
Teilnehmer können alle im System laufenden Tasks sein.

MPID=
beschreibt die Adresse eines Feldes (Länge = 4 Byte) mit der Kurzkennung für den Memory Pool (siehe auch ENAMP). Die Kurzkennung identifiziert den Memory Pool eindeutig; die Angabe beschleunigt die Verarbeitung.

adr
symbolische Adresse (Name) des Feldes mit der Kurzkennung.

(r)
r = Register mit dem Adresswert des Feldes.

ADDR=
bezeichnet die Anfangsadresse des Speicherbereichs, der freigegeben werden soll. Die Adresse muss auf eine 4KB-Grenze ausgerichtet sein. Der gesamte Bereich muss im angegebenen Memory Pool liegen.

Hinweis

Der Operand ADDR muss spezifiziert werden, wenn nicht BSIZE=ALL angegeben wird.

adr
Anfangsadresse.

(r)
r = Register mit der Anfangsadresse.

BSIZE=

beschreibt die Größe des freizugebenden Speicherbereichs in Speicherseiten (4 KB). Voreinstellung: BSIZE=1.

Hinweis

Die Angabe BSIZE=0 ist erlaubt: Es wird kein Speicherplatz freigegeben.

anzahl
Anzahl der Speicherseiten.

(r)
r = Register, das anzahl enthält.

ALL
Alle für den Memory Pool angeforderten Speicherseiten werden freigegeben. Diese Angabe kann auch im Register r, in der Form C' ALL', erfolgen.

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.

PARMOD=
steuert die Makroauflösung. Es wird entweder die 24-Bit- oder die 31-Bit-Schnittstelle generiert.
Wenn PARMOD nicht spezifiziert wird, erfolgt die Makroauflösung entsprechend der Angabe für den Makro GPARMOD oder der Voreinstellung für den Assembler (= 24-Bit-Schnittstelle).

24
Die 24-Bit-Schnittstelle wird generiert; Datenlisten benutzen 24-Bit-Adressen (Adressraum <= 16 MB).

31
Die 31-Bit-Schnittstelle wird generiert. Datenlisten benutzen 31-Bit-Adressen (Adressraum <= 2 GB) und beginnen mit dem Standardheader.

Rückinformation und Fehleranzeigen

Nach der Makrobearbeitung enthält Register R1 die Adresse des Datenbereichs.

R15:

+---------------+
|   |   |   |   |
|b|b|0|0|0|0|a|a|
+---------------+

Über die Ausführung des Makros RELMP wird ein gegliederter Returncode (aa=primärer RC, bb=sekundärer RC) im Register R15 übergeben.
aa = X'00': normale Ausführung,
aa = X'04': Funktion nicht ausgeführt.

X'bb'

X'aa'

Erläuterung

X'00'

X'00'

Normale Ausführung. Speicherseiten wurden freigegeben.

X'18'

X'00'

Normale Ausführung. Speicherseiten wurden freigegeben; innerhalb des angegebenen
Bereichs waren nicht alle Seiten angefordert worden.

X'04'

X'04'

Funktion nicht ausgeführt. Aufrufer ist kein Memory-Pool-Teilnehmer (kein
ENAMP-Aufruf).

X'18'

X'04'

Funktion nicht ausgeführt. Ungültiger Speicherbereich:

  • Anfangsadresse oder eine Adresse des angegebenen Speicherbereichs liegt
    außerhalb des Memory Pools.

  • Anfangsadresse nicht auf 4-KB-Grenze ausgerichtet.

  • Der angegebene Speicherbereich überlappt ganz oder teilweise mit einem
    Bereich, der von DIV oder FASTPAM genutzt wird.

X'1C'

X'04'

Funktion nicht ausgeführt. Operandenfehler:

  • unzulässige Adresse des Datenbereichs.

  • fehlerhafter Aufbau des Datenbereichs.

  • unzulässige Adressen für MPNAMAD oder MPID im Datenbereich.

  • Bezeichnung des Memory Pools:
    - Name enthält unzulässige Zeichen
    - ungültige Längenangabe (MPNAMLN)
    - MPNAMLN angegeben, aber MPNAMAD nicht spezifiziert
    - weder MPNAME noch MPNAMAD noch MPID angegeben
    - SCOPE angegeben, aber MPNAME/MPNAMAD nicht spezifiziert.

Benennung nicht eindeutig. Es wurde mehr als nur ein Operand spezifiziert (MP-
NAME/MPNAMAD/MPID).

  • ungültige SCOPE-Angabe.

  • ungültige BSIZE-Angabe.

  • es wurde weder der Operand ADDR noch BSIZE=ALL angegeben

  • ungültiges Register (R1) angegeben

  • PARMOD=24 in Verbindung mit 31-Bit-Adressierungsmodus (AMODE 31)
    angegeben.

  • SCOPE=USER_GROUP wurde angegeben, obwohl SRPM nicht im System
    vorhanden ist.

  • Die Freigabe von Nicht-Memory-Pool-Seiten wird nicht mehr unterstützt.

X'24'

X'04'

Funktion nicht ausgeführt. Berechtigungsfehler:

  • Memory Pool ist mit Schreibschutz versehen.

  • Memory Pool wurde von einem privilegierten Teilnehmer gegen Seitenfreigabe
    geschützt. Aufruf evtl. wiederholen.

  • Aufrufer ist nicht berechtigt, Speicherseiten in einem privilegierten oder Klas-
    se-5-MP freizugeben.

31-Bit-Schnittstelle:

  • Bei fehlerhafter Ausrichtung oder Initialisierung des Standardheaders werden im Register R15 zusätzlich die Returncodes X'0001FFFF' / X'0003FFFF' / X'0004FFFF' übergeben; siehe Tabelle „Standard-Returncodes“ (Standardheader).

  • Im Standardheader wird kein Returncode übergeben.