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 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.
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 Systemprogrammen zur Verfügung, mit denen Sie beispielsweise eine Diskette formatieren oder eine Datei ausdrucken können. Ein besonders wichtiges Systemprogramm ist der Kommandozeileninterpreter, die Benutzeroberfläche des Betriebssystems, der Ihre Eingaben liest und die darin formulierten Befehle ausführt. Bei MS-DOS wird diese Aufgabe von COMMAND.COM erfüllt, unter Linux gibt es zu diesem Zweck sogenannte Shells.
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. 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 Mehrbenutzerbetriebssysteme für PC angeboten.
Die Anforderungen an ein Mehrbenutzerbetriebssystem unterscheiden sich grundlegend von einem Einbenutzersystem:
Als echtes Mehrbenutzerbetriebssystem verwaltet Linux die Systemkomponenten sehr restriktiv. Es erlaubt den Anwenderprogrammen prinzipiell keinen direkten Zugriff auf die Hardware.
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.