Overlay (Programmierung)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Schematische Darstellung

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[Bearbeiten | Quelltext bearbeiten]

Ü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 u. A. z. B. 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):

  Hauptprogramm
     ...
     CALL OVERLAY (filename1, Mainlevel1, SubLevel0, ...ggf. weitere Parameter) *1
     CALL OVERLAY (filename2, Mainlevel1, SubLevel1, ...ggf. weitere Parameter) *2
     ...
     CALL OVERLAY (filename3, Mainlevel1, SubLevel2, ...ggf. weitere Parameter) *3
     ...
     CALL OVERLAY (filename4, Mainlevel2, SubLevel0, ...ggf. weitere Parameter) *4
     ...
  Ende Hauptprogramm
  OVERLAY (filename1, Mainlevel1, Sublevel0, ... ggf. weitere Parameter)
     Fortran-Code für das gesamte OVERLAY Paket 1.0
     END
  OVERLAY (filename2, Mainlevel1, Sublevel1, ... ggf. weitere Parameter)
     Fortran-Code für das gesamte OVERLAY Paket 1.1
  END
  OVERLAY (filename3, Mainlevel1, Sublevel2, ... ggf. weitere Parameter)
     Fortran-Code für das gesamte OVERLAY Paket 1.2
  END
  OVERLAY (filename4, Mainlevel2, Sublevel0, ... ggf. weitere Parameter)
     Fortran-Code für das gesamte OVERLAY Paket 2.0
  END

Das gesamte Programmpaket wurde vom Compiler übersetzt und die Overlay-Teile im unteren Teil einzeln in die jeweiliegen 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 des Speichers schnell zu und die (zeitraubende) Overlay-Technik geriet fast in Vergessenheit.

Mit dem Aufkommen der Mikrocomputer in den 1980ern 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 Datenbereiche auf diese maximale Größe des verfügbaren Arbeitsspeichers begrenzt. Man entsann sich wieder der "alten" Overlay-Technik.

Overlay[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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:

program meinprojekt;
overlay procedure kundenverwaltung;
...
overlay procedure warenverwaltung;
...
{ Hauptprogramm }
begin
while input <> "ende" do begin
case input of
"kunden": kundenverwaltung;
"waren": warenverwaltung;
end;
end;
end.

Ab Turbo Pascal Version 5.0 gibt es auf Unit-Ebene den Begriff Overlay.

Professionelle Nutzung[Bearbeiten | Quelltext bearbeiten]

WordStar, eine ehemals auf Overlays basierende Software

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.[1] Selbst die Space Shuttle-Software Primary Avionics System Software (PASS) verwendet Overlays.[2]

Aktuelle Bedeutung[Bearbeiten | Quelltext bearbeiten]

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.

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 (DLLs) und Laden zur Laufzeit realisiert werden.

Quellen[Bearbeiten | Quelltext bearbeiten]

  • Turbo Pascal 7.0, Rudolf Herschel, Ernst-Wolfgang Dieterich, 2. Auflage 2000, Seite 249, Verlag Oldenbourg, ISBN 3-486-25499-5
  • Getting started with WordStar, MailMerge + SpellStar, Alan Mabbett, 1985, Cambridge University Press, englisch, ISBN 0-521-31805-X

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Fa. Ashton Tate: Ankündigung dBASE IV, Version 1.1. 31. Juli 1990, abgerufen am 13. Februar 2014.
  2. An Assessment of Space Shuttle Flight Software Development Processes (englisch). The National Academies Press, abgerufen am 13. Februar 2014.