770 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			770 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \documentclass[a4paper]{article}
 | ||
| \usepackage[ngerman]{babel}
 | ||
| \usepackage[utf8]{inputenc}
 | ||
| \usepackage{multicol}
 | ||
| \usepackage{calc}
 | ||
| \usepackage{ifthen}
 | ||
| \usepackage[landscape]{geometry}
 | ||
| \usepackage{amsmath,amsthm,amsfonts,amssymb}
 | ||
| \usepackage{color,graphicx,overpic}
 | ||
| \usepackage{listings}
 | ||
| \usepackage[compact]{titlesec} %less space for headers
 | ||
| \usepackage{mdwlist} %less space for lists
 | ||
| \usepackage[utf8]{inputenc}
 | ||
| \usepackage{tikz}
 | ||
| \usepackage{pdflscape}
 | ||
| \usepackage{verbatim}
 | ||
| \usetikzlibrary{mindmap, arrows,shapes,positioning,shadows,trees}
 | ||
| \tikzstyle{every node}=[draw=black,thin,anchor=west, minimum height=2em]
 | ||
| \usepackage[hidelinks,pdfencoding=auto]{hyperref}
 | ||
| \usepackage{fancyhdr}
 | ||
| \usepackage{lastpage}
 | ||
| \pagestyle{fancy}
 | ||
| \fancyhf{}
 | ||
| \fancyhead[L]{Betriebssysteme}
 | ||
| \fancyfoot[L]{\thepage/\pageref{LastPage}}
 | ||
| \renewcommand{\headrulewidth}{0pt} %obere Trennlinie
 | ||
| \renewcommand{\footrulewidth}{0pt} %untere Trennlinie
 | ||
| 
 | ||
| \pdfinfo{
 | ||
|     /Title (Betriebssysteme - Cheatsheet)
 | ||
|     /Creator (TeX)
 | ||
|     /Producer (pdfTeX 1.40.0)
 | ||
|     /Author (Robert Jeutter)
 | ||
|     /Subject ()
 | ||
| }
 | ||
| 
 | ||
| % This sets page margins to .5 inch if using letter paper, and to 1cm
 | ||
| % if using A4 paper. (This probably isn't strictly necessary.)
 | ||
| % If using another size paper, use default 1cm margins.
 | ||
| \ifthenelse{\lengthtest { \paperwidth = 11in}}
 | ||
|     { \geometry{top=.5in,left=.5in,right=.5in,bottom=.5in} }
 | ||
|     {\ifthenelse{ \lengthtest{ \paperwidth = 297mm}}
 | ||
|     {\geometry{top=1.3cm,left=1cm,right=1cm,bottom=1.2cm} }
 | ||
|     {\geometry{top=1.3cm,left=1cm,right=1cm,bottom=1.2cm} }
 | ||
|     }
 | ||
| 
 | ||
| % Redefine section commands to use less space
 | ||
| \makeatletter
 | ||
| \renewcommand{\section}{\@startsection{section}{1}{0mm}%
 | ||
|                                 {-1ex plus -.5ex minus -.2ex}%
 | ||
|                                 {0.5ex plus .2ex}%x
 | ||
|                                 {\normalfont\large\bfseries}}
 | ||
| \renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}%
 | ||
|                                 {-1explus -.5ex minus -.2ex}%
 | ||
|                                 {0.5ex plus .2ex}%
 | ||
|                                 {\normalfont\normalsize\bfseries}}
 | ||
| \renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}%
 | ||
|                                 {-1ex plus -.5ex minus -.2ex}%
 | ||
|                                 {1ex plus .2ex}%
 | ||
|                                 {\normalfont\small\bfseries}}
 | ||
| \makeatother
 | ||
| 
 | ||
| % Don't print section numbers
 | ||
| \setcounter{secnumdepth}{0}
 | ||
| 
 | ||
| \setlength{\parindent}{0pt}
 | ||
| \setlength{\parskip}{0pt plus 0.5ex}    
 | ||
| % compress space
 | ||
| \setlength\abovedisplayskip{0pt}
 | ||
| \setlength{\parskip}{0pt}
 | ||
| \setlength{\parsep}{0pt}
 | ||
| \setlength{\topskip}{0pt}
 | ||
| \setlength{\topsep}{0pt}
 | ||
| \setlength{\partopsep}{0pt}
 | ||
| \linespread{0.5}
 | ||
| \titlespacing{\section}{0pt}{*0}{*0}
 | ||
| \titlespacing{\subsection}{0pt}{*0}{*0}
 | ||
| \titlespacing{\subsubsection}{0pt}{*0}{*0}
 | ||
| 
 | ||
| %Tikz global setting
 | ||
| \tikzset{
 | ||
|     topic/.style={
 | ||
|                 text centered,
 | ||
|                 text width=5cm,
 | ||
|                 level distance=1mm,
 | ||
|                 sibling distance=5mm,
 | ||
|                 rounded corners=2pt
 | ||
|             },
 | ||
|         subtopic/.style={
 | ||
|                 yshift=1.5cm,
 | ||
|                 text centered,
 | ||
|                 text width=3cm,
 | ||
|                 rounded corners=2pt,
 | ||
|                 fill=gray!10
 | ||
|             },
 | ||
|         theme/.style={
 | ||
|                 grow=down,
 | ||
|                 xshift=-0.6cm,
 | ||
|                 text centered,
 | ||
|                 text width=3cm,
 | ||
|                 edge from parent path={(\tikzparentnode.205) |- (\tikzchildnode.west)}
 | ||
|             },
 | ||
|         description/.style={
 | ||
|                 grow=down,
 | ||
|                 xshift=-0.5cm,
 | ||
|                 right,
 | ||
|                 text centered,
 | ||
|                 edge from parent path={(\tikzparentnode.200) |- (\tikzchildnode.west)}
 | ||
|             },
 | ||
|         level 1/.style={sibling distance=5.5cm},
 | ||
|         level 1/.append style={level distance=2.5cm},
 | ||
| }
 | ||
| 
 | ||
| \begin{document}
 | ||
| 
 | ||
| \raggedright
 | ||
| \begin{multicols}{3}\scriptsize
 | ||
|   % multicol parameters
 | ||
|   % These lengths are set only within the two main columns
 | ||
|   %\setlength{\columnseprule}{0.25pt}
 | ||
|   \setlength{\premulticols}{1pt}
 | ||
|   \setlength{\postmulticols}{1pt}
 | ||
|   \setlength{\multicolsep}{1pt}
 | ||
|   \setlength{\columnsep}{2pt}
 | ||
| 
 | ||
|   \centering{
 | ||
|     \includegraphics[width=\textwidth/4]{Assets/Betriebssysteme_Uebersicht.png}
 | ||
|   }
 | ||
| 
 | ||
|   \paragraph{Prozesse}
 | ||
|   \begin{itemize*}
 | ||
|     \item BS-Abstraktionen zur Ausführung von Programmen
 | ||
|     \item Eigentümer von Ressourcen
 | ||
|     \item differenzierte Prozessmodelle: definieren konkrete Prozesseigenschaften
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Prozessmanagement}
 | ||
|   \begin{itemize*}
 | ||
|     \item Komponente eines Betriebssystems, die Prozessmodell dieses Betriebssystems implementiert
 | ||
|     \item Aufgaben: Prozesserzeugung u. -beendigung (u. Scheduling)
 | ||
|     \item Datenstrukturen: Prozessdeskriptor, -deskriptortabelle
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Prozessdeskriptor}
 | ||
|   Buchführung über sämtliche zum Management eines Prozesses notwendigen Informationen
 | ||
|   \begin{itemize*}
 | ||
|     \item Prozessidentifikation
 | ||
|     \item Rechtemanagement
 | ||
|     \item Speichermanagement
 | ||
|     \item Prozessormanagement
 | ||
|     \item Kommunikationsmanagement
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Prozessdeskriptortabelle}
 | ||
|   enthält: Prozessdeskriptoren aller momentan existierenden Prozesse
 | ||
| 
 | ||
|   \paragraph{Threads}
 | ||
|   BS-Abstraktionen für sequentielle, nebenläufige Aktivitäten; sind Gegenstand des Schedulings
 | ||
| 
 | ||
|   \paragraph{Multithread-Prozessmodell}
 | ||
|   vollständige Beschreibung einer ablaufenden Aktivität. Dazu gehören insbesondere
 | ||
|   \begin{enumerate*}
 | ||
|     \item das ablaufende Programm
 | ||
|     \item zugeordnete Betriebsmittel (Prozessor/Speicher/Kommunikation)
 | ||
|     \item Rechte
 | ||
|     \item prozessinterne parallele Aktivitäten (Threads) und deren Bearbeitungszustände
 | ||
|   \end{enumerate*}
 | ||
| 
 | ||
|   \paragraph{Threaddeskriptor}
 | ||
|   ein TCB enthält lediglich:
 | ||
|   \begin{enumerate*}
 | ||
|     \item Threadzustand (aktiv, bereit, blockiert, ...)
 | ||
|     \item Ablaufkontext, falls nicht aktiv (Programmzähler, Stackpointer, Prozessorregister)
 | ||
|   \end{enumerate*}
 | ||
|   enthält nicht: Beschreibung der Ressourcen (Speicherlayout, Rechte)
 | ||
| 
 | ||
|   \paragraph{Thread-Typen}
 | ||
|   \begin{itemize*}
 | ||
|     \item Kernel Level Threads (KLTs): Kenntnis über Threads: hat Betriebssystem, genauer: der Betriebssystem-Kern(el)
 | ||
|     \item User Level Threads (ULTs): Kenntnis über Threads: existiert nur auf Benutzer-Ebene (user level)
 | ||
|     \item der Betriebssystem-Kern(el) weiß nicht, dass Threads existieren
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Scheduling}
 | ||
|   Entscheidung: Welche Threads erhalten wann und wie lange einen Prozessor/Prozessorkern zugeteilt?
 | ||
| 
 | ||
|   \paragraph{Zustandsmodelle}
 | ||
|   Threads können verschiedene Zustände annehmen\\
 | ||
|   Beispiel 3/5-Zustandsmodell)
 | ||
|   \centering{
 | ||
|     \includegraphics[width=\textwidth/4]{Assets/Betriebssysteme_Zustandsmodell.png}
 | ||
|   }
 | ||
| 
 | ||
|   \paragraph{Scheduling: Notwendigkeit u. Sinn}
 | ||
|   \begin{itemize*}
 | ||
|     \item allg: Anzahl Aktivitäten $>>$ Anzahl Prozessoren
 | ||
|     \item nicht alle können gleichzeitig arbeiten
 | ||
|     \item eine Auswahl muss getroffen werden
 | ||
|     \item Auswahlstrategie: Schedulingstrategie, -Algorithmus
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Scheduling-Strategien}
 | ||
|   \begin{itemize*}
 | ||
|     \item abhängig vom Einsatzfeld eines Betriebssystems
 | ||
|     \begin{itemize*}
 | ||
|       \item Echtzeitsysteme: Einhaltung von Fristen
 | ||
|       \item interaktive Systeme: Reaktivität
 | ||
|     \end{itemize*}
 | ||
|     \item wichtige Strategien:
 | ||
|     \begin{itemize*}
 | ||
|       \item FCFS (First Come, First Served)
 | ||
|       \item SRTN (Shortest Remaining Time Next)
 | ||
|       \item Round Robin (ohne und mit Prioritäten)
 | ||
|       \item EDF (earliest deadline first)
 | ||
|       \item ratenmonotones Scheduling
 | ||
|     \end{itemize*}
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Privilegierungsebenen}
 | ||
|   \begin{itemize*}
 | ||
|     \item sind typischerweise 'kernel mode' und 'user mode'
 | ||
|     \item steuern Rechte
 | ||
|     \begin{itemize*}
 | ||
|       \item zur Ausführung privilegierter Prozessorinstruktionen
 | ||
|       \item zur Konfiguration des Arbeitsspeicherlayouts
 | ||
|       \item zum Zugriff auf Arbeitsspeicherbereiche
 | ||
|       \item zum Zugriff auf E/A-Geräte
 | ||
|     \end{itemize*}
 | ||
|     \item Durchsetzung von Regeln: "Nur ein im 'kernel mode' ablaufender Prozess hat Zugriff auf ..."
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Kommunikation und Synchronisation}
 | ||
|   \begin{itemize*}
 | ||
|     \item Austausch von Daten zwischen Prozessen = Kommunikation (Inter-Prozess-Kommunikation, IPC)
 | ||
|     \item Abweichende Geschwindigkeiten von Sender und Empfänger: behandelt durch Synchronisation
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{kritischer Abschnitt}
 | ||
|   \begin{itemize*}
 | ||
|     \item in kritischen Abschnitt darf stets nur ein Thread sein
 | ||
|     \item notwendig: wechselseitiger (gegenseitiger) Ausschluss
 | ||
|     \item realisiert durch Entry- und Exit-Code z.B. die Semaphor-Operationen belegen (P) und freigeben (V)
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Mechanismen zur Synchronisation}
 | ||
|   \begin{itemize*}
 | ||
|     \item binäre Semaphore und mehrwertige Semaphore
 | ||
|     \item (Hoar‘sche) Monitore
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Mechanismen zur Kommunikation}
 | ||
|   \begin{itemize*}
 | ||
|     \item Shared Memory (gemeinsamer Speicher)
 | ||
|     \item Botschaften
 | ||
|     \item Fernaufrufe
 | ||
|     \item Systemaufrufe
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Notwendigkeit des Ereignismanagement}
 | ||
|   \begin{itemize*}
 | ||
|     \item in BS laufen sehr viele Aktivitäten parallel ab
 | ||
|     \item dabei entstehen immer wieder Situationen, in denen auf unterschiedlichste Ereignisse reagiert werden muss, z.B.
 | ||
|     \begin{itemize*}
 | ||
|       \item Timerablauf
 | ||
|       \item Benutzereingaben (Maus, Tastatur)
 | ||
|       \item Eintreffen von Daten von Netzwerken, Festplatten, ...
 | ||
|       \item Einlegen/-stecken von Datenträgern
 | ||
|       \item Aufruf von Systemdiensten
 | ||
|       \item Fehlersituationen
 | ||
|     \end{itemize*}
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Umgangsformen mit Ereignissen}
 | ||
|   \begin{itemize*}
 | ||
|     \item 'busy waiting'
 | ||
|     \item 'periodic testing'
 | ||
|     \item Unterbrechungen ('Interrupts')
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Programmiermodelle für Interrupts}
 | ||
|   \begin{itemize*}
 | ||
|     \item Prozeduren ($\rightarrow$ inline Prozeduraufrufmodell)
 | ||
|     \item IPC-Operationen ($\rightarrow$ IPC-Modell)
 | ||
|     \item Threads ($\rightarrow$ pop-up Thread Modell)
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Interrupts auf Anwendungsebene}
 | ||
|   \begin{itemize*}
 | ||
|     \item notwendig: Event Service Routines (ESRs)
 | ||
|     \item Beispiel: UNIX/Linux-Signalbehandlung
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Virtuelle Prozessadressräume und physischer Adressraum, Abbildungen}
 | ||
|   \centering{
 | ||
|     \includegraphics[width=\textwidth/4]{Assets/Betriebssysteme_Adressräume.png}
 | ||
|   }
 | ||
| 
 | ||
|   \paragraph{Seitenabbildungstabellen}
 | ||
|   \centering{
 | ||
|     \includegraphics[width=\textwidth/4]{Assets/Betriebssysteme_Seitenabbildungstabellen.png}
 | ||
|   }
 | ||
| 
 | ||
|   \paragraph{Seitentabelleneinträge}
 | ||
|   \centering{
 | ||
|     \includegraphics[width=\textwidth/4]{Assets/Betriebssysteme_Seitentabelleneinträge.png}
 | ||
|   }
 | ||
|   \begin{itemize*}
 | ||
|     \item anwesend: liegt Seite im Arbeitsspeicher? ('present'-Bit)
 | ||
|     \item benutzt: wurde auf die Seite zugegriffen? ('used'-Bit)
 | ||
|     \item verändert: ist Seite 'schmutzig'? ('dirty/modified'-Bit)
 | ||
|     \item Schutz: erlaubte Zugriffsart je Privilegierungsebene ('access control list')
 | ||
|     \item Caching: darf Inhalt der Seite gecached werden?
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Seitenaustauschalgorithmen}
 | ||
|   \begin{itemize*}
 | ||
|     \item Optimal: Auslagern der Arbeitsspeicherseite, deren
 | ||
|     \begin{itemize*}
 | ||
|       \item nächster Gebrauch am weitesten in der Zukunft liegt
 | ||
|       \item Auslagerung nichts kostet
 | ||
|     \end{itemize*}
 | ||
|     \item einige Algorithmen, die sich diesem Optimum annähern:
 | ||
|     \begin{itemize*}
 | ||
|       \item First-In, First-Out (FIFO)
 | ||
|       \item Second-Chance
 | ||
|       \item Least Recently Used (LRU)
 | ||
|       \item Working Set / WSClock
 | ||
|     \end{itemize*}
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{i-Node}
 | ||
|   Metainformationen über genau eine Datei
 | ||
|   \centering{
 | ||
|     \includegraphics[width=\textwidth/6]{Assets/Betriebssysteme_i-Node.png}
 | ||
|   }
 | ||
| 
 | ||
|   \paragraph{Verzeichnis}
 | ||
|   = Menge von Paaren (Name, i-Node-Index)
 | ||
| 
 | ||
|   \paragraph{Superblock} = Einstiegspunkt eines Dateisystems. Enthält Schlüsselparameter:
 | ||
|   \begin{itemize*}
 | ||
|     \item Name des Dateisystems
 | ||
|     \item Typ (NTFS, Ext * , HFS, ...) → Layout der Metadaten
 | ||
|     \item Größe und Anzahl Sektoren
 | ||
|     \item Ort und Größe der i-Node-Tabelle
 | ||
|     \item Ort und Größe der Freiliste
 | ||
|     \item i-Node-Nummer des Wurzelverzeichnisses
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Hardware-Prinzipien}
 | ||
|   \begin{itemize*}
 | ||
|     \item Controller-Register
 | ||
|     \begin{itemize*}
 | ||
|       \item in E/A-Adressräumen
 | ||
|       \item im Arbeitsspeicher (Memory Mapped E/A)
 | ||
|       \item Isolation, Robustheit, Sicherheit
 | ||
|     \end{itemize*}
 | ||
|     \item Interruptsystem: asynchrone Benachrichtigungen
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Software-Prinzipien}
 | ||
|   Gerätemanager (Treiber)
 | ||
|   \begin{itemize*}
 | ||
|     \item Auftragsmanagement
 | ||
|     \item ISRs
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Betriebssystem-Architekturen}
 | ||
|   \centering{
 | ||
|     \includegraphics[width=\textwidth/4]{Assets/Betriebssysteme_Architekturen.png}
 | ||
|   }
 | ||
| 
 | ||
|   \paragraph{SELinux-Ansatz} neue Betriebssystem-Abstraktion
 | ||
|   \begin{itemize*}
 | ||
|     \item absolute Kontrolle über kritische Funktionen des Betriebssystems
 | ||
|     \item spezifiziert durch Regelmenge
 | ||
|     \item implementiert durch die SELinux-Sicherheitsarchitektur
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Robustheit} Tolerierung unvorhergesehener Fehler und Ausfälle
 | ||
|   \begin{itemize*}
 | ||
|     \item Mikrokernarchitekturen (Robuster als Makrokern)
 | ||
|     \item Fehlerisolation
 | ||
|     \item Möglichkeiten zur Fehlerbehebung (z.B. Micro-Reboot)
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Funktionale Eigenschaften}
 | ||
|   \begin{itemize*}
 | ||
|     \item Authentisierung, Verschlüsselung
 | ||
|     \item Informations-management
 | ||
|     \item Kommunikations-management
 | ||
|     \item Ressourcen-management
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Nichtfunktionale Eigenschaften}
 | ||
|   \begin{itemize*}
 | ||
|     \item     Sicherheit
 | ||
|     \item Korrektheit
 | ||
|     \item Echtzeitfähigkeit
 | ||
|     \item Skalierbarkeit
 | ||
|     \item Offenheit
 | ||
|     \item Sparsamkeit
 | ||
|     \item Verfügbarkeit
 | ||
|     \item Robustheit
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
|   \paragraph{Betriebssysteme}
 | ||
|   \begin{itemize*}
 | ||
|     \item     Mainframe
 | ||
|     \begin{itemize*}
 | ||
|       \item performante E/A
 | ||
|       \item Massen-daten-verarbeitung
 | ||
|     \end{itemize*}
 | ||
|     \item Server (Web Server, Fileshare)
 | ||
|     \item Parallelrechner
 | ||
|     \begin{itemize*}
 | ||
|       \item parallele Algorithmen, hoher Rechenbedarf
 | ||
|       \item schnelle IPC
 | ||
|     \end{itemize*}
 | ||
|     \item Desktop/Laptop
 | ||
|     \item Echtzeit
 | ||
|     \item Eingebettete
 | ||
|   \end{itemize*}
 | ||
| 
 | ||
| 
 | ||
| \end{multicols}
 | ||
| 
 | ||
| 
 | ||
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Überblick
 | ||
| \begin{tikzpicture}[
 | ||
|     topic/.style={
 | ||
|         minimum height=8mm,
 | ||
|         text depth = 0pt,
 | ||
|         text centered,
 | ||
|         text width=5cm,
 | ||
|         level distance=1mm,
 | ||
|         sibling distance=5mm,
 | ||
|         rounded corners=2pt},
 | ||
|     subtopic/.style={
 | ||
|         yshift=1.5cm,
 | ||
|         text centered,
 | ||
|         text width=3cm,
 | ||
|         rounded corners=2pt,
 | ||
|         fill=gray!10},
 | ||
|     theme/.style={
 | ||
|         grow=down,
 | ||
|         xshift=-0.6cm,
 | ||
|         text centered,
 | ||
|         text width=3cm,
 | ||
|         edge from parent path={(\tikzparentnode.205) |- (\tikzchildnode.west)}},
 | ||
|     level1/.style ={level distance=1cm},
 | ||
|     level2/.style ={level distance=2cm},
 | ||
|     level3/.style ={level distance=3cm},
 | ||
|     level4/.style ={level distance=4cm},
 | ||
|     level5/.style ={level distance=5cm},
 | ||
|     level6/.style ={level distance=6cm},
 | ||
|     level 1/.style={sibling distance=4cm},
 | ||
|     level 1/.append style={level distance=3cm},
 | ||
|   ]
 | ||
|   % Topic
 | ||
|   \node[topic]{Betriebssysteme}
 | ||
|   % Subtopic and Themes
 | ||
|   child{ node [subtopic] {Prozessor-management}
 | ||
|       child[theme,level distance=1cm]{ node {Prozesserzeugung}}
 | ||
|       child[theme,level distance=2cm]{ node {Prozess-terminierung}}
 | ||
|       child[theme,level distance=3cm]{ node {Threads}}
 | ||
|     }
 | ||
|   child{ node [subtopic] {Scheduling}
 | ||
|       child[theme,level distance=1cm]{ node {Scheduler-aktivierung}}
 | ||
|       child[theme,level distance=2cm]{ node {Scheduling Strategien}}
 | ||
|     }
 | ||
|   child{ node [subtopic] {Privilegierungs-ebenen}}
 | ||
|   child{ node [subtopic] {Kommunikation \& Synchronisation}
 | ||
|       child[theme,level distance=1cm]{ node {Elementare Konzepte}}
 | ||
|       child[theme,level distance=2cm]{ node {wechselseitiger Ausschluss}}
 | ||
|       child[theme,level distance=3cm]{ node {Mechanismen}}
 | ||
|     }
 | ||
|   child{ node [subtopic] {Speicher-management}
 | ||
|       child[theme,level distance=1cm]{ node {Speicher-technologien}}
 | ||
|       child[theme,level distance=2cm]{ node {Speicher-klassen}}
 | ||
|       child[theme,level distance=3cm]{ node {Relokation}}
 | ||
|       child[theme,level distance=4cm]{ node {Swapping}}
 | ||
|       child[theme,level distance=5cm]{ node {Virtueller Speicher}}
 | ||
|       child[theme,level distance=6cm]{ node {Segmentierung}}
 | ||
|     }
 | ||
|   child{ node [subtopic] {Dateisystem}
 | ||
|       child[theme,level distance=1cm]{ node {Dateimodelle}}
 | ||
|       child[theme,level distance=2cm]{ node {Dateisysteme}}
 | ||
|       child[theme,level distance=3cm]{ node {Datenstrukturen \& Algorithmen}}
 | ||
|     };
 | ||
| \end{tikzpicture}
 | ||
| 
 | ||
| 
 | ||
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Prozessormanagement
 | ||
| \begin{tikzpicture}[
 | ||
|     level 1/.style={sibling distance=5.5cm},
 | ||
|     level 1/.append style={level distance=2.5cm},
 | ||
|   ]
 | ||
|   % Topic
 | ||
|   \node[topic]{Prozessormanagement}
 | ||
|   % Subtopic and Themes
 | ||
|   child{ node [subtopic] {Aufgaben}
 | ||
|       child[theme,level distance=1cm]{node{Prozess-identifikation}}
 | ||
|       child[theme,level distance=2cm]{node{Scheduling}}
 | ||
|       child[theme,level distance=3cm]{node{Ereignis-management}}
 | ||
|       child[theme,level distance=4cm]{node{Rechte-management}}
 | ||
|       child[theme,level distance=5cm]{node{Speicher-management}}
 | ||
|       child[theme,level distance=6cm]{node{Prozessor-management}}
 | ||
|       child[theme,level distance=7cm]{node{Kommunikations-management}}
 | ||
|       child[theme,level distance=8cm]{node{Virtueller Adressraum}}
 | ||
|       child[theme,level distance=9cm]{node{allg Ressourcen Management}}
 | ||
|     }
 | ||
|   child{ node [subtopic] {Prozesserzeugung}
 | ||
|       child[theme,level distance=1cm]{ node {Vorraussetzungen}
 | ||
|           child[description,level distance=1cm]{ node {Rechte}}
 | ||
|           child[description,level distance=2cm]{ node {Ressourcen Verfügbar}}
 | ||
|           child[description,level distance=3cm]{ node {Sicherheit}}
 | ||
|           child[description,level distance=4cm]{ node{Fariness}}
 | ||
|           child[description,level distance=5cm]{node{Robustheit / Überlastvermeidung}}
 | ||
|         }
 | ||
|       child [theme,level distance=7cm]{ node {Namens-vergabe}
 | ||
|           child[description,level distance=1cm]{node{eindeutig bzgl allen existierenden}}
 | ||
|           child[description,level distance=2cm]{node{nicht eindeutig bzgl allen}}
 | ||
|         }
 | ||
|       child [theme,level distance=10cm]{ node {Stammbaumpflege}
 | ||
|           child[description,level distance=1cm]{node{erzeugt Kinder}}
 | ||
|           child[description,level distance=2cm]{node{baumartige Hierarchie}}
 | ||
|           child[description,level distance=3cm]{node{Verwaiste Prozesse $->$ Adoption}}
 | ||
|         }
 | ||
|       child [theme,level distance=14cm]{ node {Allokation (von Ressourcen)}
 | ||
|           child[description,level distance=1cm]{node{Arbeits-speicher Größe}}
 | ||
|           child[description,level distance=2cm]{node{Zeitpunkt}}
 | ||
|           child[description,level distance=3cm]{node{Prozessorzeit}}
 | ||
|           child[description,level distance=4cm]{node{Format}}
 | ||
|         }
 | ||
|     }
 | ||
|   child{ node [subtopic] {Prozessterminierung}
 | ||
|       child[theme,level distance=1cm]{node{durch}
 | ||
|           child[description,level distance=1cm]{node{Aufgabe erledigt}}
 | ||
|           child[description,level distance=2cm]{node{Fehler aufgetreten}}
 | ||
|           child[description,level distance=3cm]{node{durch Nutzer geschlossen}}
 | ||
|         }
 | ||
|       child[theme,level distance=5cm]{node{Folgen}
 | ||
|           child[description,level distance=1cm]{node{Freigabe der Ressourcen}}
 | ||
|           child[description,level distance=2cm]{node{Benachrichtigung der 'Parents'}}
 | ||
|           child[description,level distance=3cm]{node{Adoption der 'Children'}}
 | ||
|         }
 | ||
|     }
 | ||
|   child{ node [subtopic] {Threads}
 | ||
|       child[theme,level distance=1cm]{node{sequenziell innerhalb eines Prozesses}}
 | ||
|       child[theme,level distance=3cm]{node{Kernel Level Thread}
 | ||
|           child[description,level distance=1cm]{node{Implementiert im Betriebssystem}}
 | ||
|           child[description,level distance=2cm]{node{Betriebssystem hat Kenntnis über Thread}}
 | ||
|           child[description,level distance=3cm]{node{Multi-Thread-modell}}
 | ||
|           child[description,level distance=4cm]{node{Performance durch Parallelität}}
 | ||
|           child[description,level distance=5cm]{node{Nutzung von Mehrkern-architektur}}
 | ||
|         }
 | ||
|       child[theme,level distance=10cm]{node{User Level Thread}
 | ||
|           child[description,level distance=1cm]{node{Implementiert auf Anwendungsebene}}
 | ||
|           child[description,level distance=2cm]{node{Kenntnis nur bei Endbenutzer}}
 | ||
|           child[description,level distance=3cm]{node{Single-Thread-Modell}}
 | ||
|           child[description,level distance=4cm]{node{Performance durch geringen Overhead}}
 | ||
|           child[description,level distance=5cm]{node{management ohne systemaufrufe}}
 | ||
|           child[description,level distance=6cm]{node{Individualität}}
 | ||
|           child[description,level distance=7cm]{node{Portabilität}}
 | ||
|         }
 | ||
|     };
 | ||
| \end{tikzpicture}
 | ||
| 
 | ||
| 
 | ||
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Scheduling
 | ||
| \begin{tikzpicture}[
 | ||
|     level 1/.style={sibling distance=4.6cm},
 | ||
|     level 1/.append style={level distance=3cm},
 | ||
|   ]
 | ||
|   % Topic
 | ||
|   \node[topic]{Scheduling}
 | ||
|   % Subtopic and Themes
 | ||
|   child{ node [subtopic] {Aktivierung}
 | ||
|       child[theme,level distance=1cm]{node{Threadzustände im 3/5 Modell}
 | ||
|           child[description,level distance=1cm]{node{bereit: kann aktiv werden}}
 | ||
|           child[description,level distance=2cm]{node{aktiv: arbeitet}}
 | ||
|           child[description,level distance=3cm]{node{blockiert: wartet auf Ereignis}}
 | ||
|           child[description,level distance=4cm]{node{frisch: erzeugt, Rechte fehlen}}
 | ||
|           child[description,level distance=5cm]{node{beendet: in Freigabephase}}
 | ||
|         }
 | ||
|       child[theme,level distance=7cm]{node{Entscheidung Überprüfen bei}
 | ||
|           child[description,level distance=1.5cm]{node{Prozess/Thread Erzeugung/Terminierung}}
 | ||
|           child[description,level distance=3cm]{node{Ereignis eintritt}}
 | ||
|           child[description,level distance=4cm]{node{Wechsel von Prioritäten}}
 | ||
|           child[description,level distance=5cm]{node{periodisch}}
 | ||
|         }
 | ||
|     }
 | ||
|   child{node[subtopic]{Ziele}
 | ||
|       child[theme,level distance=1cm]{node{abhängig von Einsatz des Betriebssystems}}
 | ||
|       child[theme,level distance=2.5cm]{node{ergänzt durch allg Ziele}}
 | ||
|       child[theme,level distance=3.5cm]{node{Einhaltung von Fristen}}
 | ||
|       child[theme,level distance=5cm]{node{Minimieren der Thread/Prozess-wechsel}}
 | ||
|     }
 | ||
|   child { node [subtopic]{Batch-System}
 | ||
|       child[theme,level distance=1cm]{node{Auslastung teurer Betriebsmittel (CPU)}}
 | ||
|       child[theme,level distance=3cm]{node{Minimierung der Scheduling Kosten (wenig Wechsel, kurze Laufzeiten)}}
 | ||
|       child[theme,level distance=5cm]{node{Maximierung des Durchsatzes (erledigte Arbeit/Zeit)}}
 | ||
|       child[theme,level distance=6.5cm]{node{First Come First Served}
 | ||
|           child[description,level distance=1cm]{node{in Reihenfolge der rechenbereiten}}
 | ||
|           child[description,level distance=2cm]{node{sehr einfach, guter durchsatz}}
 | ||
|           child[description,level distance=3cm]{node{nicht immer klug}}
 | ||
|         }
 | ||
|       child[theme,level distance=10cm]{node{Shortest Remaining Time Next}
 | ||
|           child[description,level distance=1cm]{node{Thread mit vorr. kürzester Restrechenzeit}}
 | ||
|           child[description,level distance=2.5cm]{node{preemtiv; konkurrrierende Threads verdrängen}}
 | ||
|           child[description,level distance=4cm]{node{Restlaufzeit muss vorliegen}}
 | ||
|         }
 | ||
|     }
 | ||
|   child { node [subtopic]{Interaktives System}
 | ||
|       child[theme,level distance=1cm]{node{Benutzer kann eingreifen}}
 | ||
|       child[theme,level distance=2cm]{node{Minimierung von Reaktionszeiten}}
 | ||
|       child[theme,level distance=3cm]{node{Fairness (mehrere Benutzer)}}
 | ||
|       child[theme,level distance=4cm]{node{Round Robin Varianten}
 | ||
|           child[description,level distance=1cm]{node{jeder Thread gleicher Teil der Zeitscheibe}}
 | ||
|           child[description,level distance=2.5cm]{node{einfach zu implementieren}}
 | ||
|           child[description,level distance=3.5cm]{node{geringe Algorithmuskosten}}
 | ||
|           child[description,level distance=4.5cm]{node{schnelle Entscheidungen}}
 | ||
|           child[description,level distance=5.5cm]{node{geringes Wissen notwendig}}
 | ||
|         }
 | ||
|     }
 | ||
|   child{node[subtopic]{Prioritäten}
 | ||
|       child[theme,level distance=1cm]{node{jeder Thread erhält indv. Priorität}}
 | ||
|       child[theme,level distance=2.5cm]{node{höchste Prioritäten erhalten Prozessor}}
 | ||
|       child[theme,level distance=4cm]{node{gleiche Priorität: Round Robin}}
 | ||
|     }
 | ||
|   child{node[subtopic]{in Echtzeitsystemen}
 | ||
|       child[theme,level distance=1cm]{node{EDF: earliest deadline first}
 | ||
|           child[description,level distance=1cm]{node{dynamische Lasten; adaptiv}}
 | ||
|           child[description,level distance=2cm]{node{Threads nennen Deadline/Frist}}
 | ||
|           child[description,level distance=3cm]{node{kausale und zeitliche Unabhängigkeit}}
 | ||
|           child[description,level distance=4cm]{node{Priorität setzt kürzere Fristen}}
 | ||
|         }
 | ||
|       child[theme,level distance=7cm]{node{RMS: rate-monotonic scheduling}
 | ||
|           child[description,level distance=1cm]{node{periodische Lasten}}
 | ||
|           child[description,level distance=2cm]{node{Threads nennen Periodendauer}}
 | ||
|           child[description,level distance=3cm]{node{kürzeste Periodendauer aktiv}}
 | ||
|           child[description,level distance=4cm]{node{statische Prioritäten}}
 | ||
|         }
 | ||
|     };
 | ||
| \end{tikzpicture}
 | ||
| 
 | ||
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Privilegierungsebenen
 | ||
| \begin{tikzpicture}[
 | ||
|     level 1/.style={sibling distance=5cm},
 | ||
|     level 1/.append style={level distance=3cm},
 | ||
|   ]
 | ||
|   % Topic
 | ||
|   \node[topic]{Privilegierungsebenen}
 | ||
|   % Subtopic and Themes    
 | ||
|   child{node[subtopic]{Konzepte}
 | ||
|       child[theme,level distance=1cm]{node{private Adressräume}}
 | ||
|       child[theme,level distance=3cm]{node{Zugriffsschutz auf Arbeitsspeicherbereiche}}
 | ||
|     }
 | ||
|   child{node[subtopic]{kritische Operationen}
 | ||
|       child[theme,level distance=1cm]{node{Abschalten der Uhr}}
 | ||
|       child[theme,level distance=2cm]{node{Abschalten des Ereignismanagement}}
 | ||
|       child[theme,level distance=3cm]{node{Veränderung des Speicherlayouts}}
 | ||
|       child[theme,level distance=4.3cm]{node{Veränderng kritischer Prozessorkontrollregister}}
 | ||
|       child[theme,level distance=5.5cm]{node{Zugriff auf E/A Geräte}}
 | ||
|     }
 | ||
|   child{node[subtopic]{P. Ebenen}
 | ||
|       child[theme,level distance=1cm]{node{steuern Rechte}
 | ||
|           child[description,level distance=1cm]{node{zur Ausführung privilegierter Prozessorinstruktionen}}
 | ||
|           child[description,level distance=2.5cm]{node{zur Konfiguration des Arbeitsspeicher-Layouts}}
 | ||
|           child[description,level distance=3.8cm]{node{zum Zugriff auf Arbeitsspeicherbereiche}}
 | ||
|           child[description,level distance=5cm]{node{zum Zugriff auf E/A-Geräte}}
 | ||
|         }
 | ||
|       child[theme,level distance=7cm]{node{realisiert in Ringen (0-3)}}
 | ||
|     }
 | ||
|   child{node[subtopic]{Implementierung}
 | ||
|       child[theme,level distance=1cm]{node{Hardware Unterstützung}}
 | ||
|       child[theme,level distance=3cm]{node{Teil "Current Privilege Level" (CPL)}}
 | ||
|       child[theme,level distance=5cm]{node{permantente Überwachung}}
 | ||
|       child[theme,level distance=7cm]{node{Änderung der CPL beschränken}}
 | ||
|     }
 | ||
|   child{node[subtopic]{Botschaften}
 | ||
|       child[theme,level distance=1.3cm]{node{P.E. $< 3$ ablaufende Aktivität hat Zugriff auf kritische Ressourcen}}
 | ||
|       child[theme,level distance=3cm]{node{P.E. 0 ablaufende Aktivität hat Zugriff auf}
 | ||
|           child[description,level distance=1cm]{node{Ressourcen eines Prozessors}}
 | ||
|           child[description,level distance=2.5cm]{node{MMU-Register zur Arbeitsspeicherkonfiguration}}
 | ||
|           child[description,level distance=4cm]{node{Register der E/A-Peripherie}}
 | ||
|         }
 | ||
|     };
 | ||
| \end{tikzpicture}
 | ||
| 
 | ||
| 
 | ||
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Kommunikation und Synchronisation
 | ||
| \begin{tikzpicture}[
 | ||
|     level 1/.style={sibling distance=5cm},
 | ||
|     level 1/.append style={level distance=3cm},
 | ||
|   ]
 | ||
|   % Topic
 | ||
|   \node[topic]{Kommunikation und Synchronisation}
 | ||
|   % Subtopic and Themes          
 | ||
|   child { node [subtopic]{Elementare Konzepte}
 | ||
|       child[theme,level distance=1.5cm]{node{nur 1 Thread pro Speicherbereich arbeiten}}
 | ||
|       child[theme,level distance=3cm]{node{Austausch von Daten zwischen Prozessen $\rightarrow$ Kommunikation}}
 | ||
|       child[theme,level distance=5cm]{node{Abweichende Geschwindigkeiten von Sender und Empfänger $\rightarrow$ Synchronisation}}
 | ||
|       child[theme,level distance=7.5cm]{node{Eine Phase, in der ein Thread eine exklusive Operation auf einer Ressource ausführt, heißt kritischer Abschnitt.}}
 | ||
|       child[theme,level distance=10cm]{node{Kritische Abschnitte erfordern den wechselseitigen Ausschluss (die Isolation) konkurrierender Threads bzw. Prozesse.}}
 | ||
|     }
 | ||
|   child { node [subtopic]{wechselseitiger Ausschluss}
 | ||
|       child[theme,level distance=1.5cm]{node{Korrektheit: in kritischen Abschnitt höchstens ein Thread}}
 | ||
|       child[theme,level distance=4cm]{node{Lebendigkeit: Falls ein Thread einen kritischen Abschnitt betreten möchte, dann betritt (irgendwann) ein Thread diesen Abschnitt.}}
 | ||
|       child[theme,level distance=7.5cm]{node{Verhungerungs-freiheit: Kein Thread wartet für immer vor einem kritischen Abschnitt}}
 | ||
|     }
 | ||
|   child { node[subtopic] {(binäre) Semaphore}
 | ||
|       child[theme,level distance=1cm]{node{2 Zustände: frei, belegt}}
 | ||
|       child[theme,level distance=2cm]{node{2 atomare Operationen P/V}}
 | ||
|       child[theme,level distance=3.5cm]{node{Sämtliche Nutzer dieses kritischen Abschnitts müssen diese semaphore verwenden}}
 | ||
|       child[theme,level distance=5cm]{node{Unterstützung durch Hardware: die TSL-Operation (TestAndSetLock)}}
 | ||
|       child[theme,level distance=6.5cm]{node{Implementierung im Ressourcenmanagement}}
 | ||
|       child[theme,level distance=9cm]{node{Mehrwertiger Semaphor: bestimmt maximale Anzahl von Threads, die gleichzeitig aktiv sein können}}
 | ||
|     }
 | ||
|   child { node [subtopic]{Hoare'sche Monitore}
 | ||
|       child[theme,level distance=1.5cm]{node{Zusammenfassen von Daten/Operationen/Zugriff zu abstrakten Datentyp}}
 | ||
|       child[theme,level distance=3.5cm]{node{Zugriff auf Daten über implizit synchronisierende Operation}}
 | ||
|       child[theme,level distance=5.3cm]{node{kritischer Abschnitt und Daten in durch Monitor geschütztem Bereich}}
 | ||
|       child[theme,level distance=6.8cm]{node{wechselseitiger Ausschluss}}
 | ||
|       child[theme,level distance=8cm]{node{je Monitor eine Semaphor}}
 | ||
|       child[theme,level distance=9cm]{node{am Eingang eine P-Operation}}
 | ||
|       child[theme,level distance=10cm]{node{am Ausgang eine V-Operation}}
 | ||
|     }
 | ||
|   child { node[subtopic] {weitere Mechanismen}
 | ||
|       child [theme,level distance=1cm]{ node {Trans-aktionaler Speicher}
 | ||
|           child[description,level distance=1cm]{node{keine Sperre bei Ausschluss $\rightarrow$ Parallelität}}
 | ||
|           child[description,level distance=2.5cm]{node{nach Operation untersuchen auf Fehler und Korrektur}}
 | ||
|           child[description,level distance=4cm]{node{Kombination mit Transaktionen}}
 | ||
|         }
 | ||
|       child [theme,level distance=6cm]{ node {Botschaften}
 | ||
|           child[description,level distance=1cm]{node{Komm. zw. Prozessen innerhalb eines Systems}}
 | ||
|           child[description,level distance=2cm]{node{Senden/Empfangen von Botschaften}}
 | ||
|           child[description,level distance=3cm]{node{Kommunikationsparadigma}}
 | ||
|         }
 | ||
|       child [theme,level distance=10cm]{ node {Fernaufrufe (Remote Procedure Calls)}}
 | ||
|       child [theme,level distance=11cm]{ node {System-aufrufe}}
 | ||
|       child [theme,level distance=12cm]{ node {Ereignis-management}}
 | ||
|       child [theme,level distance=13cm]{ node {IPC Modell}}
 | ||
|       child [theme,level distance=14cm]{ node {pop-up-Thread-Modell}}
 | ||
|     };
 | ||
| \end{tikzpicture}
 | ||
| 
 | ||
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Speichermanagement
 | ||
| \begin{tikzpicture}[
 | ||
|   level 1/.style={sibling distance=5cm},
 | ||
|   level 1/.append style={level distance=3cm},
 | ||
| ]
 | ||
| % Topic
 | ||
| \node[topic]{Virtueller Speicher}
 | ||
| % Subtopic and Themes          
 | ||
| child { node [subtopic]{Virtuelles Speichermanagement}}
 | ||
| child { node [subtopic]{Abbildung}}
 | ||
| child { node [subtopic]{Memory Management Units}}
 | ||
| child { node [subtopic]{Seiten-abbildungs-tabellen}}
 | ||
| child { node [subtopic]{Seiten-austausch-Algorithmen}
 | ||
|     child [theme,level distance=1cm]{ node {FIFO}}
 | ||
|     child [theme,level distance=2cm]{ node {Second Chance}}
 | ||
|     child [theme,level distance=3cm]{ node {Least Recently Used}}
 | ||
|     child [theme,level distance=4cm]{ node {Working Set}}
 | ||
|     child [theme,level distance=5cm]{ node {WSClock}}
 | ||
|   };
 | ||
| \end{tikzpicture}
 | ||
| 
 | ||
| \end{document} |