\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{multicol}
\usepackage{calc}
\usepackage{ifthen}
\usepackage[landscape,left=1cm,top=1cm,right=1cm,nohead,nofoot]{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}

\pdfinfo{
    /Title (Betriebssysteme - Cheatsheet)
    /Creator (TeX)
    /Producer (pdfTeX 1.40.0)
    /Author (Robert Jeutter)
    /Subject ()
}
% Information boxes
\newcommand*{\info}[4][16.3]{
  \node [ annotation, #3, scale=0.65, text width = #1em, inner sep = 2mm ] at (#2) {
  \list{$\bullet$}{\topsep=0pt\itemsep=0pt\parsep=0pt
    \parskip=0pt\labelwidth=8pt\leftmargin=8pt
    \itemindent=0pt\labelsep=2pt}
    #4
  \endlist
  };
}

% 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=1cm,left=1cm,right=1cm,bottom=1cm} }
        {\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} }
    }

% 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

% Define BibTeX command
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}

% 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}

%My Environments
\newtheorem{example}[section]{Example}

% Turn off header and footer
\pagestyle{empty}
\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/4]{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,level1]{ node {Prozesserzeugung}}
      child[theme,level2]{ node {Prozess-terminierung}}
      child[theme,level3]{ node {Threads}}
    }
  child{ node [subtopic] {Scheduling}
      child[theme,level1]{ node {Scheduler-aktivierung}}
      child[theme,level2]{ node {Scheduling Strategien}}
    }
  child{ node [subtopic] {Privilegierungs-ebenen}}
  child{ node [subtopic] {Kommunikation \& Synchronisation}
      child[theme,level1]{ node {Elementare Konzepte}}
      child[theme,level2]{ node {wechselseitiger Ausschluss}}
      child[theme,level3]{ node {Mechanismen}}
    }
  child{ node [subtopic] {Speicher-management}
      child[theme,level1]{ node {Speicher-technologien}}
      child[theme,level2]{ node {Speicher-klassen}}
      child[theme,level3]{ node {Relokation}}
      child[theme,level4]{ node {Swapping}}
      child[theme,level5]{ node {Virtueller Speicher}}
      child[theme,level6]{ node {Segmentierung}}
    }
  child{ node [subtopic] {Dateisystem}
      child[theme,level1]{ node {Dateimodelle}}
      child[theme,level2]{ node {Dateisysteme}}
      child[theme,level3]{ node {Datenstrukturen \& Algorithmen}}
    };
\end{tikzpicture}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Prozessormanagement
\begin{tikzpicture}[
    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)}
      },
    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},
    level7/.style ={level distance=7cm},
    level8/.style ={level distance=8cm},
    level9/.style ={level distance=9cm},
    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, level1]{node{Prozess-identifikation}}
      child[theme, level2]{node{Scheduling}}
      child[theme, level3]{node{Ereignis-management}}
      child[theme, level4]{node{Rechte-management}}
      child[theme, level5]{node{Speicher-management}}
      child[theme, level6]{node{Prozessor-management}}
      child[theme, level7]{node{Kommunikations-management}}
      child[theme, level8]{node{Virtueller Adressraum}}
      child[theme, level9]{node{allg Ressourcen Management}}
    }
  child{ node [subtopic] {Prozesserzeugung}
      child[theme,level1]{ 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}

\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Scheduling
\begin{tikzpicture}[ mindmap, grow cyclic, every node/.style=concept, concept color=green!40,
    level 1/.append style={level distance=4cm},
    level 2/.append style={level distance=3cm, sibling angle=30},
    every node/.append style={scale=0.8}]
  \node{Scheduling}
  child { node {Aktivierung}
      child{node{Threadzustände im 3/5 Modell}
          child{node{bereit: kann aktiv werden}}
          child{node{aktiv: arbeitet}}
          child{node{blockiert: wartet auf Ereignis}}
          child{node{frisch: erzeugt, Rechte fehlen}}
          child{node{beendet: in Freigabephase}}
        }
      child{node{Entscheidung Überprüfen bei}
          child{node{Prozess/Thread Erzeugung/Terminierung}}
          child{node{Ereignis eintritt}}
          child{node{Wechsel von Prioritäten}}
          child{node{periodisch}}
        }
    }
  child{node{Ziele}
      child{node{abhängig von Einsatz des Betriebssystems}}
      child{node{ergänzt durch allg Ziele}}
      child{node{Einhaltung von Fristen}}
      child{node{Minimieren der Thread/Prozess-wechsel}}
    }
  child { node {Scheduling Strategien}
      child { node {Batch-System}
          child{node{Auslastung teurer Betriebsmittel (CPU)}}
          child{node{Minimierung der Scheduling Kosten (wenig Wechsel, kurze Laufzeiten)}}
          child{node{Maximierung des Durchsatzes (erledigte Arbeit/Zeit)}}
          child{node{First Come First Served}
              child{node{in Reihenfolge der rechenbereiten}}
              child{node{sehr einfach, guter durchsatz}}
              child{node{nicht immer klug}}
            }
          child{node{Shortest Remaining Time Next}
              child{node{Thread mit vorr. kürzester Restrechenzeit}}
              child{node{preemtiv; konkurrrierende Threads verdrängen}}
              child{node{Restlaufzeit muss vorliegen}}
            }
        }
      child { node {Interaktives System}
          child{node{Benutzer kann eingreifen}}
          child{node{Minimierung von Reaktionszeiten}}
          child{node{Fairness (mehrere Benutzer)}}
          child{node{Round Robin Varianten}
              child{node{jeder Thread gleicher Teil der Zeitscheibe}}
              child{node{einfach zu implementieren}}
              child{node{geringe Algorithmuskosten}}
              child{node{schnelle Entscheidungen}}
              child{node{geringes Wissen notwendig}}
            }
        }
    }
  child{node{Prioritäten}
      child{node{jeder Thread erhält indv. Priorität}}
      child{node{höchste Prioritäten erhalten Prozessor}}
      child{node{gleiche Priorität: Round Robin}}
    }
  child{node{in Echtzeitsystemen}
      child{node{EDF: earliest deadline first}
          child{node{dynamische Lasten; adaptiv}}
          child{node{Threads nennen Deadline/Frist}}
          child{node{kausale und zeitliche Unabhängigkeit}}
          child{node{Priorität setzt kürzere Fristen}}
        }
      child{node{RMS: rate-monotonic scheduling}
          child{node{periodische Lasten}}
          child{node{Threads nennen Periodendauer}}
          child{node{kürzeste Periodendauer aktiv}}
          child{node{statische Prioritäten}}
        }
    };
\end{tikzpicture}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Privilegierungsebenen
\begin{tikzpicture}[ mindmap, grow cyclic, every node/.style=concept, concept color=blue!40,
    level 1/.append style={level distance=4cm},
    level 2/.append style={level distance=3cm, sibling angle=30},
    every node/.append style={scale=0.8}]
  \node{Privilegierungsebenen}
  child{node{Konzepte}
      child{node{private Adressräume}}
      child{node{Zugriffsschutz auf Arbeitsspeicherbereiche}}
    }
  child{node{kritische Operationen}
      child{node{Abschalten der Uhr}}
      child{node{Abschalten des Ereignismanagement}}
      child{node{Veränderung des Speicherlayouts}}
      child{node{Veränderng kritischer Prozessorkontrollregister}}
      child{node{Zugriff auf E/A Geräte}}
    }
  child{node{P. Ebenen}
      child{node{steuern Rechte}
          child{node{zur Ausführung privilegierter Prozessorinstruktionen}}
          child{node{zur Konfiguration des Arbeitsspeicher-Layouts}}
          child{node{zum Zugriff auf Arbeitsspeicherbereiche}}
          child{node{zum Zugriff auf E/A-Geräte}}
        }
      child{node{realisiert in Ringen (0-3)}}
    }
  child{node{Implementierung}
      child{node{Hardware Unterstützung}}
      child{node{Teil "Current Privilege Level" (CPL)}}
      child{node{permantente Überwachung}}
      child{node{Änderung der CPL beschränken}}
    }
  child{node{Botschaften}
      child{node{P.E. < 3 ablaufende Aktivität hat Zugriff auf kritische Ressourcen}}
      child{node{P.E. 0 ablaufende Aktivität hat Zugriff auf}
          child{node{Ressourcen eines Prozessors}}
          child{node{MMU-Register zur Arbeitsspeicherkonfiguration}}
          child{node{Register der E/A-Peripherie}}
        }
    };
\end{tikzpicture}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Kommunikation und Synchronisation
\begin{tikzpicture}[ mindmap, grow cyclic, every node/.style=concept, concept color=yellow!40,
    level 1/.append style={level distance=4cm},
    level 2/.append style={level distance=3cm, sibling angle=30},
    every node/.append style={scale=0.8}]
  \node{Kommunikation und \\Synchronisation}
  child { node {Elementare Konzepte}
      child{node{Ziel}
          child{node{nur 1 Thread darf zu einem Zeitpunkt mit best. Speicherbereich arbeiten}}
          child{node{erst nach beendigung, darf ein anderer Thread damit arbeiten}}
        }
      child{node{Austausch von Daten zwischen Prozessen $\rightarrow$ Kommunikation}}
      child{node{Abweichende Geschwindigkeiten von Sender und Empfänger $\rightarrow$ Synchronisation}}
      child{node{Eine Phase, in der ein Thread eine exklusive Operation auf einer Ressource ausführt, heißt kritischer Abschnitt.}}
      child{node{Kritische Abschnitte erfordern den wechselseitigen Ausschluss (die Isolation) konkurrierender Threads bzw. Prozesse.}}
    }
  child { node {wechselseitiger Ausschluss}
      child{node{Korrektheit: in kritischen Abschnitt höchstens ein Thread}}
      child{node{Lebendigkeit: Falls ein Thread einen kritischen Abschnitt betreten möchte, dann betritt (irgendwann) ein Thread diesen Abschnitt.}}
      child{node{Verhungerungsfreiheit: Kein Thread wartet für immer vor einem kritischen Abschnitt}}
    }
  child { node {Mechanismen}
      child { node {(binäre) Semaphore}
          child{node{2 Zustände: frei, belegt}}
          child{node{2 atomare Operationen}
              child{node{belegen: P}}
              child{node{freigeben: V}}
            }
          child{node{Sämtliche Nutzer dieses kritischen Abschnitts müssen diese semaphore verwenden}}
          child{node{Unterstützung durch Hardware: die TSL-Operation (TestAndSetLock)}}
          child{node{Implementierung im Ressourcenmanagement}}
          child{node{Mehrwertiger Semaphor (oder Zählsemaphor) mit mehreren Semaphoren; maximaler Sem-Wert = n, bestimmt maximale Anzahl von Threads, die gleichzeitig aktiv sein können}}
        }
      child { node {Hoare'sche Monitore}
          child{node{Zusammenfassen von Daten/Operationen/Zugriff zu abstrakten Datentyp}}
          child{node{Zugriff auf Daten über implizit synchronisierende Operation}}
          child{node{kritischer Abschnitt und Daten in durch Monitor geschütztem Bereich}}
          child{node{wechselseitiger Ausschluss}
              child{node{Türsteher an Eingang \& Ausgang}}
              child{node{Betreten nur mit Monitor Zustimmung}}
              child{node{falls Thread in Monitor aktiv, kein weiterer rein (P)}}
              child{node{falls Thread Monitor verlässt, Wartenden rein (V)}}
              child{node{Threads Verlassen statt Warten im Monitor}}
            }
          child{node{je Monitor eine Semaphor}}
          child{node{am Eingang eine P-Operation}}
          child{node{am Ausgang eine V-Operation}}
        }
    }
  child { node {weitere}
      child { node {Trans-aktionaler Speicher}
          child{node{keine Sperre bei Ausschluss $\rightarrow$ Parallelität}}
          child{node{nach Operation untersuchen auf Fehler und Korrektur}}
          child{node{Kombination mit Transaktionen}}
        }
      child { node {Botschaften}
          child{node{für Kommunikation zwischen}}
          child{node{Prozessen innerhalb eines Systems}}
          child{node{Anwendungsprozessen}}
          child{node{Senden/Empfangen von Botschaften}}
          child{node{Kommunikationsparadigma}}
        }
      child { node {Fernaufrufe (Remote Procedure Calls)}}
      child { node {System-aufrufe}}
      child { node {Ereignis-management}}
      child { node {IPC Modell}}
      child { node {pop-up-Thread-Modell}}
    };
\end{tikzpicture}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Speichermanagement
\begin{tikzpicture}[ mindmap, grow cyclic, every node/.style=concept, concept color=orange!40,
    level 1/.append style={level distance=4cm},
    level 2/.append style={level distance=3cm, sibling angle=30},
    every node/.append style={scale=0.8}]
  \node{Virtueller Speicher}
  child { node {Virtuelles Speichermanagement}}
  child { node {Begriffe}}
  child { node {Abbildung}}
  child { node {Memory Management Units}}
  child { node {Seiten-abbildungs-tabellen}}
  child { node {Seitenaustausch-Algorithmen}
      child { node {FIFO}}
      child { node {Second Chance}}
      child { node {Least Recently Used}}
      child { node {Working Set}}
      child { node {WSClock}}
    }
  ;
\end{tikzpicture}



\end{document}