Grundlagen

Betriebssystem

Die Software, ohne die keine andere läuft: Was ein Betriebssystem tut, warum Programme nie direkt an die Hardware dürfen und wie zehn Programme auf vier Kernen gleichzeitig laufen.

Lesestand

Ein Betriebssystem ist die Software zwischen Hardware und Programmen. Es hat drei Aufgaben: Es vereinfacht (Programme sehen „Dateien“ statt Speicherblöcke), es verteilt (Rechenzeit, Arbeitsspeicher, Geräte) und es schützt (kein Programm kann ein anderes kaputtmachen).

Sein Kern heißt Kernel. Nur er darf direkt auf die Hardware zugreifen. Alle anderen Programme müssen ihn bitten – über Systemaufrufe. Windows, macOS, Linux, Android und iOS lösen dieselben Aufgaben, nur mit unterschiedlichen Kernels.

Wozu überhaupt?

Stell dir ein Restaurant vor. Die Gäste sind die Programme, die Küche ist die Hardware. Würde jeder Gast selbst in die Küche laufen, an den Herd drängeln und im Kühlschrank wühlen, gäbe es Chaos – und jeder Gast müsste wissen, wie genau dieser Herd funktioniert.

Also gibt es Personal: Die Gäste bestellen am Tisch, das Personal teilt Herde und Zutaten zu, sorgt dafür, dass niemand fremde Teller isst, und die Gäste müssen von der Küche nichts wissen. Dieses Personal ist das Betriebssystem.

Ohne Betriebssystem müsste jedes Programm selbst wissen, wie man genau diese SSD anspricht, diese Grafikkarte, diesen WLAN-Chip. So war es tatsächlich in der Frühzeit der Computer – und so ist es heute noch bei sehr einfachen Geräten wie einer Fernbedienung.

1

Vereinfachen

Statt „schreibe Bytes in Block 48 213 der SSD“ heißt es „speichere brief.txt“. Dasselbe Programm läuft auf jeder Hardware.

2

Verteilen

Hunderte Programme teilen sich wenige Prozessorkerne, einen Arbeitsspeicher, eine Netzwerkkarte. Das Betriebssystem entscheidet, wer wann was bekommt.

3

Schützen

Ein abstürzender Browser reißt nicht den Texteditor mit. Und ein Programm kann nicht die Passwörter eines anderen auslesen.

Die Schichten

Ein Computer ist wie ein Stapel aufgebaut. Jede Schicht benutzt nur die darunterliegende. Klick dich durch:

Der Schichtenstapel
Benutzermodus – eingeschränkte Rechte
Kernelmodus – volle Rechte
Auf eine Schicht klicken.Die Erklärung erscheint hier.

Die entscheidende Linie ist die gestrichelte: die Grenze zwischen Benutzermodus und Kernelmodus. Der Prozessor selbst kennt diese beiden Modi. Im Benutzermodus verweigert er bestimmte Befehle – etwa direkt auf ein Gerät zuzugreifen oder fremden Speicher zu lesen. Versucht ein Programm es trotzdem, hält die CPU an und übergibt an den Kernel, der das Programm meist beendet.

Was viele überrascht: Die Fensteroberfläche ist nicht das Betriebssystem im engeren Sinn. Die meisten Server der Welt laufen ganz ohne – nur mit Kernel, Diensten und einer Kommandozeile.

Der Systemaufruf: eine Datei speichern

Was passiert eigentlich, wenn du in einem Texteditor Strg+S drückst? Eine erstaunlich lange Reise – mit einer Überraschung am Ende.

Die Reise einer gespeicherten Datei
Editor
Bibliothek
Systemaufruf
Kernel
Dateisystem
Treiber
Hardware

U = Benutzermodus, K = Kernelmodus. Vereinfacht; die Grundidee gilt für Windows, macOS und Linux gleichermaßen.

Die Überraschung steckt in Schritt 7 und 8: „Gespeichert“ heißt zunächst nur, dass der Kernel die Daten übernommen hat. Auf die SSD kommen sie oft erst Sekunden später. Deshalb gibt es „Hardware sicher entfernen“ – und deshalb rufen Datenbanken ausdrücklich fsync auf, wenn eine Buchung wirklich auf der Platte sein muss.

Interrupts: wenn die Hardware sich meldet

Der Weg geht auch umgekehrt. Kommt ein Netzwerkpaket an oder drückst du eine Taste, schickt das Gerät der CPU einen Interrupt – eine Unterbrechung. Die CPU lässt alles stehen, springt in den Kernel, der Treiber holt die Daten ab, und dann geht es weiter, wo sie war. Das passiert tausende Male pro Sekunde, ohne dass man es merkt.

Prozesse und Scheduling

Ein Programm ist eine Datei auf der Platte. Startest du es, wird daraus ein Prozess: das laufende Programm samt eigenem Speicher, offenen Dateien und einer Nummer, der Prozess-ID. Ein Prozess kann mehrere Threads haben – Ausführungsstränge, die sich den Speicher teilen.

Auf einem normalen Laptop laufen Hunderte Prozesse mit Tausenden Threads, aber nur 8 oder 16 Kerne. Wie geht das? Der Scheduler des Kernels lässt jeden Thread kurz rechnen – typischerweise wenige Millisekunden –, unterbricht ihn dann und lässt den nächsten ran. Das geht so schnell, dass alles gleichzeitig wirkt.

Spiel Scheduler
Strategie
Prozessorkerne
Länge einer Zeitscheibe

Das ist der Kern des Scheduling-Problems: Wer alles nacheinander abarbeitet, hat am wenigsten Wechsel-Aufwand – aber der Musikplayer stottert, weil er warten muss, bis der Compiler fertig ist. Kurze Zeitscheiben machen das System reaktionsschnell, kosten aber Wechsel. Jeder Wechsel (Kontextwechsel) bedeutet: Register sichern, anderen Thread laden, Caches werden kalt.

Echte Scheduler sind deutlich klüger als dieses Spiel. Sie bevorzugen Programme, die gerade auf Eingaben reagieren müssen, geben Hintergrundjobs weniger Zeit und verteilen auf moderne Prozessoren mit schnellen und sparsamen Kernen.

Speicher: Jeder glaubt, er hätte alles

Jeder Prozess sieht einen eigenen, riesigen Adressraum, der bei Adresse 0 beginnt – als hätte er den Arbeitsspeicher für sich allein. Das ist eine Illusion: der virtuelle Speicher. Der Speicher wird in kleine Seiten zerlegt, meist 4 KiB groß. Eine Tabelle pro Prozess, die Seitentabelle, legt fest, welche virtuelle Seite in welchem echten Speicherrahmen liegt. Die Übersetzung macht ein eigener Baustein in der CPU, die MMU, bei jedem einzelnen Speicherzugriff.

Zwei Prozesse, ein Arbeitsspeicher

Prozess A

Echter Arbeitsspeicher

Prozess B

Klick auf eine Seite von Prozess A oder B – das Betriebssystem übersetzt die Adresse.

Was die Illusion leistet:

  • Schutz: Prozess A kann die Speicherseiten von B gar nicht adressieren – sie stehen nicht in seiner Tabelle. Greift ein Programm auf eine nicht zugeordnete Adresse zu, beendet der Kernel es: der berühmte Segmentation fault unter Linux und macOS, unter Windows eine Zugriffsverletzung.
  • Teilen: Bibliotheken, die viele Programme benutzen, liegen nur einmal im Speicher und erscheinen in vielen Seitentabellen.
  • Mehr als da ist: Selten benutzte Seiten lagert das Betriebssystem auf die SSD aus (Swap oder Auslagerungsdatei). Wird so eine Seite gebraucht, gibt es einen Seitenfehler: Der Kernel holt sie zurück, das Programm merkt nur eine kurze Verzögerung. Wird das zu viel, beginnt der Rechner zu „zähen“ – er ist nur noch mit Hin- und Herschaufeln beschäftigt.

Dateien, Geräte und Treiber

Ein Dateisystem verwandelt eine SSD – im Grunde eine lange Reihe nummerierter Blöcke – in Ordner, Dateinamen, Rechte und Zeitstempel. Verbreitet sind NTFS (Windows), APFS (Apple) und ext4 oder Btrfs (Linux). USB-Sticks benutzen oft exFAT, weil es alle Systeme lesen können.

Ein Treiber ist der Übersetzer für ein bestimmtes Gerät: Der Kernel sagt „schreib diese Blöcke“, der Treiber weiß, welche Register dieses SSD-Controllers dafür wie gesetzt werden müssen. Treiber laufen meist im Kernelmodus – deshalb kann ein fehlerhafter Treiber das ganze System abstürzen lassen, was ein normales Programm nie könnte.

Unix hat dafür eine elegante Idee: Alles ist eine Datei. Auch Geräte, Netzwerkverbindungen und Prozessinformationen werden über dieselben Befehle angesprochen – öffnen, lesen, schreiben, schließen. Unter Linux steht etwa unter /proc/cpuinfo eine „Datei“, die es nirgends auf der Platte gibt: Der Kernel erzeugt ihren Inhalt beim Lesen.

Was beim Einschalten passiert

FirmwareUEFI prüft die Hardware
→
Bootloaderfindet und lädt den Kernel
→
Kernelerkennt Geräte, lädt Treiber
→
Erster Prozesssystemd, launchd, wininit
→
AnmeldungDienste und Oberfläche laufen

Der erste Prozess startet alle weiteren. Unter Linux kann man das sehen: Prozess Nummer 1 ist der Urahn, von dem alle anderen abstammen.

Wie viel gehört in den Kernel?

Alles, was im Kernel läuft, ist schnell – aber ein Fehler darin trifft das ganze System. Darüber gibt es seit Jahrzehnten Streit. Berühmt ist die Debatte von 1992, in der der Informatikprofessor Andrew Tanenbaum Linux öffentlich „obsolet“ nannte, weil es einen großen Kernel hatte. Linus Torvalds widersprach heftig. Linux läuft heute auf Milliarden Geräten; Tanenbaums Mikrokernel-Ideen stecken trotzdem in vielen Systemen, bei denen Ausfallsicherheit zählt.

M

Monolithisch

Alles im Kernel: Dateisysteme, Netzwerk, Treiber. Schnell, weil alles direkt zusammenarbeitet. Beispiel: Linux.

µ

Mikrokernel

Nur das Nötigste im Kernel, Treiber und Dateisysteme als eigene Prozesse. Stürzt ein Treiber ab, startet man ihn neu. Beispiele: QNX in vielen Autos, seL4, MINIX 3.

H

Hybrid

Ein Mittelweg: Mikrokernel-Struktur, aber aus Geschwindigkeitsgründen vieles im Kernelmodus. Beispiele: der Windows-NT-Kernel, XNU bei Apple.

Die großen Familien

SystemKernelTypischer Einsatz
WindowsNT-Kerneldie meisten Desktop-PCs und Laptops
macOSXNU (Teil von Darwin), als Unix zertifiziertMacs
LinuxLinux – mit Distributionen wie Ubuntu, Debian, FedoraServer, Cloud, alle 500 schnellsten Supercomputer, Router, Fernseher
AndroidLinux-Kernel, darüber eine eigene Weltdie meisten Smartphones
iOS / iPadOSXNU, wie macOSiPhones, iPads
Echtzeitsystemez. B. FreeRTOS, Zephyr, QNXSteuergeräte, Waschmaschinen, Sensoren – überall, wo eine Reaktion garantiert rechtzeitig kommen muss

Streng genommen ist „Linux“ nur der Kernel. Ein benutzbares System entsteht erst mit den Werkzeugen und Bibliotheken drumherum – deshalb spricht man von Distributionen.

Kurze Geschichte

  • 1950erStapelverarbeitung: Ein Programm nach dem anderen, Lochkarten rein, Ergebnis Stunden später.
  • 1964IBM kündigt OS/360 an – ein Betriebssystem für eine ganze Rechnerfamilie.
  • 1969Ken Thompson und Dennis Ritchie beginnen Unix bei den Bell Labs. Seine Ideen prägen bis heute Linux, macOS, Android und iOS.
  • 1981MS-DOS auf dem IBM-PC: ein Programm zur Zeit, kaum Schutz.
  • 1984Der Macintosh macht die grafische Oberfläche populär.
  • 1991Linus Torvalds kündigt Linux an – „nur ein Hobby“, wie er schrieb.
  • 1993Windows NT erscheint; sein Kernel steckt bis heute in Windows 11.
  • 2007/2008iPhone und das erste Android-Smartphone: Betriebssysteme für die Hosentasche.

Für Entwickler übersetzt

BetriebssystemIn der Java-Welt
Prozessjede gestartete JVM – jedes java … ist ein eigener Prozess mit eigenem Adressraum
Threadein Plattform-Thread ist genau ein Thread des Betriebssystems; der Kernel plant ihn
Schedulervirtuelle Threads (seit Java 21) machen dasselbe eine Ebene höher: Die JVM verteilt viele virtuelle Threads auf wenige OS-Threads
Systemaufrufganz unten in FileOutputStream.write oder Socket steht nativer Code, der den Kernel aufruft
Virtueller Speicher-Xmx8g reserviert Adressraum; echte Speicherseiten belegt das Betriebssystem erst, wenn der Heap sie benutzt
Rechteprüfungeine AccessDeniedException ist die Antwort des Kernels, übersetzt in Java
SignaleStrg+C schickt SIGINT, Shutdown-Hooks laufen. kill -9 schickt SIGKILL – der Prozess ist sofort weg, keine Hooks
OOM-Killerwird unter Linux der Speicher knapp, beendet der Kernel Prozesse – dann gibt es keinen OutOfMemoryError, die JVM ist einfach weg (im Container oft Exit-Code 137 = 128 + 9)
// Was die JVM vom Betriebssystem erfährt
System.out.println(ProcessHandle.current().pid());       // Prozess-ID, vergeben vom Kernel
System.out.println(Runtime.getRuntime().availableProcessors());
// Kerne, die das OS diesem Prozess zugesteht – die JVM beachtet auch Container-Grenzen

Files.writeString(Path.of("brief.txt"), "Hallo");
// darunter: Systemaufrufe zum Öffnen, Schreiben, Schließen – ohne fsync!

Thread.ofPlatform().start(task);  // ein echter OS-Thread
Thread.ofVirtual().start(task);   // von der JVM geplant, läuft auf einem OS-Thread

Unter Linux zeigt strace -f java Hallo, welche Systemaufrufe die JVM tatsächlich macht – schon ein „Hello World“ erzeugt Tausende.

Häufige Irrtümer

„Das Betriebssystem ist das, was ich auf dem Bildschirm sehe.“ – Die Oberfläche ist nur die sichtbarste Schicht. Die eigentliche Arbeit macht der Kernel, und viele Systeme haben gar keine Oberfläche.
„Viel belegter Arbeitsspeicher ist schlecht.“ – Moderne Systeme nutzen freien Speicher als Zwischenspeicher für Dateien und geben ihn sofort her, wenn ein Programm ihn braucht. Ungenutzter Speicher wäre verschenkt.
„Alle meine Programme laufen gleichzeitig.“ – Echt gleichzeitig nur so viele, wie es Kerne gibt. Der Rest ist sehr schnelles Abwechseln.
„‚Gespeichert‘ heißt: Es liegt auf der Platte.“ – Oft liegt es erst im Zwischenspeicher des Kernels und wird Sekunden später geschrieben.
„Linux ist ein Betriebssystem wie Windows.“ – Linux ist zunächst nur ein Kernel. Erst eine Distribution macht daraus ein komplettes System.

Verwandte Begriffe