Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Shareable Objekte generieren, die in einen Common Memory Pool geladen werden

Sollen Teile Ihres Anwendungsprogramms in einen Common Memory Pool geladen werden, dann beachten Sie bitte Folgendes:

  • Aus Performancegründen sollten Sie, soweit möglich, alle shareable Teile eines Anwendungsprogramms, die in einen Common Memory Pool geladen werden sollen, zu einem Lademodul zusammenfassen.

  • Das vom Compiler erzeugte shareable Code-Modul des Programms muss in einem LLM oder OM enthalten sein.

  • Erzeugt ein Compiler für den shareable und den nicht-shareable Teil zwei getrennte Objektmodule, dann sollten Sie diese Module mit dem Binder zu einem LLM mit Slices vorbinden.

  • LLMs mit Slices können Sie mit einer einzigen LOAD-MODULE-Anweisung generieren:

    LOAD-MODULE llm-name ,VERSION=version         -
      ,LOAD-MODE=(POOL,poolname,{STARTUP|ONCALL}) -
      ,LIB=program-lib                            -
      ,ALTERNATE-LIBRARIES={YES|NO}
    

    Durch diese Anweisung wird der Public Slice des LLM in den Common Memory Pool poolname geladen, der Private Slice wird entweder bei Anwendungsstart (STARTUP) oder bei Programmaufruf (ONCALL) nachgeladen. Für die durch openUTM aufzurufenden Programme dieses LLMs sind zusätzlich PROGRAM-Anweisungen notwendig.

    Alternativ dazu können Sie auch das shareable und das nicht-shareable Modul durch zwei LOAD-MODULE-Anweisungen generieren. Dies sollten Sie jedoch möglichst vermeiden, da sich diese beiden Module nicht ohne Konsistenzlücke austauschen lassen.

  • Einen gemeinsam nutzbaren Datenbereich (Area), der in den Common Memory Pool geladen werden soll, müssen Sie mit einer AREA-Anweisung beschreiben. Die Area muss dann in dem Lademodul enthalten sein, der folgendermaßen generiert wird:

    LOAD-MODULE ar-share  ,VERSION=version        -
      ,LOAD-MODE=(POOL,poolname,NO-PRIVATE-SLICE) -
      ,LIB=libname
    

    AREAs, denen beim Übersetzen oder durch den Binder das Attribut PUBLIC zugeordnet wurde, können auch zusammen mit anderen Modulen in einen LLM mit Slices vorgebunden werden. Dieses LLM kann dann folgendermaßen generiert werden:

    LOAD-MODULE llm-with-slices ,VERSION=version  -
      ,LOAD-MODE=(POOL,poolname,{STARTUP|ONCALL}),LIB=libname
    

Beispiel

Das Beispiel geht davon aus, dass zum Übersetzen ein COBOL-Compiler verwendet wurde und dass der Compiler die Objekte in ein LLM abgelegt hat. In den anwendungslokalen Pool LCPOOL sollen die shareable Module der COBOL-Teilprogramme TP1 und TP2, die Formatbeschreibungen FORMAT1 und FORMAT2 und der Datenmodul DATAMOD geladen werden. LCPOOL soll auf Adresse X’020000’ geladen werden, 128 KB belegen können und schreibgeschützt sein.

/MPOOL        LCPOOL,SIZE=2,SCOPE=GROUP,ACCESS=READ,PAGE=X'20000'
/LOAD-MODULE  LLM-LCPOOL,VERSION=1,            -
/             LOAD-MODE=(POOL,LCPOOL,STARTUP), -
/             LIB=libname
/PROGRAM      TP1 ,LOAD-MODULE=LLM-LCPOOL,COMP=ILCS
/PROGRAM      TP2 ,LOAD-MODULE=LLM-LCPOOL,COMP=ILCS
/AREA         DATAMOD,LOAD-MODULE=LLM-LCPOOL

Die Objektmodule müssen Sie vor dem Start der Anwendung zu dem LLM LLM-LCPOOL vorbinden und dabei in der BINDER-Anweisung START-LLM-CREATION die Option BY-ATTRIBUTES(PUBLIC=YES) angeben, wodurch das LLM in eine Public und einen Private Slice unterteilt wird. Das so erzeugte LLM müssen Sie in der Bibliothek libname bereitstellen.