Natural-Speicherverwaltung

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:


Thread- und Nicht-Thread-Umgebungen

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.

Puffertypen

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.

Feste Puffer

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.

Variable Puffer

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.

Anpassung der Puffereigenschaften

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.