Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Erweiterung durch Datenräume

&pagelevel(4)&pagelevel

Makro

Kurzbeschreibung

ALESRV

realisiert den Anschluss eines Programms an einen Datenraum und löst diese Verbindung wieder.

ALINF

informiert über die Zugriffslisten, mit denen Datenräume und deren Verbindungen verwaltet werden.

DSPSRV

erzeugt, erweitert, löscht virtuellen Adressraum für Datenadressierung (Datenraum), informiert über einen Datenraum und gibt ihn wieder frei.

Das Prinzip des Erweiterten Adressraums

Der erweiterte Adressierungsmodus steht auf allen BS2000-Servern zur Verfügung.

Im erweiterten Adressierungsmodus werden neben dem bisherigen Adressraum weitere Adressräume für Daten zur Verfügung gestellt. Da diese neuen virtuellen Adressräume z.T. andere Eigenschaften haben als der bisherige virtuelle Adressraum, werden folgende Begriffe eingeführt:

  • Programmraum für den bisherigen virtuellen Adressraum

  • Datenraum für die neuen virtuellen Adressräume

Die Eigenschaften eines Datenraumes im Überblick:

  • Adressraum nur für Daten, d.h. adressierter Programmcode kann nicht ausgeführt werden

  • Nutzung im 24-Bit- und 31-Bit-Adressierungsmodus möglich

  • Größe je nach Adressierungsmodus von 4 KByte bis 16 MByte/2 GByte

  • homogener Adressraum, d.h. keine Speicherklassen, gleiche Seitenattribute

  • enthält keine reservierten Systemadressbereiche

  • Mehrbenutzbarkeit möglich (ähnlich der Memory-Pool-Technik)

  • Abschottung von Daten möglich

Vorteile, die sich bei Nutzung von Datenräumen für den Anwender ergeben:

  • eine Erweiterung der gesamten adressierbaren Datenmenge um Größenordnungen

  • eine bessere Möglichkeit zur Strukturierung des Adressraumes, der konsequenten Trennung von Programmcode und Daten und der Abschottung sicherheitsrelevanter oder sonstiger kritischer Daten

  • eine Vergrößerung des verfügbaren Programmraums für den Anwender durch Auslagerung seiner eigenen Daten in einen Datenraum

Programmraum und Datenraum

Bild 7: Erweiterung des virtuellen Adressraums durch Datenräume

Der Programmraum entspricht dem bisherigen virtuellen Adressraum, beginnt also an der virtuellen Adresse 0 (Null) und ist maximal 2 GByte groß. In ihm können sowohl ablauffähige Programme als auch reine Daten adressiert werden.

Ein Datenraum ist ein Bereich von zusammenhängendem virtuellen Adressraum in der Größe von 4 KByte bis 2 GByte.
Ein Datenraum beginnt an der virtuellen Adresse 0. Er ist in seiner gesamten Größe vom Anwender nutzbar, da er (im Gegensatz zum Programmraum) keine für das System reservierten Bereiche enthält.

In einem Datenraum können nur Daten und als Daten abgelegte Programme adressiert werden, d.h. in einem Datenraum adressierter Programmcode kann nicht zum Ablauf gebracht werden. Der Datenraum wird von einem Anwender durch Angabe von Typ, Name, Geltungsbereich und gewünschter Größe eingerichtet. Dieser Anwender wird damit zum Eigentümer des Datenraums.

Ein Datenraum wird als homogener Adressraum realisiert, d.h. alle Seiten erhalten, sobald sie angefordert werden, dieselben Attribute. Diese Attribute werden beim Anlegen eines Datenraums definiert. Die beim Einrichten angegebenen Attribute sind für die Lebensdauer des Datenraumes festgeschrieben. Alle Teilnehmer, die sich an einen Datenraum anschließen, müssen diese Eigenschaften akzeptieren.
Der Geltungsbereich legt fest, welche Tasks sich an den Datenraum anschließen und Zugriffe ausführen dürfen. Der Name eines Datenraumes ist nur innerhalb seines Geltungsbereiches eindeutig. Sessionweit wird der angeforderte Datenraum eindeutig durch die SPID (space identification) gekennzeichnet. Die SPID wird vom System vergeben.

Datenraum-Typen

Der Datenraum-Typ bestimmt die Art der Allokierung/Deallokierung des Speichers innerhalb des Datenraums. Er wird zum Zeitpunkt der Erzeugung bestimmt.

Es gibt folgende Datenraum-Typen:

  • STACK
    Ein Datenraum vom Typ STACK ist ein virtuell zusammenhängender allokierter Bereich, beginnend ab Adresse 0 bis zur aktuellen Größe. Es stehen Funktionen zum Erweitern und Reduzieren der aktuellen Größe (EXTEND/REDUCE) und zum Löschen des Inhalts eines Bereichs innerhalb der aktuellen Größe (CLEAR) zur Verfügung.

  • HEAP
    Ein Datenraum vom Typ HEAP ist ein virtueller Adressraum, in dem dynamisch beliebig große Bereiche bis zur maximalen Größe des Datenraums allokiert werden können. Die verfügbaren Allokierungsfunktionen sind GETAREA und RETAREA.

Die Größe wird in Einheiten zu je 4KB angegeben.

Adressierung in Datenräumen

Zugriffslisten
Bevor ein Programm auf Daten in einem Datenraum zugreifen kann, muss es eine Verbindung zu diesem Datenraum herstellen.
Jede Task besitzt eine taskeigene Zugriffsliste (access list, AL), die alle Verbindungen repräsentiert, die ein Programm aktuell zu Datenräumen aufgebaut hat. Zugriffslisten liegen im privilegierten Speicherbereich und werden vom System verwaltet.
Bei Auf- und Abbau von Verbindungen durch ein Programm werden Einträge (access list entry, ALE) in der taskeigenen Zugriffsliste hinzugefügt oder gelöscht.

ALET und SPID
Beim Aufbau einer Verbindung erhält das Programm einen Wert zurück (access list entry token, ALET), der als Verweis auf den neuen Eintrag in der Zugriffsliste dient.
Während die SPID (die dem Datenraum bei seiner Erzeugung vom System vergeben wurde) von der Software zur sessionweiten Identifizierung des Datenraums benutzt wird, dient der ALET der hardwaremäßigen Adressierung eines Datenraums. Der Wert des ALET ist taskspezifisch: wenn mehrere Tasks eine Verbindung zu ein und demselben Datenraum aufbauen, bekommt jede von ihnen einen anderen ALET zugewiesen, da dieser einen Eintrag in der taskeigenen Zugriffsliste identifiziert.

Zugriffsregister
Der Zugriff auf die Datenräume erfolgt durch einen zusätzlichen Registersatz von 16 Zugriffsregistern (access register, AR). Die 16 Zugriffsregister sind den 16 Mehrzweckregistern (MZR) eineindeutig zugeordnet. Die bei der Adressberechnung verwendeten MZR können Basis- oder Indexregister sein.
Wird zur Adressberechnung nur ein Indexregister und kein Basisregister verwendet, wird immer der Programmraum adressiert.
Wird jedoch bei der Adressberechnung (auch) ein Basisregister zur Adressierung verwendet und ist der ALET des mit ihm korrespondierenden Zugriffsregisters nicht Null, wird der entsprechende Datenraum adressiert. Somit kann jeder Adresse, die über ein Basisregister angesprochen wird, ein eigener Datenraum zugeordnet werden. Da MZR0 nicht als Basisregister verwendet werden darf, kann auch AR0 nicht zur Adressierung eines Datenraums verwendet werden.
Indem das entsprechende Zugriffsregister mit der Identifikation der Verbindung (ALET) zu einem Datenraum geladen wird, wird die Adressumsetzung für den Datenzugriff mit den Adress-Umsetztabellen des Datenraums durchgeführt.
So wie ein anderer Bereich innerhalb des Programmraums durch Umladen des Basisregisters mit der Anfangsadresse dieses Bereichs adressiert werden kann, kann durch Umladen des Zugriffsregisters mit einem anderen ALET aus der Zugriffsliste ein anderer Datenraum adressiert werden. Damit repräsentiert die Zugriffsliste für ein Programm die Menge aller adressierbaren Datenräume zu einem bestimmten Zeitpunkt.

Der Mechanismus des Zugriffs auf einen Datenraum über die Zugriffsliste wird nur dann wirksam, wenn es sich um einen Operandenzugriff auf Daten handelt. Bei Sprungbefehlen erfolgt der Operandenzugriff immer im Programmraum. Dadurch wird verhindert, dass Programmcode in einem Datenraum ablaufen kann.

AR-Modus
Um die Möglichkeit der Adressraumerweiterung zu nutzen, muss dem Programm mitgeteilt werden, dass es mit dem zusätzlichen Registersatz arbeiten, d.h. im AR-Modus (access register mode) laufen soll. Ist der AR-Modus nicht eingeschaltet, werden virtuelle Adressen des Programmraums angesprochen.
Mit dem Assemblerbefehl SAC kann der AR-Modus ein- und ausgeschaltet werden.

SAC

SAC

512

0

* set address space control

*

einschalten des AR-Modus *

ausschalten des AR-Modus *

Während also ohne eingeschaltetem AR-Modus der Zugriff auf Programmcode und Daten im Programmraum erfolgt, kann im AR-Modus der Datenzugriff auf durch Zugriffsregister indizierte Datenräume erfolgen.
Ist der AR-Modus eingeschaltet, berechnet sich eine reale Adresse wie bisher durch zweistufige Adressumsetzung der virtuellen Adresse (Indexregister + Basisregister + Distanz), jedoch unter Berücksichtigung des Zugriffsregisters. Ist das zum Basisregister korrespondierende Zugriffsregister != 0, verweist es auf einen Datenraum und die virtuelle Adresse dieses Datenraumes wird umgesetzt. Ist das Zugriffsregister = 0, wird eine virtuelle Adresse des Programmraums umgesetzt.
Wenn ein Programm im AR-Modus läuft und ein MZR als Basisregister zur Adressierung von Daten verwendet, dann muss das entsprechende Zugriffsregister einen gültigen ALET erhalten, anderenfalls kommt es zum Programmabbruch.
Um im AR-Modus auch Daten im Programmraum adressieren zu können, steht ein spezieller ALET-Wert zur Verfügung: Der Wert ALET = 0 adressiert immer den Programmraum.

Für die Arbeit mit den Zugriffsregistern sind einige neue Assemblerbefehle eingeführt worden (siehe Handbuch „Assemblerbefehle (BS2000)“ [1]).


LAM

Load Access Multiple

STAM

STore Access Multiple

LAE

Load Address Extended

SAR

Set Access Register

CPYA

CoPY Access register

EAR

Extract Access Register

TAR

Test Access Register

SAC

Set Address space Control

IAC

Insert Address space Control


Schritte zur Herstellung der Adressierbarkeit von Datenräumen:

  1. Anlegen eines Datenraumes (Makro DSPSRV FCT=CREATE)
    oder
    Besorgen der Identifikation (SPID) eines existierenden, mehrbenutzbaren Datenraums (Makro DSPSRV FCT=INFORM).

  2. Herstellen der Verbindung zu diesem Datenraum
    (Makro ALESRV FCT=CONNECT), es wird ein ALET zurückgeliefert.

  3. Laden des ALET in das Zugriffsregister, dessen entsprechendes MZR als Basisregister die Daten innerhalb des Datenraums adressiert
    (Befehl LAM ARx,ARx,alet, wenn ARx EQU x definiert ist).

  4. Einschalten des AR-Modus (Befehl SAC 512).

Sind mehrere Tasks berechtigt, auf denselben Datenraum zuzugreifen und ist die Adressierbarkeit über die Zugriffsliste hergestellt, so muss die korrekte Serialisierung von den Anwendern realisiert werden.
Die max. Anzahl einzurichtender Datenräume pro Task ist 32. Pro Task kann jedoch auf weit mehr (bereits von anderen Tasks eingerichtete) Datenräume zugegriffen werden. Es können maximal 125 ALETs pro Task verwaltet werden, d.h. zu 125 Datenräumen kann eine Verbindung hergestellt werden.
Alle Zugriffsregister sind bei Programmbeginn mit Null initialisiert.

Zugriffsregister und AR-Modus sind nur prozedurlokal zu verwenden, da die Linkage-Routinen nicht im AR-Modus ablauffähig sind und beim Aufruf von Subroutinen auch keine Sicherung der Zugriffsregister durchführen.

Bild 8: Auswahl des Adressraums

(1)

Die bei der Adressumrechnung berechnete Adresse bezieht sich auf den Programmraum, wenn

  • der AR-Modus nicht eingeschaltet ist oder

  • der ALET im (zum Basisregister korrespondierenden) Zugriffsregister Null ist.

(2)

Die bei der Adressumrechnung berechnete Adresse bezieht sich auf einen Datenraum. Über den ALET des korrespondierenden Zugriffsregisters wird ein Eintrag (ALE) in der Zugriffsliste adressiert. Dieser ALE zeigt wiederum auf einen Eintrag in der Datenraumtabelle, durch den der Datenraum identifiziert wird.

(3)

Ein Datenraum kann auch durch die vom System vergebene SPID angesprochen werden. Durch die SPID wird er sessionweit eindeutig identifiziert.


Makros für die Nutzung von Datenräumen

Für den nichtprivilegierten Anwender stehen drei Makros für die Arbeit mit erweitertem virtuellen Adressraum zur Verfügung.
Mit dem Makro DSPSRV kann ein Datenraum angefordert oder freigegeben werden. In einem schon bestehenden Datenraum kann der Anwender (zusätzliche) Speicherseiten anfordern und freigeben. Es können Informationen über ihn angefordert werden.
Der Makro ALESRV verwaltet die Einträge in der Zugriffsliste. Er realisiert den Anschluss einer Task an einen Datenraum und kann diese Verbindung auch wieder lösen.
Bei Angabe des ALET gibt der Makro die zum Datenraum gehörende SPID aus.
Mit dem Makro ALINF kann sich der Anwender darüber informieren, welche Einträge in der Zugriffsliste auf welche Datenräume verweisen.

Beispiel

Folgendes Beispiel soll das Arbeiten mit einem Datenraum vom Typ STACK veranschaulichen. (@-Ausdrücke sind vordefinierte Makros des ASSEMBH-Assemblers.) Nachstehend sind nur die zum Arbeiten mit Datenräumen relevanten Teile des vollständigen Programms aufgeführt.

DATASPAC START
         PRINT NOGEN
*        :
DSPMFD   DSPSRV MF=D
ALEMFD   ALESRV MF=D
*
DATASPAC @ENTR TYP=M
*        :
CREATE   LA    1,DSPPL --------------------------------------------------(1)
         @DATA DSECT=DSPMFD,BASE=1
         MVC   DSPPL(NVDD#),DSPMFL
         DSPSRV MF=M,FCT=CREATE,INISIZE=25
         DSPSRV MF=E,PARAM=(1)
         DSPSRV MF=R,SPID=DSPSPID
*
CONNECT  LA    1,ALEPL --------------------------------------------------(2)
         @DATA DSECT=ALEMFD,BASE=1
         MVC   ALEPL(NVDA#),ALEMFL
         ALESRV MF=M,SPID=DSPSPID
         ALESRV MF=E,PARAM=(1)
         ALESRV MF=R,ALET=DSPALET
*
         SAC   512 ------------------------------------------------------(3)
*
WRITEDS  LAM   8,8,DSPALET ----------------------------------------------(4)
         SR    8,8
         MVC   0(100,8),DATA
*
         SAC   0 --------------------------------------------------------(5)
*
INFORM   LA    1,DSPPL---------------------------------------------------(6)
         @DATA DSECT=DSPMFD,BASE=1
         MVC   DSPPL(NVDD#),DSPMFL
         DSPSRV MF=M,FCT=INFORM,IDENT=NAME,NAME='SHARED#DS',           C
                SCOPE=GLOBAL
         DSPSRV MF=E,PARAM=(1)
         DSPSRV MF=R,SPID=DSPSPID2
*
CONNECT2 LA    1,ALEPL --------------------------------------------------(7)
         @DATA DSECT=ALEMFD,BASE=1
         MVC   ALEPL(NVDA#),ALEMFL
         ALESRV MF=M,SPID=DSPSPID2
         ALESRV MF=E,PARAM=(1)
         ALESRV MF=R,ALET=DSPALET2
*
         SAC   512 ------------------------------------------------------(8)
*
COPYDS   LAM   7,7,DSPALET2 ---------------------------------------------(9)
         SR    7,7
         MVC   0(100,7),0(8)
*
         SAC   0 -------------------------------------------------------(10)
*
CLEAR    LA    1,DSPPL -------------------------------------------------(11)
         @DATA DSECT=DSPMFD,BASE=1
         DSPSRV MF=M,FCT=CLEAR,SPID=DSPSPID2,AREA=1000,SIZE=100
         DSPSRV MF=E,PARAM=(1)
*
EXTEND   DSPSRV MF=M,FCT=EXTEND,SPID=DSPSPID,SIZE=1000------------------(12)
         DSPSRV MF=E,PARAM=(1)
         DSPSRV MF=R,EXTADDR=DSPEXTND
*
*** Further access to the extended data space (read, write, etc.) ***
*
DISCONN  LA    1,ALEPL--------------------------------------------------(13)
         @DATA DSECT=ALEMFD,BASE=1
         MVC   ALEPL(NVDA#),ALEMFL
         ALESRV MF=M,FCT=DISCONN,ALET=DSPALET
         ALESRV MF=E,PARAM=(1)
         ALESRV MF=M,FCT=DISCONN,ALET=DSPALET2
         ALESRV MF=E,PARAM=(1)
*
DESTROY  LA    1,DSPPL -------------------------------------------------(14)
         @DATA DSECT=DSPMFD,BASE=1
         DSPSRV MF=M,FCT=DESTROY,SPID=DSPSPID
         DSPSRV MF=E,PARAM=(1)
         @EXIT
*
*** Definitions ***
*
DSPMFL   DSPSRV MF=L,NAME='SPACE1',MAXSIZE=2000
ALEMFL   ALESRV MF=L,FCT=CONNECT
*
DSPSPID  DS    D                  * SPID of data space created by
*                                 * program
DSPALET  DS    F                  * ALET of this data space
DSPSPID2 DS    D                  * SPID of another program's
*                                 * data space
DSPALET2 DS    F                  * ALET of this data space
DSPEXTND DS    A                  * Extension address
DSPPL    DS    XL(NVDD#)          * Dynamic data area for DSPSRV
ALEPL    DS    XL(NVDA#)          * Dynamic data area for ALESRV
DATA     DS    XL100              * Data to be transferred
         @END

(1)

Es wird ein Datenraum in der Größe von 100 KByte erzeugt:
In das Register 1 wird die Adresse des Datenbereichs für den Makro DSPSRV geladen (LA), danach die DSECT über den Datenbereich gelegt (@DATA) und der Datenbereich initialisiert (MVC). Mit den DSPSRV-Aufrufen wird der Datenraum erzeugt. In das Feld DSPSPID soll die vom System vergebene SPID eingetragen werden.

(2)

Das Programm schließt sich an den Datenraum an:
In das Register 1 wird die Adresse des Datenbereichs für den Makro ALESRV geladen (LA), danach die DSECT über den Datenbereich gelegt (@DATA) und der Datenbereich initialisiert (MVC). Mit den ALESRV-Aufrufen schließt sich das Programm unter Angabe der SPID an den Datenraum an. Im Feld DSPALET soll der dazugehörende ALET abgespeichert werden.

(3)

Der AR-Modus wird eingeschaltet. Damit ist jedem Mehrzweckregister ein Zugriffsregister eineindeutig zugeordnet.

(4)

Der Datenraum wird mit Daten beschrieben:
Das Basisregister ist Register 8. Das Zugriffsregister 8 wird mit dem ALET des Datenraums geladen (LAM).
Danach wird das Basisregister gelöscht (SR).
Aus dem Feld DATA werden Daten in der Länge von 100 Byte an den Anfang des Datenraums geschrieben (MVC).

(5)

Der AR-Modus wird ausgeschaltet:
Der AR-Modus sollte immer so früh wie möglich ausgeschaltet werden, um nicht erwünschten Datenraum-Zugriff zu vermeiden (gilt besonders bei Verzweigung in Unterprogramme).

(6)

Es wird die SPID eines fremden, jedoch mehrbenutzbaren Datenraums abgefragt: Mit den DSPSRV-Aufrufen wird der fremde Datenraum durch Angabe seines Namens und seines Geltungsbereichs angesprochen. In das Feld DSPSPID2 soll die SPID des fremden Datenraums eingetragen werden.

(7)

Das Programm schließt sich an den fremden Datenraum an:
Mit den ALESRV-Aufrufen schließt sich das Programm unter Angabe der SPID an den fremden Datenraum an. Im Feld DSPALET2 soll der dazugehörende ALET abgespeichert werden.

(8)

Der AR-Modus wird eingeschaltet. Damit ist jedem Mehrzweckregister ein Zugriffsregister eineindeutig zugeordnet.

(9)

Kopieren von Daten aus einem Datenraum in einen anderen:
Das Zugriffsregister 7 wird mit dem ALET des fremden Datenraums geladen (LAM). Aus dem eigenen Datenraum, der durch das Zugriffsregister 8 repräsentiert wird, werden 100 Byte an den Anfang des fremden Datenraums geschrieben.

(10)

Der AR-Modus wird ausgeschaltet (siehe (5)).

(11)

Löschen von Daten im fremden Datenraum:
Mit den DSPSRV-Aufrufen werden ab Adresse X'1000' des fremden Datenraums 400 KByte gelöscht, also mit binären Nullen überschrieben.

(12)

Erweitern eines Datenraums:
Mit den DSPSRV-Aufrufen wird der eigene Datenraum um 4000 KByte erweitert.

(13)

Es wird die Verbindung zu beiden Datenräumen gelöst:
Mit den ALESRV-Aufrufen löst das Programm unter Angabe der jeweiligen ALETs die Verbindung zu beiden Datenräumen.

(14)

Der vom Programm erzeugte (eigene) Datenraum wird zerstört. Der korrespondierende Eintrag in der Zugriffsliste wird gelöscht.