Mikrokern Architektur gekürzt

This commit is contained in:
WieErWill 2022-02-21 15:56:36 +01:00
parent 8dc0364822
commit 2cac1c45f8
2 changed files with 175 additions and 506 deletions

Binary file not shown.

View File

@ -652,15 +652,15 @@
\item Programmiermodell: \item Programmiermodell:
\begin{itemize*} \begin{itemize*}
\item BS+Anwendung als Ganzes übersetzt: statische Optimierungen durch Compiler (Laufzeit, Speicherbedarf) \item BS+Anwendung als Ganzes übersetzt: statische Optimierungen durch Compiler (Laufzeit, Speicherbedarf)
\item Nebenläufigkeit durch ereignisbasierte Kommunikation zw. Anwendung und Kernel \item Nebenläufigkeit durch ereignisbasierte Kommunikation zw. Anwendung und Kernel
\begin{itemize*} \begin{itemize*}
\item command: API-Aufruf, z.B. EA-Operation \item command: API-Aufruf, z.B. EA-Operation
\item event: Reaktion auf diesen durch Anwendung \item event: Reaktion auf diesen durch Anwendung
\end{itemize*} \end{itemize*}
\item sowohl commands als auch events : asynchron \item sowohl commands als auch events : asynchron
\end{itemize*} \end{itemize*}
\end{itemize*} \end{itemize*}
\subsubsection{BS: RIOT} \subsubsection{BS: RIOT}
\begin{itemize*} \begin{itemize*}
\item sparsames BS,optimiert für anspruchsvollere Anwendungen \item sparsames BS,optimiert für anspruchsvollere Anwendungen
@ -691,48 +691,20 @@
\end{itemize*} \end{itemize*}
\section{Robustheit und Verfügbarkeit} \section{Robustheit und Verfügbarkeit}
Motivation
\subsection{Motivation}
\begin{itemize*} \begin{itemize*}
\item \item allgemein: verlässlichkeitskritische Anwendungsszenarien
allgemein: verlässlichkeitskritischeAnwendungsszenarien \item Forschung in garstiger Umwelt (Weltraum)
\item \item hochsicherheitskritische Systeme (Finanz, Cloud Dienste)
Forschung in garstiger Umwelt \item hochverfügbare System (öffentliche Infrastruktur, Strom)
\item \item HPC (high performance computing)
Weltraumerkundung
\item
hochsicherheitskritische Systeme:
\begin{itemize*}
\item Rechenzentren von Finanzdienstleistern
\item Rechenzentren von Cloud-Dienstleistern
\end{itemize*}
\item
hochverfügbare System:
\begin{itemize*}
\item all das bereits genannte
\item öffentliche Infrastruktur(Strom, Fernwärme, ...)
\end{itemize*}
\item
HPC (high performancecomputing)
\end{itemize*} \end{itemize*}
Allgemeine Begriffe
\subsection{Allgemeine Begriffe}
\begin{itemize*} \begin{itemize*}
\item \item Verlässlichkeit: Fähigkeit, eine Leistung zu erbringen, der man berechtigterweise vertrauen kann
Verlässlichkeit, Zuverlässigkeit (dependability) \item Untereigenschaften
\item
übergeordnete Eigenschaft eines Systems [ALRL04]
\item
Fähigkeit, eine Leistungzu erbringen, der man berechtigterweise
vertrauen kann
\item
Taxonomie: umfasst entsprechend Definition die Untereigenschaften
\begin{enumerate*} \begin{enumerate*}
\item Verfügbarkeit (availability) \item Verfügbarkeit (availability)
\item Robustheit (robustness, reliability \item Robustheit (robustness, reliability
\item (Funktions-) Sicherheit (safety) \item (Funktions-) Sicherheit (safety)
@ -740,480 +712,227 @@
\item Integrität (integrity) \item Integrität (integrity)
\item Wartbarkeit (maintainability) (vgl.: evolutionäre Eigenschaften) \item Wartbarkeit (maintainability) (vgl.: evolutionäre Eigenschaften)
\end{enumerate*} \end{enumerate*}
\item \item[$\rightarrow$] nicht für alle Anwendungen sind alle Untereigenschaften erforderlich
1., 4. \& 5. auch Untereigenschaften von IT-Sicherheit (security)
\item
$\rightarrow$ nicht für alle Anwendungen sind alle
Untereigenschaften erforderlich
\end{itemize*} \end{itemize*}
\subsubsection{Robustheitsbegriff} \subsubsection{Robustheitsbegriff}
\begin{itemize*} \begin{itemize*}
\item \item Untereigenschaften von Verlässlichkeit: Robustheit (reliability)
Teil der primären Untereigenschaften von Verlässlichkeit: Robustheit \item Ausfall: beobachtbare Verminderung der Leistung eines Systems, gegenüber seiner als korrekt spezifizierten Leistung
(robustness, reliability) \item Robustheit: Verlässlichkeit unter Anwesenheit externer Ausfälle (= Ursache außerhalb des betrachteten Systems)
\item
Ausfall: beobachtbare Verminderung der Leistung, die ein System
tatsächlich erbringt, gegenüber seiner als korrekt spezifizierten
Leistung
\item
Robustheit: Verlässlichkeit unter Anwesenheit externer Ausfälle (=
Ausfälle, deren Ursache außerhalb des betrachteten Systems liegt)
\item
im Folgenden: kurze Systematik der Ausfälle ...
\end{itemize*} \end{itemize*}
\subsubsection{Fehler, Ausfälle und ihre Vermeidung}
\subsubsection{Fehler und Ausfälle ...}
\begin{itemize*} \begin{itemize*}
\item \item Fehler $\rightarrow$ fehlerhafter Zustand $\rightarrow$ Ausfall
Fehler $\rightarrow$ fehlerhafter Zustand
$\rightarrow$ Ausfall
\item
grundlegende Definitionen dieser Begriffe (ausführlich: [ALRL04,
AvLR04] ):
\begin{itemize*}
\item Ausfall (failure): liegt vor, wenn tatsächliche Leistung(en), die ein System erbringt, von als korrekt spezifizierter Leistung abweichen
\item fehlerhafter Zustand ( error ): notwendige Ursacheeines Ausfalls (nicht jeder error muss zu failure führen)
\item Fehler ( fault ): Ursache für fehlerhaften Systemzustand ( error ), z.B. Programmierfehler
\end{itemize*}
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-fehler.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-fehler.png}
\end{itemize*} \end{itemize*}
\begin{description*}
\item[Ausfall] (failure) liegt vor, wenn tatsächliche Leistung(en), die ein System erbringt, von als korrekt spezifizierter Leistung abweichen
\subsubsection{... und ihre Vermeidung}
\begin{itemize*}
\item
Umgang mit ...
\begin{itemize*} \begin{itemize*}
\item faults: \begin{itemize*} \item Korrektheit testen \item Korrektheit beweisen( $\rightarrow$ formale Verifikation) \end{itemize*} \item Korrektheit testen/beweisen( $\rightarrow$ formale Verifikation)
\item errors: \begin{itemize*} \item Maskierung, Redundanz \item Isolationvon Subsystemen \item $\rightarrow$ Isolationsmechanismen \end{itemize*}
\item failures: \begin{itemize*} \item Ausfallverhalten (neben korrektem Verhalten) spezifizieren \item Ausfälle zur Laufzeit erkennen und Folgen beheben, abschwächen... \item $\rightarrow$ Micro-Reboots \end{itemize*}
\end{itemize*} \end{itemize*}
\end{itemize*} \item[fehlerhafter Zustand] (error) notwendige Ursache eines Ausfalls (nicht jeder error muss zu failure führen)
\begin{itemize*}
\item Maskierung, Redundanz
\item Isolation von Subsystemen
\item $\rightarrow$ Isolationsmechanismen
\end{itemize*}
\item[Fehler] (fault) Ursache für fehlerhaften Systemzustand ( error ), z.B. Programmierfehler
\begin{itemize*}
\item Ausfallverhalten spezifizieren
\item Ausfälle zur Laufzeit erkennen und Folgen beheben, abschwächen...
\item $\rightarrow$ Micro-Reboots
\end{itemize*}
\end{description*}
\subsection{Fehlerhafter Zustand} \subsection{Fehlerhafter Zustand}
interner und externer Zustand (internal \& external state)
\begin{itemize*} \begin{itemize*}
\item \item externer Zustand: der Teil des Gesamtzustands, der an externer Schnittstelle sichtbar wird
interner und externer Zustand (internal \& external state) \item interner Zustand: restlicher Teilzustand
\begin{itemize*} \item erbrachte Leistung: zeitliche Folge externer Zustände
\item externer Zustand (einer Systems oder Subsystems): der Teil des Gesamtzustands, der an externer Schnittstelle (also für das umgebende (Sub-) System) sichtbar wird
\item interner Zustand: restlicher Teilzustand
\item (tatsächlich) erbrachte Leistung: zeitliche Folge externer Zustände
\end{itemize*}
\item
Beispiele für das System ( Betriebssystem-) Kernel :
\begin{itemize*}
\item Subsysteme: Dateisystem, Scheduler, E/A, IPC, ..., Gerätetreiber
\item fault : Programmierfehler im Gerätetreiber
\item externer Zustand des Treibers (oder des Dateisystems, Schedulers, E/A, IPC, ...) $\subseteq$ interner Zustand des Kernels
%\item
% %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-treiber-kernel.png}
\end{itemize*}
\end{itemize*} \end{itemize*}
Fehlerausbreitung und (externer) Ausfall
\subsubsection{Fehlerausbreitung und (externer)
Ausfall}
\begin{itemize*} \begin{itemize*}
\item \item Wirkungskette: Treiber-Programmierfehler (fault) $\rightarrow$ fehlerhafter interner Zustand des Treibers (error)
Wirkungskette: -[X] Treiber-Programmierfehler (fault) -[X]
fehlerhafter interner Zustand des Treibers (error)
\begin{itemize*} \begin{itemize*}
\item Ausbreitung dieses Fehlers ( failure des Treibers) \item Ausbreitung dieses Fehlers (failure des Treibers)
\item = fehlerhafter externer Zustand des Treibers \item[$\Rightarrow$] fehlerhafter externer Zustand des Treibers
\item = fehlerhafter interner Zustand des Kernels( error ) \item[$\Rightarrow$] fehlerhafter interner Zustand des Kernels (error)
\item = Kernelausfall!( failure ) \item[$\Rightarrow$] Kernelausfall (failure)
\end{itemize*} \end{itemize*}
\item[$\boxtimes$] \item Auswirkung: fehlerhafter Zustand weiterer Kernel-Subsysteme
Auswirkung: fehlerhafter interner Zustand eines weiteren \item $\rightarrow$ Robustheit: Isolationsmechanismen
Kernel-Subsystems (z.B. error des Dateisystems)
\item
$\rightarrow$ Robustheit: Isolationsmechanismen
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-treiber-kernel-fehler.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-treiber-kernel-fehler.png}
\end{itemize*} \end{itemize*}
\subsection{Isolationsmechanismen} \subsection{Isolationsmechanismen}
\begin{itemize*} \begin{itemize*}
\item \item Isolationsmechanismen für robuste Betriebssysteme
im Folgenden: Isolationsmechanismen für robuste Betriebssysteme
\begin{itemize*} \begin{itemize*}
\item durch strukturierte Programmierung \item durch strukturierte Programmierung
\item durch Adressraumisolation \item durch Adressraumisolation
\end{itemize*} \end{itemize*}
\item \item noch mehr für sichere Betriebssysteme
es gibt noch mehr: Isolationsmechanismen für sichere Betriebssysteme
\begin{itemize*} \begin{itemize*}
\item all die obigen...
\item durch kryptografische Hardwareunterstützung: Enclaves \item durch kryptografische Hardwareunterstützung: Enclaves
\item durch streng typisierte Sprachen und managed code \item durch streng typisierte Sprachen und managed code
\item durch isolierte Laufzeitumgebungen: Virtualisierung \item durch isolierte Laufzeitumgebungen: Virtualisierung
\end{itemize*} \end{itemize*}
\end{itemize*} \end{itemize*}
\subsubsection{Strukturierte Programmierung}
\subsubsection{Strukturierte
Programmierung}
Monolithisches BS... in historischer Reinform: Monolithisches BS... in historischer Reinform:
\begin{itemize*} \begin{itemize*}
\item \item Anwendungen, Kernel, gesamte BS-Funktionalität
Anwendungen \item programmiert als Sammlung von Prozeduren
\item \item jede darf jede davon aufrufen, keine Modularisierung
Kernel \item keine definierten internen Schnittstellen
\item
gesamte BS-Funktionalität
\item
programmiert als Sammlung von Prozeduren
\item
jede darf jede davon aufrufen
\item
keine Modularisierung
\item
keine definierten internen Schnittstellen
\end{itemize*} \end{itemize*}
Monolithisches Prinzip
\paragraph{Monolithisches Prinzip}
\begin{itemize*} \begin{itemize*}
\item \item Ziel: Isolation zwischen Anwendungen und Betriebssystem
Ziel: Isolation zwischen Anwendungen und Betriebssystem \item Mechanismus: Prozessor-Privilegierungsebenen (user/kernelspace)
\item \item Konsequenz: fast keine Strukturierung des Kernels
Mechanismus: Prozessor-Privilegierungsebenen ( user space und kernel
space )
\item
Konsequenz für Strukturierung des Kernels: Es gibt keine
Strukturierung des Kernels ...
\item
... jedenfalls fast: Ablauf eines Systemaufrufs (Erinnerung)
%\begin{itemize*}
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-systemaufruf.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-systemaufruf.png}
%\end{itemize*}
\end{itemize*} \end{itemize*}
Strukturierte Makrokernarchitektur
\paragraph{Strukturierte
Makrokernarchitektur}
\begin{itemize*} \begin{itemize*}
\item \item schwach strukturierter (monolithischer) Makrokernel
Resultat: schwach strukturierter (monolithischer) Makrokernel
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-makrokernelarchitektur.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-makrokernelarchitektur.png}
\begin{itemize*} \item[$\Rightarrow$] Schichtendifferenzierung ( layered operating system )
\item nach [TaWo05], S. 45 \item Modularisierung
\end{itemize*}
\item
Weiterentwicklung:
\item
Schichtendifferenzierung ( layered operating system )
\item
Modularisierung (Bsp.: Linux-Kernel) | Kernelcode |
|
-------------------------
| | VFS | | IPC, Dateisystem
| | Scheduler, VMM | | Dispatcher,
Gerätetreiber |
\item
Modularer Makrokernel:
\item
alle Kernelfunktionen in Moduleunterteilt (z.B. verschiedene
Dateisystemtypen) $\rightarrow$ Erweiterbarkeit,
Wartbarkeit, Portierbarkeit
\item
klar definierte Modulschnittstellen(z.B. virtualfilesystem, VFS )
\item
Module zur Kernellaufzeit dynamisch einbindbar
( $\rightarrow$ Adaptivität)
\end{itemize*} \end{itemize*}
Modularer Makrokernel
\paragraph{Fehlerausbreitung beim
Makrokernel}
\begin{itemize*} \begin{itemize*}
\item \item Kernelfunktionen in Module unterteilt $\rightarrow$ Erweiter-/Portierbarkeit
strukturierte Programmierung: \item klar definierte Modulschnittstellen
\item \item Module zur Kernellaufzeit dynamisch einbindbar (Adaptivität)
\cmark Wartbarkeit
\item
\cmark Portierbarkeit
\item
\cmark Erweiterbarkeit
\item
O (begrenzt) Adaptivität
\item
O (begrenzt) Schutz gegen statische Programmierfehler: nur durch
Compiler (z.B. C private, public)
\item
\xmark kein Schutz gegen dynamische Fehler
\item
$\rightarrow$ Robustheit...?
\item
nächstes Ziel: Schutz gegen Laufzeitfehler...
$\rightarrow$ Laufzeitmechanismen
\end{itemize*} \end{itemize*}
\paragraph{Fehlerausbreitung beim Makrokernel}
\begin{itemize*}
\item[\cmark] Wartbarkeit
\item[\cmark] Portierbarkeit
\item[\cmark] Erweiterbarkeit
\item (begrenzt) Adaptivität
\item Schutz gegen statische Programmierfehler nur durch Compiler
\item[\xmark] kein Schutz gegen dynamische Fehler
\end{itemize*}
\subsubsection{Adressraumisolation} \subsubsection{Adressraumisolation}
Private virtuelle Adressräume und Fehlerausbreitung
\begin{itemize*} \begin{itemize*}
\item \item private virtuelle Adressräume zweier Tasks ($i\not= j$)
zur Erinnerung: private virtuelle Adressräume zweier Tasks %\item private virtuelle vs. physischer Adresse
($i\not= j$)
%\begin{itemize*}
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-private-virtuelle-adressräume.png}
%\end{itemize*}
\item
private virtuelle vs. physischer Adresse
%\begin{itemize*} %\begin{itemize*}
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-virtuelle-vs-physische-adresse.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-virtuelle-vs-physische-adresse.png}
%\end{itemize*} %\end{itemize*}
\item korrekte private vAR: kollisionsfreie Seitenabbildung
\item Magie in Hardware: MMU (BS steuert und verwaltet...)
\end{itemize*} \end{itemize*}
Robustheit: Vorteil von privaten vAR?
\paragraph{Private virtuelle Adressräume und
Fehlerausbreitung}
\begin{itemize*} \begin{itemize*}
\item \item[\cmark] nichtvertrauenswürdiger Code kann keine beliebigen physischen Adressen schreiben
korrekte private vAR \textasciitilde{} kollisionsfreie \item[\cmark] Kommunikation zwischen nvw. Code muss durch IPC-Mechanismen explizit hergestellt werden $\rightarrow$ Überwachung und Validierung zur Laufzeit möglich
Seitenabbildung! \item[\cmark] Kontrollfluss begrenzen: Funktionsaufrufe können i.A. keine AR-Grenzen überschreiten
\item
Magie in Hardware: MMU (BS steuert und verwaltet...)
\item
Robustheit: Was haben wir von privaten vAR?
\begin{itemize*} \begin{itemize*}
\item \cmark nichtvertrauenswürdiger (i.S.v. potenziell nicht korrekter) Code kann keine beliebigen physischen Adressen schreiben (er erreicht sie ja nicht mal...) \item $\rightarrow$ BS-Zugriffssteuerung kann nicht durch Taskfehler ausgehebelt werden
\item \cmark Kommunikation zwischen nvw. Code (z.B. Anwendungstasks) muss durch IPC-Mechanismen explizit hergestellt werden (u.U. auch shared memory) \begin{itemize*} \item $\rightarrow$ Überwachung und Validierung zur Laufzeit möglich \end{itemize*} \item $\rightarrow$ unabsichtliche Terminierungsfehler(unendliche Rekursion) erschwert ...
\item \cmark Kontrollfluss begrenzen: Funktionsaufrufe können i.A. (Ausnahme: RPC) keine AR-Grenzen überschreiten \begin{itemize*} \item $\rightarrow$ BS-Zugriffssteuerungkann nicht durch Taskfehler ausgehebelt werden \item $\rightarrow$ unabsichtliche Terminierungsfehler(unendliche Rekursion) erschwert ... \end{itemize*}
\end{itemize*} \end{itemize*}
\item keine Isolation zwischen Fehlern innerhalb des Kernels
\end{itemize*} \end{itemize*}
\paragraph{Was das für den Kernel
bedeutet}
\begin{itemize*}
\item
private virtuelle Adressräume
\begin{itemize*}
\item gibt es schon so lange wie VMM
\item gab es lange nur auf Anwendungsebene
\item $\rightarrow$ keine Isolation zwischen Fehlern innerhalb des Kernels!
%\item
% %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-virtuelle-kernel-adressräume.png}
\end{itemize*}
\item
nächstes Ziel: Schutz gegen Kernelfehler (Gerätetreiber)...
$\rightarrow$ BS-Architektur
\end{itemize*}
\subsection{Mikrokernelarchitektur} \subsection{Mikrokernelarchitektur}
Fortschritt ggü. Makrokernel
\begin{itemize*} \begin{itemize*}
\item Fortschritt ggü. Makrokernel: \item Strukturierungskonzept
\begin{itemize*} \begin{itemize*}
\item Strukturierungskonzept: \item strenger durchgesetzt durch konsequente Isolation voneinander unabhängiger Kernel-Subsysteme
\begin{itemize*} \item zur Laufzeit durchgesetzt $\rightarrow$ Reaktion auf fehlerhafte Zustände möglich!
\item strenger durchgesetzt durch konsequente Isolation voneinander unabhängiger Kernel-Subsysteme
\item zur Laufzeit durchgesetzt $\rightarrow$ Reaktion auf fehlerhafte Zustände möglich!
\end{itemize*}
\item zusätzlich zu vertikaler Strukturierung des Kernels: horizontale Strukturierungeingeführt
\begin{itemize*}
\item $\rightarrow$ funktionale Einheiten: vertikal (Schichten)
\item $\rightarrow$ isolierteEinheiten: horizontal (private vAR)
\end{itemize*}
\end{itemize*} \end{itemize*}
\item \item zusätzlich zu vertikaler Strukturierung des Kernels: horizontale Strukturierung eingeführt
Idee:
\begin{itemize*} \begin{itemize*}
\item Kernel (alle BS-Funktionalität) $\rightarrow$ $\mu$Kernel (minimale BS-Funktionalität) \item[$\rightarrow$] funktionale Einheiten: vertikal (Schichten)
\item Rest (insbes. Treiber): ,,gewöhnliche'' Anwendungsprozesse mit Adressraumisolation \item[$\rightarrow$] isolierte Einheiten: horizontal (private vAR)
\item Kommunikation: botschaftenbasierteIPC (auch client-server operating system )
\item Nomenklatur: Mikrokernelund Serverprozesse
\end{itemize*} \end{itemize*}
\item[$\Rightarrow$] Kernel (alle BS-Funktionalität) $\rightarrow$ $\mu$Kernel (minimale BS-Funk.)
\item Rest: ,,gewöhnliche'' Anwendungsprozesse mit AR-isolation
\item Kommunikation: botschaftenbasierte IPC (client-server OS)
\item Nomenklatur: Mikrokernel und Serverprozesse
\end{itemize*} \end{itemize*}
\subsubsection{Modularer Makrokernel vs. Mikrokernel}
\subsubsection{Modularer Makrokernel vs.
Mikrokernel}
\begin{itemize*} \begin{itemize*}
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-modularer-makrokernel.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-modularer-makrokernel.png}
\item \item minimale Kernelfunktionalität:
minimale Kernelfunktionalität: \item keine Dienste, nur allgemeine Schnittstellenfür diese
\item \item keine Strategien, nur grundlegende Mechanismen zur Ressourcenverwaltung
keine Dienste, nur allgemeine Schnittstellenfür diese \item neues Problem: minimales Mikrokerneldesign
\item
keine Strategien, nur grundlegende Mechanismenzur Ressourcenverwaltung
\item
neues Problem: minimales Mikrokerneldesign
\item
,,Wir haben 100 Leute gefragt...'': Wie entscheide ich das?
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-modularer-makrokernel-2.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-modularer-makrokernel-2.png}
\begin{itemize*}
\item Ablauf eines Systemaufrufs
\item schwarz: unprivilegierteInstruktionen
\item blau:privilegierte Instruktionen
\item rot:Übergang zwischen beidem ($\mu$Kern $\rightarrow$ Kontextwechsel!)
\end{itemize*}
\end{itemize*} \end{itemize*}
\paragraph{Robustheit von Mikrokernen}
\paragraph{Robustheit von
Mikrokernen}
\begin{itemize*} \begin{itemize*}
\item \item = Gewinn durch Adressraumisolation innerhalb des Kernels
= Gewinn durch Adressraumisolation innerhalb des Kernels \item[\cmark] kein nichtvertrauenswürdiger Code im Kernelspace, der dort beliebige physische Adressen manipulieren kann
\begin{itemize*} \item[\cmark] Kommunikation zwischen nvw. Code (nicht zur zwischen Anwendungstasks)muss durch IPC explizit hergestellt werden $\rightarrow$ Überwachung und Validierung zur Laufzeit
\item \cmark kein nichtvertrauenswürdiger Code im kernelspace , der dort beliebige physische Adressen manipulieren kann \item[\cmark] Kontrollfluss begrenzen: Zugriffssteuerung auch zwischen Serverprozessen, zur Laufzeit unabhängiges Teilmanagement von Code (Kernelcode) möglich (z.B.: Nichtterminierung erkennen)
\item \cmark Kommunikation zwischen nvw. Code (nicht zur zwischen Anwendungstasks)muss durch IPC explizit hergestellt werden $\rightarrow$ Überwachung und Validierung zur Laufzeit \item Neu:
\item \cmark Kontrollfluss begrenzen: Zugriffssteuerung auch zwischen Serverprozessen, zur Laufzeit unabhängiges Teilmanagement von Code (Kernelcode) möglich (z.B.: Nichtterminierung erkennen) \item[\cmark] nvw. BS-Code muss nicht mehr im Kernelspace laufen
\end{itemize*} \item[\cmark] verbleibender Kernel: klein, funktional weniger komplex, leichter zu entwickeln, zu testen, evtl. formal zu verifizieren
\item \item[\cmark] daneben: Adaptivität durch konsequentere Modularisierung des Kernels gesteigert
Neu:
\begin{itemize*}
\item \cmark nvw. BS-Code muss nicht mehr im kernelspace (höchste Prozessorprivilegierung) laufen
\item \cmark verbleibender Kernel (dessen Korrektheit wir annehmen): klein, funktional weniger komplex, leichter zu entwickeln, zu testen, evtl. formal zu verifizieren
\item \cmark daneben: Adaptivitätdurch konsequentere Modularisierung des Kernels gesteigert
\end{itemize*}
\end{itemize*} \end{itemize*}
\subsubsection{Mikrokernel: Mach}
\subsubsection{Mach}
\begin{itemize*} \begin{itemize*}
\item \item 1975: Aleph (BS des ,,Rochester Intelligent Gateway'')
Mikrokernel-Design: Erster Versuch \item 1979/81: Accent (verteiltes BS), CMU
\begin{itemize*} \item Mach 3.0 (1989): einer der ersten praktisch nutzbaren $\mu$Kerne
\item Carnegie Mellon University (CMU), School of Computer Science 1985 - 1994 \item Ziel: API-Emulation ($\not=$ Virtualisierung) von UNIX und -Derivaten auf unterschiedlichen Prozessorarchitekturen
\end{itemize*} \item mehrere unterschiedliche Emulatoren gleichzeitig lauffähig
\item
ein wenig Historie
\begin{itemize*}
\item UNIX (Bell Labs) - K. Thompson, D. Ritchie
\item BSD (U Berkeley) - W. Joy
\item System V - W. Joy
\item Mach (CMU) - R. Rashid
\item MINIX - A. Tanenbaum
\item NeXTSTEP (NeXT) - S. Jobs
\item Linux - L. Torvalds
\item GNU Hurd (FSF) - R. Stallman
\item Mac OS X (Apple) - S. Jobs
\end{itemize*}
\end{itemize*}
\paragraph{Mach: Ziele}
Entstehung
\begin{itemize*}
\item
Grundlage:
\begin{itemize*}
\item 1975: Aleph(BS des ,,Rochester Intelligent Gateway''), U Rochester
\item 1979/81: Accent (verteiltes BS), CMU
\end{itemize*}
\item
gefördert durch militärische Geldgeber:
\begin{itemize*}
\item DARPA: Defense AdvancedResearch Projects Agency
\item SCI: Strategic Computing Initiative
\end{itemize*}
\end{itemize*}
Ziele
\begin{itemize*}
\item
Mach 3.0 (Richard Rashid, 1989): einer der ersten praktisch nutzbaren
$\mu$Kerne
\item
Ziel: API-Emulation($\not =$ Virtualisierung!)von UNIX und -Derivaten auf
unterschiedlichen Prozessorarchitekturen
\item
mehrere unterschiedliche Emulatoren gleichzeitig lauffähig
\begin{itemize*} \begin{itemize*}
\item Emulation außerhalb des Kernels \item Emulation außerhalb des Kernels
\item jeder Emulator: \begin{itemize*} \item Komponente im Adressraum des Applikationsprogramms \item 1...n Server, die unabhängig von Applikationsprogramm laufen \end{itemize*} \item Komponente im Adressraum des Applikationsprogramms
\item $1...n$ Server, unabhängig von Applikationsprogramm
\end{itemize*} \end{itemize*}
\end{itemize*} \end{itemize*}
Mach-Server zur Emulation
\begin{itemize*}
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-mach-server.png}
\item
Emulation von UNIX-Systemen mittels Mach-Serverprozessen
\end{itemize*}
$\mu$Kernel-Funktionen $\mu$Kernel-Funktionen
\begin{enumerate*} \begin{enumerate*}
\item \item Prozessverwaltung
Prozessverwaltung \item Speicherverwaltung
\item \item IPC-und E/A-Dienste, einschließlich Gerätetreiber
Speicherverwaltung
\item
IPC-und E/A-Dienste, einschließlich Gerätetreiber
\end{enumerate*} \end{enumerate*}
unterstützte Abstraktionen ( $\rightarrow$ API, unterstützte Abstraktionen ( $\rightarrow$ API, Systemaufrufe):
Systemaufrufe):
\begin{enumerate*} \begin{enumerate*}
\item \item Prozesse, Threads, Speicherobjekte
Prozesse \item Ports (generisches, ortstransparentes Adressierungskonzept)
\item \item Botschaften, ... (sekundäre, von den obigen genutzte Abstraktionen)
Threads
\item
Speicherobjekte
\item
Ports (generisches, ortstransparentes Adressierungskonzept; vgl. UNIX
,,everything is a file'')
\item
Botschaften
\item
... (sekundäre, von den obigen genutzte Abstraktionen)
\end{enumerate*} \end{enumerate*}
Architektur Architektur
\begin{itemize*} \begin{itemize*}
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-mach-architektur.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-mach-architektur.png}
\item \item Systemaufrufkosten:
Systemaufrufkosten:
\begin{itemize*} \begin{itemize*}
\item IPC-Benchmark (1995): i486 Prozessor, 50 MHz \item IPC-Benchmark (1995): i486 Prozessor, 50 MHz
\item Messung mit verschiedenen Botschaftenlängen( x - Werte) \item Messung mit verschiedenen Botschaftenlängen( x - Werte)
\item ohne Nutzdaten (0 Byte Botschaftenlänge): 115 $\mu$s (Tendenz unfreundlich ...) \item ohne Nutzdaten (0 Byte Botschaftenlänge): 115 $\mu$s (Tendenz unfreundlich ...)
%\item %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-mach-systemaufruf.png}
% %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-mach-systemaufruf.png}
\end{itemize*} \end{itemize*}
\item \item Bewertung aus heutiger Sicht:
Bewertung aus heutiger Sicht:
\begin{itemize*} \begin{itemize*}
\item funktional komplex \item funktional komplex
\item 153 Systemaufrufe \item 153 Systemaufrufe
\item mehrere Schnittstellen, parallele Implementierungen für eine Funktion \item mehrere Schnittstellen, parallele Implementierungen für eine Funktion
\item $\rightarrow$ Adaptivität (Auswahl durch Programmierer) \item $\rightarrow$ Adaptivität (Auswahl durch Programmierer)
\end{itemize*} \end{itemize*}
\item \item Fazit:
Fazit:
\begin{itemize*} \begin{itemize*}
\item zukunftsweisender Ansatz \item zukunftsweisender Ansatz
\item langsame und ineffiziente Implementierung \item langsame und ineffiziente Implementierung
@ -1221,89 +940,39 @@
\end{itemize*} \end{itemize*}
Lessons Learned Lessons Learned
\begin{itemize*} \begin{itemize*}
\item \item Umsetzung: Designkriterien weitgehend unbekannt
erster Versuch: \item Folgen für Performanz und Programmierkomfort: [Heis19]
\item \item[\xmark] ,,complex'', ,,inflexible'', ,,slow''
Idee des Mikrokernelsbekannt \item wissen etwas über Kosten: IPC-Performanz, Kernelabstraktionen
\item \item wissen nichts über guten $\mu$Kern-Funktionsumfang und gute Schnittstellen
Umsetzung: Designkriterienweitgehend unbekannt
\item
Folgen für Performanz und Programmierkomfort: [Heis19]
\item
\xmark ,,complex''
\item
\xmark ,,inflexible''
\item
\xmark ,,slow''
\item
wir wissen etwas über Kosten: IPC-Performanz, Kernelabstraktionen
\item
wir wissen noch nichts über guten $\mu$Kern-Funktionsumfangund gute
Schnittstellen...
\item
$\rightarrow$ nächstes Ziel!
\end{itemize*} \end{itemize*}
\subsubsection{L4} \subsubsection{L4}
Analyse des Mach-Kernels:
\begin{itemize*}
\item
Made in Germany:
\begin{itemize*}
\item Jochen Liedtke (GMD, ,,Gesellschaft für Mathematik und Datenverarbeitung''), Betriebssystemgruppe (u.a.): J. Liedtke, H. Härtig, W. E. Kühnhauser
\item Symposium on Operating Systems Principles 1995 (SOSP '95): ,,On $\mu$-Kernel Construction'' [Lied95]
\end{itemize*}
\item
Analyse des Mach-Kernels:
\begin{enumerate*} \begin{enumerate*}
\item falsche Abstraktionen \item falsche Abstraktionen
\item unperformanteKernelimplementierung \item unperformanteKernelimplementierung
\item prozessorunabhängige Implementierung \begin{itemize*} \item Letzteres: effizienzschädliche Eigenschaft eines Mikrokernels \item Neuimplementierung eines (konzeptionell sauberen!) $\mu$-Kerns kaum teurer als Portierung auf andere Prozessorarchitektur \end{itemize*} \item prozessorunabhängige Implementierung
\end{enumerate*} \end{enumerate*}
\end{itemize*}
L3 und L4 L3 und L4
\begin{itemize*} \begin{itemize*}
\item \item Mikrokerne der 2. Generation
Mikrokerne der 2. Generation \item vollständige Überarbeitung des Mikrokernkonzepts
\item
zunächst L3, insbesondere Nachfolger L4: erste Mikrokerne der 2.
Generation
\item
vollständige Überarbeitung des Mikrokernkonzepts: wesentliche Probleme
der 1. Generation (z.B. Mach) vermieden
\item
Bsp.: durchschnittliche Performanz von User-Mode IPC in L3 ggü. Mach:
Faktor 22 zugunsten L3
\begin{itemize*}
\item heute: verschiedene Weiterentwicklungen von L4 (bezeichnet heute Familie ähnlicher Mikrokerne)
\end{itemize*}
%\begin{longtable}[]{@{}lll@{}}
%\toprule
%First generation & Second Generation & Third generation\tabularnewline
%\midrule
%\endhead
%Eg Mach [87] & Eg L4 [95] & seL4 [09]\tabularnewline
%\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-l4-first-g.png} &
%\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-L4-second-g.png} &
%\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-l4-third-g.png}\tabularnewline
%180 syscalls & \textasciitilde7 syscalls & \textasciitilde3
%syscalls\tabularnewline
%100 kLOC & \textasciitilde10 kLOC & 9 kLOC\tabularnewline
%100 $\mu s$ IPC & \textasciitilde1 $\mu
%s$ IPC & $0,2-1 \mu s$ IPC\tabularnewline
%\bottomrule
%\end{longtable}
\end{itemize*} \end{itemize*}
\begin{tabular}{c|c|c}
First generation & Second Generation & Third generation \\\hline
Eg Mach & Eg L4 & seL4 \\
\includegraphics[width=.3\linewidth]{Assets/AdvancedOperatingSystems-l4-first-g.png} &
\includegraphics[width=.3\linewidth]{Assets/AdvancedOperatingSystems-L4-second-g.png} &
\includegraphics[width=.3\linewidth]{Assets/AdvancedOperatingSystems-l4-third-g.png} \\
180 syscalls & $\sim$ 7 syscalls & $\sim$ 3 syscalls \\
100 kLOC & $\sim$ 10 kLOC & 9 kLOC \\
100 $\mu s$ IPC & $\sim$ 1 $\mu s$ IPC & $0,2-1 \mu s$ IPC
\end{tabular}
\subsubsection{Mikrokernel - Designprinzipien}
\paragraph{Mikrokernel-Designprinzipien}
\begin{itemize*} \begin{itemize*}
\item \item
Was gehört in einen Mikrokern? Was gehört in einen Mikrokern?
@ -2262,13 +1931,13 @@
%\begin{longtable}[]{@{}lll@{}} %\begin{longtable}[]{@{}lll@{}}
%\toprule %\toprule
%& DAC & MAC\tabularnewline %& DAC & MAC\\
%\midrule %\midrule
%\endhead %\endhead
%IBAC & Unixoide,Linux, Windows & Linux AppArmor, Mac OS %IBAC & Unixoide,Linux, Windows & Linux AppArmor, Mac OS
%Seatbelt\tabularnewline %Seatbelt\\
%TE & - & SELinuxEnterprise Linux (RHEL), RedHat\tabularnewline %TE & - & SELinuxEnterprise Linux (RHEL), RedHat\\
%MLS & Windows UAC & SELinux, TrustedBSD\tabularnewline %MLS & Windows UAC & SELinux, TrustedBSD\\
%\bottomrule %\bottomrule
%\end{longtable} %\end{longtable}
@ -2328,13 +1997,13 @@
%\begin{longtable}[]{@{}lllll@{}} %\begin{longtable}[]{@{}lllll@{}}
%\toprule %\toprule
%acm & paper.pdf & aos-05.pptx & gutachten.tex & %acm & paper.pdf & aos-05.pptx & gutachten.tex &
%worse-engine\tabularnewline %worse-engine\\
%\midrule %\midrule
%\endhead %\endhead
%kühnhauser & rw & - & rw & rx\tabularnewline %kühnhauser & rw & - & rw & rx\\
%schlegel & rw & - & - & rx\tabularnewline %schlegel & rw & - & - & rx\\
%amthor & rw & rw & - & rx\tabularnewline %amthor & rw & rw & - & rx\\
%krause & r & - & - & -\tabularnewline %krause & r & - & - & -\\
%\bottomrule %\bottomrule
%\end{longtable} %\end{longtable}
@ -3342,7 +3011,7 @@
t_i$ t_i$
\item \item
Frist für Rendering in Multimedia-Tasks: festgelegt durch periodische Frist für Rendering in Multimedia-Tasks: festgelegt durch periodische
Bildrate (24\textasciitilde48 fps $\rightarrow$ 1/24 Bildrate (24~48 fps $\rightarrow$ 1/24
... 1/48 s) ... 1/48 s)
\item \item
$\rightarrow$ Berücksichtigung bei Scheduling, $\rightarrow$ Berücksichtigung bei Scheduling,
@ -4949,7 +4618,7 @@
\item \item
machbar: sehr effiziente Exokerne machbar: sehr effiziente Exokerne
\begin{itemize*} \begin{itemize*}
\item Grundlage: begrenzte Anzahl einfacher Systemaufrufe (Größenordnung \textasciitilde10) und Kernel-interne Primitiven (,,Pseudo-Maschinenanweisungen''), die enthalten sein müssen \item Grundlage: begrenzte Anzahl einfacher Systemaufrufe (Größenordnung ~10) und Kernel-interne Primitiven (,,Pseudo-Maschinenanweisungen''), die enthalten sein müssen
\end{itemize*} \end{itemize*}
\item \item
machbar: sicheres Hardware-Multiplexing auf niedriger machbar: sicheres Hardware-Multiplexing auf niedriger
@ -6635,19 +6304,19 @@
%\begin{longtable}[]{@{}llllll@{}} %\begin{longtable}[]{@{}llllll@{}}
%\toprule %\toprule
%& Makrokernel & Mikrokernel & Exokernel & Virtualisierung & %& Makrokernel & Mikrokernel & Exokernel & Virtualisierung &
%Multikernel\tabularnewline %Multikernel\\
%\midrule %\midrule
%\endhead %\endhead
%Energieeffizienz & & & (\cmark ) & \xmark & \xmark \tabularnewline %Energieeffizienz & & & (\cmark ) & \xmark & \xmark \\
%Speichereffizienz & \xmark & (\cmark ) & (\cmark ) & & \xmark \tabularnewline %Speichereffizienz & \xmark & (\cmark ) & (\cmark ) & & \xmark \\
%Robustheit & \xmark & \cmark & \xmark & \cmark &\tabularnewline %Robustheit & \xmark & \cmark & \xmark & \cmark &\\
%Verfügbarkeit & \xmark & (\cmark ) & & (\cmark ) & (\cmark )\tabularnewline %Verfügbarkeit & \xmark & (\cmark ) & & (\cmark ) & (\cmark )\\
%Korrektheit & \xmark & \cmark & \xmark & \xmark & (\cmark )\tabularnewline %Korrektheit & \xmark & \cmark & \xmark & \xmark & (\cmark )\\
%Sicherheit & \xmark & \cmark & \xmark & \cmark &\tabularnewline %Sicherheit & \xmark & \cmark & \xmark & \cmark &\\
%Echtzeitfähigkeit & (\cmark ) & (\cmark ) & \cmark & \xmark & \xmark \tabularnewline %Echtzeitfähigkeit & (\cmark ) & (\cmark ) & \cmark & \xmark & \xmark \\
%Adaptivität & \xmark & (\cmark ) & \cmark & \cmark & (\cmark )\tabularnewline %Adaptivität & \xmark & (\cmark ) & \cmark & \cmark & (\cmark )\\
%Wartbarkeit & \cmark & & \cmark & \cmark &\tabularnewline %Wartbarkeit & \cmark & & \cmark & \cmark &\\
%Performanz & (\cmark ) & \xmark & \cmark & \xmark & \cmark \tabularnewline %Performanz & (\cmark ) & \xmark & \cmark & \xmark & \cmark \\
%\bottomrule %\bottomrule
%\end{longtable} %\end{longtable}