# Betriebssystemkerne


> Gute **Architektur** sagt und _warum_ etwas getan wurde.
> Nicht _wie_ und nicht _wann_ und _wer_.

## Der Betriebssystemkern
- Enthält grundlegende Funktionen des Betriebssystems
  - Systemaufrufe
  - Benutzerverwaltung
  - Prozessverwaltung inklusive Ausführungsreihenfolge ([Scheduling](06_prozessstruktur.md#zeitliche-ausf-hrung-von-prozessen))
  - Interprozesskommunikation
  - Prozessumschalter ([Dispatcher](06_prozessstruktur.md#zeitliche-ausf-hrung-von-prozessen))
  - Gerätetreiber
  - [Speicherverwaltung](06_prozessstruktur.md#prozesse-im-speicher)
  - Dateisysteme zur Verwaltung von Dateien auf Speicherlaufwerken
- Ist die Schnittstelle zur Hardware des Computers
  - Funktionalitäten im BS-Kern haben vollen Hardwarezugriff
  - Funktionalitäten laufen als Prozess im Adressraum des Kerns
  - Funktionalitäten müssen nicht zwingend im Kern positioniert sein, sie können auch über Dienste bereitgestellt werden (Architektur)

## Übersicht Betriebssystem
![image_17.png](image_17.png)
### Betriebssystemkern
- Der **Kernel-Bereich** ist privilegiert
### Die Anwendungsschicht
- Der **User-Bereich** ist nicht privilegiert, kann aber darauf aufbauende Funktionalitäten bereitstellen
- Zugriff auf die Hardware erfolgt alleinig durch die im _Kernel_ bereitgestellten Funktionalitäten (System-Calls)

## Kernarten
### Monolitische Kerne
Ein Monolith enthält alle Funktionalitäten eines Betriebssystems

| Pro                                                                                 | Con                                                                                                                      |
|-------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| Bessere **Ausführungsgeschwindigkeit** da weniger _Prozesswechsel_ notwendig sind   | Abgestürzte Komponenten des Kerns können nicht separat neu gestartet werden -> können das gesamte BS zum Absturz bringen |
| Durch jahrelange Entwicklungstätigkeit ist eine gewachsene **Stabilität** vorhanden |                                                                                                                          |

### Minimale Kerne (Microkernel)
Hier befinden sich nur die nötigsten Funktionen im Kernel

| Pro                                                                                                    | Con                                                                                                                      |
|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| Alle weiteren Funktionalitäten laufen als _Dienste_ bzw. _Server_ im User-Modus                        | Abgestürzte Komponenten des Kerns können nicht separat neu gestartet werden -> können das gesamte BS zum Absturz bringen |
| Ausgelagerte Funktionalitäten sind leichter austauschbar, bietet bessere _Stabilität_ und _Sicherheit_ |                                                                                                                          |


### Hybride Kerne
Enthalten Komponenten, die, aus Geschwindigkeitsgründen, zusätzlich in den Kernel aufgenommen werden

| Pro                                       | Con                                                                                                             |
|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
| höhere Geschwindigkeit als minimale Kerne | keine klare Definition, was in den Kernel integiert wird                                                        | 
| höhere Stabilität als monolithische Kerne | Systeme differieren stark -> kann zu einer fehlenden Unterstützung der Hardware- und Software-Hersteller führen |


### Vergleich monolithischer Kern / minimaler Kern
![image_18.png](image_18.png)

## Alternative Architekturen
_Flaschenhals_ alle bestehenden Systeme liegt in ihren Schichtenmodellen
- Anwendung hat _keinen direkten Zugriff auf Hardware_
- _Kommunikation und Datenfluss_ wird über Bibliotheken und deren Kernel abgewickelt
- _Zugangskontrolle_ weiterhin über Bibliotheken und Kernel

## Programmierschnittstellen
**Systemaufruf (System Call)** ist eine API, die es ermöglicht auf Dienste und Ressourcen des BS zuzugreifen
- Implementierung von Systemaufrufen hängt stark von _Hardware_, _Architektur_, _BS_ ab
- ![image_19.png](image_19.png)
- Wann werden die benutzt?
  - Berechtigungen, Ressourcenverwaltung, Kommunikation mit Hardware, Prozesssteuerung, Netzwerkkommunikation, Zeitverwaltung
- Nutzung eines direkten Systemaufrufs **nicht empfehlenswert**
  - Software ist schlecht portierbar
  - Auf Funktionen von Bibliotheken zurückgreifen
    - befinden sich mit entsprechenden Wrapper-Funktionen logisch zwischen Benutzer- und BS-Kern