Robustheit gekürzt
This commit is contained in:
parent
1985c9d835
commit
ccb8f75128
BIN
Advanced Operating Systems - Cheatsheet.pdf
(Stored with Git LFS)
BIN
Advanced Operating Systems - Cheatsheet.pdf
(Stored with Git LFS)
Binary file not shown.
@ -823,10 +823,6 @@
|
||||
\item hochsicherheitskritische Systeme (Finanz, Cloud Dienste)
|
||||
\item hochverfügbare System (öffentliche Infrastruktur, Strom)
|
||||
%\item HPC (high performance computing)
|
||||
\end{itemize*}
|
||||
|
||||
Allgemeine Begriffe
|
||||
\begin{itemize*}
|
||||
\item \textbf{Verlässlichkeit} Fähigkeit, eine Leistung zu erbringen, der man berechtigterweise vertrauen kann
|
||||
\item Untereigenschaften
|
||||
\begin{enumerate*}
|
||||
@ -856,14 +852,12 @@
|
||||
\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 Maskierung, Redundanz, 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 Ausfallverhalten spezifizieren, zur Laufzeit erkennen und Folgen beheben%, abschwächen...
|
||||
\item[$\rightarrow$] Micro-Reboots
|
||||
\end{itemize*}
|
||||
\end{description*}
|
||||
@ -871,7 +865,7 @@
|
||||
\subsection{Fehlerhafter Zustand}
|
||||
%interner und externer Zustand (internal \& external state)
|
||||
\begin{description*}
|
||||
\item[externer Zustand] der Teil des Gesamtzustands, der an externer Schnittstelle sichtbar wird
|
||||
\item[externer Zustand] Teil des Gesamtzustands, an externer Schnittstelle sichtbar
|
||||
\item[interner Zustand] restlicher Teilzustand
|
||||
\item[erbrachte Leistung] zeitliche Folge externer Zustände
|
||||
\end{description*}
|
||||
@ -962,22 +956,18 @@
|
||||
\item[\cmark] nichtvertrauenswürdiger Code kann keine beliebigen physischen Adressen schreiben
|
||||
\item[\cmark] Kommunikation zwischen nvw. Code muss durch IPC-Mechanismen explizit hergestellt werden $\rightarrow$ Überwachung und Validierung zur Laufzeit möglich
|
||||
\item[\cmark] Kontrollfluss begrenzen: Funktionsaufrufe können i.A. keine AR-Grenzen überschreiten
|
||||
\begin{itemize*}
|
||||
\item[$\rightarrow$] BS-Zugriffssteuerung kann nicht durch Taskfehler ausgehebelt werden
|
||||
\item[$\rightarrow$] unabsichtliche Terminierungsfehler(unendliche Rekursion) erschwert ...
|
||||
\end{itemize*}
|
||||
%\begin{itemize*}
|
||||
%\item[$\rightarrow$] BS-Zugriffssteuerung kann nicht durch Taskfehler ausgehebelt werden
|
||||
%\item[$\rightarrow$] unabsichtliche Terminierungsfehlererschwert ...%(unendliche Rekursion)
|
||||
%\end{itemize*}
|
||||
\item keine Isolation zwischen Fehlern innerhalb des Kernels
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Mikrokernelarchitektur}
|
||||
Fortschritt ggü. Makrokernel
|
||||
\begin{itemize*}
|
||||
\item Strukturierungskonzept
|
||||
\begin{itemize*}
|
||||
\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 Strukturierung eingeführt
|
||||
\item zur Laufzeit durchgesetzt $\rightarrow$ Reaktion auf fehlerhafte Zustände möglich
|
||||
\item zusätzlich zu vertikaler Strukturierung: horizontal
|
||||
\begin{itemize*}
|
||||
\item[$\rightarrow$] funktionale Einheiten: vertikal (Schichten)
|
||||
\item[$\rightarrow$] isolierte Einheiten: horizontal (private vAR)
|
||||
@ -990,9 +980,8 @@
|
||||
|
||||
\subsubsection{Modularer Makrokernel vs. Mikrokernel}
|
||||
\begin{itemize*}
|
||||
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-modularer-makrokernel.png}
|
||||
\item minimale Kernelfunktionalität
|
||||
\item keine Dienste, nur allgemeine Schnittstellenfür diese
|
||||
\item keine Dienste, nur allgemeine Schnittstellen für diese
|
||||
\item keine Strategien, nur grundlegende Mechanismen zur Ressourcenverwaltung
|
||||
\item neues Problem: minimales Mikrokerneldesign
|
||||
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-modularer-makrokernel-2.png}
|
||||
@ -1000,20 +989,18 @@
|
||||
|
||||
\paragraph{Robustheit von Mikrokernen}
|
||||
\begin{itemize*}
|
||||
\item = Gewinn durch Adressraumisolation innerhalb des Kernels
|
||||
\item[=] Gewinn durch Adressraumisolation innerhalb des Kernels
|
||||
\item[\cmark] kein nichtvertrauenswürdiger Code im Kernelspace, der dort beliebige physische Adressen manipulieren kann
|
||||
\item[\cmark] Kommunikation zwischen nvw. Code (nicht zur zwischen Anwendungstasks)muss durch IPC explizit hergestellt werden $\rightarrow$ Überwachung und Validierung zur Laufzeit
|
||||
\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 muss durch IPC explizit hergestellt werden $\rightarrow$ Überwachung und Validierung zur Laufzeit
|
||||
\item[\cmark] Kontrollfluss begrenzen: Zugriffssteuerung auch zwischen Serverprozessen, zur Laufzeit unabhängiges Teilmanagement von Code möglich %(z.B.: Nichtterminierung erkennen)
|
||||
\item Neu:
|
||||
\item[\cmark] nvw. BS-Code muss nicht mehr im Kernelspace laufen
|
||||
\item[\cmark] verbleibender Kernel: klein, funktional weniger komplex, leichter zu entwickeln, zu testen, evtl. formal zu verifizieren
|
||||
\item[\cmark] daneben: Adaptivität durch konsequentere Modularisierung des Kernels gesteigert
|
||||
\item[\cmark] Kernel: klein, funktional weniger komplex, leichter zu entwickeln, zu testen, evtl. formal zu verifizieren
|
||||
\item[\cmark] Adaptivität durch konsequentere Modularisierung des Kernels
|
||||
\end{itemize*}
|
||||
|
||||
\subsubsection{Mikrokernel: Mach}
|
||||
\begin{itemize*}
|
||||
\item 1975: Aleph (BS des ,,Rochester Intelligent Gateway'')
|
||||
\item 1979/81: Accent (verteiltes BS), CMU
|
||||
\item Mach 3.0 (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
|
||||
@ -1035,40 +1022,24 @@
|
||||
\begin{enumerate*}
|
||||
\item Prozesse, Threads, Speicherobjekte
|
||||
\item Ports (generisches, ortstransparentes Adressierungskonzept)
|
||||
\item Botschaften, ... (sekundäre, von den obigen genutzte Abstraktionen)
|
||||
\item Botschaften, ... (sekundäre, von obigen genutzte Abstraktionen)
|
||||
\end{enumerate*}
|
||||
|
||||
Architektur
|
||||
\begin{itemize*}
|
||||
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-mach-architektur.png}
|
||||
\item Systemaufrufkosten:
|
||||
\begin{itemize*}
|
||||
\item IPC-Benchmark (1995): i486 Prozessor, 50 MHz
|
||||
\item Messung mit verschiedenen Botschaftenlängen( x - Werte)
|
||||
\item ohne Nutzdaten (0 Byte Botschaftenlänge): 115 $\mu$s (Tendenz unfreundlich ...)
|
||||
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-mach-systemaufruf.png}
|
||||
\end{itemize*}
|
||||
\item Bewertung aus heutiger Sicht:
|
||||
Architektur: Bewertung aus heutiger Sicht
|
||||
\begin{itemize*}
|
||||
\item funktional komplex
|
||||
\item 153 Systemaufrufe
|
||||
\item mehrere Schnittstellen, parallele Implementierungen für eine Funktion
|
||||
\item[$\rightarrow$] Adaptivität (Auswahl durch Programmierer)
|
||||
\end{itemize*}
|
||||
\item Fazit:
|
||||
\begin{itemize*}
|
||||
\item zukunftsweisender Ansatz
|
||||
\item langsame und ineffiziente Implementierung
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
Lessons Learned
|
||||
\begin{itemize*}
|
||||
\item Umsetzung: Designkriterien weitgehend unbekannt
|
||||
\item Folgen für Performanz und Programmierkomfort: [Heis19]
|
||||
\item Folgen für Performanz und Programmierkomfort
|
||||
\item[\xmark] ,,complex'', ,,inflexible'', ,,slow''
|
||||
\item wissen etwas über Kosten: IPC-Performanz, Kernelabstraktionen
|
||||
\item wissen nichts über guten $\mu$Kern-Funktionsumfang und gute Schnittstellen
|
||||
\item wissen nichts über guten $\mu$Kern-Funktionsumfang und Schnittstellen
|
||||
\end{itemize*}
|
||||
|
||||
\subsubsection{L4}
|
||||
@ -1097,7 +1068,6 @@
|
||||
|
||||
\subsubsection{Mikrokernel - Designprinzipien}
|
||||
\begin{itemize*}
|
||||
\item Was gehört in einen Mikrokern?
|
||||
\item Konzeptsicht $\rightarrow$ Funktionalität
|
||||
\item Implementierungssicht $\rightarrow$ Performanz
|
||||
\item[$\rightarrow$] 1. Generation: durch Performanzentscheidungen aufgeweicht
|
||||
@ -1106,11 +1076,10 @@
|
||||
|
||||
Designprinzipien für Mikrokernel-Konzept
|
||||
\begin{enumerate*}
|
||||
\item System interaktive und nicht vollständig vertrauenswürdige Applikationen unterstützen ( $\rightarrow$ HW-Schutz,-Multiplexing),
|
||||
\item System interaktive und nicht vollständig vertrauenswürdige Applikationen unterstützen ($\rightarrow$ HW-Schutz,-Multiplexing)
|
||||
\item Hardware mit virtueller Speicherverwaltung und Paging
|
||||
\end{enumerate*}
|
||||
|
||||
Designprinzipien
|
||||
\begin{description*}
|
||||
\item[Autonomie] Subsystem muss so implementiert werden, dass es von keinem anderen Subsystem gestört oder korrumpiert werden kann
|
||||
\item[Integrität] Subsystem $S_1$ muss sich auf Garantien von $S_2$ verlassen können. D.h. beide Subsysteme müssen miteinander kommunizieren können, ohne dass ein drittes Subsystem diese Kommunikation stören, fälschen oder abhören kann.
|
||||
@ -1118,9 +1087,9 @@
|
||||
|
||||
L4: Speicherabstraktion
|
||||
\begin{itemize*}
|
||||
\item Adressraum: Abbildung, die jede virtuelle Seite auf einen physischen Seitenrahmen abbildet oder als ,,nicht zugreifbar'' markiert
|
||||
\item Implementierung über Seitentabellen, unterstützt durch MMU-Hardware
|
||||
\item Aufgabe des Mikrokernels (Schicht aller Subsysteme): muss Hardware-Konzept des Adressraums verbergen und durch eigenes Adressraum-Konzept überlagern
|
||||
\item Adressraum: Abbildung, die jede virtuelle Seite auf einen physischen Seitenrahmen abbildet oder ,,nicht zugreifbar'' markiert
|
||||
\item Implementierung über Seitentabellen, unterstützt durch MMU
|
||||
\item Aufgabe des Mikrokernels: muss Hardware-Konzept des Adressraums verbergen und durch eigenes Adressraum-Konzept überlagern
|
||||
\item Mikrokernel-Konzept des Adressraums:
|
||||
\begin{itemize*}
|
||||
\item muss Implementierung von beliebigen virtuellen Speicherverwaltungs-und -schutzkonzepten oberhalb des Mikrokernels (d.h. in den Subsystemen) erlauben
|
||||
@ -1186,7 +1155,7 @@
|
||||
\begin{itemize*}
|
||||
\item müssen vertrauenswürdig vergeben und verwaltet werden
|
||||
\item[$\rightarrow$] essenziell für (sinnvolles) Multitasking und -threading
|
||||
\item[$\rightarrow$] essenziell für vertrauenswürdige Kernel-/Server-Schnittstellen
|
||||
\item[$\rightarrow$] essenziell für vertrauensw. Kernel-/Server-Schnittstellen
|
||||
\end{itemize*}
|
||||
\item Designentscheidung
|
||||
\begin{itemize*}
|
||||
@ -1214,16 +1183,16 @@
|
||||
\item Konsequenzen für Mikrokernel-Implementierung
|
||||
\begin{itemize*}
|
||||
\item müssen für jeden Prozessortyp neu implementiert werden
|
||||
\item deshalb prinzipiell nicht portierbar $\rightarrow$ L3-/L4-Prototypen: 99\% Assemblercode
|
||||
\item deshalb prinzipiell nicht portierbar %$\rightarrow$ L3-/L4-Prototypen: 99\% Assemblercode
|
||||
\end{itemize*}
|
||||
\item innerhalb eines Mikrokernels sind von Prozessorhardware abhängig
|
||||
\item innerhalb eines Mikrokernels von Prozessorhardware abhängig
|
||||
\begin{enumerate*}
|
||||
\item grundlegende Implementierungsentscheidungen
|
||||
\item meiste Algorithmen u. Datenstrukturen
|
||||
\end{enumerate*}
|
||||
\item Fazit: Mikrokernel mit akzeptabler Performanz hardwarespezifische Implementierung minimal erforderlicher vom Prozessortyp unabhängiger Abstraktionen
|
||||
%\item Mikrokernel mit akzeptabler Performanz hardwarespezifische Implementierung minimal erforderlicher vom Prozessortyp unabhängiger Abstraktionen
|
||||
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-l4-ipc-performance.png}
|
||||
\item L4 heute: Spezifikation Mikrokernels (nicht Implementierung)
|
||||
%\item L4 heute: Spezifikation Mikrokernels (nicht Implementierung)
|
||||
\end{enumerate*}
|
||||
|
||||
%Einige Weiterentwicklungen:
|
||||
@ -1261,12 +1230,8 @@
|
||||
\item[$\rightarrow$] BS-Code in Serverprozessen: verbleibendes Risiko unabhängiger Teilausfälle von BS-Funktionalität
|
||||
\item Ergänzung zu Isolationsmechanismen notwendig
|
||||
\item Mechanismen zur Behandlung von Subsystem-Ausfällen
|
||||
\item[=] Mechanismen zur Behandlung Anwendungs-, Server- und Gerätetreiberfehlen
|
||||
%\item[=] Mechanismen zur Behandlung Anwendungs-, Server- und Gerätetreiberfehlen
|
||||
\item[$\rightarrow$] Micro-Reboots
|
||||
\end{itemize*}
|
||||
|
||||
Ansatz
|
||||
\begin{itemize*}
|
||||
\item kleinen (als fehlerfrei angenommenen) $\mu$Kernel
|
||||
\item BS-Funktionalität in bedingt vertrauenswürdigen Serverprozessen %(kontrollierbare, aber wesentlich größere Codebasis)
|
||||
\item Treiber/Anwendungen in nicht vertrauenswürdigen Prozessen %(nicht kontrollierbare Codebasis)
|
||||
@ -1295,18 +1260,18 @@
|
||||
\begin{itemize*}
|
||||
\item Ziel: robustes Betriebssystems
|
||||
\item[$\rightarrow$] Schutz gegen Sichtbarwerden von Fehlern(= Ausfälle) für Nutzer
|
||||
\item Fokus auf Anwendungsdomänen: Einzelplatzrechner und eingebettete Systeme
|
||||
\item Fokus auf Anwendungsdomänen: Einzelplatzrechner, Embedded
|
||||
\item Anliegen: Robustheit \textgreater{} Verständlichkeit \textgreater{} geringer HW-Bedarf
|
||||
\end{itemize*}
|
||||
|
||||
Architektur
|
||||
\begin{itemize*}
|
||||
\item \includegraphics[width=.8\linewidth]{Assets/AdvancedOperatingSystems-minix-architektur.png}
|
||||
\item \includegraphics[width=.7\linewidth]{Assets/AdvancedOperatingSystems-minix-architektur.png}
|
||||
\item Anwendungen (weiß): Systemaufrufe im POSIX-Standard
|
||||
\item Serverprozesse (grau): IPC (botschaftenbasiert), mit Kernel: spezielle MINIX-API (kernel calls), für Anwendungsprozesse gesperrt
|
||||
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-minix-architektur-bs.png}
|
||||
\item Betriebssystem-Serverprozesse: Dateisystem (FS), Prozessmanagement (PM), Netzwerkmanagement (Net)
|
||||
\item Reincarnation Server (RS) $\rightarrow$ Micro-Reboots jeglicher Serverprozesse
|
||||
\item Reincarnation Server (RS) $\rightarrow$ Micro-Reboots der Serverprozesse
|
||||
\item Kernelprozesse: systemtask, clocktask
|
||||
\end{itemize*}
|
||||
|
||||
@ -1326,7 +1291,7 @@
|
||||
\begin{itemize*}
|
||||
\item komplementäre NFE zu Robustheit: Verfügbarkeit ( availability )
|
||||
\item Verbesserung von Robustheit $\rightarrow$ Verbesserung von Verfügbarkeit
|
||||
\item Robustheitsmaßnahmen hinreichend , nicht notwendig %(hochverfügbare Systeme können sehr wohl von Ausfällen betroffen sein...)
|
||||
\item Robustheitsmaßnahmen hinreichend, nicht notwendig %(hochverfügbare Systeme können sehr wohl von Ausfällen betroffen sein...)
|
||||
\item weitere komplementäre NFE: Robustheit $\rightarrow$ Sicherheit (security)
|
||||
\item Definition: Grad, zu welchem ein System oder eine Komponente funktionsfähig und zugänglich (erreichbar) ist, wann immer seine Nutzung erforderlich ist (IEEE)
|
||||
\item Anteil an Laufzeit eines Systems, in dem dieses seine spezifizierte Leistung erbringt
|
||||
@ -1354,10 +1319,10 @@
|
||||
\item primäres Einsatzfeld: eingebettete Systeme, z.B. Automobilbau
|
||||
\item Mikrokernarchitektur mit Adressraumisolation für Gerätetreiber
|
||||
\item (begrenzt) dynamische Micro-Rebootsmöglich
|
||||
\item $\rightarrow$ Maximierung der Uptime des Gesamtsystems
|
||||
\item[$\rightarrow$] Maximierung der Uptime des Gesamtsystems
|
||||
\end{itemize*}
|
||||
\begin{description*}
|
||||
\item[High-Avalability-Manager] Laufzeit-Monitor der Systemdienste/Anwendungsprozesse überwacht und neustartet $\rightarrow$ $\mu$Reboot-Server
|
||||
\item[High-Avalability-Manager] Laufzeit-Monitor der Systemdienste/ Anwendungsprozesse überwacht und neustartet $\rightarrow$ $\mu$Reboot-Server
|
||||
\item[High-Availability-Client-Libraries] Funktionen zur transparenten automatischen Reboot für ausgefallene Server-Verbindungen
|
||||
\end{description*}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user