Lademodul
# Lademodul

Der Begriff Lademodul (auch Phase genannt) wird zumeist im Umfeld der Betriebssysteme z/OS (früher auch MVS) und BS2000 gebraucht. Der Begriff bezeichnet ein in einer Lademodulbibliothek gespeichertes, ausführbares Programm.

Im z/OS ist eine Lademodulbibliothek eine PO-Datei (Partitioned Data Set, PDS) oder ein Extented Partioned Data Set (PDSE).

Ein Lademodul ist ein sog. Member einer Lademodulbibliothek; ist das Programm ein Member eines PDSE, nennt man es im z/OS auch Program Object (im BS2000: Objektprogramm).

Program Objects unterstützen erweiterte Eigenschaften von Programmen, die im klassischen MVS nicht so wichtig waren:

* Programmgröße größer als 16 MB
* Programmnamen länger als acht Zeichen mit Berücksichtigung von Groß-/Kleinschreibung
* Unterstützung von DLLs

## Erzeugung eines Lademoduls

Dieses entsteht, wenn man einen Quelltext (z. B. COBOL, Fortran, C oder Assembler) mit dem jeweiligen Compiler übersetzt (es entsteht dabei der Objektcode, oft auch als Objektmodul bezeichnet) und anschließend mit dem Linker bindet.

Ein ausführbares Programm besteht normalerweise nicht nur aus dem Objektcode eines Programms. In der Regel muss der Linker weitere Programmroutinen oder zumindest Informationen über weitere Programmroutinen (Unterprogramme) zu dem ursprünglichen Objectcode hinzufügen.

Im z/OS-Sprachgebrauch heißen solche Objectcode-Teile Control Sections (kurz CSECTs). Die verschiedenen Control Sections eines Lademoduls können von verschiedenen Compilern erzeugt worden sein.

## Inhalt eines Lademoduls

Ein Lademodul enthält zum einen den von den Compilern erzeugten Maschinencode, des Weiteren aber auch Informationen, die benötigt werden, um

* das Programm in den Hauptspeicher zu laden und zur Ausführung zu bringen:
   * Wo soll das Programm geladen werden?
   * Wo befinden sich im Lademodul relative (verschiebliche, relocatable) Adressen? Das sind Adressen im Programm, die der Compiler generiert hat, die aber noch vor der Programmausführung vom Ladeprozess auf die tatsächlichen Adressen im Hauptspeicher umgerechnet werden müssen.
   * Wenn es bereits im Speicher liegt, kann die Version im Speicher verwendet werden, oder wird eine neue, frische Version benötigt?
   * Wo ist der Einsprungpunkt des Programms, d. h. wohin soll das Betriebssystem verzweigen, wenn es die Ausführung an das geladene Programm übergeben will?
* das Programm mit dem Linker (Linkage Editor, Binder) bearbeiten, z. B. einzelne Programmteile austauschen zu können.
