# Overlay (Programmierung)

Als Overlay bezeichnet man einen Teil eines Computerprogramms, das in einen Bereich des Arbeitsspeichers, der wechselweise von mehreren Programmteilen (Overlays) gemeinsam genutzt wird, geladen und dort ausgeführt wird.

## Problemstellung

Über viele Jahre reichte der verfügbare RAM-Speicher in Computern nicht aus, um komplexe ausführbare Programme im Ganzen zu laden.
In den 1960er Jahren verfügten selbst Großrechner nur über kleine maximale Speichergrößen im Bereich einiger 100 kB, für aufwendige Rechenprogramme entschieden zu wenig. Man entwickelte deshalb Methoden, aus einem relativ kleinen Hauptprogramm, in dem zum Beispiel alle Speicherbereiche für permanente Daten angelegt wurden, dynamisch Unterprogramme (und weitere Unterprogramme dazu) zum Hauptprogramm hinzu zu laden (über Level-Techniken), wobei der zuvor geladene Programmcode desselben Levels überschrieben wurde.
Gesteuert wurde das über Kontrollbefehle im Source-Code des gesamten Programm(-pakets). Hier als Beispiel (aus einem FORTRAN-Programmierhandbuch für eine CDC 6400, 1971):
Das gesamte Programmpaket wurde vom Compiler übersetzt und die Overlay-Teile im unteren Teil einzeln in die jeweiligen Dateien (filename1, …2, …) geschrieben. Als Medien standen eigentlich nur Datentrommeln und Bandgeräte bereit. Nach dem Anlaufen des Hauptprogramms wurden dann die Overlay-Teile nachgeladen: *1 lädt das erste Paket und sofort das erste Sub-Paket hinterher (*2). Mit *3 wird das mit *2 geladene Overlay überschrieben. Und mit *4 wird das gesamte mit *1, *2 und danach *3 geladene Overlay ersetzt.
In den 1970er Jahren nahm die Größe der verfügbaren Speicher schnell zu und die (zeitraubende) Overlay-Technik geriet fast in Vergessenheit.
Mit dem Aufkommen der aus hochintegrierten Halbleiterbausteinen bestehenden Mikrocomputer in den 1980ern verfügte man mit den 8-Bit-Mikroprozessoren Intel 8080 und Zilog Z80 unter dem Betriebssystem CP/M-80 lediglich über höchstens 64 Kilobyte Arbeitsspeicher. Die IBM-PC mit dem 16-Bit-Prozessor 8088 von Intel konnten unter dem Betriebssystem MS-DOS nicht mehr als 640 Kilobyte an RAM nutzen. Damit war die Größe eines ausführbaren Programms einschließlich der notwendigen Datensegmente auf diese maximale Größe des verfügbaren Arbeitsspeichers begrenzt. Man entsann sich wieder der „alten“ Overlay-Technik.

## Overlay

Quasi als Notlösung aus solchen Problemstellungen entschied man sich daher in besonderen Fällen, Computerprogramme zu modularisieren und in Teile zu splitten, die nicht gleichzeitig ausgeführt werden mussten. Diese wurden als separate Programm-Dateien realisiert. Um sie einzeln zu nutzen, wurde der dafür maximal erforderliche Speicherbereich im RAM reserviert. So konnte ein solches Modul temporär als Overlay geladen und ausgeführt sowie bei Bedarf dynamisch durch ein anderes Modul, das dorthin nachgeladen werden musste, ersetzt werden. Overlay-Dateien wurden meist durch die Dateiendung OVR oder OVL gekennzeichnet, verbindliche Konventionen gab es aber nicht.

## Software

Um die Aufteilung in Overlays sowie anfänglich auch das Nachladen musste sich der Programmierer selbst kümmern, also diese Funktionalität programmieren. Teilweise wurden Overlays auch durch Programmiersysteme – beispielsweise durch spätere Versionen von Turbo Pascal – unterstützt. Die Modularisierung in Programm-Dateien nach Anweisung des Programmierers erfolgte hier durch den Compiler bzw. Linker, die Speicherverwaltung und das Nachladen durch das Laufzeitsystem.
Ein Programm in Turbo Pascal 3.0 könnte man sich sinngemäß etwa in folgender Form vorstellen:
Ab Turbo Pascal Version 5.0 gibt es auf Unit-Ebene den Begriff Overlay.

## Professionelle Nutzung

Insbesondere professionelle Software war aufgrund ihres notwendigen Funktionsumfangs zu Zeiten begrenzter Hardware von dem Problem der Speicherknappheit betroffen. Eines der seinerzeit für die Modularisierung in Overlays bekannten Programme ist die Textverarbeitungssoftware WordStar mit dem Hauptprogramm WS.COM und den Overlay-Modulen WSMSGS.OVR, WSOVLY1.OVR, MAILMERGE.OVR und SPELSTAR.OVR. Auch das Datenbankprogramm dBASE war entsprechend modularisiert. Selbst die Space-Shuttle-Software Primary Avionics System Software (PASS) verwendet Overlays.

## Aktuelle Bedeutung

Durch die weitere Entwicklung im Bereich Hard- und Software haben Overlays allgemein nur noch geringe Bedeutung. Allenfalls in kleinen, relativ einfachen Systemen wie eingebetteten Systemen sind Overlays noch sinnvoll.
Auch in manchen Live-Betriebssystemen, die darauf ausgerichtet sind, vom RAM-Speicher sparsam Gebrauch zu machen, findet die Overlaytechnik unter Zuhilfenahme von Kernel-Modulen Verwendung.
Moderne Computersysteme mit hinreichendem Arbeitsspeicher und linearer Adressierung sowie Betriebssystemen mit leistungsfähiger Speicherverwaltung machen Overlays überflüssig bzw. lassen sie nicht mehr zu. Eine den Overlays ähnliche Funktionalität kann bei Bedarf mit dynamischen Linkbibliotheken (unter Windows DLLs) und Laden zur Laufzeit realisiert werden.