Betriebssysteme
Kern eines Betriebssystems
Der Kern bezeichnet den Teil des Betriebssysteme, der die gemeinsame und erzwungene Basis der restlichen Software ist. Bei der μ-Kernarchitektur wird dieser Teil minimiert [Liedtke1995]
Der Kern implementiert die Grundabstraktionen, die das Betriebssystem bietet,
also z.B bei UNIX Dateien und Prozesse und bietet
ein Sicherheitsmodell.
Der Kern hat direkten Zugriff auf die Hardware, schirmt diese aber von den Anwendungen ab.
Anwendungsprozesse rufen über Systemcalls Dienste des Kerns ab.
Wir unterscheiden:
- Userlevel
-
- System/Kern-Level
-
Kernprogrammierung ist sehr aufwendig, und fehleranfällig, da
- die Abstraktionen erst gebildet werden müssen,
man kann z.B. keine Funktionen der C-stdio-Bibliothek verwenden
- durch die Hardware Nebenläufigkeiten hineinkommen
- Nur sehr eingeschänke Debugging-Möglichkeiten
Aus diesem Grunde versucht man den Kern möglichst klein zu halten.
Linux
Sonstiges
Moderne Entwicklung
Die Trennung zwischen Kern- und Userlevel kostet natürlich Performance, da bei
einem Systemaufruf ein Kontextwechsel zwischen diesen Adressräumen gemacht werden muß.
Andererseits ist die Kernprogrammierung schwierig (Nebenläufigkeiten, keine Abstraktionen, Werkzeugnutzung erschwert, bei einem Fehler kommt das System komplett zu erliegen) und dazu sicherheitsproblematisch, daher versucht man die Kerne klein zu halten.
Moderne Betriebssyteme teilen sich in 3 Gruppen auf:
- monolitische Systeme
- der Kern ist groß aber performant
- Exo-Kern-Systeme
- Verscheidene Nutzer bekommen einen virtuellen Clone des Rechners,
aber nur einen Teil der Betriebsmittel. Der Exokern teilt den Rechner auf und kontrolliert die korrekte Nutzung.
- Klein/Microkern-Systeme
- Der Kern ist auf ein Minimum begrenzt. Möglichst viel wird von User-level-Servern erledigt.
Nach Flops gibt es wieder Hoffnung.
Baukasten für Kerne
- OsKit
- Es besteht auch mit einer tollen Bibliothek die Möglichkeit, spezielle
Anwendungen zu bauen, die gar keinen Kern haben (oder natürlich Kerne
zu bauen). Man kann auch damit virtuelle Maschinen bauen, die das Laufzeitsystem einer Programmiersprache darstellen.
Java ist ein Kandidat dafür oder auch eine Funktionale Sprache
- THINK
-
Think-OSkit-Vergleich IMMDIV Uni Erlangen
Ideen zur Kernentwicklung
Informatik- und Netzwerkverein Ravensburg e.V
Rudolf Weber