Next: Die ersten Schritte
Up: Grundlagen
Previous: Geschichte
Jeder Computer besteht aus mehreren Komponenten und Geräten, der sogenannten Hardware. Unter anderem sind das die Zentrale-Prozessor-Einheit (CPU), der Arbeitsspeicher, die Festplatte und die Diskettenlaufwerke, der Bildschirm und die Tastatur, der Drucker und das Modem. Die Komponenten sind nur lose miteinander verknüpft. Philosophisch betrachtet, stellen sie eine universelle Maschine dar, die erst durch ein konkretes Anwenderprogramm zu einer simulierten Schreibmaschine, einer Lohnbuchhaltung, einem Schachspiel oder einer simulierten Mondlandefähre wird.
Um den Programmierer eines Anwenderprogramms von den Einzelheiten der Hardwareprogrammierung zu entlasten, werden die Komponenten durch das sogenannte Betriebssystem verwaltet. Im Idealfall stellt das Betriebssystem alle Dienste der Hardware in einer abstrakteren Form zur Verfügung, ist also eine Art Hardwareerweiterung. Im Multiuser/Multitasking-System hat das Betriebssystem zusätzlich die Aufgabe, konkurrierende Hardwarezugriffe verschiedener Benutzer oder Prozesse zu verwalten.
Das Betriebssystem muß, wie jedes andere Programm auch, zur Laufzeit im Arbeitsspeicher geladen sein. Bei einigen Computern steht das Betriebssystem in dauerhaften Speicherbausteinen, sogenannten ROM's. Die IBM-kompatiblen PC's laden den größten Teil des Betriebssystems von Diskette oder Festplatte. Das Betriebssystem ist das erste Programm, das nach dem Einschalten des Rechners automatisch geladen und gestartet wird. Wenn es einmal geladen ist, bleibt das Betriebssystem im Arbeitsspeicher, bis der Rechner ausgeschaltet wird.Gemeinsam mit dem Betriebssystem stehen normalerweise noch eine Reihe von Programmen zur Verfügung, mit denen Sie übergeordnete und auf allen Systemen notwendige Aufgaben ausführen können, wie beispielsweise eine Diskette formatieren oder eine Datei ausdrucken. Ein besonders wichtiges Programm des in diesem Sinne erweiterten Betriebssystems ist der Kommandozeileninterpreter, sozusagen die erste Benutzeroberfläche des Systems. Der Kommandozeileninterpreter liest Ihre Befehle von der Tastatur und führt die darin formulierten Befehle aus. Erst dieses Systemprogramm ermöglicht den universellen Einsatz des Computers, der damit jedes installierte Programm laden uns ausführen kann. Bei MS-DOS wird diese Aufgabe von dem allseits bekannten Programm COMMAND.COM erfüllt. Unter Linux gibt es nicht nur ein einziges Programm zu diesem Zweck, vielmehr gibt es eine ganze Klasse, die sogenannten Shells. Die Shells erfüllen alle den gleichen Zweck, einige bieten Ihnen zusätzlich eine vielzahl von komfortablen Bedienhilfen.
Zur optimalen Ausnutzung der teuren Hardware wurden für Großrechner schon sehr früh Betriebssysteme entwickelt, die mehreren Anwendern gleichzeitig die Systembenutzung ermöglichen. Diese als Multiuser/Multitasking bezeichnete Eigenschaft war für das Betriebssystem der ersten PC's (1981) überflüssig. Deren Vorteil bestand in dem niedrigen Preis, der es ermöglichte, jeden Arbeitsplatz mit einem eigenen Rechner auszustatten. Dieser Preisvorteil wurde mit einem vergleichsweise niedrigen Leistungsniveau erkauft. Die Prozessoren der ersten PC-Generation waren weder von ihrer Architektur noch von ihrer Performance her in der Lage, mehr als eine Aufgabe zur gleichen Zeit zu erfüllen. Ein moderner 386er Rechner wird dagegen von einem normalen Anwenderprogramm nicht ausgelastet. Die meiste Zeit verbringt das Betriebssystem damit, auf den nächsten Tastendruck des Benutzers zu warten. Aus diesem Grund werden jetzt auch Multitasking-Betriebssysteme für PC angeboten.Auch wenn der PC weiterhin ein Arbeitsplatzrechner bleibt, also zu jeder Zeit von nur einem natürlichen Benutzer gebraucht wird, hat die gleichzeitige Bearbeitung mehrerer Programme große Vorteile: Zeitaufwendige automatische Prozesse oder Dienste, wie beispielsweise das Übersetzen von Programmen oder die Übertragung von Daten per Modem, können ``im Hintergrund'' ablaufen und im Vordergrund gleichzeitig interaktive Arbeiten fortgesetzt werden.
Die Anforderungen an ein Mehrbenutzerbetriebssystem unterscheiden sich grundlegend von einem Einbenutzersystem:Um diese Einschränkung durchzusetzen, werden die Anwenderprogramme durch das Betriebssystem (den Kernel) kontrolliert. Wenn ein Programm vom Benutzer aufgerufen wird, lädt der Kernel die ausführbare Datei in den Arbeitsspeicher und macht daraus einen Prozeß. Dieser Prozeß erhält bei seiner Entstehung einen logischen Adreßraum, in dem zuerst der Programmtext und die initialisierten Daten des Programms dargestellt werden, in dem das Programm aber auch seine variablen Daten ablegen kann. Die logischen Adressen werden vom Betriebssystem auf die physikalischen Adressen des Arbeitsspeichers abgebildet. Wenn das Programm auf eine (logische) Speicheradresse zugreift, muß diese Adresse erst in die physikalische Adresse umgewandelt werden. Dadurch kann das Betriebssystem unberechtigte Zugriffe auf den Adreßraum anderer Prozesse oder auf die Hardwarekomponenten feststellen und unterbinden (durch das Signal SIGSEGV) .
Die einzige Möglichkeit, auf die Systembereiche außerhalb des eigenen Adreßraums zuzugreifen, bietet der Kernel den Programmen auf Benutzerebene durch die sogenannten Systemaufrufe (system calls) . Linux bietet ca. 150 solcher Systemaufrufe an. Dieses von Unix übernommene Prinzip erscheint auf den ersten Blick vielleicht als Hindernis und Einengung. Bei genauerer Betrachtung stellt man aber die enormen Vorteile fest. So ist es der Übereinstimmung mit den Systemaufrufen des Unix System V zu verdanken, daß praktisch alle Unix-Programme sofort unter Linux übersetzt werden können. Die unterschiedlichen Hardwarevoraussetzungen all der unterschiedlichen Systeme werden allein vom Kernel aufgefangen.
Wie bereits gesagt, arbeitet jedes Anwenderprogramm in einem logischen Speichersegment. Dieses Speichersegment ist in Speicherseiten zu je 4 Kilobyte unterteilt und wird vom Betriebssystem seitenweise auf den physikalischen Arbeitsspeicher abgebildet (mapping). Wenn mehr Programme gestartet werden, als auf einmal in den Arbeitsspeicher passen, kann der Kernel einzelne Speicherseiten aus dem physikalischen Adreßraum auf Festplatte auslagern (swapping) . Wenn das dadurch unvollständige Programm wieder auf eine Adresse der ausgelagerten Speicherseite zugreifen will, wird sie automatisch zurückgeladen. Dank der MMU (Memory Management Unit) des 386-Prozessors werden die grundlegenden Funktionen dieser aufwendigen Speicherverwaltung bereits durch die CPU erledigt. Die intensive Ausnutzung spezieller Prozessoreigenschaften macht Linux zu einem außerordentlich schnellen Betriebssystem.
Das Linux Anwenderhandbuch