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.