next up previous contents index
Next: Der ELAN Compiler Up: L3 Referenzhandbuch Previous: Inhalt

Einführung

Das L3 Referenzhandbuch ist das zweite Handbuch zum Betriebssystem L3. Während das Benutzerhandbuch durchaus als Lesebuch angelegt ist, ist das Referenzhandbuch eher ein Nachschlagewerk. Es mag auch interessant sein, dieses Handbuch durchzublättern, um auf Neues zu stoßen, es ist jedoch nicht darauf angelegt, es von vorn bis hinten durchzulesen. Dieses Buch ist nicht frei von Vorwärtsverweisen, es werden teilweise Dinge erwähnt, deren Erklärung erst anschließenden Kapiteln folgt. Vor allem wird dieses Handbuch nur dann Hilfe sein, wenn es beim Lernen und bei der Arbeit neben dem Rechner liegt. Ein Betriebssystem vom Schlage des L3 ist zu komplex und detailreich, um zuerst zu lesen und dann zu arbeiten. Für einen Einstieg in die Handhabung und Programmierung des Betriebssystems sollten Sie dieses erste Kapitel lesen, der Rest des Buches möge dann bei Bedarf folgen.

Genauso wichtig wie das Buch selbst ist die beiliegende Programmdiskette. Auf ihr befinden sich Teile des L3 Systems im Quellcode. Ausgesucht sind aus dem Gesamtsystem einerseits Programme, die gut nachvollziehbar die Programmierung in ELAN demonstrieren, andererseits aber auch Programme, die Basis für anspruchsvollere Vorhaben sein mögen.

Schließlich noch eine Bitte an alle Leser: Geben Sie Laut! Nur Ihre Meinung zu Stärken und Schwächen dieses Handbuchs kann eine Weiterentwicklung zum Besseren veranlassen.

Die aktuelle Auflage des Handbuchs ist in Januar 1991 abgeschlossen. Der Stand der einzelnen Kapitel:

Kap. 11:
3/90
Kap. 2, 3.3, 7:
10/90
Kap. 3, 4, 5, 8, 9, 10, 12:
11/90
Kap. 6:
12/90
Kap. 1, 8, 13, 14:
1/91

Tips zur schnellen Übersicht

Das L3 Referenzhandbuch beschreibt die sicheren Leistungen des Betriebssystems L3. Sichere Leistungen sind diejenigen, die auch in zukünftigen Versionen des Systems in der hier beschriebenen Form verfügbar sein werden oder für die Portierungswerkzeuge bereitgestellt würden, falls in kommenden Versionen Änderungen vorgenommen würden.

Nach diesem einführenden Kapitel ist in Kapitel 2 einiges zum ELAN Compiler ausgeführt. Die Kapitel 3 bis 13 sind Nachschlageteil für den ELAN Programmierer, das Kapitel 14 erörtert allgemein die Schnittstellen von L3 als offenes Betriebssystem für Rechner mit dem Intel 80386/80486 Prozessor.

Beim Aufbau der »ELAN Teile« wurde versucht vom den einfachen Dingen, wie arithmetischen Operationen zum Schwierigen, etwa der Managerprogrammierung vorzuschreiten.

Von allgemeinem Interesse sind Kapitel 5, das sich mit den L3 Basistypen Datenraum und Task beschäftigt, Kapitel 7 zur Intertask-Kommunikation und eventuell auch das Kapitel 8, das versucht das Managerkonzept nahezubringen.

Diskette mit Beispielprogrammen

Die Diskette »ELAN Beispielprogramme« enthält eine größere Anzahl von Programmen aus dem L3 System im Quellcode. Es gibt weder in diesem Buch noch auf der Diskette Querverweise zwischen Stichworten im Handbuch und Programmen auf der Diskette. Stattdessen befindet sich auf der Diskette das Programm grep, mit dem leicht Stichworte in einzelnen Dateien oder Gruppen von Dateien gesucht werden können.

Der Inhalt dieser Diskette kann mit der Zeit variieren, sie wird mit kommenden Versionen aktualisiert.

Notation in diesem Buch

Die Schreibweise in diesem Buch ist nach folgenden Regeln gestaltet:

Die Zusammenstellung der L3 Systemleistungen ist im weitestem Sinne an den beteiligten Datentypen orientiert oder nach Themenkreisen sortiert. Das heißt, ein Kapitel beschreibt z.B. die im Zusammenhang mit TEXT Objekten relevanten Systemleistungen, also Prozeduren/Operatoren, deren Parameter vom Typ TEXT sind oder die Texte liefern, ein anderer Abschnitt beschreibt die Prozeduren, die in unmittelbarem Zusammenhang mit der Intertask Kommunikation stehen. Im zweiten Fall ist keine Ordnung nach auftretenden Datentypen möglich, die Zusammenstellung aber thematisch naheliegend.

Jedes Kapitel beginnt mit einer kurz gehaltenen Einführung. Anschließend folgt die Beschreibung der Prozeduren, Operatoren oder auch Systemcalls. Innerhalb eines Kapitels gibt es keine zwingend eingehaltene Reihenfolge. Während es manchmal ratsam schien, die Leistungen in alphabetischer Reihung zu ordnen, sind in anderen Abschnitten nichtalphabetische Zusammenstellungen passender, weil sie eher der tatsächlichen Programmierung entsprechen.

Die Beschreibung einer einzelnen Komponente kann folgende Teile enthalten:

PROZEDUR

PROC PROZEDUR (PARAMETER ...)

Wirkung: Mindestens eine kurze Beschreibung zu Sinn und Zweck ist immer vorhanden.
Bemerkung: Falls Erläuterungen nötig sind, die zwar nicht den eigentlichen Zweck der Prozedur beschreiben, aber zum Verständnis der Funktionsweise beitragen, sind diese separat gefaßt.
Beispiel:
(* Statt langer Bemerkungen oder Verweise *) 
(* ist manchmal ein kurzer                *) 
(* Programmabschnitt informativer.        *)

Parameter: Falls Parameter Werte von ganz besonderer Bedeutung enthalten können, sind diese hier aufgeführt.
Fehler: Fehler, die mit der Funktionsweise der Prozedur in Zusammenhang stehen, nicht etwa mögliche Syntaxfehler oder dergleichen.

Ein Wort zur Sprache

Die Informatik als Wissenschaft und vor allem die Informatik als Populärwissenschaft findet natürlich auch ihren Niederschlag in der Sprache. »Die Sprache« ist einerseits die, mit der sich die Informatik selbst zu Beschreiben sucht. Der Informatiker, angefangen beim Systemdesigner bis hin zum subalternen Handbuchschreiber, neigt dabei zu Anglizismen. Andererseits ist »die Sprache« auch die, mit der über die Informatik und ihre Themen gesprochen wird. Hier ist besonders der Aspekt der Populärwissenschaft Informatik spürbar. Eine Fülle von Büchern und Zeitschriften beschäftigt sich mit unterschiedlichem Tiefgang und verschiedenem Vokabular mit dem Thema und pflegt manches Mal einen wunderlichen Soziolekt. Dieses alles ist vor allem der Tatsache zu verdanken, daß die entscheidenden Impulse der Informatik in kommerzieller und damit breitenwirksamer Hinsicht aus den USA kommen. So wie das Lateinische die Sprache der Wissenschaften der religiös geprägten Jahrhunderte war, ist das Englische die Sprache des Zeitalters der Information. Der Autor möchte zwar nicht Rom und Armonk in ihrer Bedeutung für diese oder jene Welt völlig gleichsetzen, aber vielleicht doch ein bißchen?

Zumindest jedoch reicht ihm das als Begründung, daß die Benennung von Leistungen von L3, z.B. in Form der vielen ELAN Prozeduren, an der englischen Sprache orientiert ist. Folgerichtig wurde auch für die Benennung von Parametern die englische Bezeichnung gewählt. Zwar sind damit Formulierungen entstanden, die einen deutschen Leser befremden mögen, dafür jedoch könnte diese Wahl der Übersetzung in andere Sprachen hilfreich sein.

Woher stammt L3?

L3 ist in einem langjährigen Forschungsprojekt »Betriebssysteme für Mikrocomputer«, das in Kooperation der Gesellschaft für Mathematik und Datenverarbeitung (GMD) und der Universität Bielefeld durchgeführt wird, entstanden. Leiter dieses Projekts und »Chefdesigner« ist Jochen Liedtke. Der »Kern« der L3 Entwicklungsmannschaft besteht aus:

Ulrich Bartling, Uwe Beyer, Dieter Breuer, Achim Heidrich, Dietmar Heinrichs, Dietmar Martinek, Andreas Reichpietsch, Rudolf Ruland, Gyula Szalay und Marcus Zens.

Der diesjährige Preis für äußerste Gerissenheit im Schaffen mit L3 gebührt Axel Kroll und Martin Schönbeck.

Ihnen, allen anderen Mitwirkenden an diesem Projekt und vor allem auch den »Piloten«, die die Fortschritte, aber auch manchen Fehltritt, von den Anfängen an mit begleiteten, sei an dieser Stelle gedankt.

Werner Metterhausen, Siegburg im Januar 1991.

Der Aufbau von L3

L3 ist ein Multitasking-/ Multiuser- Betriebssystem für Rechner mit mit INTEL 386 Prozessor. L3 läuft grundsätzlich im Protected Mode mit eingeschaltetem Paging. Es handelt sich bei L3 um ein prozeßorientiertes Betriebssystem. Damit unterscheidet es sich in seiner inneren Struktur grundsätzlich von tabellenorientierten (= »dateiorientierten«) Systemen, wie z.B. UNIX. L3 besteht aus den Komponenten Systemkern, den Gerätetreibern, dem Systemmantel und der Systemschale. Der Aufbau von L3 läßt sich in folgendem Bild skizzieren:

L3 Systemschale  (= Benutzeroberfläche) 
 
L3 Systemmantel (Tasksystem) 
 
L3 Eingabe Ausgabetreiber (Prozesse) 
für I/O Devices (= Diskette, Tastatur, Bildschirm...) 
 
      L3 Systemkern 
 
      Geräte        80386

Jede Komponente setzt gewisse Fähigkeiten und Vorleistungen der darunterliegenden Komponenten voraus, es handelt sich um eine Hierarchie abstrakter Maschinen, aufbauend auf der konkreten Maschine Intel 80386. Die Beschreibung des Aufbaus und des Zusammenwirkens dieser Komponenten ist Anliegen dieses Abschnitts.

Der L3 Systemkern

Der L3 Systemkern ist ein Steuerprogramm, das Objekte der Klasse Prozeß und der Klasse Datenraum erzeugt und verwaltet.

Um diese Leistungen zu erbringen, nutzt der Systemkern insbesondere die Möglichkeit der virtuellen Adressierung (Paging) des Intel 80386 aus.

Der L3 Systemkern bringt die Leistungen:

Die Systemverwaltung behandelt den Systemstart, die Behandlung der Betriebssystemaufrufe (Systemcalls) und Interna wie die Systemuhr.

Die Speicherverwaltung vewaltet Vordergrund- (RAM) und Hintergrundspeicher (Festplatte). L3 hat eine virtuelle Speicherverwaltung, d.h. es gibt keine Unterscheidung zwischen Schreiben in Puffer (temporäre Dateien im Arbeitsspeicher) und Schreiben auf die Festplatte. L3 kennt stattdessen (logische) Objekte des Typs Datenraum. Ein Datenraum ist ein einfaches Objekt des Typs Speicher, das als Folge von Byte betrachtet werden kann. Durch Angabe eines Offset kann in einem Datenraum beliebig adressiert werden. Physisch besteht ein Datenraum aus Pages (im folgenden auch als Seiten erwähnt), 4096 Byte großen Abschnitten auf der Festplatte. Die Ablage der Seiten und damit die Verwaltung der Festplatte sind ausschließliche Sache der Speicherverwaltung. Das Laden der durch die aktuell vorliegende Adresse geforderten Page in den Arbeitsspeicher und die damit verbundenen Adreßumsetzungen regelt die L3 Speicherverwaltung unter Benutzung der Memory Management Unit (MMU) des Intel 80386.

Die Prozeßverwaltung erschafft und verwaltet Objekte des Typs Prozeß. Prozesse sind die einzigen globalen Objekte in einem L3 System, d.h. nur Prozesse, nicht etwa Dateien oder Verzeichnisse, sind im Grundzustand des Systems sichtbar. Ein Prozeß »besteht« aus einem Stück Speicher, seinem Adreßraum, und dem sequentiellen Kontrollfluß in dem Prozeß, Thread genannt. Ein Prozeß kann auch aus mehreren Threads bestehen. In diesem Falle teilen sich also mehrere »kleine Prozesse« einen gemeinsamen Adreßraum. Die Programmierschnittstelle zu Threads wird aber erst in einer kommenden L3 Version veröffentlicht.

L3 unterscheidet Realprozesse und virtuelle Prozesse. Realprozesse sind resident im Arbeitsspeicher. Sie dienen als Gerätetreiber und unterliegen nicht dem Paging. Somit haben sie nur eine beschränkte Lebensdauer. Sie werden beim Abschalten des Systems beendet und beim Start neu etabliert. Virtuelle Prozesse dagegen unterliegen dem Paging und überstehen Systemabschaltungen und -abstürze. Sie sind also dauerhaft. Sie können lokale Datenobjekte verwalten und auf Grund ihrer prinzipiell unbeschränkten Lebensdauer damit natürlich auch speichern. Dateien sind also als lokale Datenobjekte prinzipiell ewig lebender Prozesse realisiert.

Aus Sicht des Systemkerns besteht ein Prozeß aus dem Prozeßkontrollblock (einer Datenstruktur im L3 Systemkern) und (mindestens) einem Datenraum. Dieser sogenannte Standarddatenraum (STDDS) des Prozesses enthält Code und Daten. Einfach dargestellt ist der Standarddatenraum eine Datei, die ein fertig übersetztes, lauffertiges Programm enthält, das bei Erzeugung des Prozesses gestartet wird.

Der Prozeßkontrollblock (PCB) ist der Anker eines Prozesses im Systemkern. Er enthält neben nur für den Systemkern relevanten Informationen insbesondere das Abbild aller Registerinhalte und somit des Befehlszählers.

Im Prozeßkontrollblock ist auch der Botschaftsvektor des Prozesses enthalten. Über diese Datenstruktur tauschen Prozesse Botschaften aus. Kontrolle und Ausführung des Botschaftstransfers unterliegen dem Systemkern.

Botschaften sind ein weiteres Grundkonstrukt von L3. Eine Botschaft ist ein zusammengesetztes Objekt, das aus mehreren Abschnitten besteht. Abschnitte können leer oder von Typ Integer, Bytestring oder Datenraum sein. Unabhängig vom Umfang der Botschaft, die durchaus aus mehreren Datenräume bestehen kann, also den (logischen) Umfang von zig Megabyte haben kann, ist der Transfer der Botschaft atomar.

Die Botschaftsübermittlung in L3 ist synchron, d.h. der Empfänger einer Botschaft muß empfangsbereit sein, damit der Sender seine Sendung erfolgreich absetzen kann. Alle möglichen Abläufe innerhalb von L3 basieren auf dem Botschaftstransfer zwischen Prozessen. Da auch die Ein-/Ausgabetreiber Prozesse sind, ist z.B. jede Ausgabe eines beliebigen Anwendungsprogramms auf dem Bildschirm eine Botschaft an den zugeordneten Bildschirmtreiber.

Die Datenraumverwaltung liefert und verwaltet Objekte des Typs Datenraum. Der Auftrag, einen Datenraum zu erzeugen oder der Anstoß zu Aktionen in Bezug auf einen existierenden Datenraum kommt stets von irgendeinem Prozeß. Jeder Datenraum ist genau einem Prozeß zugeordnet, hat also einen eindeutigen Besitzer. Datenräume sind also tasklokale Objekte. Die Datenraumverwaltung stellt auch den Mechanismus des faulen Kopierens zur Verfügung. Die Grundidee dabei ist, daß es hinreichend ist, beim Kopieren eines Datenraums zunächst nur einen weiteren Verweis auf den Datenraum zu erzeugen. Danach zeigen dann zwei verschiedene Verweise auf ein Datenobjekt. Erst bei Schreibzugriffen ist es nötig, Seiten, die verändert werden zu kopieren. Auch an dieser Stelle werden also nur Teile des logisch mehrfach vorhandenen Datenobjekts physisch kopiert.

Das V86 Management liefert die Leistungen, die Prozesse benötigen, die in den virtuellen 8086 Mode (V86) des Prozessors wechseln. Neben den Umschaltmechanismen zwischen V86 und 386 Mode finden sich hier insbesondere Emulationen für die kritischen 8086 Befehle CLI, STI, PUSHF, POPF, INT ,IRET.

Das 387 Management verwaltet den Coprozessor, bzw. die Coprozessoremulation. Der Systemkern enthält ein Modul zur Emulation des Intel 80387. Falls kein numerischer Coprozessor des Typs 80387 oder 80287 in den Rechner eingebaut ist, wird die Emulationssoftware zur Ausführung der entsprechenden Operationen herangezogen.

Die Schnittstelle aller anderen Programme zum Systemkern sind L3 Systemcalls. Systemcalls sind also Botschaften von Prozessen an den Kern und initiieren Aktionen, die nicht von Prozessen geleistet werden können.

Treiberprozesse

Eng verbunden mit dem Systemkern existieren die Treiberprozesse für Eingabe und Ausgabe. Sie kontrollieren die Devices (Komponenten) des Rechners. Die Treiberprozesse sind Realprozesse, d.h. sie sind resident, also stets im Arbeitsspeicher und unterliegen nicht dem Paging. Treiberprozesse haben direkten Zugriff auf I/O Ports, sind jedoch adreßraummäßig abgeschottet, so daß sie andere Prozesse oder gar den Systemkern nicht korrumpieren können.

Treiberprozesse werden bei jedem Systemstart durch den Systemkern neu etabliert.

Ein Treiberprozeß besteht also aus einem Treiberprogramm der Art:

REPEAT 
   warte auf auftrag; 
   bearbeite auftrag 
END REPEAT

Ein Auftrag kommt geräteseitig in Form eines Interrupts, systemseitig in Form eines Auftrags, der nach den Regeln des L3 Treiberprotokolls GDP (General Driver Protocol) formuliert ist. Die Bearbeitung des Auftrags ist gerätespezifisch.

Der L3 Systemmantel

Der L3 Systemmantel enthält den Teil des Gesamtsystems, der auf Leistungen des Kerns aufbaut, aber noch nicht modifizierbar ist. Der Systemmantel bildet die Schnittstelle zwischen der abstrakten Maschine Systemkern und den von ihr zur Verfügung gestellten Objekten vom Typ Prozeß und Datenraum und der auf den Benutzer ausgerichteten Oberfläche des Systems.

Diese Oberfläche, die Systemschale, wird erzeugt von einzig sichtbaren Teil des Systemmantels, der Task SUPERVISOR.

Eine Task im L3 System ist ein autonomer, benannter Prozeß. Der abstrakte Datentyp Prozeß wird auf der Ebene des Systemmantels zur Task ausgeformt. Dabei entsteht die erste Task im System, der SUPERVISOR, als »deus ex machina«, alle weiteren Tasks werden von dieser ersten Task erzeugt. Der SUPERVISOR ist Wurzel und Verwalter des baumartig organisierten Tasksystems.

Im laufenden System können andere Tasks den Auftrag an SUPERVISOR geben, eine neue Task anzulegen oder eine existierende zu löschen. Weitere Einzelheiten dazu finden sich in den Abschnitten 5 und 13 (das SUPERVISOR Protokoll).

Die L3 Systemschale

Der SUPERVISOR erschafft unter Benutzung der Leistungen des Systemkerns wird mit Hilfe von

das L3 Tasksystem.

Das ELAN Laufzeitsystem ist vor allem als Systemcall Schnittstelle für Erzeugung und Betrieb des gesamten L3 Systems aufzufassen.

Der ELAN Compiler ist von Beginn seiner Entwicklung an für ein Betriebssystem mit virtueller Speicherverwaltung vorgesehen und unterscheidet sich von üblichen Compilern. Da die virtuelle Speicherverwaltung nicht von vornherein Überlegungen über Limitierungen von Segmenten, Dateigrößen oder Arbeitsspeicher erfordert, konnten vom üblichen Schema:

   Quellcode      ->   Compiler      ->    Objektcode 
     Datei                                   Datei

abgewichen werden.

Stattdessen ist der Compiler in eine Umgebung eingebettet, die, neben dem Compiler an sich, noch das ELAN L3 Laufzeitsystem und die ELAN Modulbibliothek enthält, die Code und Daten übersetzter ELAN Programme enthält .

0 MB 
 |
 |  Laufzeitsystem 
 |
 |  Compiler 
 |
 |  Modulbibliothek 
 |
32 MB

Dieses ganze komplexe Objekt wird bei L3 als Standarddatenraum für jeden virtuellen Prozeß benutzt. Startprozedur des Prozesses ist dann eine aus einem der Moduln herausgereichte ELAN Prozedur.

Die L3 Systemschale wird durch die Eigenschaften und Fähigkeiten der einzelnen Tasks des L3 Systems geprägt. Meistenteils sind die Tasks so angelegt, daß sie einen Kommandodialog anbieten, sobald an sie ein Terminal gekoppelt sind. Dieser Dialog kann eingeschränkt sein, wie bei einer Terminaltask, oder frei und kommandozeilenorientiert, wie in der Task 'PUBLIC'.

Zur Systemschale gehört auch das L3 Subsystem, das eine Umgebung für »DOS Programme« realisiert. In dieser Umgebung laufen DOS Programme virtuellen 8086 Modus.

Zu diesem Zweck wird nach dem Auftrag an das V86 Management des Systemkerns, die Task in den virtuellen 8086 Modus zu setzen, der Standarddatenraum der Task modifiziert. Der zunächst ungenutzte Adreßbereich des ersten Megabytes wird durch Einbettung des VBIOS (Virtual BIOS), Zuweisung des Adreßraums der Task als Laufwerk C: und Hereinholen des Dateien 'COMMAND.COM' und 'L3.EXE' in eine funktionstüchtige Umgebung für DOS Programme verwandelt.

0x00000h     Interruptvektoren 
... 
0x10FFFFh    ELAN Laufzeitsystem 
....

Die in jeder Task vorhandene »Lücke im Adreßraum«, die erst durch Initialisierung des L3 Subsystems geschlossen wird, kostet durch die virtuelle Speicherverwaltung keinen Platz im Arbeitsspeicher!


next up previous contents index
Next: Der ELAN Compiler Up: L3 Referenzhandbuch Previous: Inhalt

Michael Hohmuth
Sun Mar 31 04:49:53 MET DST 1996