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 Memory Pool ist ein Speicherbereich im Klasse-6-Speicher, der von mehreren Anwendern gemeinsam benutzt werden kann. Ein Anwender kann mit ENAMP einen Memory Pool einrichten oder seine Teilnahme an einem bestehenden erklären. Mit DISMP kann ein Anwender explizit seine Teilnahme an einem Memory Pool beenden; implizit mit Programmbeendigung.
Ein Memory Pool wird über den Pool-Namen oder über seine Kurzkennung (siehe ENAMP) angesprochen.
Nach DISMP muss die erneute Teilnahme an demselben (noch bestehenden) Memory Pool wieder mit ENAMP erklärt werden; der Aufrufer erhält eine neue Kurzkennung für den Memory Pool.
Makrobeschreibung
Mit dem Makro DISMP kann ein Memory Pool-Teilnehmer die Verbindung zu dem Memory Pool lösen. Der Memory Pool wird aufgelöst, wenn der Aufrufer der letzte (einzige) Teilnehmer ist. In diesem Fall werden alle Seiten des Pools implizit freigegeben.
Makroaufrufformat und Operandenbeschreibung
DISMP |
{ {MPNAME=name / MPNAMAD={adr / (r)}[,MPNAMLN={länge / (r)}] },SCOPE={LOCAL / GROUP / USER_GROUP / GLOBAL} / MPID={adr / (r) } [,PARMOD=24 / 31] [,MF=L / (E,..)] |
MPNAME=
bezeichnet 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=
beschreibt die Länge des unter MPNAMAD angegebenen Namens. Wenn nicht spezifiziert: Längenattribut des Feldes adr bzw. 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 den 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 SE-COS 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 Bezeichnung des Memory Pools mittels MPID beschleunigt die Verarbeitung.
adr
symbolische Adresse (Name) des Feldes mit der Kurzkennung
(r)
r = Register mit dem Adresswert des Feldes
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe „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 und Befehle benutzen 24-Bit-Adressen (Adressraum <= 16 MB).
31
Die 31-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 31-Bit-Adressen (Adressraum <= 2 GB). Datenlisten 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 DISMP wird im Register R15 ein gegliederter Returncode (aa=primärer RC, bb=sekundärer RC) übergeben.
aa=X'00' : normale Ausführung;
aa=X'04' : Funktion nicht ausgeführt.
X'bb' | X' aa' | Erläuterung |
X'0C' | X'00' | Normale Ausführung. Aufrufer = letzter oder einziger Teilnehmer; |
X'10' | X'00' | Normale Ausführung. Teilnahme am Memory Pool beendet; |
X'04' | X'04' | Funktion nicht ausgeführt. Aufrufer ist kein Teilnehmer des genannten Memory |
X'1C' | X'04' | Funktion nicht ausgeführt. Operandenfehler:
|
X'24' | X'04' | Funktion nicht ausgeführt. Berechtigungsfehler:
|
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 werden keine Returncodes übergeben.