Allgemeines
Anwendungsgebiet: | Memory Pool Technik; siehe "Gemeinsamer Speicherbereich für mehrere Anwender (Memory Pool)" |
Makrotyp: | S-Typ, MF-Format 1: Standardform/L-/D-/E-Form; siehe "S-Typ-Makroaufrufe" |
Ein Memory Pool (MP) ist ein Speicherbereich im Klasse-6-Speicher, der von mehreren Anwendern gemeinsam benutzt werden kann. Seine Größe (und Lage) wird von dem ersten Anwender festgelegt. Ein Memory Pool kann mit Schreibschutz ausgestattet werden (CSTMP besitzt Vorrang vor CSTAT).
Beispiel für das Anlegen eines „Read Only Memory Pool“:
MP anlegen und Speicherseiten anfordern (ENAMP, REQMP),
In den MP schreiben (z.B. Laden „Shared Code“),
Schreibschutz einrichten: MP auf „Read Only“ setzen (CSTMP)
Makrobeschreibung
Mit dem Makro CSTMP kann der (dazu berechtigte) Anwender einen Memory Pool mit Schreibschutz (nur Lesezugriff erlaubt) versehen oder denselben aufheben. Der geforderte Zugriffsschutz gilt für alle Seiten und alle Teilnehmer des Memory Pools. Die Funktion wird nur ausgeführt, wenn der Anwender die geforderte Berechtigung (CSTMP-MACRO-ALLOWED=*YES) im Benutzerkatalog besitzt.
Hinweise
Ein Memory Pool wird über den Pool-Namen oder über seine Kurzkennung angesprochen (siehe ENAMP).
CSTMP überlagert die Wirkung des Makros CSTAT:
CSTAT wird abgewiesen, wenn der Schreibschutz schon mit CSTMP eingerichtet wurde.
mit CSTAT eingerichteter Schreibschutz kann mit CSTMP aufgehoben oder auf alle Poolseiten erweitert werden. In letzterem Fall kann der Schreibschutz nur mit CSTMP wieder aufgehoben werden.
Hierarchisch abgestufte Schutzmöglichkeiten können mit CSTMP nicht eingerichtet werden.
Für einen MP mit Schreibschutz können weder Speicherseiten angefordert (REQMP) noch freigegeben werden (RELMP).
Makroaufrufformat und Operandenbeschreibung
CSTMP | Format 1 |
| |
CSTMP | Format 2 |
| |
CSTMP | Format 3 |
|
MPNAME=
beschreibt den Namen des Memory Pools.
name
Name des Memory Pools (Verbindung mit Operand SCOPE beachten).
MPNAMAD=
gibt die Adresse des Feldes an, in dem der Name der Memory Pools steht.
adr
symbolische Adresse (Name) des Feldes (Verbindung mit Operand SCOPE beachten).
MPNAMLN=
bezeichnet die Länge des unter MPNAMAD angegebenen Namens.
Wenn nicht spezifiziert: Längenattribut des Feldes adr.
länge
Länge in Byte.
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
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 mit 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.
ACCESS=
beschreibt, ob auf den Memory Pool nur Lesezugriffe oder auch Schreibzugriffe zulässig sind (Berechtigung zum Schreibzugriff impliziert auch Lesezugriff). Der Zugriffsschutz gilt für alle Teilnehmer.
WRITE
Schreibzugriff erlaubt.
READ
es ist nur Lesezugriff erlaubt.
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 = CST
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 CSTMP wird ein gegliederter Returncode (aa=primärer RC, bb=sekundärer RC) im Register R15 übergeben.
X'bb' | X'aa' | Erläuterung |
X'00' | X'00' | normale Ausführung |
X'04' | X'04' | Funktion nicht ausgeführt. Aufrufer ist kein Memory Pool-Teilnehmer (kein |
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.