Die Funktion MAP erzeugt ein Fenster in einem Adressraum (Programmraum oder Datenraum). Ein Fenster ist einem Dateibereich oder einer ganzen Datei zugeordnet.
Der Adressraum muss vor dem Aufruf der MAP-Funktion allokiert sein (explizit durch REQM, implizit durch Binder-Lader). Eine Freigabe des Adressraums, in dem ein Fenster enthalten ist, ist erst nach dem Abbau eines Fensters (durch UNMAP) möglich.
Im Fensterbereich darf keine READ-ONLY-Seite und – zum MAP-Zeitpunkt – keine I/O-fixed Seite enthalten sein, also keine Seite, auf der eine Ein-/Ausgabe läuft (z.B. asynchrone Ein-/Ausgabe durch UPAM während MAP).
Der Adressraum darf nicht sharable sein.
Bei Ausführung der MAP-Funktion wird von DIV sichergestellt, dass alle Seiten der Datei, die vom Fenster repräsentiert werden, allokiert sind. Liegt ein Fenster oder ein Teil eines Fensters hinter dem physikalischen Dateiende, werden die fehlenden Seiten allokiert. Für einen INPUT-Eröffner wird keine Allokierung durchgeführt.
Mit dem Operanden DISPOS kann spezifiziert werden, ob im Fenster die Seiten der Datei erscheinen sollen oder ob die Daten des Adressraums erhalten bleiben sollen.
Von der Funktion MAP werden nur die nachfolgend beschriebenen Funktionsoperanden ausgewertet.
Format FCT=*MAP
Operation | Operanden |
|
|
| |
| |
| |
|
Operandenbeschreibung
AREA
AREA gibt die Anfangsadresse des Fensters innerhalb des Adressraums an, der durch den Operanden SPID spezifiziert ist (Datenraum bzw. Programmraum).
Vor dem Aufruf der MAP-Funktion muss der Adressraum allokiert sein (Makro REQM, DSPSRV, Binder-Lader). Er kann nicht vor Abbau des Fensters (UNMAP) freigegeben werden.
Das Fenster muss an einer 4-KB-Seitengrenze liegen. Seine Länge ist durch den Operanden SPAN bestimmt.
Eine Seite im virtuellen Adressraum darf nur einem Fenster angehören. Versuche, eine bereits für ein Fenster vergebene Seite für ein weiteres Fenster zu benutzen, werden zurückgewiesen.
Bei der MF=L-Form darf die Anfangsadresse des Fensters nur durch eine symbolische Adresse angegeben werden.
= adr
Ist die 4 Byte lange Anfangsadresse des Fensters (symbolische Adresse).
= (r)
Ist ein Register, das die Anfangsadresse des Fensters enthält.
DISPOS
Mit DISPOS wird bestimmt, welche Daten im Fenster nach MAP sichtbar sein sollen: die im Adressraum unveränderten Daten (wie vor MAP) oder die Daten der entsprechenden Seiten der Datei.
Voreinstellungen: DISPOS = *OBJECT
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= *OBJECT
Im Fenster erscheinen die Seiten der Datei. Seiten hinter der logisch letzten Dateiseite erscheinen mit X'00' gefüllt.
= *UNCHNG
Die Seiten im Fenster werden nicht durch Seiten der Datei ersetzt sondern behalten ihren Inhalt.
Ein mit DISPOS=*UNCHNG definiertes Fenster kann dazu benutzt werden, die entsprechenden Seiten der Datei bei Ausführung der Funktion SAVE mit dem Inhalt der Seiten des virtuellen Adressraums zu initialisieren (siehe SAVE-Funktion und Beschreibung der logischen Dateiverlängerung im Handbuch „Einführung in das DVS“ [1]).
DISPOS=*FRESH darf bei FCT=*MAP nicht spezifiziert werden.
= adr
Ist die symbolische Adresse eines 1 Byte langen Feldes, das einen Wert für DISPOS enthält (DIVPOBJ | DIVPUNCH
; siehe Layout der Parameterliste, "Funktion CLOSE").
= (r)
Ist ein Register, das einen Wert für DISPOS enthält.
FCT
Bestimmt die auszuführende DIV-Funktion.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= *MAP
Mit der DIV-Funktion MAP wird ein Fenster in einem Adressraum (Programmraum oder Datenraum) angelegt. Nähere Beschreibung siehe "Funktion MAP".
= adr
Ist die symbolische Adresse eines 1 Byte langen Feldes, das den Wert für die Funktion MAP enthält (Wert DIVMAP
, siehe Layout der Parameterliste, "Funktion CLOSE").
= (r)
Ist ein Register, das den Wert für die Funktion MAP enthält.
ID
Mit ID wird der OPEN spezifiziert, für den die entsprechende DIV-Funktion ausgeführt werden soll.
Wird dieselbe Parameterliste benutzt wie bei OPEN, ist die Angabe von ID nicht erforderlich, da sich dann die Identifikation des OPEN bereits in der Parameterliste befindet. Die Identifikation ist im Feld DIVPID
der Parameterliste enthalten.
Wird eine andere Parameterliste benutzt wie bei OPEN, kann durch ID die Identifikation zur Verfügung gestellt und in die neue Parameterliste übertragen werden (mit der Form MF=M des Makros DIV).
ID kann nicht mit der MF=L-Form angegeben werden.
= adr
Ist die symbolischen Adresse eines 8 Byte langen Feldes, das die Identifikation enthält.
= (r)
Ist ein Register mit der Adresse des 8 Byte langen Feldes.
MACID
Zu MACID siehe Beschreibung beim Format FCT=*OPEN, "Funktion OPEN".
MF
Die Formen des MF-Operanden sind detailliert im Anhang ("Typen von Makroaufrufen") beschrieben.
OFFSET
OFFSET legt zusammen mit SPAN den Dateibereich fest, für den das Fenster angelegt wird.
OFFSET legt den Beginn des Dateibereiches fest. Mit OFFSET wird angegeben, ab welchem Block (ab welcher 4-KB-Seite) der Dateibereich beginnt.
SPAN gibt an, aus wie vielen 4-KB-Blöcken der Dateibereich (Bereichslänge) bestehen soll.
Der durch OFFSET und SPAN definierte Dateibereich wird dem Fenster im virtuellen Adressraum zugeordnet.
Voreinstellung: OFFSET = 0
Bei OFFSET = 0 entspricht die erste Fensterseite der ersten Seite der Datei. Die Datei wird ab Dateibeginn in der Länge von SPAN in das Fenster eingelesen.
Falls für SPAN kein Wert angegeben ist (oder SPAN=0), wird die Fenstergröße so gewählt, dass die letzte Seite des Fensters der logisch letzten Seite der Datei entspricht. Falls weder OFFSET noch SPAN spezifiziert ist, wird also die Fenstergröße so gewählt, dass die gesamte Datei bis zur logisch letzten Seite im Fenster enthalten ist.
Ist die Datei leer und ist für SPAN der Standardwert gegeben, wird der MAP-Aufruf zurückgewiesen.
SPAN und OFFSET können so gewählt werden, dass Seiten, die hinter dem logischen Ende der Datei liegen, im Fenster erscheinen. Seiten hinter dem logischen Dateiende erscheinen im Fenster mit X'00' gefüllt.
SPAN und OFFSET können auch so gewählt werden, dass Seiten, die hinter dem physikalischen Dateiende liegen, im Fenster erscheinen. In diesem Fall werden durch MAP bei OPEN OUTIN | INOUT so lange weitere Blöcke für die Datei allokiert, bis die der letzten Fensterseite entsprechende Dateiseite allokiert ist.
Hinweis
Durch MAP kann eine Datei physikalisch verlängert werden, durch SAVE kann eine Datei logisch verlängert (und verkürzt) werden. Das logische Dateiende wird durch MAP nicht verändert (nur durch SAVE).
Für ein und denselben OPEN darf eine Dateiseite nur einem Fenster zugeordnet sein. Eine Dateiseite kann jedoch mehreren Fenstern zugeordnet sein, wenn diese zu verschiedenen OPEN gehören.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= anzahl
Gibt den ersten Block des im virtuellen Adressraum abzubildenden Dateibereichs an. Der Wert für OFFSET ist begrenzt durch die maximale Größe einer Datei in 4-KB-Seiten minus 1:
0 <= anzahl <= 8388606 bei LARGE_FILE=*FORBIDDEN
0 <= anzahl <= 1073741823 bei LARGE_FILE=*ALLOWED
= adr
Ist die symbolische Adresse eines 4 Byte langen Feldes, das den numerischen Wert (binär) für die Angabe des ersten Blocks des im virtuellen Adressraum abzubildenden Dateibereichs enthält.
= *equ
Ist ein Equate, das den numerischen Wert für die Angabe des ersten Blocks des im virtuellen Adressraum abzubildenden Dateibereichs darstellt. Dem Namen des Equate muss das Zeichen „*“ vorausgehen.
= (r)
Ist ein Register, das den numerischen Wert für die Angabe des ersten Blocks des im virtuellen Adressraum abzubildenden Dateibereichs enthält.
PARAM
Zu PARAM siehe Beschreibung beim Format FCT=*OPEN, "Funktion OPEN".
PREFIX
Zu PREFIX siehe Beschreibung beim Format FCT=*OPEN, "Funktion OPEN".
PFCOUNT
Wenn aufseiten eines Fensters sequenziell (in aufsteigender Folge) zugegriffen wird, können Page-Fault-Interrupts durch Angabe von PFCOUNT verringert werden. Wird als Folge eines Page-Fault-Interrupt eine Seite aus der Datei in ein Fenster eingelesen und ist PFCOUNT für das Fenster spezifiziert, so werden die folgenden Seiten mit einer einzigen Leseoperation zusätzlich eingelesen, bis die durch PFCOUNT spezifizierte Anzahl von Seiten, das Fensterende oder eine bereits eingelesene Seite erreicht ist.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= anzahl
Gibt an, wie viele Seiten zusätzlich eingelesen werden sollen.
0 <= anzahl <= 15
= adr
Ist die Adresse eines 4 Byte langen Feldes, das den numerischen Wert (binär) für die Anzahl der Seiten enthält.
= *equ
Ist ein Equate, das den numerischen Wert darstellt. Dem Namen des Equate muss das Zeichen „*“ vorausgehen.
= (r)
Die Angabe eines Registers mit dem numerischen Wert.
SPAN
SPAN definiert zusammen mit OFFSET den Dateibereich, für den das Fenster angelegt wird. Der mit SPAN und OFFSET definierte Dateibereich wird dem Fenster im virtuellen Adressraum zugeordnet.
Voreinstellung: SPAN = 0
Zur Beschreibung von SPAN siehe Beschreibung beim Operanden OFFSET.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= anzahl
Gibt die Länge des Dateibereiches in 4-KB-Blöcken an. Der Wert für SPAN ist begrenzt durch die maximale Adressraumgröße (2 GB) in 4-KB-Seiten.
0 <= anzahl <= 524287
= adr
Ist die symbolische Adresse eines 4 Byte langen Feldes, das die Länge des Dateibereiches in 4-KB-Blöcken (binär) angibt.
= *equ
Ist ein Equate, das die Länge des Dateibereiches in 4-KB-Blöcken (binär) angibt.
Dem Namen des Equates muss das Zeichen „*“ vorausgehen.
= (r)
Ist ein Register, das die Länge des Dateibereiches in 4-KB-Blöcken (binär) angibt.
SPID
Spezifiziert den Adressraum (Daten- oder Programmraum), in dem das Fenster angelegt werden soll.
Voreinstellung: SPID = 0
Wird SPID nicht angegeben oder ist SPID = 0, wird das Fenster im Programmraum angelegt. Sonst wird mit SPID ein Datenraum angegeben.
SPID kann nicht mit der MF=L-Form angegeben werden.
= adr
Ist die symbolische Adresse eines 8 Byte langen Feldes, das die SPID enthält.
= (r)
Register, das die Adresse eines 8 Byte langen Feldes enthält, das die SPID enthält.