Im Katalog suchen

Linux - Wegweiser zur Installation & Konfiguration, 3. Auflage

Online-Version

Copyright © 2000 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

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


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel

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.

Die Versionsnummern von Linux

Die Art und Weise, wie den verschiedenen Bestandteilen der Software Versionsnummern zugewiesen werden, kann für Linux-Neulinge verwirrend sein. Wenn Sie mit Linux anfangen, werden Sie wahrscheinlich eine CD-ROM-Distribution wie »Red Hat Version 5.2« oder »SuSE Version 6.2« in der Hand halten. Es ist wichtig zu verstehen, daß sich diese Versionsnummern nur auf die jeweilige Distribution beziehen (Distributionen sind gepackte Versionen von Linux, die zusammen mit Unmengen von freien Anwendungen normalerweise auf CD-ROM verkauft werden). Deswegen hat die von Red Hat, SuSE oder Debian vergebene Versionsnummer nicht unbedingt etwas mit den Versionsnummern der Software in der Distribution zu tun. Nur weil ein Distributor eine höhere Versionsnummer als ein anderer verwendet, heißt das noch lange nicht, daß die Software auch aktueller ist.

Der Linux-Kernel hat genau wie jede Applikation, Komponente, Bibliothek oder jedes Softwarepaket in einer Linux-Distribution eine eigene Versionsnummer. Beispielsweise verwenden Sie möglicherweise die Version 2.7.2.3 des gcc und die Version 3.3.1 des Fenstersystems XFree86. Sie können sich sicherlich denken, daß die Software um so neuer ist, je höher die Versionsnummer ist. Durch die Installation einer Distribution (wie Red Hat oder SuSE) müssen Sie sich darüber aber keine Gedanken machen, da die Distributionen normalerweise die neuesten Versionen jedes Pakets enthalten.

Der Linux-Kernel hat ein eigenes, merkwürdiges Numerierungssystem, mit dem Sie sich vertraut machen sollten. Wie bereits erwähnt, ist der Kernel der Kern des Betriebssystems, der für die Verwaltung aller Hardware, wie Festplatten, Netzwerkkarten, Speicher usw., in Ihrem Rechner zuständig ist. Im Gegensatz zu Windows-Systemen gibt es im Linux-Kernel keine Bibliotheken oder Fenstersysteme auf Applikationsebene. In gewissem Sinne werden Sie es als Benutzer nie direkt mit dem Kernel zu tun haben, sondern immer über eine Benutzerschnittstelle wie die Shell oder ein GUI (dazu später mehr).

Viele Leute denken jedoch, daß die Versionsnummer des Linux-Kernels die des »gesamten Systems« ist, was ein wenig irreführend ist. Jemand sagt vielleicht: »Ich verwende den Kernel 2.3.32«, aber das hat nicht viel zu sagen, wenn alles andere in seinem System hoffnungslos veraltet ist.

Das Versionssystem des Linux-Kernels sieht folgendermaßen aus. Zu jedem gegebenen Zeitpunkt gibt es zwei »neueste« Versionen des Kernels (die also aus dem Internet heruntergeladen werden können), die stabile und die Entwicklungsversion. Die stabile Version ist für die Mehrzahl der Linux-Anwender gedacht, die nicht an den allerneuesten experimentellen Features herumhacken wollen, sondern ein stabiles, funktionierendes System benötigen, das sich nicht jeden Tag verändert. Die Entwicklungsversion ändert sich dagegen ständig, weil neue Features eingebaut und von den Entwicklern über das Internet getestet werden. Änderungen an der stabilen Version betreffen hauptsächlich Bugfixes, also das Beseitigen von Fehlern, und Sicherheitslücken, während Änderungen an der Entwicklungsversion alles betreffen können - von grundlegenden neuen Subsystemen im Kernel bis zu kleinen Änderungen an einem Gerätetreiber zur Verbesserung der Geschwindigkeit. Die Linux-Entwickler garantieren nicht, daß die Entwicklungsversion bei jedem funktioniert, pflegen aber die stabile Version mit der Absicht, für jeden eine lauffähige Version zu haben.

Die stabilen Versionen haben eine gerade Unterversionsnummer (wie etwa 2.2), während die Entwicklungsversionen eine ungerade Unterversionsnummer (wie 2.3) haben. Beachten Sie, daß die Unterversionsnummer des aktuellen Entwicklungs-Kernels immer um genau eins größer ist als die des aktuellen stabilen Kernels. Wenn der stabile Kernel allerdings bei Version 2.4 angekommen ist, werden die Entwicklungs-Kernel bei 2.5 sein. (Es sei denn, Linus entscheidet sich, Version 2.4 in Version 3.0 umzubenennen, in welchem Falle die Entwicklungs-Kernel natürlich mit 3.1 beginnende Nummern bekommen.)

Jede dieser Kernel-Versionen hat noch eine dritte »Patch-Versionsnummer«, wie etwa 2.2.19 oder 2.3.85. Der sogenannte Patch-Level gibt eine bestimmte Unterversion der Kernel-Version an; höhere Nummern bezeichnen neuere Versionen. Derzeit ist der stabile Kernel bei 2.2.10 und der Entwicklungs-Kernel bei 2.3.11.

Was Linux alles kann

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. Darüber hinaus unterstützt Linux Multiprozessorsysteme (wie zum Beispiel Hauptplatinen mit zwei Pentium Pro-Prozessoren) mit bis zu 16 Prozessoren, eine großartige Sache für Hochleistungs-Server und wissenschaftliche Anwendungen.

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 auf einige Eigenschaften stoßen 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.

Wenn Sie über ein wenig Unix-Hintergrundwissen verfügen, interessieren Sie vielleicht andere interne Eigenschaften von Linux wie Job-Kontrolle nach dem POSIX-Standard (wird zum Beispiel von den Shells csh und bash benutzt), Pseudo-Terminals (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 kann problemlos auf einem System koexistieren, auf dem ein anderes Betriebssystem, wie Windows 95/98, Windows NT, OS/2 oder andere Unix-Versionen, installiert ist. Der Boot-Loader von Linux (LILO) läßt Sie beim Booten ein Betriebssystem wählen, Linux ist aber auch kompatibel mit anderen Boot-Loadern wie dem von Windows NT.

Linux läuft auf einer Vielzahl von CPU-Architekturen, darunter Intel x86 (386, 486, Pentium, Pentium Pro, Pentium II/III), SPARC, Alpha, PowerPC, MIPS und m68k. Portierungen auf andere Systeme sind bereits in Arbeit, und es wird erwartet, daß Linux auch problemlos auf den Intel-Prozessoren der nächsten Generation namens »Merced« laufen wird. Es wird sogar daran gearbeitet, Linux auf eingebettete Prozessoren, wie etwa die in 3Coms Palm-Pilot-PDAs, zu portieren.

Icon

Kapitel 3
Kapitel 5

Linux unterstützt mehrere Dateisysteme zum Abspeichern von Daten. Einige davon, etwa das Second Extended-Dateisystem (ext2fs), sind speziell für Linux entwickelt worden. Andere, etwa die Dateisysteme Minix-1 und Xenix, werden ebenfalls unterstützt. Auch das DOS-Dateisystem ist implementiert worden, so daß Sie Windows- oder 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, genauso wie die Dateisysteme von Windows NT, Apple, Atari, Amiga und OS/2. Wir werden in Kapitel 3, Installation und erste Konfigurationsarbeiten, und Kapitel 5, Grundlagen der Systemverwaltung, genauer auf Dateisysteme eingehen.

Icon

Kapitel 15

Netzwerkunterstützung ist eine der großen Stärken von Linux, sowohl hinsichtlich Performanz als auch hinsichtlich Funktionalität. 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), Parallel Line Internet Protocol (PLIP), Point-to-Point Protocol (PPP), NFS (Network File System) usw. Sämtliche TCP/IP-Clients und -Dienste werden unterstützt, darunter FTP, Telnet, NNTP und SMTP. Der Linux-Kernel enthält eine vollständige Implementierung von Netzwerk-Firewalls, mit der Sie jeden Linux-Rechner als Firewall (die Netzwerkpakete kontrolliert, um beispielsweise unerlaubten Zugriff auf einen Webserver zu verhindern) konfigurieren können. Linux ist hinsichtlich der Performanz seiner Netzwerkimplementierung anderen Betriebssystemen überlegen. In Kapitel 15, TCP/IP und PPP, gehen wir genauer auf Linux und Netzwerke ein.

Der Kernel

Der Kernel ist das Herz des Betriebssystems - er enthält den Programmcode, der die Schnittstelle zwischen Anwenderprogrammen und der Hardware kontrolliert. Außerdem 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ß etwas Programmcode auszuführen. Beispielsweise würde der Systemaufruf read Daten von einem Dateideskriptor 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 zum Beispiel 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.

Icon

Kapitel 7

Der Linux-Kernel wird auch als monolithischer Kernel bezeichnet, weil alle Gerätetreiber in ihm enthalten sind. Einige Betriebssysteme benutzen eine Mikrokernel-Architektur, bei der Gerätetreiber und andere Komponenten (wie Dateisysteme oder Code zur Speicherverwaltung) kein Bestandteil des Kernels sind, sondern ähnlich wie normale Applikationen behandelt werden. Beide Entwürfe haben ihre Vor- und Nachteile - die monolithische Architektur ist unter Unix-Implementierungen weit verbreitet und wird in klassischen Kernel-Designs wie System V oder BSD benutzt. Linux unterstützt ladbare Gerätetreiber (die durch Befehle des Benutzers in den Speicher geladen und von dort wieder entladen werden können). Im Abschnitt »Ladbare Gerätetreiber« in Kapitel 7, Software und den Kernel aktualisieren, erfahren Sie mehr zu diesem Thema.

Der Kernel ist in der Lage, auf vielen Architekturen FPU-Befehle zu emulieren, so daß auch Systeme ohne mathematischen Koprozessor Programme ausführen können.

Der Linux-Kernel auf Intel-Systemen ist so gestaltet, daß er die speziellen Möglichkeiten des Protected Mode der 80x86er Prozessoren (ab 80386) von Intel nutzen 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 (das eigentlich von Multics inspiriert wurde) 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. Wenn mehrere Teile eines Programms gleichzeitig laufen, wird nur eine einzige Kopie des Programmcodes im Speicher gehalten.

Um den verfügbaren Speicher zu vergrößern, benutzt Linux außerdem das Disk-Paging; das heißt, daß bis zu 16*128 Megabytes an Swap-Space Fußnoten 1 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 Platten-Cache 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); das heißt, 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 Bibliotheksfunktionen zugreifen. Außerdem befindet sich immer nur eine Kopie des Bibliothekscodes zur Zeit im Speicher, was den gesamten Speicherverbrauch herabsetzt. Es gibt auch statisch gebundene Bibliotheken für diejenigen, die Objektcode 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.

Icon

Kapitel 14

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ß. Im Abschnitt »Eine Core-Datei analysieren« in Kapitel 14, Werkzeuge für Programmierer, werden wir das besprechen.

 Fußnoten 1
Swap-Space ist eigentlich ein unpassender Name: Es werden nicht ganze Prozesse ausgelagert, sondern einzelne Speicherseiten. Natürlich werden oft doch ganze Prozesse ausgelagert, aber das muß nicht immer so sein.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser zur Installation & Konfiguration

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home | O'Reilly-Partnerbuchhandlungen | Bestellinformationen | Kontaktieren Sie uns
International | Über O'Reilly | Tochterfirmen

© 2000, O'Reilly Verlag