Dieses Dokument beschreibt, wie Natural Hauptspeicher zuordnet und verwendet. Ein von einer Natural-Nukleuskomponente angeforderter Speicherbereich wird als Buffer (EN) oder Puffer (DE) bezeichnet.
In diesem Kapitel werden die folgenden Themen behandelt:
Es gibt zwei verschiedene Arten von Speicherumgebungen:
Thread-Speicherumgebung (typisch für Mehrbenutzerumgebungen, z. B. CICS)
Nicht-Thread-Speicherumgebung (typisch für Einzelbenutzerumgebungen, z. B. Batch)
In einer Thread-Umgebung wird ein großer, als "Thread" bezeichneter Speicherbereich für eine Sitzung vorab zugewiesen. Die Größe des Threads muss vom Systemadministrator vordefiniert werden. Während einer Sitzung wird jede Pufferzuweisungsanforderung (GETMAIN) innerhalb ihres Threads von Natural selbst durchgeführt. Freier Speicherplatz aufgrund von Pufferfreigabeanforderungen (FREEMAIN) kann wiederverwendet werden.
Bei bestimmten Ereignissen (Terminal-Ein-/Ausgaben und langen Wartezeiten) kann der Thread-Speicher komprimiert und in einen externen Speicher (Roll File/Auslagerungsdatei) ausgelagert werden. Der freigegebene Thread kann von anderen Natural-Sitzungen wiederverwendet werden. Wenn eine unterbrochene Sitzung wieder aufgenommen werden soll, wird sie aus dem externen Speicher wieder in einen freien Thread verlegt.
Der Speicherplatz in dem Roll File, auf dem der komprimierte Thread-Speicher abgelegt wird, wird als Slot bezeichnet. Die Slot-Größe hat eine feste Länge und wird vom Systemadministrator festgelegt. Sie muss groß genug sein, um den größten komprimierten Thread-Speicher aufzunehmen. Im schlimmsten Fall kann sie gleich der Thread-Größe sein.
In einer Nicht-Thread-Umgebung werden alle Speicheranforderungen direkt an das Betriebs(sub)system weitergeleitet. Es wird keine Auslagerung/Einlagerung (Rollout/Rollin) durchgeführt, d. h. die Puffer für eine Sitzung werden bis zur Beendigung der Sitzung aufbewahrt, es sei denn, sie wurden vorher ausdrücklich freigegeben.
Es gibt drei verschiedene Arten von Puffern:
Feste Puffer
Variable Puffer
Physische Puffer
Feste Puffer und variable Puffer
haben ein 32-Byte-Präfix mit einem gemeinsamen Layout für alle Umgebungen. Das
Präfix beginnt mit dem Puffernamen, gefolgt von 5 Pufferlängenfeldern (total,
used low-end, max. used, used high-end, max. used high-end). Die verwendeten
Längenfelder werden von den Komponenten gepflegt, denen die Puffer zugehören,
und für die Thread-Komprimierung verwendet. Jeder Puffer hat eine eindeutige
ID-Nummer (1-255) und kann nur einmal vorhanden sein. Einige Puffer werden
während der Sitzungsinitialisierung zugewiesen, andere werden bei Bedarf
zugewiesen. Das Systemkommando BUS kann benutzt
werden, um Informationen über alle zurzeit zugewiesenen festen und variablen
Puffer anzuzeigen. Die Eigenschaften der Puffer sind im Quellcode-Modul
NATCONFG definiert, das
in Ausnahmefällen angepasst werden kann (siehe
Anpassung
der Puffereigenschaften unten). Die Größe einiger Puffer
kann durch einen Profilparameter festgelegt werden. Eine vollständige Liste
solcher Puffer finden Sie unter dem Profilparameter
DS.
Physische Puffer werden außerhalb des Threads zugewiesen. Sie haben kein Pufferpräfix und sind nicht eindeutig. Sie werden nur in Ausnahmefällen und nur vorübergehend verwendet. Physische Puffer werden bei der nächsten Terminal-E/A automatisch freigegeben. Es ist möglich, über den Profilparameter WPSIZE Workpools für physische Puffer zu definieren.
In einer Thread-Umgebung werden feste Puffer nur vom unteren Ende des Threads aus zugeordnet. Im Gegensatz zu variablen Puffern können feste Puffer nicht relativ zum Thread verschoben werden und ihre Größe kann nicht erhöht oder verringert werden.
In einer Thread-Umgebung werden variable Puffer vom oberen Ende des Threads aus zugeordnet. Wenn innerhalb des Threads kein Platz mehr ist, werden variable Puffer vorübergehend außerhalb des Threads zugeordnet. Bei der Thread-Komprimierung werden alle verwendeten Pufferteile in den Thread komprimiert. Wenn sie nicht in den Thread passen, wird die Sitzung abnormal beendet. Dies kann insbesondere bei der Verwendung großer dynamischer Variablen vorkommen.
Nach der Dekomprimierung des Threads können die variablen Puffer an eine andere Stelle innerhalb oder außerhalb des Threads verschoben worden sein. Die Größe der variablen Puffer kann auf Anforderung durch die sie verfügende Komponente erhöht oder verringert werden. Einige variable Puffer sind so definiert, dass sie während der Thread-Komprimierung automatisch verkleinert oder freigegeben werden.
Die Gesamtmenge des außerhalb des Threads zugeordneten Speichers
kann durch den Profilparameter OVSIZE begrenzt
werden.
Alle Puffer werden im Quellcode-Modul
NATCONFG
durch NTBUFID-Makro-Definitionen definiert.
| Warnung: Ändern Sie keine Puffereigenschaften außer den unten erläuterten MIN-, MAX- und
CMPR-Parametereinstellungen,
da die Ergebnisse unvorhersehbar sein können. |
Es ist möglich, die Grenzen der Puffergröße durch die Parameter
MIN und MAX des Makros
NTBUFID zu ändern. Dies ist nur bei variablen Puffern
(TYPE=VAR) sinnvoll. Die
Grenzen für alle Puffer sind entweder durch die Standardeinstellung
(0 - 2097151 KB) oder durch die Grenzen der
entsprechenden Profilparameter definiert. Weitere Informationen finden Sie in
der Beschreibung des Profilparameters DS. Die Grenzen der
Puffergrößen-Profilparameter im Natural-Parametermodul werden von den
MIN- und MAX-Parametern von
NTBUFID nicht beeinflusst, aber die Grenzen für die dynamischen
Profilpuffergrößen-Parameter werden von MIN und
MAX überschrieben.
Das Setzen des MAX-Parameters auf einen Wert
in KB bedeutet, das die Größe dieses Puffers während der Ausführung der Sitzung
dieses Maximum nicht überschreiten darf. Dies kann zu Laufzeitfehlern führen,
wenn mehr Pufferspeicher für den gewünschten Puffer angefordert wird.
Wenn Sie den Parameter MIN auf einen Wert in
KB setzen, bedeutet dies, dass die Größe dieses Puffers während der Ausführung
der Sitzung nicht unter diesem Wert liegen darf. Im Falle der
3GL-CALLNAT-Schnittstelle (NAT3GCAN) ist die Einstellung eines
Puffer-Minimalwertes beispielsweise für die folgenden Puffer sinnvoll, da die
Größe dieser Puffer auf einer niedrigeren Natural-Programmebene, die von einem
3GL-Programm aufgerufen wird, nicht erhöht werden darf.
| Puffer | Zweck |
|---|---|
DATSIZE |
Datenbereiche |
GLBTOOL |
Dienstprogramm-GDA |
GLBUSER |
Benutzer-GDA |
GLBSYS |
System-GDA |
AIVDAT |
AIV-Bereich |
CONTEXT |
Kontextvariablen |
Der Parameter CMPR des Makros
NTBUFID definiert den Kompressionsoptimierungsalgorithmus für den
Puffer. Er entspricht dem Profilparameter CMPR, der den
Standardwert festlegt. Weitere Informationen über die möglichen Parameterwerte
finden Sie unter CMPR -
Standard-Algorithmus zur Komprimierungsoptimierung in der
Parameter-Referenz-Dokumentation.
Beispiel für eine Definition von Puffereigenschaften:
DATSIZE NTBUFID ID=GETMDATA,TYPE=VAR+INI,CMPR=OPT2,MAX=512
Weitere Informationen zu Profilparametern, die sich auf die Puffergrößen auswirken, finden Sie unter Speicherverwaltung in der Parameter-Referenz-Dokumentation.