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.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