Der Statische Binder TSOSLNK erzeugt aus einem oder mehreren Bindemodulen (Objektmodule oder Großmodule) eine der folgenden Einheiten:
ein ablauffähiges Programm, das er in eine eigene katalogisierte Datei bzw. als Element vom Typ „C“ in eine PLAM-Bibliothek ausgibt,
oder ein vorgebundenes Modul, ein sog. Großmodul, das er in der temporären EAM-Datei der aktuellen Task bzw. als Element vom Typ „R“ in einer PLAM-Bibliothek hinterlegt.
Das Dienstprogramm TSOSLNK wird mit dem START-PROGRAM-Kommando aufgerufen. Es erwartet anschließend von SYSDTA Steueranweisungen
für die Ausgabe, die festlegen,
ob das Ergebnis des Binderlaufs ein ablauffähiges Programm oder ein Großmodul sein soll und
wohin das Ergebnis ausgegeben werden soll,
für die Eingabe, die ihm mitteilen,
welche Bindemodule er einbinden soll und
aus welchen Bibliotheken er offene Externverweise befriedigen soll.
Steueranweisungen für den TSOSLNK
Die Steueranweisungen für TSOSLNK und deren Operanden sind ausführlich im Handbuch „TSOSLNK“ [9] beschrieben; die Zusammenstellung auf der folgenden Seite gibt nur einen Überblick über die wichtigsten Angaben.
Anweisung | Kurzbeschreibung |
PROGRAM | weist den Binder an, aus den eingelesenen Objektmodulen ein Programm zu erzeugen, und legt dessen Eigenschaften und Ausgabeziel (PLAM-Bibliothek oder katalogisierte Datei) fest. Unter anderem können folgende Operanden angegeben werden:
Die Anweisungen PROGRAM und MODULE (siehe unten) schließen sich gegenseitig aus. |
MODULE | veranlasst den Binder, die eingelesenen Objektmodule zu einem Großmodul zu verknüpfen, und legt dessen Ausgabeziel fest. |
INCLUDE | gibt einzelne Objektmodule an, aus denen der Binder das Programm bzw. das Großmodul aufbauen soll. |
RESOLVE | weist TSOSLNK PLAM-Bibliotheken für das (unten beschiebene) Autolink-Verfahren zu. |
EXCLUDE | schließt die angegebene PLAM-Bibliothek vom (unten beschriebenen) Autolink-Verfahren aus. |
ENTRY | siehe ENTRY- bzw. START-Operand der PROGRAM-Anweisung. |
END | markiert das Ende der Eingabe von Binderanweisungen. |
Tabelle 9: Steueranweisungen für den TSOSLNK
Autolink-Verfahren des TSOSLNK
Findet TSOSLNK in einem Modul externe Adressverweise, die nicht durch die Module befriedigt werden können, die in INCLUDE-Anweisungen angegeben wurden, so geht er nach folgendem Autolink-Verfahren vor:
Als erstes prüft TSOSLNK, ob dem Externverweis mit einer RESOLVE-Anweisung explizit eine Bibliothek zugeordnet wurde, in der ein passendes Modul zu suchen ist.
Kann TSOSLNK im ersten Schritt den Externverweis nicht befriedigen, so durchsucht er sämtliche Bibliotheken, die in RESOLVE-Anweisungen angegeben wurden. Dabei können Bibliotheken durch EXCLUDE-Anweisungen von der Suche ausgeschlossen werden.
Ist es TSOSLNK auch im zweiten Schritt nicht gelungen, den Externverweis zu befriedigen, durchsucht er die Bibliothek TASKLIB, sofern dies nicht durch die Anweisung NCAL oder eine entsprechende EXCLUDE-Anweisung verhindert wurde. Falls es unter der Benutzerkennung der aktuellen Task keine Datei namens TASKLIB gibt, verwendet TSOSLNK die Bibliothek des Systems, $.TASKLIB.
Sind auch nach dem Autolink-Verfahren noch unbefriedigte Externverweise vorhanden, gibt TSOSLNK ihre Namen in einer Liste nach SYSOUT und SYSLST aus.
Beispiel 6-1
Statisches Binden zu einem ablauffähigen Programm
/START-PROGRAM FROM-FILE = $TSOSLNK ——————————————————————————————————— (1) % BLS0500 PROGRAM 'TSOSLNK', VERSION 'V21.0E02' OF '1999-03-15' LOADED % BLS0552 ... *PROG COBOLPROG,LIB=PLAM.LIB,ELEM=COBOLLAD ———————————————————————————— (2) *INCLUDE COBOLMOD,PLAM.LIB ———————————————————————————————————————————— (3) *RESOLVE ,$.SYSLNK.CRTE ——————————————————————————————————————————————— (4) *END —————————————————————————————————————————————————————————————————— (5) % LNK0500 PROG BOUND % LNK0506 PROGRAM LIBRARY : PLAM.LIB % LNK0507 PHASE WRITTEN TO ELEMENT 'COBOLLAD'
(1) (2) | Das Dienstprogramm TSOSLNK wird aufgerufen. Die PROG-Anweisung legt fest, dass TSOSLNK ein ablauffähiges Programm mit dem Namen COBOLPROG erzeugen und als Element unter dem Namen COBOLLAD in der PLAM-Bibliothek PLAM.LIB ablegen soll |
(3) | Die INCLUDE-Anweisung teilt dem Binder mit, dass er das Objektmodul COBOLMOD aus der PLAM-Bibliothek PLAM.LIB binden soll. |
(4) | TSOSLNK soll Externverweise zunächst mit Modulen aus dem Laufzeitsystem befriedigen, das an dieser Anlage unter dem Namen $.SYSLNK.CRTE katalogisiert ist. |
(5) | END schließt die Eingabe der Steueranweisungen ab und leitet den Bindevorgang ein; nach dessen Abschluss informiert TSOSLNK über das erstellte Programm. |
Binden von segmentierten Programmen mit Überlagerungsstruktur
Durch geeignete COBOL-Sprachmittel (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [1]) kann der Compiler veranlasst werden, den Maschinencode für eine Übersetzungseinheit nicht als ein einziges Objektmodul, sondern, in Teile zerlegt, in Form mehrerer Objektmodule auszugeben. Dieser Vorgang heißt
Segmentierung; die dabei entstehenden Programmteile nennt man Segmente.
Beim Binden eines segmentierten Programmes lässt sich eine Überlagerungsstruktur definieren (siehe auch Handbuch „TSOSLNK“ [9]):
Abgesehen vom Root-Segment, das während des gesamten Programmlaufs im Speicher bleibt, kann der Benutzer die einzelnen Segmente programmgesteuert nachladen lassen, wenn sie für den Ablauf erforderlich sind. Dabei können sich Segmente gegenseitig überlagern, d.h. nacheinander einen gemeinsamen Speicherbereich belegen. Welche Segmente einander überlagern können, wird durch Steueranweisungen beim Binden des Programms festgelegt.
Da jedoch der Ablaufteil des BS2000 von sich aus ein Programm in Seiten, d.h. Teile von 4096 Byte, gliedert und bei der Programmausführung jeweils nur die Seiten in den Hauptspeicher lädt, die gerade für den Ablauf benötigt werden, ist im BS2000 Segmentierung zur Entlastung des Hauptspeichers nicht notwendig. Erforderlich wird sie lediglich dann, wenn der virtuelle Adressraum nicht ausreicht, das gesamte Programm einschließlich der Daten aufzunehmen. Aus diesem Grund ist es nicht möglich, eine echte Überlagerungsstruktur für Programme zu definieren, die im oberen Adressraum ablaufen sollen.
Mit folgenden TSOSLNK-Anweisungen lassen sich Überlagerungsstrukturen für segmentierte Programme definieren:
Anweisung | Kurzbeschreibung |
OVERLAY | bestimmt die Überlagerungsstruktur für das Programm: Die OVERLAY-Anweisungen eines Binderlaufs legen fest,
OVERLAY-Anweisungen sind nur beim Binden eines Programms erlaubt (PROGRAM-Anweisung); beim Binden eines Großmoduls (MODULE-Anweisung) werden sie mit einer Fehlermeldung zurückgewiesen. |
TRAITS | vereinbart für einen Programmteil, dass er
|