|
Overlay-Technik
Um ein Programm ausführen zu können, das einschließlich seiner Daten nicht im Speicher
unterzubringen ist, kann es in Teile zerlegt werden, die nicht ständig gleichzeitig im Speicher vorhanden sein müssen. Diejenigen Teile, die sich nicht im Arbeitsspeicher befinden, werden nachgeladen sobald sie benötigt werden. Weil die Entscheidung für das Nachladen dynamisch zur Laufzeit getroffen wird, spricht man hier von dynamischem Laden. Dabei muß zwangsläufig ein vorher im Speicher befindlicher Programmteil überschrieben (überlagert) werden, weshalb man diese Methode auch als "Overlay-Technik" bezeichnet.Die Zerlegung eines Programms in Teile (Segmente), welche nicht gleichzeitig im Arbeitsspeicher sein müssen, muß der Programmierer vornehmen, weil es für den
Compiler und den Linker keine praktikable Möglichkeit gibt, dies automatisch zu tun.
Nur der Programmierer kann vorhersagen, in welcher Kombination verschiedene
Programmteile zusammenarbeiten werden und sich daraufhin eine entsprechende
Overlay-Struktur überlegen. Eine ungünstige Struktur wird zu unnötig vielen
verlangsamenden Ladevorgängen führen.
Eine Overlay-Struktur besteht aus
- einem speicherresidenten Programmteil (root program),
- aus mehreren Unterprogrammen, die sich gegenseitig überlagern,
- und aus gemeinsamen Daten (Common), die von Aufruf zu Aufruf
erhalten bleiben sollen.
Der Speicheranteil, der für die Überlagerung von Programmabschnitten vorgesehen ist,
wird als transienter Bereich bezeichnet.
Eine ähnliche Technik, die ohne gemeinsames Hauptprogramm auskommt, bezeichnet man
als "Chaining" (Verketten). Eigenständige Programmodule rufen sich gegenseitig auf
und werden von diesen vollständig überlagert (typisch für BASIC).
Wenn aufgrund eines sehr ungünstigen Verhältnisses zwischen Programmgröße und
Arbeitsspeichergröße ein mehrfach geschachteltes Überlagern nötig wird - innerhalb
eines Überlagerungssegmentes wird wieder überlagert usw. - dann kann der
Arbeitsaufwand für die Erstellung einer effizienten Overlay-Struktur
erheblich werden!
|
|
|