Sprung zum Seitenende Struktur Themen A...Z Titel << >>

CXI-Basis-Programmierreferenz / Version 2 / Unterstützte Systeme / DOS /

Virtuelle Speicherverwaltung unter DOS

[DOS] [Keine Portabilität!] Virtuelle Speicherverwaltung unter DOS

Spezifisch für die DOS-Version ist die (ab Version 2.05) integrierte VM-Verwaltung (Virtual Memory), die die Daten von CxiTreeMem-Objekten in den XMS-Speicher und eine Swap-Datei auslagern kann. Hierdurch wird konventioneller Speicher gespart. Die externe Variable cxiFlagVmMinimumCoreLeftKB (siehe nächste Seite) gibt an, wann die Auslagerung beginnen soll.

CXI/DOS kann bis zu 32760 KB virtuellen Speicher verwalten, davon maximal 16256 KB als XMS-Speicher, den Rest in einer Swap-Datei. Die Steuerung des VM-Managers erfolgt über die Umgebungsvariable CXIVMSIZE.

SET CXIVMSIZE=<xmskb>,<swapfile>  Verwendung von XMS und Swapdatei
SET CXIVMSIZE=<xmskb>             Nur XMS, keine Swapdatei
SET CXIVMSIZE=0                   Weder XMS noch Swapdatei

Der Parameter <xmskb> gibt die maximale Nutzung von XMS in KB an, der spezielle Wert * steht für den gesamten verfügbaren XMS-Speicher. CXI wird nicht mehr als die hier angegebene Menge XMS-Speicher benutzen. Der Wert * ist die Vorgabe für diesen Parameter. Wird dem Wert <xmskb> ein Fragezeichen vorangestellt (z.B. ?8192 oder ?*), gibt der VM-Manager am Ende des Programms eine Meldung aus, die Angaben über die tatsächlich benutzten Resourcen enthält.

Der Parameter <swapfile> ist der Name einer Auslagerungsdatei, wobei die spezielle Angabe * den VM-Manager anweist, einen eindeutigen temporären Namen zu verwenden. Hier kann auch ein voll qualifizierter Dateiname angegeben werden. Eine Swap-Datei wird nur verwendet, wenn dieser Parameter angegeben ist. Die Verwendung einer Auslagerungsdatei hat einen erheblichen negativen Einfluss auf die Ausführungsgeschwindigkeit der Programme und ist daher nur für besondere Notfälle empfehlenswert.

Ist die Umgebungsvariable CXIVMSIZE nicht gesetzt, wird
SET CXIVMSIZE=*
angenommen, d.h. der gesamte verfügbare XMS-Speicher genutzt, aber keine Swapdatei angelegt.

Die Funktionalität des VM-Managers kann von Anwendungsprogrammen auch unabhängig von CxiTreeMem-Objekten genutzt werden. Beachten Sie jedoch, dass die folgenden Funktionen nur unter DOS verfügbar sind und aus Geschwindigkeitsgründen keine Überprüfung der Parameter vornehmen!

[C] typedef unsigned long int CxiStorageHandle;

Der Typ CxiStorageHandle ist ein 32-Bit-Wert, mit dem ein im VM abgelegter Datenblock identifiziert und angesprochen werden kann.

[C] CxiStorageHandle cxiStorageAlloc (CxiLong size, CxiLong options);

Diese Funktion erstellt einen size Byte großen Speicherbereich im VM, der für die Ablage von Daten genutzt werden kann. Die angegebene Größe size wird automatisch auf das nächste Vielfache der Sektorgröße aufgerundet, wenn eine Auslagerung der Daten in XMS oder Swapdatei erfolgt. Geben Sie für options immer 0 an. Das Handle für den neuen Bereich wird zurückgegeben, bei einem Fehler ist die Rückgabe 0.

[C] CxiError cxiStorageWrite (CxiStorageHandle to, const void *from, CxiInt size, CxiLong res);

Der Datenbereich from in der Länge size wird in den Speicherbereich to ausgelagert. Der Quellbereich wird nicht verändert. Der Wert von size darf nicht größer sein als die beim Anlegen von to mit cxiStorageAlloc angegebene Größe. Ist size kleiner als die Größe des Blocks, wird der VM-Bereich to mit zufälligen Bytes aufgefüllt. Es ist nicht möglich, einen VM-Speicherbereich teilweise zu überschreiben, jeder Schreibzugriff mit dieser Funktion löscht den gesamten vorherigen Inhalt. Der reservierte Parameter res muss immer 0 sein.

[C] CxiError cxiStorageRead (CxiStorageHandle from, void *to, CxiInt size, CxiLong offset);

Aus dem ausgelagerten Speicherbereich from werden size Bytes in den Puffer to eingelesen. Der Parameter offset bestimmt die Position innerhalb der ausgelagerten Daten, an der die Kopie beginnt. Der Anfang des Speicherbereichs ist die Position 0. Der Quellbereich wird nicht verändert. Die Summe von offset und size darf nicht größer sein als die beim Anlegen von from mit cxiStorageAlloc angegebene Größe.

[C] CxiError cxiStorageFree (CxiStorageHandle stoh);

Der VM-Speicherbereich stoh wird freigegeben. Die in diesem Bereich abgelegten Daten gehen verloren.

[C] CxiLong cxiStorageQuery (CxiStorageHandle from, CxiLong options);

Diese Funktion liefert Informationen zum aktuellen Status des VM-Managers. Folgende Aufrufe sind möglich:

cxiStorageQuery (0, cxiOptStorageLeftXMS)
liefert den noch verfügbaren Platz im XMS-Speicher; -1 bei nicht verfügbarem XMS.

cxiStorageQuery (0, cxiOptStorageSwapSize)
liefert die momentane Größe der Swapdatei; -1, wenn noch nicht in Datei ausgelagert wurde.

cxiStorageQuery (0, cxiOptStorageSectorSize)
liefert die Anzahl Bytes in einer Zuordnungseinheit des VM; die Größen aller Datenbereiche, die nicht direkt auf dem Heap liegen, sind Vielfache der Sektorgröße.

cxiStorageQuery (0, cxiOptStorageCacheCount)
liefert die Anzahl der Sektoren, die vom VM-Manager im Heap zwischengespeichert werden.

cxiStorageQuery (stoh, cxiOptStorageLocation)
liefert eine Kennung, wo der Bereich stoh gespeichert wird:
1 = Heap
2 = XMS
3 = Swapdatei
0 = ungültig.

Siehe auch:
CXI unter DOS


[i] CXI-Basis-Programmierreferenz
Version 2.10 72 (1014-001), erstellt am 15. April 2000
Textseite 15 von 855, Thema 8232 (SystemDOSm)
[c] Copyright (c) 1996-2000 by TeraConnect GmbH

Sprung zum Seitenanfang Struktur Themen A...Z Titel << >>