Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

DIV-Arbeitsweise

Die Aktionen von DIV werden intern über einen Seitenzustandsanzeiger gesteuert. Folgende Seitenzustände sind zu unterscheiden: FRESHLY_OBTAINED (F), ACCESSED (A) und MODIFIED (M).

Was bei einem Zugriff auf eine Seite in einem DIV-Fenster geschieht, hängt davon ab, in welchem Zustand sich die Seite befindet.

Steuerung durch Seitenzustände

Nach der Definition eines Fensters mit der Maßgabe, dass im Fenster die Seiten der Datei erscheinen sollen (Funktion MAP mit Operand DISPOS=*OBJECT), befinden sich alle Seiten des Fensters im Zustand FRESHLY_OBTAINED. Das ist der Zustand, in dem sich eine Seite auch nach Speicherplatzallokierung mit dem Makro REQM befindet (Initialzustand).

Bei einem Zugriff auf eine solche Seite (durch einen beliebigen CPU-Befehl) gibt es einen Page Fault Interrupt und DIV erhält von der Speicherverwaltung die Kontrolle, um die Seite aus der Datei einzulesen. Liegt die Seite hinter der logisch letzten Dateiseite, wird sie mit X'00' initialisiert. Danach befindet sich die Seite nicht mehr im Initialzustand, sondern im Zustand ACCESSED. Bei weiteren Zugriffen wird sie wie eine beliebige andere Seite im virtuellen Adressraum behandelt.

Wird die Seite vom Programm verändert, befindet sie sich im Zustand MODIFIED. Eine so gekennzeichnete Seite hat einen von der entsprechenden Datei-Seite verschiedenen Inhalt. Durch die DIV-Funktion SAVE werden modifizierte Seiten in die Datei geschrieben. Danach besitzen diese Seiten nicht mehr den Seitenzustand MODIFIED und werden von einem folgenden SAVE nicht in die Datei geschrieben, es sei denn, sie wurden durch einen Zugriff des Programms erneut geändert.

Welche Fensterseiten in die Datei auf Platte zurückgeschrieben werden, hängt darüber hinaus vom Wert des Operanden DISPOS beim Anlegen des Fensters (Funktion MAP) und der Lage der Seite bezüglich des logischen Dateiendes ab.

Von der DIV-Funktion RESET wird eine modifizierte Seite in den Initialzustand gebracht, was bei einem mit DISPOS=*OBJECT spezifizierten Fenster bewirkt, dass die Seite bei einem folgenden Zugriff erneut aus der Datei eingelesen wird (bzw. mit X'00' initialisiert wird, wenn sie jenseits des logischen Dateiendes liegt). RESET hat daher bei einem mit DISPOS=*OBJECT definierten Fenster die Wirkung, dass erneut die Seiten der Datei im Fenster erscheinen.

Die Funktion RESET mit dem Operanden RELEASE=*YES bewirkt, dass nicht nur modifizierte Seiten, sondern alle Seiten eines definierten Bereichs in den Initialzustand gebracht werden. Die Folge ist, dass alle diese Seiten bei einem Zugriff aus der Datei gelesen werden.

Bei einem mit DISPOS=*UNCHNG definierten Fenster ändert MAP die Seitenzustände nicht. Wurde auf eine Seite noch nie zugegriffen, bleibt sie im Initialzustand, andernfalls befindet sie sich (aus der Sicht von DIV) im Zustand MODIFIED.

Wenn durch einen Zugriff auf eine Seite eines mit DISPOS=*UNCHNG spezifizierten Fensters DIV die Kontrolle erhält, wird die Seite mit X'00' initialisiert und befindet sich danach im Zustand MODIFIED.

Falls eine Seite mit SAVE schon einmal in die Datei geschrieben und danach durch RESET in den Initialzustand gebracht wurde, wird sie auch bei einem mit DISPOS=*UNCHNG spezifizierten Fenster aus der Datei gelesen und nicht mit X'00' initialisiert.


Hinweis

Adressraum allokieren: Um mit DIV arbeiten zu können, muss der Benutzer virtuellen Adressraum anfordern. Adressraum im Programmraum wird mit dem Makro REQM allokiert; Adressraum im Datenraum mit dem Makro DSPSRV. Bei Zuteilung von Hauptspeicherseiten werden diese vorher mit X'00' initialisert.