Copyright © 1995 by O'Reilly/International Thomson Verlag

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches "Linux - Wegweiser zur Installation & Konfiguration", dann klicken Sie hier.


Kapitel 1
Eigenschaften des Systems

Linux unterstützt die meisten der Merkmale, die andere Implementierungen von UNIX bieten, und darüber hinaus ein paar, die Sie woanders nicht finden werden. In diesem Abschnitt stellen wir Ihnen kurz einige der Eigenschaften des Kernels vor.

Linux ist ein komplettes Multitasking-, Multiuser-Betriebssystem (wie alle anderen UNIX-Versionen auch). Das bedeutet, daß viele Benutzer gleichzeitig auf einem Rechner arbeiten können, wobei viele Programme gleichzeitig ausgeführt werden.

Das Linux-System ist auf Quellcode-Ebene in vielen Punkten kompatibel zu einigen UNIX-Standards (soweit man bei UNIX von Standards sprechen kann), darunter Merkmale von IEEE POSIX.1, System V und BSD.

Linux wurde unter Berücksichtigung der Portabilität von Quellcode entwickelt. Daraus ergibt sich, daß Sie wahrscheinlich einige Eigenschaften feststellen werden, die verschiedenen Implementierungen gemein sind. Ein großer Teil der freien UNIX-Software aus dem Internet und aus anderen Quellen läßt sich unter Linux so kompilieren, wie Sie bei Ihnen eintrifft. Außerdem kann der komplette Quellcode für das Linux-System einschließlich des Kernels, der Gerätetreiber, der Bibiotheken, der Anwendungen und Entwicklungswerkzeuge ohne Einschränkungen weitergegeben werden.

Andere besondere Eigenschaften von Linux sind die Job-Control nach dem POSIX-Standard (wird z.B. von den Shells csh und bash) benutzt), Pseudoterminals (pty-Devices) und die Unterstützung von länderspezifischen oder anwenderdefinierten Tastaturbelegungen, die mit Hilfe von dynamisch ladbaren Tastaturtreibern realisiert werden. Linux unterstützt außerdem virtuelle Konsolen, die das Umschalten von der Systemkonsole zu mehreren Login-Sitzungen ermöglichen. Den Benutzern des Programms screen wird die Linux-Implementierung der virtuellen Konsolen bekannt vorkommen.

Linux unterstützt mehrere Dateisysteme zum Abspeichern von Daten. Einige davon, etwa das ext2fs-Dateisystem, sind speziell für Linux entwickelt worden. Andere, etwa die Dateisyssteme Minix-1 und Xenix werden ebenfalls unterstützt. Auch das DOS-Dateisystem ist implementiert worden, so daß Sie DOS-Dateien direkt von der Festplatte oder Diskette lesen können. Auch das Dateisystem nach ISO 9660, das alle Standardformate für CD-ROMs liest, wird unterstützt. Wir werden in Kapitel 2, Linux besorgen und installieren und Kapitel 4, Grundlagen der Systemverwaltung genauer auf die Dateisysteme eingehen.

Linux enthält alles, was Sie für die Einbindung in TCP/IP-Netzwerke brauchen. Dazu gehören Treiber für viele bekannte Ethernet-Karten, SLIP (Serial Line Internet Protocol, das Ihnen über eine serielle Schnittstelle den Zugriff auf ein TCP/IP-Netz ermöglicht), PLIP (Parallel Line Internet Protocol), PPP (Point-to-Point Protocol), NFS (Network File System) usw. Sämtliche TCP/IP-Clients und -Dienste werden unterstützt, darunter FTP, Telnet, NNTP und SMTP. In Kapitel 7, Vernetzung und Kommunikation gehen wir genauer auf Linux und Netzwerke ein.

Der Kernel ist das Herz des Betriebssystems -- er enthält den Programmcode, der die Schnittstelle zwischen Anwenderprogrammen und der Hardware kontrolliert. Außerden sorgt der Kernel für die Verwaltung der Prozesse, um das Multitasking zu ermöglichen und kontrolliert einige andere Aspekte des Systems. Der Kernel ist kein einzelner Prozeß, der auf dem System läuft -- statt dessen können Sie sich den Kernel als einen Satz von Routinen vorstellen, die ständig im Speicher gehalten werden, und auf die jeder Prozeß zugreifen kann. Kernel-Routinen können auf verschiedene Weise aufgerufen werden. Eine direkte Methode, den Kernel zu benutzen, besteht darin, daß ein Prozeß einen Systemaufruf (system call) ausführt; das ist eine Funktion, die den Kernel veranlaßt, für den Prozeß ein Stück Programmcode auszuführen. Beispielsweise würde der Systemaufruf read Daten von einem File-Descriptor lesen. Für den Programmierer sieht das aus wie eine weitere C-Funktion, aber in Wirklichkeit ist der Code für read im Kernel enthalten.

Kernel-Code wird auch in anderen Situationen ausgeführt. Wenn z.B. ein Hardware-Interrupt erfolgt, ist es ebenfalls der Kernel, der mit einer Interrupt-Behandlungsroutine darauf reagiert. Wenn ein Prozeß an eine Stelle gelangt, an der er auf Ergebnisse warten muß, greift der Kernel ein und läßt diesen Prozeß ruhen, um einem anderen Prozeß mehr CPU-Zeit zu gewähren. In ähnlicher Weise teilt der Kernel jeweils einem Prozeß Priorität zu, indem er den Clock-Interrupt (und andere Mittel) benutzt, um von einem Prozeß zum anderen zu wechseln. Das ist im wesentlichen die Art und Weise, wie Multitasking erreicht wird.

Der Linux-Kernel wird als auch »monolithischer« Kernel bezeichnet, weil alle Gerätetreiber in ihm enthalten sind. Einige Betriebssysteme benutzen eine »Mikrokernel«-Architektur, bei der Gerätetreiber und anderer Code nur bei Bedarf geladen und ausgeführt werden und sich deshalb nicht immer im Arbeitsspeicher befinden. Beide Entwürfe haben ihre Vor- und Nachteile-die monolithische Architektur ist unter UNIX-Implementierungen weit verbreitet und wird in klassischen Kernel-Designs wie BSD benutzt. Linux unterstützt ladbare Gerätetreiber (die durch Befehle des Benutzers in den Speicher ge- und von dort wieder entladen werden können). Im Abschnitt » ,Die ladbaren Gerätetreiber « von Kapitel 4, Grundlagen der Systemverwaltung erfahren Sie mehr zu diesem Thema.

Der Kernel ist in der Lage, Befehle der 387er FPU zu emulieren, so daß auch Systeme ohne mathematische Koprozessor Programme ausführen können.

Der Linux-Kernel ist so gestaltet, daß er die speziellen Möglichkeiten des Protected Mode der 80x86er Prozessoren von Intel ausnutzen kann. Insbesondere benutzt Linux die auf Deskriptoren beruhende Speicherverwaltung des Protected Mode und viele der anderen, fortschrittlichen Merkmale dieser CPUs. Jeder, der sich mit der Programmierung des 80386er Protected Mode auskennt, weiß, daß dieser Prozessor für ein Multitasking-Betriebssystem wie UNIX (genauer gesagt: Multics) entworfen wurde. Linux macht sich diese Funktionalität zunutze.

Der Linux-Kernel unterstützt das Demand-Paged-Loading von Programmcode. Das bedeutet, daß nur diejenigen Teile eines Programms von der Festplatte in den Speicher geladen werden, die gerade abgearbeitet werden. Das bedeutet: Wenn mehrere Teile eines Programms gleichzeitig laufen, greifen sie gemeinsam auf Bereiche im physikalischen Speicher zu und senken dadurch den Speicherbedarf insgesamt, da nur eine einzige Kopie des Programm-Codes gehalten wird.

Um den verfügbaren Speicher zu vergrößern, benutzt Linux außerdem das Disk-Paging; d.h., daß bis zu 16*128 Megabytes an »Swap-Space" (2) auf der Festplatte angelegt werden können. Wenn das System mehr physikalischen Speicher braucht, wird es inaktive Speicherseiten auf die Festplatte auslagern. Auf diese Weise können Sie größere Anwendungen laufen lassen und es können mehr Benutzer gleichzeitig arbeiten. Allerdings kann der Swap-Space nicht physikalisches RAM ersetzen -- er arbeitet aufgrund der Plattenzugriffszeiten viel langsamer.

Der Kernel benutzt für Anwendungsprogramme und Plattencache einen gemeinsamen Speicher-Pool. Auf diese Weise kann der gesamte freie Speicher als Cache genutzt werden und die Größe des Cache wird reduziert, wenn große Anwendungen laufen.

Ausführbare Programme benutzen dynamisch gebundene Shared Libraries (gemeinsam genutzte Bibliotheken); d.h., daß sie Programmcode in einer einzigen Library-Datei auf der Festplatte gemeinsam benutzen. Dies ähnelt dem Shared-Library-Mechanismus von SunOS. Dadurch können ausführbare Programme mit deutlich weniger Platz auf der Festplatte auskommen; insbesondere solche Programme, die auf viele Bibliotheks-Funktionen zugreifen. Es gibt auch statisch gebundene Bibliotheken für diejenigen, die Object-Code debuggen wollen oder die den »kompletten« Programmcode erhalten möchten, ohne auf Shared Libraries angewiesen zu sein. Die Shared Libraries von Linux werden bei der Programmausführung dynamisch dazugebunden; das gibt Programmierern die Möglichkeit, Teile der Libraries durch ihren eigenen Code zu ersetzen.

Um das Debugging zu vereinfachen, erzeugt der Linux-Kernel Core-Dumps (Speicherauszüge) zur Analyse nach Programmabstürzen. Mit Hilfe eines Core-Dumps und einer ausführbaren Datei, die mit Debugging-Unterstützung gebunden wurde, können Sie feststellen, was ein Programm abstürzen ließ. In Kapitel 6, Programmierung unter Linux werden wir das besprechen.


Fußnoten:

(2)
Swap-Space ist eine ungenaue Bezeichnung. Es sind nicht komplette Prozesse, die aus- und wieder eingelagert werden, sondern einzelne Speicherseiten. Natürlich werden in vielen Fällen auch ganze Prozesse geswapped, aber das ist nicht notwendigerweise der Fall.

Inhaltsverzeichnis Vorherige Abschnitt Nächste Abschnitt