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.
|
|
|
|
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:
Anlegen eines Datenraumes (Makro DSPSRV FCT=CREATE)
oder
Besorgen der Identifikation (SPID) eines existierenden, mehrbenutzbaren Datenraums (Makro DSPSRV FCT=INFORM).Herstellen der Verbindung zu diesem Datenraum
(Makro ALESRV FCT=CONNECT), es wird ein ALET zurückgeliefert.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).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.
Bild 8: Auswahl des Adressraums
(1) | Die bei der Adressumrechnung berechnete Adresse bezieht sich auf den Programmraum, wenn
|
(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: |
(2) | Das Programm schließt sich an den Datenraum an: |
(3) | Der AR-Modus wird eingeschaltet. Damit ist jedem Mehrzweckregister ein Zugriffsregister eineindeutig zugeordnet. |
(4) | Der Datenraum wird mit Daten beschrieben: |
(5) | Der AR-Modus wird ausgeschaltet: |
(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 |
(7) | Das Programm schließt sich an den fremden Datenraum an: |
(8) | Der AR-Modus wird eingeschaltet. Damit ist jedem Mehrzweckregister ein Zugriffsregister eineindeutig zugeordnet. |
(9) | Kopieren von Daten aus einem Datenraum in einen anderen: |
(10) | Der AR-Modus wird ausgeschaltet (siehe (5)). |
(11) | Löschen von Daten im fremden Datenraum: |
(12) | Erweitern eines Datenraums: |
(13) | Es wird die Verbindung zu beiden Datenräumen gelöst: |
(14) | Der vom Programm erzeugte (eigene) Datenraum wird zerstört. Der korrespondierende Eintrag in der Zugriffsliste wird gelöscht. |