1.3.3 UNIX
Hier sind viele der noch zu besprechenden Konzepte relativ vollständig
verwirklicht. Die meisten der komplexeren Beispiele werden sich daher unter
UNIX abspielen.
Außerdem steht mit Linux eine "Version" von UNIX jedem Besitzer eines
PC-kompatiblen Rechners (ab 80386) frei zur Verfügung. Es bezeichnet sich
selbst nicht als ein UNIX, deckt aber fast alle Spezifikationen von POSIX und
UNIX System V. Es ist ein komplett neu geschriebenes System, für das kein
Code anderer Versionen übernommen wurde.
Ein wesentlicher Vorteil von Linux ist in unserem Zusammenhang, daß es
vollständig im Quellcode (C, ein wenig Assembler) vorliegt. Wir wollen
aber nur diese Implementation studieren und nicht Änderungen am Kern vornehmen
und das System neu übersetzen.
Linux gibt es mittlerweile auf diversen anderen Rechnerarchitekturen als
Intel-x86. Wir werden auch nur selten auf prozessorabhängige Gegebenheiten
eingehen müssen.
Ein kurzer Überblick über die Geschichte von UNIX:
- 1963
-
Das MIT (Massachusetts Institute of Technology), Packard Bell und GE
(General Electrics) kündigen einen Rechner zusammen mit einem
Betriebssystem an, das Hunderte oder Tausende von Benutzern bedienen
können
soll. Der Name des Systems ist MULTICS (MULTiplexed Information
and Computing Service). Die Entwickler sehen den Rechner als Analogon eines
E-Werks, und jeder Einwohner soll nur den Stecker in die Wand stecken
müssen... Der Rechner soll modular fast unbegrenzt ausbaubar sein, und
Teile sollen abgeschaltet und gewartet werden können, ohne die
Funktionsfähigkeit des Systems zu beeinträchtigen.
Es gibt leider herbe Entwicklungsschwierigkeiten. Man verspricht sich von
PL/I Vorteile gegenüber FORTRAN und beginnt, das System in dieser
Sprache zu schreiben - allerdings verspätet sich der PL/I-Compiler
immer wieder und ist schließlich sehr fehlerhaft. Außerdem stimmt einfach
das Verhältnis der geplanten Benutzer-Anzahl mit der tatsächlichen Hardware
nicht.
MULTICS führt deshalb wichtige Konzepte ein, läuft aber erst 1969 halbwegs
brauchbar nur auf einigen Laborrechnern (GE645) beim MIT. Die Bell
Laboratories steigen ganz aus der Entwicklung aus. MULTICS wird nie
kommerziell eingesetzt.
- 1969
-
Zwei der MULTICS-Entwickler, Ken Thompson und Dennis Ritchie, sollen bei den
Bell-Laboratories ein verbessertes Dateisystem für die GE645 entwickeln. Auf
diesem Rechner entsteht als Nebeneffekt aber schon ein kleiner Systemkern.
Als Thompson eine unbenutzte PDP-7 findet, portiert er Kernel und
Dateisystem auf diesen Rechner (in Assembler). Das Dateisystem entspricht
bereits ziemlich genau dem heutigen, mit hierarchischer Directory-Struktur
in einem einheitlichen Dateibaum.
Es entsteht ein System, das zunächst nur für einen Benutzer gedacht ist.
Brian Kernighan nennt das Gebilde daher scherzhaft UNICS (U für Uniplexed).
- 1971
- Das System wird auf die größere PDP-11 portiert (Daten:
16 KB System, 8 KB Platz für Benutzerprogramme, 512 KB Plattenkapazität,
maximale Dateilänge 64 KB).
Erste Compiler sollen auf dem System entstehen. Thompson konnte sich
mit FORTRAN nicht anfreunden und entwickelt die Sprache
B (angelehnt an das schon existierende BCPL=binary coded
programming language, eine Abart von CPL). In B gab es als
einzigen Datentyp Integer (und eine Art typlosen Pointer).
Dennis Ritchie erweitert die Sprache um Datenstrukturen und einiges mehr
und nennt sie C.
- 1973
- Fast das ganze System wird in C umgeschrieben (bis auf sehr
kurze maschinennahe Teile in Assembler). Dadurch wird es zwar minimal
größer und langsamer als die Assembler-Vorgänger -
dafür ist nun die Voraussetzung für die schnelle Weiterentwicklung und
die Verbreitung auf andere Rechnersysteme geschaffen.
UNIX wird zum ersten Mal von
anderen Benutzern als Thompson und Ritchie eingesetzt (25 Leute bei
den Bell Laboratories).
Da AT&T selbst kommerziell keine Rechner oder Software vertreiben darf
(Monopol-Aufsicht), wird die UNIX-Lizenz sehr günstig
an viele Universitäten in den USA vergeben. Da dort viele PDP-11
verwendet werden, kann sich das System sehr schnell verbreiten.
Viele neue Ideen können schnell in das System integriert werden,
was vor allem dadurch begünstigt wird, daß der komplette Sourcecode
zur Verfügung steht.
Um diese Zeit entsteht das Text-Formatierungsprogramm troff
(zunächst roff), das (bis zum Durchbruch von TeX der Standard für
Textverarbeitung unter UNIX ist.
- 1977
- UNIX wird zum ersten Mal auf einen Rechner außerhalb der PDP-Serie
portiert (Interdata 8/32). Einige rechnerabhängige Parameter
(16-Bit-Integers, Registeranzahl) waren an diversen Stellen hardcodiert
worden, so daß einige Bereinigungsarbeit nötig ist.
Steve Johnson entwickelt den " portable C compiler", der so
angepaßt werden kann, daß er Maschinencode für einen fast beliebigen
Rechner produzieren kann. Er erleichert das Portieren auf weitere
Architekturen erheblich.
Der erzeugte Code muß jeweils auf Bändern auf den anderen Rechner
transportiert werden. In dieser Zeit entstehen daher auch rudimentäre
UNIX-Mechanismen zur Vernetzung von Rechnern.
An der Universität von Kalifornia in Berkeley (unterstützt vom
amerikanischen Verteidigungsministerium) wird (aus Version 6) eine
Variante namens BSD entwickelt (Berkeley Software Distribution, erste
Version 1BSD, erhebliche Erweiterungen ab Version 4.1BSD).
In Berkeley werden unter anderem der Editor vi und die Shell
csh entwickelt.
- 1979
- Microsoft entwickelt eine UNIX-Version namens XENIX für
Mikrocomputer, die vom ursprünglichen UNIX relativ stark abweicht.
AT&T geben "UNIX Time-Sharing-System Version 7" heraus, mit vielen
Verbesserungen wie Unterstützung für sehr große Dateien, ein
erweitertes C und eine neue Shell.
- 1983
- Viele Hersteller portieren UNIX auf ihre Maschinen, wodurch
viele unterschiedliche Versionen entstehen. AT&T schuf 1982 eine
verschmolzene Version (mit XENIX-Elementen) namens System III.
Die Version IV als Zwischenstadium betrachtet und nur intern verwendet, so
daß das nächste öffentliche Release 1983 das System V ist.
- 1984
- Das IEEE (Institute for Electrical and Electronic Engineers)
versucht sich mit POSIX (Portable Operating System
Interface uniX) an einer Standardisierung des Systems.
- 1985
-
AT&T gibt die SVID (System V Interface Definition) heraus, eine
Festlegung der Systemaufrufe, Bibliotheksroutinen und Hilfsprogramme,
die ein UNIX beinhalten muß, das sich System-V nennt. Sie wird von
BSD ignoriert.
- 1988
- Mit System V.4 (Release 4, SVR4) finden viele BSD-Elemente (4.3 BSD)
Eingang in das System V.
- 1990
- Das IEEE gibt die neue Version 1 der POSIX-Standards heraus.
Systemaufrufe, die in System V und BSD vorkamen, werden
meist nach POSIX übernommen. Die meisten heutigen UNIXe
(aber auch andere Betriebssysteme) implementieren eine Obermenge
von POSIX.
- 1991
- Die erste Version des Linux-Kernels wird im Internet verbreitet.
Der finnische Informatik-Student Linus Torvalds hatte einige Zeit
vorher mit einer völlig neuen Implementation eines UNIX-ähnlichen Systems
für Intel-PCs begonnen (es orientiert sich an POSIX, System V, und
BSD). Die Weiterentwicklung erfolgte dagegen über das gesamte Netz verteilt.
UNIX leidet noch immer unter einer fehlenden Vereinheitlichung.
Die Open Software Foundation (OSF) mit Mitgliedern wie IBM, DEC und HP
standardisierten OSF/1, das stark an 4.3BSD angelehnt ist. Daraufhin gründeten
AT&T, SUN und einige andere Hersteller Unix International (UI) und setzen in
ihren Systemen schwerpunktmäßig auf System-V-Elemente (SVR4, SunOS).
System V Release 4 ist vollständig POSIX-kompatibel, implementiert
aber als Kompatibilitäts-Service Bibliotheken und Kommandos nach
4.3BSD-Standard. BSD grenzt sich dagegen weiterhin weitgehend ab.
mischt SVR4-, POSIX- und BSD-Elemente.
Es ist natürlich gewachsen und nicht am Reißbrett entstanden. An einigen
Stellen werden wir daher Maschinenbefehle im C-Code, gotos,
hardcodierte Konstanten und statische System-Strukturen finden -
Dinge, die einem Software-Ingenieur eigentlich
die Haare zu Berge stehen lassen. Diese Dinge sind aber mit neueren Versionen
allmählich im Verschwinden begriffen.
Wer bereits einmal auf Entdeckungsreise gehen möchte - die Quellen von
Linux liegen üblicherweise im Verzeichnis /usr/src/linux.
Es gibt u.a. folgende Unterverzeichnisse: