diff --git a/20181129/I2C_data_transfer.pdf b/20181129/I2C_data_transfer.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0d5b8a241c624391cbf6f3a30f26320559358e1d Binary files /dev/null and b/20181129/I2C_data_transfer.pdf differ diff --git a/20181129/Retribution_Engine_Screenshot_120807.jpg b/20181129/Retribution_Engine_Screenshot_120807.jpg new file mode 120000 index 0000000000000000000000000000000000000000..19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7 --- /dev/null +++ b/20181129/Retribution_Engine_Screenshot_120807.jpg @@ -0,0 +1 @@ +../common/Retribution_Engine_Screenshot_120807.jpg \ No newline at end of file diff --git a/20181129/SPI_single_slave.pdf b/20181129/SPI_single_slave.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6f724dad4a8ed23b262b0b1c672bf85b72405155 Binary files /dev/null and b/20181129/SPI_single_slave.pdf differ diff --git a/20181129/SPI_three_slaves.pdf b/20181129/SPI_three_slaves.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b67dc94c790a62935c7b353449e2ce8c75a7d9fe Binary files /dev/null and b/20181129/SPI_three_slaves.pdf differ diff --git a/20181129/SPI_three_slaves_daisy_chained.pdf b/20181129/SPI_three_slaves_daisy_chained.pdf new file mode 100644 index 0000000000000000000000000000000000000000..46ac2027cfcbd598a609e43ce74e19e75d374ead Binary files /dev/null and b/20181129/SPI_three_slaves_daisy_chained.pdf differ diff --git a/20181129/Telefon_t-sinus-700.jpg b/20181129/Telefon_t-sinus-700.jpg new file mode 120000 index 0000000000000000000000000000000000000000..27c322c50b0f05edc8b07cfb0cc99b1876eb506d --- /dev/null +++ b/20181129/Telefon_t-sinus-700.jpg @@ -0,0 +1 @@ +../common/Telefon_t-sinus-700.jpg \ No newline at end of file diff --git a/20181129/Zeichen_123.pdf b/20181129/Zeichen_123.pdf new file mode 120000 index 0000000000000000000000000000000000000000..fdbc897227df059cfda790a16555e6e417682116 --- /dev/null +++ b/20181129/Zeichen_123.pdf @@ -0,0 +1 @@ +../common/Zeichen_123.pdf \ No newline at end of file diff --git a/20181129/a380.jpg b/20181129/a380.jpg new file mode 120000 index 0000000000000000000000000000000000000000..33a5d1fd18843bf7385e5a6d90f69af9fd8720da --- /dev/null +++ b/20181129/a380.jpg @@ -0,0 +1 @@ +../common/a380.jpg \ No newline at end of file diff --git a/20181129/curiosity.jpg b/20181129/curiosity.jpg new file mode 120000 index 0000000000000000000000000000000000000000..4452844da537414b751c5283ca8468b3ced9afb3 --- /dev/null +++ b/20181129/curiosity.jpg @@ -0,0 +1 @@ +../common/curiosity.jpg \ No newline at end of file diff --git a/20181129/dsc_8208.jpg b/20181129/dsc_8208.jpg new file mode 120000 index 0000000000000000000000000000000000000000..5796341ebc774aa09965a3a29854c65ce1144fb8 --- /dev/null +++ b/20181129/dsc_8208.jpg @@ -0,0 +1 @@ +../common/dsc_8208.jpg \ No newline at end of file diff --git a/20181129/es-20181129.pdf b/20181129/es-20181129.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b334aa28de6024a62409125e538013e0ca26edfd Binary files /dev/null and b/20181129/es-20181129.pdf differ diff --git a/20181129/es-20181129.tex b/20181129/es-20181129.tex new file mode 100644 index 0000000000000000000000000000000000000000..889c88afc705da67bc6647c8f4f81a7098588534 --- /dev/null +++ b/20181129/es-20181129.tex @@ -0,0 +1,2194 @@ +% es-20181129.pdf - Lecture Slides on Embedded Systems +% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018 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/>. + +% README: Bus-Systeme; Echtzeit + +\documentclass[10pt,t]{beamer} + +\usepackage{pgslides} +\usepackage{rotating} +\usepackage{tikz} +\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx} + +\newrgbcolor{lightyellow}{0.95 0.85 0.0} +\newrgbcolor{lightorange}{1.0 0.7 0.0} +\newrgbcolor{lightgreen}{0.0 0.8 0.0} + +\newcommand{\underconstruction}{% + \begin{picture}(0,0) + \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} + \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} + \end{picture}} + +\title{Eingebettete Systeme} +\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} +\date{29.\ November 2018} + +\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} + +\begin{document} + +\newlength{\normalpdfpageheight} +\setlength{\normalpdfpageheight}{\pdfpageheight} + +\maketitleframe + +\nosectionnonumber{\inserttitle} + +\begin{frame} + + \shownosectionnonumber + + \begin{itemize} + \item[\textbf{1}] \textbf{Einführung} + \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}} + \item[\textbf{2}] \textbf{Einführung in Unix} + \item[\textbf{3}] \textbf{TCP/IP in der Praxis} + \begin{itemize} + \color{medgreen} + \vspace*{-\smallskipamount} + \item[\dots] + \color{medgreen} + \item[3.6] SSH + \item[3.7] X11 + \item[3.8] GNU screen + \item[3.9] Programmierung + \end{itemize} + \item[\textbf{4}] \textbf{Bus-Systeme} + \begin{itemize} + \color{medgreen} + \item[5.1] Was sind Bus-Systeme? + \item[5.2] RS-232 + \item[5.3] \ItwoC\ (TWI) + \item[5.4] SPI + \color{red} + \item[5.5] PWM + \item[5.6] Sonstiges + \end{itemize} + \item[\textbf{6}] \textbf{Echtzeit} + \vspace*{-\smallskipamount} + \item[\textbf{\dots}] + \end{itemize} + + \vspace*{-1cm plus 1filll} + + \underconstruction + +\end{frame} + +\setcounter{section}{2} +\section{TCP/IP in der Praxis} +\setcounter{subsection}{5} +\subsection{SSH} + +\begin{frame} + + \showsubsection + + \begin{itemize} + \item + \lstinline[style=cmd]{SSH <Rechner>} + \item + \lstinline[style=cmd]{-C}: Komprimierung + \item + \lstinline[style=cmd]{-L}: lokalen Port auf Remote-Port umleiten + \item + \lstinline[style=cmd]{-R}: Remote-Port auf lokalen Port umleiten + \end{itemize} + +\end{frame} + +\subsection{X11} + +\begin{frame} + + \showsubsection + + \begin{itemize} + \item + Grafik-Bildschirm und Eingabegeräte über's Netz + \item + \lstinline[style=cmd]{DISPLAY}-Variable: X-Server: Rechner und Bildschirm + \item + \lstinline[style=cmd]{ssh -X}: X11-Forwarding + \end{itemize} + +\end{frame} + +\subsection{GNU screen} + +\begin{frame} + + \showsubsection + + \begin{itemize} + \item + Text-Bildschirm und Eingabegeräte über's Netz + \item + \lstinline[style=cmd]{Ctrl+A c}: neues Fenster (create) + \item + \lstinline[style=cmd]{Ctrl+A Leertaste}: nächstes Fenster + \item + \lstinline[style=cmd]{Ctrl+A 3}: Fenster Nr.\ 3 + \item + \lstinline[style=cmd]{Ctrl+A ESC}: hochscrollen, suchen, markieren (copy) + \item + \lstinline[style=cmd]{Ctrl+A Ctrl+]}: einfügen (paste) + \item + \lstinline[style=cmd]{Ctrl+A d}: von \file{screen} ablösen (detach) + \item + \lstinline[style=cmd]{screen -x}: an laufenden \file{screen} andocken + \medskip + \item + ähnliche Funktionalität für Grafik: \file{x2go} + \end{itemize} + +\end{frame} + +\subsection{Programmierung} + +\begin{frame} + + \showsubsection + + \begin{itemize} + \item + \file{tcpip-server-0.c}: auf Port 1234 lauschen, "`Hello, world!"' senden + \item + \file{tcpip-client-0.c}: Webseite \url{http://ngc224.gerwinski.de} abrufen + \end{itemize} + +\end{frame} + +\section{Bus-Systeme} +\subsection{Was sind Bus-Systeme?} + +\begin{frame} + \showsection + \showsubsection + + \begin{quote} + Ein Bus ist ein System zur Datenübertragung zwischen mehreren + Teilnehmern über einen gemeinsamen Übertragungsweg. +% \color{gray} +% Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so +% müssen die übrigen Teilnehmer schweigen, da sie sich sonst +% gegenseitig stören würden. Umgangssprachlich werden mitunter -- +% oft aus historischen Gründen – auch Datenübertragungssysteme als +% "`Bus"' bezeichnet, die technisch eigentlich eine andere +% Topologie besitzen. + + \medskip + + \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)} + \end{quote} + Beispiele: + \begin{itemize} + \item + Computer kommuniziert mit Peripherie + \item + Computer kommunizieren (direkt) miteinander + \item + Prozessor kommuniziert mit externem Speicher + \item + Teile eines Prozessors kommunizieren miteinander + \end{itemize} +\end{frame} + +\begin{frame} + \showsection + \showsubsection + Standard-Computer: + \begin{itemize} + \item + Einsteckkarten: PCI (und Vorgänger) + \item + Festplatten: SATA (und Vorgänger) + \item + USB, FireWire, \dots + \item + Ethernet, CAN-Bus, \dots + \item + WLAN, BlueTooth, IR, \dots + \item + PS/2, RS-232, Centronics + \end{itemize} + + \medskip + + Minimal-Hardware: + \begin{itemize} + \item + RS-232 + \item + \ItwoC\ (TWI) + \item + SPI + \end{itemize} + + \begin{onlyenv}<1> + \begin{picture}(0,0) + \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}} + \end{picture} + \end{onlyenv} + \begin{onlyenv}<2> + \begin{picture}(0,0)(-1.3,-4) + \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}} + \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}} + \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}} + \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}} + \end{picture} + \end{onlyenv} +\end{frame} + +\begin{frame}[fragile] + + \showsection + \showsubsection + + \vspace*{-\bigskipamount} + \begin{tabbing} + \newterm{Punkt-zu-Punkt}\quad\=\kill + \newterm{seriell} \> jedes Bit einzeln übertragen\\ + \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount] + \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\ + \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount] + \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\ + \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung} + \end{tabbing} + + \begin{itemize} + \item + \ItwoC: seriell, synchron, mit Adressierung + \item + RS-232: seriell, asynchron, Punkt-zu-Punkt + \item + RS-485, USB, CAN: seriell, asynchron, mit Adressierung + \item + SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung + \end{itemize} + +\end{frame} + +\subsection{RS-232} + +\begin{frame} + \showsection + \showsubsection + + seriell + \begin{itemize} + \item + \newterm{TX\/}: 1 Leitung für Daten + \item + \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung + \item + \newterm{GND\/}: gemeinsame \newterm{Masse} + \item + evtl.\ zusätzliche Steuerleitungen + \end{itemize} + + \medskip + + asynchron + \begin{itemize} + \item + \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen + \item + Stattdessen: Abgleich über Zeitvereinbarungen + \arrowitem + Jeder Teilnehmer braucht eine eigene Zeitbasis. + \end{itemize} + + \medskip + + Punkt-zu-Punkt + \begin{itemize} + \item + nur 2 Teilnehmer vorgesehen + \end{itemize} +\end{frame} + +\begin{frame} + \showsubsection + \vspace*{-0.35cm} + \begin{center} + \includegraphics[scale=0.9]{rs-232.pdf} + \end{center} +\end{frame} + +\subsection{\protect\ItwoC\ (TWI)} + +\begin{frame} + \showsection + \showsubsection + + \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface + + \medskip + + seriell + \begin{itemize} + \item + \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen) + \item + \newterm{SCL\/}: Taktleitung (Clock) + \item + \newterm{GND\/}: gemeinsame Masse + \item + evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät + \end{itemize} + + \medskip + + synchron + \begin{itemize} + \item + Abgleich über\\Taktleitung + \begin{picture}(0,0) + \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}} + \end{picture} + \end{itemize} + + \medskip + + busfähig + \begin{itemize} + \item + \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung + \item + erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers + \item + 2 Adressen pro Teilnehmer: Lesen/Schreiben + \end{itemize} + \vspace*{-1cm} +\end{frame} + +\subsection{SPI} + +\begin{frame} + \showsection + \showsubsection + + Serial Peripheral Interface + + \medskip + + seriell + \begin{itemize} + \item + \newterm{MOSI\/}: Master Out, Slave In + \item + \newterm{MISO\/}: Master In, Slave Out + \item + \newterm{SCLK\/}: Taktleitung (Clock) + \item + \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert) + \item + \newterm{GND\/}: gemeinsame Masse + \item + evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät + \end{itemize} + + \medskip + + synchron + \begin{itemize} + \item + Abgleich über Taktleitung + \end{itemize} + + \medskip + + busfähig + \begin{itemize} + \item + \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung + \item + \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt + \begin{picture}(0,0)(0,-0.2) + \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}} + \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}} + \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} + \newterm{Stern} + \end{minipage}}} + \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}} + \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} + \newterm{Kaskade}\\ + \newterm{Daisy Chain}\pause[4]\par\smallskip + \setlength{\leftskip}{-3.5cm}\small + Slave gibt MOSI-Input um 1 Takt verzögert + an MISO aus \textarrow\ Master setzt + "`im richtigen Moment"' $\overline{\text{SS}}$ + \end{minipage}}} + \end{picture} + \end{itemize} + \vspace*{-1cm} + +\end{frame} + +\subsection{PWM} + +\begin{frame} + \showsection + \showsubsection + + Pulsweitenmodulation -- \emph{pulse-width modulation} + + \begin{itemize} + \item + Steuerung von Motoren + \item + Nutzung als allgemeines Protokoll\\ + zur Übertragung analoger Werte + \end{itemize} +\end{frame} + +\subsection{Sonstiges} + +\begin{frame} + \showsection + \showsubsection + + Matrix-Schaltung + \begin{itemize} + \item + möglichst viele Aktoren/Sensoren\\ + über möglichst wenige digitals Inputs abfragen\\ + bzw.\ über möglichst wenige digitale Outputs steuern + \item + Beispiele: LED-Felder, Tastaturen + \end{itemize} + + \bigskip + + R/2R-Netzwerk + \begin{itemize} + \item + möglichst viele digitale Inputs\\ + über einen einzigen analogen Input abfragen + \item + Beispiele: Tastaturen + \end{itemize} + +\end{frame} + +\nosectionnonumber{\inserttitle} + +\begin{frame} + + \shownosectionnonumber + + \begin{itemize} + \item[\textbf{1}] \textbf{Einführung} + \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}% + \item[\textbf{2}] \textbf{Einführung in Unix} + \item[\textbf{3}] \textbf{TCP/IP in der Praxis} + \item[\textbf{4}] \textbf{Bus-Systeme} + \begin{itemize} + \color{medgreen} + \item[5.1] Was sind Bus-Systeme? + \item[5.2] RS-232 + \item[5.3] \ItwoC\ (TWI) + \item[5.4] SPI +% \item[5.5] Beispiel: Benutzung des \ItwoC-Busses + \color{medgreen} + \item[5.5] PWM + \item[5.6] Sonstiges + \end{itemize} + \item[\textbf{6}] \textbf{Echtzeit} + \begin{itemize} + \color{red} + \item[5.1] Was ist Echtzeit? + \item[5.2] Echtzeitprogrammierung + \item[5.3] Multitasking + \item[5.4] Ressourcen + \item[5.5] Prioritäten + \end{itemize} + \vspace*{-\medskipamount} + \item[\textbf{\dots}] + \end{itemize} + + \vspace*{-1cm plus 1filll} + + \underconstruction + +\end{frame} + +\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}<4-8> + \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}<10-12> + \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{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} + + \medskip + + {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}} + + \medskip + + \pause + Große Stückzahlen + \begin{itemize} + \item + 138\,000 Toyota Prius V von Mai 2011 bis April 2012 + \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)>{\\[\medskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.3cm]{curiosity.jpg}}\vspace*{-1cm}} + \pause + \item + Implantat: Platz- und Stromverbrauch minimieren + \only<.(1)>{\\\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} + + \showsubsection + + \begin{itemize} + \item + \newterm{Kooperatives Multitasking}\\ + Prozesse geben freiwillig Rechenzeit ab + \item + \newterm{Präemptives Multitasking}\\ + Das Betriebssystem unterbricht laufende Prozesse\\ + (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen) + \bigskip + \item + \newterm{Scheduler}\\ + Steuerprogramm, das Prozessen Rechenzeit zuteilt + \item + \newterm{Kontextwechsel}\\ + Umschalten zwischen zwei Prozessen + \item + \newterm{Round-Robin-Verfahren (Rundlauf)}\\ + Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse + \bigskip + \pause + \item + Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\ + allgemein: Zuteilung von Ressourcen + \end{itemize} + +\end{frame} + +\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 + \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} + +\subsectionnonumber{Multitasking} + +\begin{frame} + + \showsection + \showsubsection + + \begin{minipage}[t]{6cm} + Qualitätsaspekte beim Multitasking + \begin{itemize} + \item<2-> + Verschiedene Anforderungen: + \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\ + vs.\ \newterm{Durchsatz} + \smallskip + \begin{onlyenv}<3> + \begin{itemize} + \item + \newterm{Latenz:} interaktive Anwendungen + \item + \newterm{Jitter:} Echtzeitanwendungen + \item + \newterm{Durchsatz:} Stapelverarbeitung + \end{itemize} + \vspace*{-3cm} + \end{onlyenv} + \item<4-> + Ressourcen reservieren:\\ + \newterm{Mutexe} + \only<5->{(= spezielle \newterm{Semaphore\/})\\} + \only<6->{\textarrow\ kommt gleich} + \item<7-> + Verschiedene Methoden\\ + der Priorisierung\\ + \textarrow\ später\\ + \strut + \item<8-> + Umgehung der Probleme durch + speziell geschriebene Software\\ + (MultiWii, RP6, \dots) + \end{itemize} + \end{minipage} + \hfill + \pause[9]% + \begin{minipage}[t]{6.2cm} + Qualitätsaspekte 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} + +\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 + \end{itemize} + \vspace*{-1cm} + +\end{frame} + +\begin{frame} + + \showsection + \showsubsection + + Ressourcen reservieren -- + Beispiel: \file{linux-3.7rc1} + \begin{itemize} + \item + \newterm{Semaphor}\\ + \file{kernel/semaphor.c}\\ + \file{drivers/usb/core/file.c} + \medskip + \item + \newterm{Mutex}\\ + \file{kernel/mutex.c}\\ + \file{drivers/usb/serial/usb-serial.c} + \medskip + \item + \newterm{Spinlock}\\ + \file{kernel/spinlock.c}\\ + \file{kernel/semaphor.c}, + \file{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} + \vspace*{-1cm} + +\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} + +\nosectionnonumber{\inserttitle} + +\begin{frame} + + \shownosectionnonumber + + \begin{itemize} + \item[\textbf{1}] \textbf{Einführung} + \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}% + \item[\textbf{2}] \textbf{Einführung in Unix} + \item[\textbf{3}] \textbf{TCP/IP in der Praxis} + \item[\textbf{4}] \textbf{Bus-Systeme} + \begin{itemize} + \item[4.1] Was sind Bus-Systeme? + \item[4.2] RS-232 + \item[4.3] \ItwoC\ (TWI) + \item[4.4] SPI + \color{medgreen} + \item[4.5] PWM + \item[5.6] Sonstiges + \end{itemize} + \item[\textbf{5}] \textbf{Echtzeit} + \begin{itemize} + \color{medgreen} + \item[5.1] Was ist Echtzeit? + \item[5.2] Echtzeitprogrammierung + \item[5.3] Multitasking + \item[5.4] Ressourcen + \item[5.5] Prioritäten + \end{itemize} + \vspace*{-\medskipamount} + \item[\textbf{\dots}] + \end{itemize} + + \vspace*{-1cm plus 1filll} + + \underconstruction + +\end{frame} + +\end{document} diff --git a/20181129/herzschrittmacher.jpg b/20181129/herzschrittmacher.jpg new file mode 120000 index 0000000000000000000000000000000000000000..92d8f0053003cc555aec83f5d088f1cec822ad81 --- /dev/null +++ b/20181129/herzschrittmacher.jpg @@ -0,0 +1 @@ +../common/herzschrittmacher.jpg \ No newline at end of file diff --git a/20181129/kompassmodul-an-roboter.jpg b/20181129/kompassmodul-an-roboter.jpg new file mode 120000 index 0000000000000000000000000000000000000000..dab8b38c1a92bf8072d42dc3abcc07be54a58c7b --- /dev/null +++ b/20181129/kompassmodul-an-roboter.jpg @@ -0,0 +1 @@ +../common/kompassmodul-an-roboter.jpg \ No newline at end of file diff --git a/20181129/kompassmodul.jpg b/20181129/kompassmodul.jpg new file mode 120000 index 0000000000000000000000000000000000000000..be108a5341df13a693959dbe69b7b9541b36fc4c --- /dev/null +++ b/20181129/kompassmodul.jpg @@ -0,0 +1 @@ +../common/kompassmodul.jpg \ No newline at end of file diff --git a/20181129/logo-hochschule-bochum-cvh-text-v2.pdf b/20181129/logo-hochschule-bochum-cvh-text-v2.pdf new file mode 120000 index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8 --- /dev/null +++ b/20181129/logo-hochschule-bochum-cvh-text-v2.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20181129/logo-hochschule-bochum.pdf b/20181129/logo-hochschule-bochum.pdf new file mode 120000 index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1 --- /dev/null +++ b/20181129/logo-hochschule-bochum.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20181129/make-zombies.c b/20181129/make-zombies.c new file mode 100644 index 0000000000000000000000000000000000000000..3e1418aa5567a38d274cbb2ba1588d7e765823d4 --- /dev/null +++ b/20181129/make-zombies.c @@ -0,0 +1,39 @@ +#include <sys/wait.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +int main(void){ + pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) + int i; // Laufvariable + + for (i = 0; i < 10; ++i) { + // Der Vaterprozess erzeugt nun einen Kindprozess, + // welcher unabh�ngig vom Vaterprozess mit der + // erneuten Ausf�hrung des Programms beginnt. + // Ein Kindprozess erzeugt keinen Fork von sich selbst. + pids[i] = fork(); + if (pids[i] == 0) { + // dann befinden wir uns in einem der 10 Kindprozesse + // Der erste Kindprozess wartet 10 Sekunden und jeder + // weitere Kindprozess wartet 1 Sekunde k�rzer als der + // vorige. + printf ("BRAINS! "); + sleep(10-i); + exit(0); // Kindprozess erfolgreich beenden + } + } +/* + // hier kommt nur der Vaterprozess vorbei + for (i = 0; i < 10; ++i){ + // Der Vaterprozess wartet nun, bis der Reihe nach jeder + // seiner 10 Kindprozesse beendet ist. Leider wird auf das + // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl + // die anderen Kinder l�ngst erfolgreich beendet wurden, + // blockiert das erste Kind eine Bereinigung der Prozesstabelle + waitpid(pids[i], NULL, 0); + } +*/ + while (1); + return 0; // Vaterprozess erfolgreich beenden +} diff --git a/20181129/motherboard-anschluesse.jpg b/20181129/motherboard-anschluesse.jpg new file mode 120000 index 0000000000000000000000000000000000000000..07335d7dff65c71a683588d2ed108485c4653fb7 --- /dev/null +++ b/20181129/motherboard-anschluesse.jpg @@ -0,0 +1 @@ +../common/motherboard-anschluesse.jpg \ No newline at end of file diff --git a/20181129/no-zombies.c b/20181129/no-zombies.c new file mode 100644 index 0000000000000000000000000000000000000000..c7b04d78410a44b1d727cc5a966fb8580b9a3efa --- /dev/null +++ b/20181129/no-zombies.c @@ -0,0 +1,39 @@ +#include <sys/wait.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +int main(void){ + pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) + int i; // Laufvariable + + for (i = 0; i < 10; ++i) { + // Der Vaterprozess erzeugt nun einen Kindprozess, + // welcher unabh�ngig vom Vaterprozess mit der + // erneuten Ausf�hrung des Programms beginnt. + // Ein Kindprozess erzeugt keinen Fork von sich selbst. + pids[i] = fork(); + if (pids[i] == 0) { + // dann befinden wir uns in einem der 10 Kindprozesse + // Der erste Kindprozess wartet 10 Sekunden und jeder + // weitere Kindprozess wartet 1 Sekunde k�rzer als der + // vorige. + printf ("BRAINS! "); + sleep(i); + exit(0); // Kindprozess erfolgreich beenden + } + } + + // hier kommt nur der Vaterprozess vorbei + for (i = 0; i < 10; ++i){ + // Der Vaterprozess wartet nun, bis der Reihe nach jeder + // seiner 10 Kindprozesse beendet ist. Leider wird auf das + // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl + // die anderen Kinder l�ngst erfolgreich beendet wurden, + // blockiert das erste Kind eine Bereinigung der Prozesstabelle + waitpid(pids[i], NULL, 0); + } + + while (1); + return 0; // Vaterprozess erfolgreich beenden +} diff --git a/20181129/pathfinder.jpg b/20181129/pathfinder.jpg new file mode 120000 index 0000000000000000000000000000000000000000..23c6444fee26e0cf0dd2f8639484b00aa5021b59 --- /dev/null +++ b/20181129/pathfinder.jpg @@ -0,0 +1 @@ +../common/pathfinder.jpg \ No newline at end of file diff --git a/20181129/pgslides.sty b/20181129/pgslides.sty new file mode 120000 index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64 --- /dev/null +++ b/20181129/pgslides.sty @@ -0,0 +1 @@ +../common/pgslides.sty \ No newline at end of file diff --git a/20181129/philosophenproblem.jpg b/20181129/philosophenproblem.jpg new file mode 120000 index 0000000000000000000000000000000000000000..26591b2ac2dddfd4786814baf3f19ecb67f1f5ee --- /dev/null +++ b/20181129/philosophenproblem.jpg @@ -0,0 +1 @@ +../common/philosophenproblem.jpg \ No newline at end of file diff --git a/20181129/photo-20181129-170827.jpg b/20181129/photo-20181129-170827.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c39104c882a4d354d5489505bc7fe8fa9cc0499 Binary files /dev/null and b/20181129/photo-20181129-170827.jpg differ diff --git a/20181129/photo-20181129-170853.jpg b/20181129/photo-20181129-170853.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ce62c688f8b5c5107c5c0f56a633e3f365cfe58 Binary files /dev/null and b/20181129/photo-20181129-170853.jpg differ diff --git a/20181129/photo-20181129-171122.jpg b/20181129/photo-20181129-171122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68e18aa53f31a050f33332fbf4e5013cde2608b1 Binary files /dev/null and b/20181129/photo-20181129-171122.jpg differ diff --git a/20181129/photo-20181129-171158.jpg b/20181129/photo-20181129-171158.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eccf86423b2d4a9ca81e8e82eb4ada1f79a61427 Binary files /dev/null and b/20181129/photo-20181129-171158.jpg differ diff --git a/20181129/photo-20181129-184627.jpg b/20181129/photo-20181129-184627.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b9d487aaa0447355e97883fce501234772e0ad3 Binary files /dev/null and b/20181129/photo-20181129-184627.jpg differ diff --git a/20181129/quadrocopter.jpg b/20181129/quadrocopter.jpg new file mode 120000 index 0000000000000000000000000000000000000000..7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c --- /dev/null +++ b/20181129/quadrocopter.jpg @@ -0,0 +1 @@ +../common/quadrocopter.jpg \ No newline at end of file diff --git a/20181129/rp6.jpg b/20181129/rp6.jpg new file mode 120000 index 0000000000000000000000000000000000000000..2a0ecff23845770c3a98178eca6dce3ec73aca58 --- /dev/null +++ b/20181129/rp6.jpg @@ -0,0 +1 @@ +../common/rp6.jpg \ No newline at end of file diff --git a/20181129/rs-232.pdf b/20181129/rs-232.pdf new file mode 100644 index 0000000000000000000000000000000000000000..236ef5bf182048842613c5416b91afb68f451fa6 Binary files /dev/null and b/20181129/rs-232.pdf differ diff --git a/20181129/tolles-programm b/20181129/tolles-programm new file mode 100755 index 0000000000000000000000000000000000000000..ca9c919faad041b4ac2a27a91772e6f7972f3c7e --- /dev/null +++ b/20181129/tolles-programm @@ -0,0 +1,8 @@ +#!/bin/bash + +for t in $(seq 10 -1 0); do + sleep 1s + echo $t +done + +echo "Hello, world!" diff --git a/20181129/xbee.jpg b/20181129/xbee.jpg new file mode 120000 index 0000000000000000000000000000000000000000..ff0adff2eadf3d9b775d03cea8cf1f118534e2b9 --- /dev/null +++ b/20181129/xbee.jpg @@ -0,0 +1 @@ +../common/xbee.jpg \ No newline at end of file diff --git a/20181206/photo-20181206-183205.jpg b/20181206/photo-20181206-183205.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9504514720681c02ddbbd59c833f99b1977cd14e Binary files /dev/null and b/20181206/photo-20181206-183205.jpg differ diff --git a/20181220/721px-Pfs-logo.png b/20181220/721px-Pfs-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9d6698223254ba7c4170905b311b162cad2274 Binary files /dev/null and b/20181220/721px-Pfs-logo.png differ diff --git a/20181220/Adobe-Reader.png b/20181220/Adobe-Reader.png new file mode 100644 index 0000000000000000000000000000000000000000..30d8d244efbda994a9c6e832705c93c3eba4ef4f Binary files /dev/null and b/20181220/Adobe-Reader.png differ diff --git a/20181220/Copyright.pdf b/20181220/Copyright.pdf new file mode 100644 index 0000000000000000000000000000000000000000..69f4ec0c29489b7c1eb24724c79153cea1087156 Binary files /dev/null and b/20181220/Copyright.pdf differ diff --git a/20181220/Microsoft_Power_Point_2010.png b/20181220/Microsoft_Power_Point_2010.png new file mode 100644 index 0000000000000000000000000000000000000000..ce91df9e0cb33e1d0e644a5ac25f916c266f4524 Binary files /dev/null and b/20181220/Microsoft_Power_Point_2010.png differ diff --git a/20181220/a-gnu-head.pdf b/20181220/a-gnu-head.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3dcb28fc1147f4b801391c6e5d54a9c4c9311bd6 Binary files /dev/null and b/20181220/a-gnu-head.pdf differ diff --git a/20181220/libreoffice-impress.pdf b/20181220/libreoffice-impress.pdf new file mode 100644 index 0000000000000000000000000000000000000000..df752f1d6d50d46ed2f1ed9964190ba4dad2fa75 Binary files /dev/null and b/20181220/libreoffice-impress.pdf differ diff --git a/20181220/lic-20181220.pdf b/20181220/lic-20181220.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d31668e9df0cbdc828a194f114482488c3f45f66 Binary files /dev/null and b/20181220/lic-20181220.pdf differ diff --git a/20181220/lic-20181220.tex b/20181220/lic-20181220.tex new file mode 100644 index 0000000000000000000000000000000000000000..b37ac376b6a3abf5fd5c4e1e0e86e8b9558e7760 --- /dev/null +++ b/20181220/lic-20181220.tex @@ -0,0 +1,634 @@ +% lic-20160512.pdf - Lecture Slides on Applied Computer Sciences +% Copyright (C) 2012, 2015, 2016 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]{beamer} + +\usepackage[utf8]{luainputenc} +\usepackage[german]{babel} +\usepackage[T1]{fontenc} +\usepackage{helvet} +\renewcommand*\familydefault{\sfdefault} + +\usetheme{default} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\setbeamersize{text margin left = 0.3cm, text margin right = 0.2cm} +\setbeamertemplate{itemize item}{$\bullet$} +\setbeamertemplate{itemize subitem}{--} +\setbeamerfont{itemize/enumerate subbody}{size=\normalsize} +\setbeamerfont{itemize/enumerate subsubbody}{size=\normalsize} +\addtolength{\topmargin}{0.15cm} + +\usepackage{pstricks} +\newrgbcolor{darkgreen}{0.0 0.3 0.0} +\newrgbcolor{lightred}{1.0 0.7 0.7} +\newrgbcolor{lightgray}{0.85 0.85 0.85} +\newrgbcolor{medgray}{0.4 0.4 0.4} + +\usepackage{listings} +\lstset{basicstyle=\color{structure}, + language=C, + captionpos=b, + gobble=4, + columns=fullflexible, + aboveskip=0pt, + belowskip=0pt, + moredelim=**[is][\color{red}]{¡}{¿}, + moredelim=**[is][\only<2->{\color{structure}}]{²}{¿}, + moredelim=**[is][\only<3->{\color{structure}}]{³}{¿}, + moredelim=**[is][\only<4->{\color{structure}}]{°}{¿}, + moredelim=**[is][\only<5->{\color{structure}}]{¤}{¿}, + moredelim=**[is][\only<6->{\color{structure}}]{¢}{¿}, + moredelim=**[is][\only<7->{\color{structure}}]{æ}{¿}, + moredelim=**[is][\only<8->{\color{structure}}]{ø}{¿}} +\lstdefinestyle{terminal}{basicstyle=\ttfamily\color{darkgreen}, + columns=fixed, + moredelim=**[is][\color{red}]{¡}{¿}, + moredelim=**[is][\color{structure}]{°}{¿}} +\lstdefinestyle{shy}{basicstyle=\color{lightgray}, + moredelim=**[is][\color{structure}]{¡}{¿}} +\lstdefinestyle{semishy}{basicstyle=\color{medgray}, + moredelim=**[is][\color{structure}]{¡}{¿}} + +\usepackage{multirow} + +\setcounter{topnumber}{3} +\renewcommand\topfraction{0.7} +\setcounter{bottomnumber}{3} +\renewcommand\bottomfraction{0.7} +\setcounter{totalnumber}{5} +\renewcommand\textfraction{0.1} +\renewcommand\floatpagefraction{0.9} + +\setlength{\unitlength}{1cm} + +\newcommand{\protectfile}[1]{#1} +\newcommand{\file}[1]{{\color{structure}\protectfile{#1}}} +\newcommand{\textarrow}{{\boldmath $\longrightarrow$}} +\newcommand{\arrowitem}{\item[\textarrow]} +\newcommand{\BIGskip}{\vspace{1cm}} +\newcommand{\shy}{\color{lightgray}} +\newcommand{\hot}{\color{red}} +\newcommand{\shyhot}{\color{lightred}} + +\newcommand{\sectionnonumber}[1]{\section{#1}\addtocounter{section}{-1}} + +\def\showsectionnonumber{{\Large\color{structure}\bf\secname\par}\bigskip} + +\def\showsection{\hbox{\Large\color{structure}\bf + \vtop{\hbox{\arabic{section}}}\kern1em% + \vtop{\secname}\par}\bigskip} + +\newcommand{\subsectionnonumber}[1]{\subsection{#1}\addtocounter{subsection}{-1}} + +\def\showsubsectionnonumber{{\large\color{structure}\bf\subsecname\par}\bigskip} + +\def\showsubsection{\hbox{\large\color{structure}\bf + \vtop{\hbox{\arabic{section}.\arabic{subsection}}}\kern1em% + \vtop{\subsecname}\par}\bigskip} + +\begin{document} + +\sectionnonumber{Software-Lizenzen} +\subsectionnonumber{Vorab: Dies ist keine Rechtsdienstleistung!} + +\begin{frame}[t,plain] + \showsectionnonumber + \pause + \showsubsectionnonumber + + \textbf{\S\,2 RDG: Begriff der Rechtsdienstleistung} + + \smallskip + + (1) Rechtsdienstleistung ist jede Tätigkeit in + {\only<3->{\color{red}}konkreten} fremden Angelegenheiten, + sobald sie eine rechtliche Prüfung des + {\only<3->{\color{red}}Einzelfalls} erfordert. + + \medskip + + \strut\hfill Quelle: \url{http://www.gesetze-im-internet.de/rdg/} + + \pause + \pause + + \bigskip + + Konkreter Fall: + \begin{itemize} + \item + Konkretes Programm unter Lizenz A + \item + Konkrete Bibliothek unter Lizenz B + \item + Beratung: Paßt das zusammen? + \arrowitem + Rechtsdienstleistung + \end{itemize} +\end{frame} + + \subsectionnonumber{Lizenz-Beratung unter Kollegen?} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + \textbf{\S\,6 RDG: Unentgeltliche Rechtsdienstleistungen} + + \smallskip + + (1) Erlaubt sind Rechtsdienstleistungen, die nicht im Zusammenhang mit einer entgeltlichen + Tätigkeit stehen (unentgeltliche Rechtsdienstleistungen). + + \smallskip + + (2) Wer unentgeltliche Rechtsdienstleistungen außerhalb familiärer, nachbarschaftlicher oder + ähnlich enger persönlicher Beziehungen erbringt, muss sicherstellen, dass die Rechtsdienstleistung + durch eine Person, der die entgeltliche Erbringung dieser Rechtsdienstleistung erlaubt ist, durch + eine Person mit Befähigung zum Richteramt oder unter Anleitung einer solchen Person erfolgt. + [\,\dots] + + \medskip + + \strut\hfill Quelle: \url{http://www.gesetze-im-internet.de/rdg/} + + \pause + + \bigskip + + \begin{itemize} + \arrowitem + Nur allgemein beraten!\\ + Konkrete Fälle an Anwalt verweisen! + \end{itemize} + +\end{frame} + + \subsectionnonumber{Überblick} + \newcommand{\lcr}{\includegraphics[width=0.5cm]{Copyright.pdf}} + \newcommand{\lcl}{\includegraphics[width=0.5cm]{Copyleft.pdf}} + \newcommand{\lcc}{\includegraphics[width=0.5cm]{creative-commons.png}} + \newcommand{\lpd}{\includegraphics[width=0.5cm]{PD-icon.pdf}} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + \begin{itemize} + \item + Grundlage: Urheberrecht ($\approx$ Copyright) \hfill \lcr\\ + "`Wer Software schreibt, entscheidet, was damit geschehen darf."' + \pause + \medskip + \item + anderen etwas erlauben: Lizenz + \pause + \medskip + \item + "`gar keine Lizenz"' = alles verboten + \end{itemize} +\end{frame} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + \begin{center} + \begin{picture}(12,5) + \put(5,5){\makebox(0,0){Software-Lizenz}} + \put(4.5,4.7){\vector(-1,-1){1}} + \put(5.5,4.7){\vector(1,-1){1}} + \put(3,3.4){\makebox(0,0){proprietär}} + \put(7,3.4){\makebox(0,0){frei / Open Source}} + \put(6.5,3.1){\vector(-1,-1){1.5}} + \put(7.5,3.1){\vector(1,-1){1}} + \put(4.5,1.3){\makebox(0,0){freizügig}} + \put(9,1.8){\makebox(0,0){Copyleft}} + \end{picture}% + \begin{onlyenv}<2->% + \begin{picture}(0,0)(12,0) + \color{darkgreen} + \put(2.5,3.1){\vector(-1,-1){0.5}} + \put(3.5,3.1){\vector(1,-1){0.5}} + \put(2.0,2.3){\makebox(0,0){kommerziell}} + \put(4.0,2.3){\makebox(0,0){gratis}} + \put(4.0,1.0){\vector(-1,-1){0.5}} + \put(5.0,1.0){\vector(1,-1){0.5}} + \put(3.5,0.2){\makebox(0,0){kommerziell}} + \put(5.5,0.2){\makebox(0,0){gratis}} + \put(8.5,1.5){\vector(-1,-1){0.5}} + \put(9.5,1.5){\vector(1,-1){0.5}} + \put(8.0,0.7){\makebox(0,0){kommerziell}} + \put(10.0,0.7){\makebox(0,0){gratis}} + \end{picture}% + \end{onlyenv}% + \end{center} + +\end{frame} + + \subsectionnonumber{Lizenzmodelle} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + \begin{itemize} + \item + Freie Software darf man + \hfill\begin{picture}(0,0) + \put(-1.8,-0.8){\includegraphics[width=2cm]{a-gnu-head.pdf}} + \end{picture} + \begin{itemize} + \item[0.] + benutzen, + \item[1.] + studieren und anpassen, + \item[2.] + weitergeben, + \item[3.] + weiterentwickeln und veröffentlichen. + \end{itemize} + \strut\hfill + 4 Grundfreiheiten -- + \url{http://www.gnu.org/philosophy/free-sw}\\ + \pause + \begin{picture}(0,0) + \color{red} + \put(6.95,1.85){\vector(-1,0){1.5}} + \put(7.00,1.75){\vector(-1,-1){0.5}} + \put(7.05,1.85){\makebox(0,0)[l]{Quelltext erforderlich!}} + \end{picture}% + \pause + \medskip + \item + Open Source: i.\,w.\ dasselbe in 10 Kriterien + \hfill\begin{picture}(0,0) + \put(-1.2,-0.5){\includegraphics[width=1.1cm]{osi-logo.jpg}} + \end{picture}\\ + Begründung: technisch statt philosophisch\\[\smallskipamount] + \strut\hfill + Definition: + \url{http://www.opensource.org/docs/osd} + \end{itemize} + +\end{frame} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + \begin{itemize} + \item + Proprietäre Software / Closed Source\\ + Gegenteil von freier Software / Open Source + \medskip + \begin{itemize} + \item + Benutzen, Weitergeben und/oder Veröffentlichen\\ + erfordert individuelle Erlaubnis des Rechteinhabers + \medskip + \item + Studieren, Anpassen und/oder Weiterentwickeln\\ + nur dem Rechteinhaber erlaubt + \pause + {\color{red}und/oder möglich\\ + (Quelltext erforderlich!)} + \end{itemize} + \end{itemize} + +\end{frame} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + \begin{itemize} + \item + Freie Software + \smallskip + \begin{itemize} + \item + Copyleft\only<2->{:}\\[\smallskipamount] + \begin{visibleenv}<2-> + Weitergabe nur unter gleichen Bedingungen erlaubt\\ + \textarrow\ Umwandlung in proprietäre Software nicht erlaubt + \end{visibleenv} + \medskip + \item + freizügig\only<3->{:}\\[\smallskipamount] + \begin{visibleenv}<3-> + Weitergabe auch unter anderen Bedingungen erlaubt\\ + \textarrow\ Umwandlung in \only<4->{Copyleft- oder }proprietäre Software erlaubt + \end{visibleenv} + \begin{onlyenv}<5-> + \medskip + \item + Teil-Copyleft:\\[\smallskipamount] + Linken mit proprietärer Software erlaubt + \end{onlyenv} + \end{itemize} + \end{itemize} + + +\end{frame} + + \subsectionnonumber{Beispiel-Programme} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + \begin{center} + \renewcommand{\arraystretch}{2.5} + \begin{tabular}{|c||c|c|c|}\hline + & \multirow{2}{*}{proprietär} & \multicolumn{2}{c|}{frei}\\\cline{3-4} + & & freizügig & Copyleft \\\hline\hline + \color{darkgreen}kommerziell + & \color{structure}\visible<2->{\shortstack{\\\includegraphics[width=0.5cm]{Microsoft_Power_Point_2010.png}\\\small Microsoft PowerPoint}} + & \color{structure}\visible<6->{\shortstack{\\\includegraphics[width=1.0cm]{721px-Pfs-logo.png}\\\small pfSense}} + & \color{structure}\visible<5->{\shortstack{\\\includegraphics[width=0.8cm]{open-xchange.jpg}\\\small Open-Xchange}} \\\hline + \color{darkgreen}gratis + & \color{structure}\visible<4->{\shortstack{\\\includegraphics[width=0.8cm]{Adobe-Reader.png}\\\small Adobe Reader}} + & \color{structure}\visible<6->{\shortstack{\\\includegraphics[width=0.5cm]{putty.png}\\\small PuTTY}} + & \color{structure}\visible<3->{\shortstack{\\\includegraphics[width=0.5cm]{libreoffice-impress.pdf}\\\small LibreOffice Impress}} \\\hline + \end{tabular} + \end{center} + \begin{onlyenv}<7->% + \begin{picture}(0,0)(0,-0.5) + \color{red} + \put(7.38,1.38){$\updownarrow$} + \put(9.8,1.38){$\updownarrow$} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<8->% + \begin{picture}(0,0)(0,-0.7) + \color{red} + \put(6.3,2.7){$\longleftarrow$} + \put(8.05,2.7){$\longrightarrow$} + \end{picture}% + \end{onlyenv}% + +\end{frame} + + \subsectionnonumber{Beispiel-Lizenzen} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + Generell: Gewährleistungsausschluß + + \bigskip + + \pause + Freie Software / Open Source + \begin{itemize} + \item + strenges Copyleft: + GNU GPL, GNU FDL, CC BY-SA + \pause + \item + Teil-Copyleft: + GNU LGPL, Mozilla-Lizenz, Microsoft Public License + \pause + \item + freizügig: + Modifizierte BSD-Lizenz, Apache-Lizenz, CC BY,\\ + CC0, Public Domain + \end{itemize} + \pause + \strut\hfill\url{http://www.gnu.org/licenses/license-list} + +\end{frame} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + Generell: Gewährleistungsausschluß + + \bigskip + + Proprietäre Software + + \begin{itemize} + \item + Lizenz i.\,d.\,R.\ für jedes Programm anders + \pause + \medskip + \item + "`Normales"' Beispiel (Januar 2012):\\ + Adobe Reader EULA\\[\smallskipamount] + Verwenden \only<3->{nur auf PCs }erlaubt\pause\pause,\\ + Studieren und Weitergeben nicht erlaubt\pause,\\ + Screenshots nicht erlaubt\\[\smallskipamount] + \pause + Der Software ist die Kommunikation mit Adobe\\ + und mit Werbeanbietern erlaubt.\\[\medskipamount] + \pause + \strut\hfill\url{http://www.adobe.com/products/eulas/reader/x/eula_de_de.html} + \medskip + \end{itemize} + +\end{frame} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + Generell: Gewährleistungsausschluß + + \bigskip + + Proprietäre Software + + \begin{itemize} + \item + Kontroverses Beispiel (Januar 2012):\\ + iBooks Author EULA\\[\smallskipamount] + Layout für elektronische Bücher erstellen\\ + \pause + \textarrow\ Buch darf nur über den iBooks Store verkauft werden\\[\medskipamount] + \strut\hfill\url{http://venomousporridge.com/post/16126436616/}\\ + \strut\hfill\url{ibooks-author-eula-audacity} + \end{itemize} + +\end{frame} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + Generell: Gewährleistungsausschluß + + \bigskip + + Proprietäre Software + + \begin{itemize} + \item + Kontroverses Beispiel (September 2001):\\ + Microsoft FrontPage 2002 EULA\\[\smallskipamount] + Webseiten erstellen\\ + \pause + \textarrow\ Webseiten dürfen Microsoft nicht "`herabsetzen"'\\[\medskipamount] + \strut\hfill\url{http://www.heise.de/newsticker/data/jes-21.09.01-001/} + \end{itemize} + +\end{frame} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + Generell: Gewährleistungsausschluß + + \bigskip + + Proprietäre Software + + \begin{itemize} + \item + Kontroverses Beispiel (Juli 2001):\\ + Microsoft Mobile Internet Toolkit EULA\\[\smallskipamount] + Software erstellen\\ + \pause + \textarrow\ Verbot, {\color{darkgreen}"`virale"'} Software + \only<3->{(= Copyleft-Software) }zu erstellen \\ + \pause + \pause + \textarrow\ Verbot, Copyleft-Werkzeuge mit einzusetzen \\ + \textarrow\ Verbot, entwickelte Software gemeinsam mit Copyleft-Software\\ + \strut\phantom{\textarrow} einzusetzen oder zu vertreiben\\[\medskipamount] + \strut\hfill\url{http://web.archive.org/web/20010626201507/}\\ + \strut\hfill\url{http://msdn.microsoft.com/downloads/eula_mit.htm} + \end{itemize} + + % Nicht auf derselben CD: http://msdn.microsoft.com/downloads/eula_mit.htm, 22.7.2001 + +\end{frame} + + \subsectionnonumber{Copyleft} + +\begin{frame}[t,plain] + \showsectionnonumber + \showsubsectionnonumber + + Microsoft: Copyleft-Software ist {\color{darkgreen}"`viral"'}\\[\smallskipamount] + \strut\hfill\url{http://web.archive.org/web/20010626201507/}\\ + \strut\hfill\url{http://msdn.microsoft.com/downloads/eula_mit.htm} + + \bigskip + + \begin{center} + \color{structure}% + \begin{onlyenv}<2->% + \begin{picture}(10,5) + \put(5,5){\makebox(0,0){Code aus fremder Software benutzen}} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<3->% + \begin{picture}(0,0)(10,0) + \put(4.5,4.7){\vector(-1,-1){1}} + \put(3.5,3.4){\makebox(0,0){\strut GPL-Software:}} + \put(3.5,2.95){\makebox(0,0){\strut{\color{darkgreen}bedingt} erlaubt}} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<4->% + \begin{picture}(0,0)(10,0) + \color{darkgreen} + \put(3.0,2.7){\vector(0,-1){0.7}} + \put(3.0,1.8){\makebox(0,0){\strut Gesamtwerk muß}} + \put(3.0,1.35){\makebox(0,0){\strut unter GPL stehen}} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<5->% + \begin{picture}(0,0)(10,0) + \put(5.5,4.7){\vector(1,-1){1}} + \put(6.5,3.4){\makebox(0,0){\strut MS-Software:}} + \put(6.5,2.95){\makebox(0,0){\strut{\color{red}nicht} erlaubt}} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<6->% + \begin{picture}(0,0)(10,0) + \color{black} + \put(5.5,1.2){\makebox(0,0)[l]{\textarrow\ + \begin{minipage}[t]{5cm} + Lizenzen lesen,\\ + sorgfältig auswählen + \end{minipage}}} + \end{picture}% + \end{onlyenv}% + \end{center} + +\end{frame} + + \subsectionnonumber{Fazit} + +\begin{frame}[t,plain] + \showsectionnonumber + + {\large\color{structure}\bf Fazit\par} + \begin{itemize} + \item + Generell: Vor Benutzung Lizenz lesen, durch Anwalt prüfen lassen + \pause + \item + "`gar keine Lizenz"' = alles verboten + \end{itemize} + + \pause + Bearbeitung, Weitergabe und Mitverwendung + \begin{itemize} + \pause + \item + nicht erlaubt oder nicht möglich + \textarrow\ proprietäre Software / Closed Source + \pause + \item + erlaubt \textarrow\ freie Software / Open Source + \begin{itemize} + \pause + \item + bei Mitverwendung Lizenz übernehmen \textarrow\ Copyleft + \pause + \item + Lizenz umwandelbar \textarrow\ freizügig + \end{itemize} + \end{itemize} + + \pause + + \bigskip + + {\large\color{structure}\bf Lizenz für diese Lehrmaterialien\par} + \begin{itemize} + \item + Vortragsfolien und Skripte: Copyleft + \item + Beispiel-Programme: freizügig + \end{itemize} + +\end{frame} + +\end{document} diff --git a/20181220/logo-hochschule-bochum-cvh-text-v2.pdf b/20181220/logo-hochschule-bochum-cvh-text-v2.pdf new file mode 120000 index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8 --- /dev/null +++ b/20181220/logo-hochschule-bochum-cvh-text-v2.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20181220/logo-hochschule-bochum-cvh-text.pdf b/20181220/logo-hochschule-bochum-cvh-text.pdf new file mode 100644 index 0000000000000000000000000000000000000000..649b6a8b8f51ddc370a3626310c172fb3f8b0807 Binary files /dev/null and b/20181220/logo-hochschule-bochum-cvh-text.pdf differ diff --git a/20181220/logo-hochschule-bochum.pdf b/20181220/logo-hochschule-bochum.pdf new file mode 120000 index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1 --- /dev/null +++ b/20181220/logo-hochschule-bochum.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20181220/open-xchange.jpg b/20181220/open-xchange.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1e06bfb8722813f3e4dfff4c3a5da2016d594a2 Binary files /dev/null and b/20181220/open-xchange.jpg differ diff --git a/20181220/osi-logo.jpg b/20181220/osi-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9d29548b455ec1bb9ee4e7a9b9757c1567dc375 Binary files /dev/null and b/20181220/osi-logo.jpg differ diff --git a/20181220/pgslides.sty b/20181220/pgslides.sty new file mode 120000 index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64 --- /dev/null +++ b/20181220/pgslides.sty @@ -0,0 +1 @@ +../common/pgslides.sty \ No newline at end of file diff --git a/20181220/photo-20190117-173529.jpg b/20181220/photo-20190117-173529.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f919d5f7b3a86ff45b43c23576cd577d038a4b5 Binary files /dev/null and b/20181220/photo-20190117-173529.jpg differ diff --git a/20181220/photo-20190117-173700.jpg b/20181220/photo-20190117-173700.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0463ac933a24d9f22d5c9bfa331d41a6666b994c Binary files /dev/null and b/20181220/photo-20190117-173700.jpg differ diff --git a/20181220/putty.png b/20181220/putty.png new file mode 100644 index 0000000000000000000000000000000000000000..63693df07f200e3e74119fed16237b438cac651b Binary files /dev/null and b/20181220/putty.png differ diff --git a/20181220/verschluesselung-20181220.pdf b/20181220/verschluesselung-20181220.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dab45861cfffe47022913e3fa883f2ba6b06ebcb Binary files /dev/null and b/20181220/verschluesselung-20181220.pdf differ diff --git a/20181220/verschluesselung-20181220.tex b/20181220/verschluesselung-20181220.tex new file mode 100644 index 0000000000000000000000000000000000000000..8c314e2a6c81e50c32a3e0053c76389fa886618c --- /dev/null +++ b/20181220/verschluesselung-20181220.tex @@ -0,0 +1,380 @@ +% verschluesselung-20181220.pdf - Lecture Slides on Email Encryption +% Copyright (C) 2012, 2013, 2015, 2016, 2017, 2018 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/>. + +% README: E-Mail-Verschlüsselung + +\documentclass[10pt,t]{beamer} + +\usepackage{pgslides} +\usepackage{pdftricks} +\usepackage{tikz} + +\begin{psinputs} + \usepackage[utf8]{inputenc} + \usepackage[german]{babel} + \usepackage[T1]{fontenc} + \usepackage{helvet} + \renewcommand*\familydefault{\sfdefault} + \usepackage{pstricks,pst-grad} +\end{psinputs} + +\title{E-Mail-Verschlüsselung} +\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} +\date{20.\ Dezember 2018} + +\begin{document} + +\maketitleframe + +\nosectionnonumber{\inserttitle} + +\begin{frame} + + \shownosectionnonumber + + \begin{itemize} + \item[\textbf{1}] \textbf{Einführung} + \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/hp.git}}} + \begin{itemize} + \item[1.1] + Warum verschlüsseln? + \item[1.2] + Einfache Verschlüsselungsalgorithmen + \item[1.2] + Symmetrische Verschlüsselungsalgorithmen + \end{itemize} + \item[\textbf{2}] \textbf{Ihr Verschlüsselungs-"`Führerschein"'} + \begin{itemize} + \item[2.1] + Geheime und öffentliche Schlüssel + \item[2.2] + Digitale Signaturen + \item[2.3] + Zertifikate -- Web of Trust + \end{itemize} + \item[\textbf{3}] \textbf{Verschlüsselung in der Praxis} + \item[\textbf{4}] \textbf{Fazit} + \end{itemize} + +\end{frame} + +\section{Einführung} +\subsection{Warum verschlüsseln?} + +\begin{frame} + \showsection + \showsubsection + + \begin{quote} + "`Ich habe nichts zu verbergen."' + \end{quote} + + \begin{itemize} + \item + Vor wem? Wirklich vor jedem?\\ + Wirklich alles über Sie? + \item + Auch nicht vor dem organisierten Verbrechen? + \item + Illegaler Zugriff auf staatlich gesammelte Daten ist möglich! + \bigskip + \arrowitem + Der einzige wirklich sichere Weg,\\ + Datensammlungen gegen Mißbrauch zu schützen,\\ + ist, die Daten gar nicht erst zu sammeln. + \end{itemize} +\end{frame} + +\subsection{Einfache Verschlüsselungsalgorithmen} + +\begin{frame} + \showsection + \showsubsection + + \begin{itemize} + \item + Cäsar-Chiffre: Alphabet rotieren\\ + Beispiel: ROT13 (mit Schlüssel 13)\\ + 25 verschiedene Schlüssel + \textarrow\ Schlüssellänge $\approx 4.64$\,Bit + ($2^{4.64} \approx 25$)\\ + leicht zu knacken + \pause + \item + Zufälliges Rotieren des gesamten Zeichensatzes:\\ + Für jedes Zeichen wird neu "`gewürfelt"'.\\ + \pause + \textarrow\ Schlüssellänge = Länge der Nachricht\\ + unknackbar + (mathematisch beweisbar)\\ + \pause + praktische Probleme: + \begin{itemize} + \item Schlüssel genauso lang wie Nachricht + \textarrow\ schwer zu übertragen + \item Schlüssel (echter Zufall!) schwer zu generieren + \end{itemize} + \pause + \item + Dasselbe mit Pseudozufallsgenerator\\ + Schlüssel = Startwert\\ + \pause + \textarrow\ Schlüssellänge = Bits des Startwerts\\ + meistens knackbar, + nur für spezielle Pseudozufallsgeneratoren sicher\\ + \textarrow\ Verschlüsselungsverfahren + \end{itemize} + \vspace*{-1cm} +\end{frame} + +\subsection{Symmetrische Verschlüsselungsalgorithmen} + +\begin{frame} + \showsection + \showsubsection + + \renewcommand{\arraystretch}{1.2} + \begin{center} + \begin{tabular}{l|c|c} + \textbf{Verfahren} & \textbf{Schlüssellänge} & \textbf{sicher} \\\hline + Cäsar-Chiffre & 4.64 Bit & nein \\ + One-Time Pad (OTP) & Länge der Nachricht & ja \\ + Enigma & 81.2 Bit & nein \\ + Standard-Pseudozufallszahlen & typischerweise 64 Bit & nein \\\hline + DES & 56 Bit & nein \\ + IDEA & 128 Bit & ja \\ + Blowfish & 128 Bit & ja \\ + Twofish & 128 Bit & ja \\ + CAST & 128 Bit & ja \\ + AES / Rijndael & 128 Bit & ja + \end{tabular} + \end{center} +\end{frame} + +\section{Ihr Verschlüsselungs-"`Führerschein"'} +\subsection{Geheime und öffentliche Schlüssel} + +\begin{frame} + \showsection + \showsubsection + + Verschlüsselte Kommunikation: + \begin{itemize} + \item + Versenden der Nachricht über öffentlichen Kanal (z.\,B.\ E-Mail) + \item + Versenden des Schlüssels über geheimen Kanal (z.\,B.\ persönlich) + \end{itemize} + + \medskip + + Probleme: + \begin{itemize} + \item + Kommunikation mit Unbekannten + \item + Kommunikation in Gruppen + \end{itemize} + + \medskip + + Lösung: + \begin{itemize} + \item + Asymmetrische Verschlüsselungsverfahren + \item + Geheime und öffentliche Schlüssel + \end{itemize} +\end{frame} + +\begin{frame} + \showsection + \showsubsection + + Asymmetrische Verschlüsselungsverfahren: + \begin{itemize} + \item + Unterschiedliche Schlüssel zum Ver- und Entschlüsseln + \item + Verschlüsseln: \newterm{öffentlicher Schlüssel} + \item + Entschlüsseln: \newterm{geheimer Schlüssel} + \end{itemize} + + \medskip + + Schlüsselaustausch: + \begin{itemize} + \item + Abhören: kein Problem mehr + \item + Identifikation: persönlicher Kontakt weiterhin erforderlich + \end{itemize} + + \medskip + + Lösung: + \begin{itemize} + \item + Digitale Signaturen + \item + Zertifikate -- Web of Trust + \end{itemize} + + \vspace{0cm plus 1filll minus 1filll} + + \renewcommand{\arraystretch}{1.2} + \begin{flushright} + \begin{tabular}{l|c|c} + \textbf{Verfahren} & \textbf{Schlüssellänge} & \textbf{sicher} \\\hline + RSA & ab 2048 Bit & ja \\ + ElGamal & ab 2048 Bit & ja \\ + ECDSA & 160 Bit & ja + \end{tabular} + \end{flushright} +\end{frame} + +\subsection{Digitale Signaturen} + +\begin{frame} + \showsection + \showsubsection + + Asymmetrische Verschlüsselungsverfahren: + \begin{itemize} + \item + Unterschiedliche Schlüssel zum Ver- und Entschlüsseln + \item + Verschlüsseln: geheimer Schlüssel + \item + Entschlüsseln: öffentlicher Schlüssel + \item + Prüfwert der Nachricht verschlüsseln + \arrowitem + Wer das verschlüsselt hat,\\ + muß im Besitz des geheimen Schlüssels sein.\\ + \textarrow\ \newterm{digitale Signatur} + \end{itemize} + + \vspace{0cm plus 1filll minus 1filll} + + \renewcommand{\arraystretch}{1.2} + \begin{flushright} + \begin{tabular}{l|c|c} + \textbf{Verfahren} & \textbf{Schlüssellänge} & \textbf{sicher} \\\hline + RSA & ab 2048 Bit & ja \\ + ElGamal & ab 2048 Bit & ja \\ + ECDSA & 160 Bit & ja + \end{tabular} + \end{flushright} +\end{frame} + +\subsection{Zertifikate -- Web of Trust} + +\begin{frame} + \showsection + \showsubsection + + \begin{itemize} + \item + Alice will Bob eine verschlüsselte Nachricht schicken. + \item + Alice lädt den öffentlichen Schlüssel von Bob herunter. + \arrowitem + Ist der Schlüssel wirklich der von Bob? + \pause + \medskip + \item + Trent hat den öffentlichen Schlüssel von Bob unterschrieben:\\ + "`Ich bezeuge, daß dieser Schlüssel wirklich Bob gehört."' + \arrowitem + Trent agiert als \newterm{Zertifizierungsstelle}. + \medskip + \item + Alice hat bereits den öffentlichen Schlüssel von Trent\\ + und kann daher die Signatur prüfen. + \item + Alice vertraut Trent. \textarrow\ \newterm{Vertrauen in Person} + \arrowitem + Der öffentliche Schlüssel von Bob ist echt. \textarrow\ \newterm{Vertrauen in Schlüssel} + \end{itemize} +\end{frame} + +\section{Verschlüsselung in der Praxis} + +\begin{frame} + \showsection + + \begin{itemize} + \item + Software: GNU Privacy Guard (GnuPG)\\ + herunterladen und installieren + \begin{itemize} + \item + Plug-In für Mozilla Thunderbird: Enigmail + \item + GnuPG Basics Pack + \item + GPG4Win + \item + \dots + \end{itemize} + Für Smartphones: K-9 Mail + \item + Schlüsselerzeugung + \item + Öffentliche Schlüssel austauschen und prüfen + \pause + \medskip + \item + Schlüssel-Server + \medskip + \item + Ende-zu-Ende-Verschlüsselung + \item + Auf verschlüsselte Nachrichten immer verschlüsselt antworten! + \item + Betreff-Zeilen werden nicht immer mit verschlüsselt. + \item + Die Verbindungsdaten werden nicht mit verschlüsselt. + \end{itemize} +\end{frame} + +\section{Fazit} + +\begin{frame} + \showsection + + \begin{itemize} + \item + E-Mail-Verschlüsselung ist sinnvoll \dots + \item + \dots\ und machbar. + \item + Der richtige Umgang ist entscheidend. + \medskip + \arrowitem + Sicherheitsbewußtsein ist entscheidend. + \end{itemize} +\end{frame} + +\end{document} diff --git a/20190110/721px-Pfs-logo.png b/20190110/721px-Pfs-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9d6698223254ba7c4170905b311b162cad2274 Binary files /dev/null and b/20190110/721px-Pfs-logo.png differ diff --git a/20190110/Adobe-Reader.png b/20190110/Adobe-Reader.png new file mode 100644 index 0000000000000000000000000000000000000000..30d8d244efbda994a9c6e832705c93c3eba4ef4f Binary files /dev/null and b/20190110/Adobe-Reader.png differ diff --git a/20190110/Copyright.pdf b/20190110/Copyright.pdf new file mode 100644 index 0000000000000000000000000000000000000000..69f4ec0c29489b7c1eb24724c79153cea1087156 Binary files /dev/null and b/20190110/Copyright.pdf differ diff --git a/20190110/Microsoft_Power_Point_2010.png b/20190110/Microsoft_Power_Point_2010.png new file mode 100644 index 0000000000000000000000000000000000000000..ce91df9e0cb33e1d0e644a5ac25f916c266f4524 Binary files /dev/null and b/20190110/Microsoft_Power_Point_2010.png differ diff --git a/20190110/Zeichen_123.pdf b/20190110/Zeichen_123.pdf new file mode 120000 index 0000000000000000000000000000000000000000..fdbc897227df059cfda790a16555e6e417682116 --- /dev/null +++ b/20190110/Zeichen_123.pdf @@ -0,0 +1 @@ +../common/Zeichen_123.pdf \ No newline at end of file diff --git a/20190110/a-gnu-head.pdf b/20190110/a-gnu-head.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3dcb28fc1147f4b801391c6e5d54a9c4c9311bd6 Binary files /dev/null and b/20190110/a-gnu-head.pdf differ diff --git a/20190110/es-20190110.pdf b/20190110/es-20190110.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d9e39180c5106296669ca5a6b0c8bbe91f69d347 Binary files /dev/null and b/20190110/es-20190110.pdf differ diff --git a/20190110/es-20190110.tex b/20190110/es-20190110.tex new file mode 100644 index 0000000000000000000000000000000000000000..3de523a4fb8395c9615265fa6d20b458fee39eab --- /dev/null +++ b/20190110/es-20190110.tex @@ -0,0 +1,759 @@ +% es-20190110.pdf - Lecture Slides on Embedded Systems +% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019 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/>. + +% README: Web-Interfaces, Software-Lizenzen + +\documentclass[10pt,t]{beamer} + +\usepackage{pgslides} +\usepackage{rotating} +\usepackage{tikz} +\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx} + +\usepackage{multirow} + +\newrgbcolor{lightyellow}{0.95 0.85 0.0} +\newrgbcolor{lightorange}{1.0 0.7 0.0} +\newrgbcolor{lightgreen}{0.0 0.8 0.0} + +\newcommand{\underconstruction}{% + \begin{picture}(0,0) + \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} + \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} + \end{picture}} + +\title{Eingebettete Systeme} +\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} +\date{10.\ Januar 2019} + +\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} + +\begin{document} + +\maketitleframe + +\nosectionnonumber{\inserttitle} + +\begin{frame} + + \shownosectionnonumber + + \begin{itemize} + \item[\textbf{1}] \textbf{Einführung} + \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}} + \item[\textbf{2}] \textbf{Einführung in Unix} + \item[\textbf{3}] \textbf{TCP/IP in der Praxis} + \item[\textbf{4}] \textbf{Bus-Systeme} + \item[\textbf{6}] \textbf{Echtzeit} + \item[\textbf{7}] \textbf{Web-Interfaces} + \item[\textbf{8}] \textbf{Software-Lizenzen} + \vspace*{-\smallskipamount} + \item[\textbf{\dots}] + \end{itemize} + + \vspace*{-1cm plus 1filll} + + \underconstruction + +\end{frame} + +\setcounter{section}{6} + +\section{Web-Interfaces} +\subsection{HTTP, HTML und CGI} + +\begin{frame}[fragile] + \showsection + \showsubsection + + \begin{lstlisting}[style=terminal] + $ ¡nc -C localhost 80¿ + GET / HTTP/1.1 + Host: localhost + + HTTP/1.1 200 OK + Date: Wed, 22 Nov 2017 19:58:55 GMT + Server: Apache/2.4.25 (Debian) + [...] + Content-Type: text/html + + <html> + <body> + <h1 align="center">Vertiefung<br>Vertiefung Systemtechnik – Eingebettete Systeme</h1> + <p align="center">23. November 2017</p> + <p align="center">Prof. Dr. Peter Gerwinski</p> + </body> + </html> + \end{lstlisting} + \vspace*{-1cm} +\end{frame} + +\begin{frame}[fragile] + \showsection + \showsubsection + + \begin{itemize} + \item + \newterm{Hypertext Transport Protocol (HTTP)}: Netzwerk-Protokoll\\ + HTML-Inhalt + zusätzliche Daten + \pause + \item + \newterm{Hypertext Markup Language (HTML)}: Markup-Sprache\\ + Inhalte + Formulare + \begin{onlyenv}<2> + \bigskip + \begin{lstlisting}[language=html,gobble=10] + <form action="/cgi-bin/welcome.cgi" method="get"> + Your name: <input type="text" name="name"><br> + <input type="submit"> + </form> + \end{lstlisting} + \vspace*{-2cm} + \end{onlyenv} + \pause + \item + \newterm{Common Gateway Interface (CGI)}: Schnittstelle zu Programmen\\ + Liste von Variablen mit Werten + \par\smallskip + \begin{itemize} + \item + \newterm{GET-Methode}: Umgebungsvariable \lstinline{QUERY_STRING} + \smallskip + \item + \newterm{POST-Methode}: Standardeingabe + \end{itemize} + \end{itemize} + \bigskip + \lstinline[style=terminal]{http://localhost/cgi-bin/welcome.cgi?name=Peter&answer=42} +\end{frame} + +\subsection{Externe CGI-Skripte, GET und POST} + +\begin{frame}[fragile] + \showsection + \showsubsection + + \begin{itemize}\itemsep\medskipamount + \item + HTML-Formular verweist auf CGI-Programm ("`CGI-Skript"') + \par + \lstinline[language=html]{<form action="/cgi-bin/welcome.cgi"} + \lstinline[language=html]{method="get">} + \item + Web-Server ruft CGI-Programm auf + \item + CGI-Programm wertet Variablenliste aus + \begin{itemize} + \item + GET-Methode: Umgebungsvariable \lstinline{QUERY_STRING} + \smallskip + \item + POST-Methode: Standardeingabe + \end{itemize} + \item + CGI-Programm gibt HTTP-Header und Inhalt aus + \par\smallskip + \begin{lstlisting}[language=bash] + #!/bin/bash + echo Content-Type: text/plain + echo + echo "Hello, world!" + \end{lstlisting} + \item + speziell: Inhalt ist \lstinline{text/html} + \end{itemize} +\end{frame} + +\subsection{Skript im Server: PHP} + +\begin{frame}[fragile] + \showsection + \showsubsection + + \begin{itemize} + \item + Interpreter in Web-Server integriert + \end{itemize} + + \bigskip + + \begin{lstlisting}[language=php] + <html> + <body> + Hello, <?php echo $_POST["name"]; ?>! + </body> + </html> + \end{lstlisting} +\end{frame} + +\subsection{Server im Skript: Twisted} + +\begin{frame}[fragile] + \showsection + \showsubsection + + \begin{itemize} + \item + individuell geschriebener Web-Server + \item + "`Baukasten"' in JavaScript: \file{node.js} + \item + "`Baukasten"' in Python: \file{Twisted} + \end{itemize} + + \bigskip + + \begin{lstlisting}[language=python] + def render_GET(self, request): + return '<html><body><form method="POST">Your name: ' \ + + '<input name="name" type="text" /><br/>' \ + + '<input type="submit"></form></body></html>' + + def render_POST(self, request): + return '<html><body>Hello, %s!</body></html>' \ + % (cgi.escape(request.args["name"][0]),) + \end{lstlisting} +\end{frame} + +\section{Software-Lizenzen} +\subsectionnonumber{Vorab: Dies ist keine Rechtsdienstleistung!} + +\begin{frame} + \showsection + \pause + \showsubsectionnonumber + + \textbf{\S\,2 RDG: Begriff der Rechtsdienstleistung} + + \smallskip + + (1) Rechtsdienstleistung ist jede Tätigkeit in + {\only<3->{\color{red}}konkreten} fremden Angelegenheiten, + sobald sie eine rechtliche Prüfung des + {\only<3->{\color{red}}Einzelfalls} erfordert. + + \medskip + + \strut\hfill Quelle: \url{http://www.gesetze-im-internet.de/rdg/} + + \pause + \pause + + \bigskip + + Konkreter Fall: + \begin{itemize} + \item + Konkretes Programm unter Lizenz A + \item + Konkrete Bibliothek unter Lizenz B + \item + Beratung: Paßt das zusammen? + \arrowitem + Rechtsdienstleistung + \end{itemize} +\end{frame} + +\subsectionnonumber{Lizenz-Beratung unter Kollegen?} + +\begin{frame} + \showsection + \showsubsectionnonumber + + \textbf{\S\,6 RDG: Unentgeltliche Rechtsdienstleistungen} + + \smallskip + + (1) Erlaubt sind Rechtsdienstleistungen, die nicht im Zusammenhang mit einer entgeltlichen + Tätigkeit stehen (unentgeltliche Rechtsdienstleistungen). + + \smallskip + + (2) Wer unentgeltliche Rechtsdienstleistungen außerhalb familiärer, nachbarschaftlicher oder + ähnlich enger persönlicher Beziehungen erbringt, muss sicherstellen, dass die Rechtsdienstleistung + durch eine Person, der die entgeltliche Erbringung dieser Rechtsdienstleistung erlaubt ist, durch + eine Person mit Befähigung zum Richteramt oder unter Anleitung einer solchen Person erfolgt. + [\,\dots] + + \medskip + + \strut\hfill Quelle: \url{http://www.gesetze-im-internet.de/rdg/} + + \pause + + \bigskip + + \begin{itemize} + \arrowitem + Nur allgemein beraten!\\ + Konkrete Fälle an Anwalt verweisen! + \end{itemize} + +\end{frame} + +\subsection{Überblick} +\newcommand{\lcr}{\includegraphics[width=0.5cm]{Copyright.pdf}} +\newcommand{\lcl}{\includegraphics[width=0.5cm]{Copyleft.pdf}} +\newcommand{\lcc}{\includegraphics[width=0.5cm]{creative-commons.png}} +\newcommand{\lpd}{\includegraphics[width=0.5cm]{PD-icon.pdf}} + +\begin{frame} + \showsection + \showsubsection + + \begin{itemize} + \item + Grundlage: Urheberrecht ($\approx$ Copyright) \hfill \lcr\\ + "`Wer Software schreibt, entscheidet, was damit geschehen darf."' + \pause + \medskip + \item + anderen etwas erlauben: Lizenz + \pause + \medskip + \item + "`gar keine Lizenz"' = alles verboten + \end{itemize} +\end{frame} + +\begin{frame} + \showsection + \showsubsection + + \begin{center} + \begin{picture}(12,5) + \put(5,5){\makebox(0,0){Software-Lizenz}} + \put(4.5,4.7){\vector(-1,-1){1}} + \put(5.5,4.7){\vector(1,-1){1}} + \put(3,3.4){\makebox(0,0){proprietär}} + \put(7,3.4){\makebox(0,0){frei / Open Source}} + \put(6.5,3.1){\vector(-1,-1){1.5}} + \put(7.5,3.1){\vector(1,-1){1}} + \put(4.5,1.3){\makebox(0,0){freizügig}} + \put(9,1.8){\makebox(0,0){Copyleft}} + \end{picture}% + \begin{onlyenv}<2->% + \begin{picture}(0,0)(12,0) + \color{darkgreen} + \put(2.5,3.1){\vector(-1,-1){0.5}} + \put(3.5,3.1){\vector(1,-1){0.5}} + \put(2.0,2.3){\makebox(0,0){kommerziell}} + \put(4.0,2.3){\makebox(0,0){gratis}} + \put(4.0,1.0){\vector(-1,-1){0.5}} + \put(5.0,1.0){\vector(1,-1){0.5}} + \put(3.5,0.2){\makebox(0,0){kommerziell}} + \put(5.5,0.2){\makebox(0,0){gratis}} + \put(8.5,1.5){\vector(-1,-1){0.5}} + \put(9.5,1.5){\vector(1,-1){0.5}} + \put(8.0,0.7){\makebox(0,0){kommerziell}} + \put(10.0,0.7){\makebox(0,0){gratis}} + \end{picture}% + \end{onlyenv}% + \end{center} + +\end{frame} + +\subsection{Lizenzmodelle} + +\begin{frame} + \showsection + \showsubsection + + \begin{itemize} + \item + Freie Software darf man + \hfill\begin{picture}(0,0) + \put(-1.8,-0.8){\includegraphics[width=2cm]{a-gnu-head.pdf}} + \end{picture} + \begin{itemize} + \item[0.] + benutzen, + \item[1.] + studieren und anpassen, + \item[2.] + weitergeben, + \item[3.] + weiterentwickeln und veröffentlichen. + \end{itemize} + \strut\hfill + 4 Grundfreiheiten -- + \url{http://www.gnu.org/philosophy/free-sw}\\ + \pause + \begin{picture}(0,0) + \color{red} + \put(6.95,1.85){\vector(-1,0){1.5}} + \put(7.00,1.75){\vector(-1,-1){0.5}} + \put(7.05,1.85){\makebox(0,0)[l]{Quelltext erforderlich!}} + \end{picture}% + \pause + \medskip + \item + Open Source: i.\,w.\ dasselbe in 10 Kriterien + \hfill\begin{picture}(0,0) + \put(-1.2,-0.5){\includegraphics[width=1.1cm]{osi-logo.jpg}} + \end{picture}\\ + Begründung: technisch statt philosophisch\\[\smallskipamount] + \strut\hfill + Definition: + \url{http://www.opensource.org/docs/osd} + \end{itemize} + +\end{frame} + +\begin{frame} + \showsection + \showsubsection + + \begin{itemize} + \item + Proprietäre Software / Closed Source\\ + Gegenteil von freier Software / Open Source + \medskip + \begin{itemize} + \item + Benutzen, Weitergeben und/oder Veröffentlichen\\ + erfordert individuelle Erlaubnis des Rechteinhabers + \medskip + \item + Studieren, Anpassen und/oder Weiterentwickeln\\ + nur dem Rechteinhaber erlaubt + \pause + {\color{red}und/oder möglich\\ + (Quelltext erforderlich!)} + \end{itemize} + \end{itemize} + +\end{frame} + +\begin{frame} + \showsection + \showsubsection + + \begin{itemize} + \item + Freie Software + \smallskip + \begin{itemize} + \item + Copyleft\only<2->{:}\\[\smallskipamount] + \begin{visibleenv}<2-> + Weitergabe nur unter gleichen Bedingungen erlaubt\\ + \textarrow\ Umwandlung in proprietäre Software nicht erlaubt + \end{visibleenv} + \medskip + \item + freizügig\only<3->{:}\\[\smallskipamount] + \begin{visibleenv}<3-> + Weitergabe auch unter anderen Bedingungen erlaubt\\ + \textarrow\ Umwandlung in \only<4->{Copyleft- oder }proprietäre Software erlaubt + \end{visibleenv} + \begin{onlyenv}<5-> + \medskip + \item + Teil-Copyleft:\\[\smallskipamount] + Linken mit proprietärer Software erlaubt + \end{onlyenv} + \end{itemize} + \end{itemize} + +\end{frame} + +\subsection{Beispiel-Programme} + +\begin{frame} + \showsection + \showsubsection + + \begin{center} + \renewcommand{\arraystretch}{2.5} + \begin{tabular}{|c||c|c|c|}\hline + & \multirow{2}{*}{proprietär} & \multicolumn{2}{c|}{frei}\\\cline{3-4} + & & freizügig & Copyleft \\\hline\hline + \color{darkgreen}kommerziell + & \color{structure}\visible<2->{\shortstack{\\\includegraphics[width=0.5cm]{Microsoft_Power_Point_2010.png}\\\small Microsoft PowerPoint}} + & \color{structure}\visible<6->{\shortstack{\\\includegraphics[width=1.0cm]{721px-Pfs-logo.png}\\\small pfSense}} + & \color{structure}\visible<5->{\shortstack{\\\includegraphics[width=0.8cm]{open-xchange.jpg}\\\small Open-Xchange}} \\\hline + \color{darkgreen}gratis + & \color{structure}\visible<4->{\shortstack{\\\includegraphics[width=0.8cm]{Adobe-Reader.png}\\\small Adobe Reader}} + & \color{structure}\visible<6->{\shortstack{\\\includegraphics[width=0.5cm]{putty.png}\\\small PuTTY}} + & \color{structure}\visible<3->{\shortstack{\\\includegraphics[width=0.5cm]{libreoffice-impress.pdf}\\\small LibreOffice Impress}} \\\hline + \end{tabular} + \end{center} + \begin{onlyenv}<7->% + \begin{picture}(0,0)(0,-0.5) + \color{red} + \put(7.38,1.38){$\updownarrow$} + \put(9.8,1.38){$\updownarrow$} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<8->% + \begin{picture}(0,0)(0,-0.7) + \color{red} + \put(6.3,2.7){$\longleftarrow$} + \put(8.05,2.7){$\longrightarrow$} + \end{picture}% + \end{onlyenv}% + +\end{frame} + +\subsection{Beispiel-Lizenzen} + +\begin{frame} + \showsection + \showsubsection + + Generell: Gewährleistungsausschluß + + \bigskip + + \pause + Freie Software / Open Source + \begin{itemize} + \item + strenges Copyleft: + GNU GPL, GNU FDL, CC BY-SA + \pause + \item + Teil-Copyleft: + GNU LGPL, Mozilla-Lizenz, Microsoft Public License + \pause + \item + freizügig: + Modifizierte BSD-Lizenz, Apache-Lizenz, CC BY,\\ + CC0, Public Domain + \end{itemize} + \pause + \strut\hfill\url{http://www.gnu.org/licenses/license-list} + +\end{frame} + +\begin{frame} + \showsection + \showsubsection + + Generell: Gewährleistungsausschluß + + \bigskip + + Proprietäre Software + + \begin{itemize} + \item + Lizenz i.\,d.\,R.\ für jedes Programm anders + \pause + \medskip + \item + "`Normales"' Beispiel (Januar 2012):\\ + Adobe Reader EULA\\[\smallskipamount] + Verwenden \only<3->{nur auf PCs }erlaubt\pause\pause,\\ + Studieren und Weitergeben nicht erlaubt\pause,\\ + Screenshots nicht erlaubt\\[\smallskipamount] + \pause + Der Software ist die Kommunikation mit Adobe\\ + und mit Werbeanbietern erlaubt.\\[\medskipamount] + \pause + \strut\hfill\url{http://www.adobe.com/products/eulas/reader/x/eula_de_de.html} + \medskip + \end{itemize} + +\end{frame} + +\begin{frame} + \showsection + \showsubsection + + Generell: Gewährleistungsausschluß + + \bigskip + + Proprietäre Software + + \begin{itemize} + \item + Kontroverses Beispiel (Januar 2012):\\ + iBooks Author EULA\\[\smallskipamount] + Layout für elektronische Bücher erstellen\\ + \pause + \textarrow\ Buch darf nur über den iBooks Store verkauft werden\\[\medskipamount] + \strut\hfill\url{http://venomousporridge.com/post/16126436616/}\\ + \strut\hfill\url{ibooks-author-eula-audacity} + \end{itemize} + +\end{frame} + +\begin{frame} + \showsection + \showsubsection + + Generell: Gewährleistungsausschluß + + \bigskip + + Proprietäre Software + + \begin{itemize} + \item + Kontroverses Beispiel (September 2001):\\ + Microsoft FrontPage 2002 EULA\\[\smallskipamount] + Webseiten erstellen\\ + \pause + \textarrow\ Webseiten dürfen Microsoft nicht "`herabsetzen"'\\[\medskipamount] + \strut\hfill\url{http://www.heise.de/newsticker/data/jes-21.09.01-001/} + \end{itemize} + +\end{frame} + +\begin{frame} + \showsection + \showsubsection + + Generell: Gewährleistungsausschluß + + \bigskip + + Proprietäre Software + + \begin{itemize} + \item + Kontroverses Beispiel (Juli 2001):\\ + Microsoft Mobile Internet Toolkit EULA\\[\smallskipamount] + Software erstellen\\ + \pause + \textarrow\ Verbot, {\color{darkgreen}"`virale"'} Software + \only<3->{(= Copyleft-Software) }zu erstellen \\ + \pause + \pause + \textarrow\ Verbot, Copyleft-Werkzeuge mit einzusetzen \\ + \textarrow\ Verbot, entwickelte Software gemeinsam mit Copyleft-Software\\ + \strut\phantom{\textarrow} einzusetzen oder zu vertreiben\\[\medskipamount] + \strut\hfill\url{http://web.archive.org/web/20010626201507/}\\ + \strut\hfill\url{http://msdn.microsoft.com/downloads/eula_mit.htm} + \end{itemize} + + % Nicht auf derselben CD: http://msdn.microsoft.com/downloads/eula_mit.htm, 22.7.2001 + +\end{frame} + +\subsection{Copyleft} + +\begin{frame} + \showsection + \showsubsection + + Microsoft: Copyleft-Software ist {\color{darkgreen}"`viral"'}\\[\smallskipamount] + \strut\hfill\url{http://web.archive.org/web/20010626201507/}\\ + \strut\hfill\url{http://msdn.microsoft.com/downloads/eula_mit.htm} + + \bigskip + + \begin{center} + \color{structure}% + \begin{onlyenv}<2->% + \begin{picture}(10,5) + \put(5,5){\makebox(0,0){Code aus fremder Software benutzen}} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<3->% + \begin{picture}(0,0)(10,0) + \put(4.5,4.7){\vector(-1,-1){1}} + \put(3.5,3.4){\makebox(0,0){\strut GPL-Software:}} + \put(3.5,2.95){\makebox(0,0){\strut{\color{darkgreen}bedingt} erlaubt}} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<4->% + \begin{picture}(0,0)(10,0) + \color{darkgreen} + \put(3.0,2.7){\vector(0,-1){0.7}} + \put(3.0,1.8){\makebox(0,0){\strut Gesamtwerk muß}} + \put(3.0,1.35){\makebox(0,0){\strut unter GPL stehen}} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<5->% + \begin{picture}(0,0)(10,0) + \put(5.5,4.7){\vector(1,-1){1}} + \put(6.5,3.4){\makebox(0,0){\strut MS-Software:}} + \put(6.5,2.95){\makebox(0,0){\strut{\color{red}nicht} erlaubt}} + \end{picture}% + \end{onlyenv}% + \begin{onlyenv}<6->% + \begin{picture}(0,0)(10,0) + \color{black} + \put(5.5,1.2){\makebox(0,0)[l]{\textarrow\ + \begin{minipage}[t]{5cm} + Lizenzen lesen,\\ + sorgfältig auswählen + \end{minipage}}} + \end{picture}% + \end{onlyenv}% + \end{center} + \vspace*{-1cm} + +\end{frame} + +\subsection{Fazit} + +\begin{frame} + \showsection + \showsubsection + \begin{itemize} + \item + Generell: Vor Benutzung Lizenz lesen, durch Anwalt prüfen lassen + \pause + \item + "`gar keine Lizenz"' = alles verboten + \end{itemize} + + \pause + Bearbeitung, Weitergabe und Mitverwendung + \begin{itemize} + \pause + \item + nicht erlaubt oder nicht möglich + \textarrow\ proprietäre Software / Closed Source + \pause + \item + erlaubt \textarrow\ freie Software / Open Source + \begin{itemize} + \pause + \item + bei Mitverwendung Lizenz übernehmen \textarrow\ Copyleft + \pause + \item + Lizenz umwandelbar \textarrow\ freizügig + \end{itemize} + \end{itemize} + + \pause + + \bigskip + + {\large\color{structure}\bf Lizenz für diese Lehrmaterialien\par} + \begin{itemize} + \item + Vortragsfolien und Skripte: Copyleft (CC-BY-SA 3.0 oder GNU GPL v3+) + \item + Beispiel-Programme: freizügig (modifizierte BSD-Lizenz) + \end{itemize} + +\end{frame} + +\end{document} diff --git a/20190110/libreoffice-impress.pdf b/20190110/libreoffice-impress.pdf new file mode 100644 index 0000000000000000000000000000000000000000..df752f1d6d50d46ed2f1ed9964190ba4dad2fa75 Binary files /dev/null and b/20190110/libreoffice-impress.pdf differ diff --git a/20190110/logo-hochschule-bochum-cvh-text-v2.pdf b/20190110/logo-hochschule-bochum-cvh-text-v2.pdf new file mode 120000 index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8 --- /dev/null +++ b/20190110/logo-hochschule-bochum-cvh-text-v2.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20190110/logo-hochschule-bochum-cvh-text.pdf b/20190110/logo-hochschule-bochum-cvh-text.pdf new file mode 100644 index 0000000000000000000000000000000000000000..649b6a8b8f51ddc370a3626310c172fb3f8b0807 Binary files /dev/null and b/20190110/logo-hochschule-bochum-cvh-text.pdf differ diff --git a/20190110/logo-hochschule-bochum.pdf b/20190110/logo-hochschule-bochum.pdf new file mode 120000 index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1 --- /dev/null +++ b/20190110/logo-hochschule-bochum.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20190110/open-xchange.jpg b/20190110/open-xchange.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1e06bfb8722813f3e4dfff4c3a5da2016d594a2 Binary files /dev/null and b/20190110/open-xchange.jpg differ diff --git a/20190110/osi-logo.jpg b/20190110/osi-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9d29548b455ec1bb9ee4e7a9b9757c1567dc375 Binary files /dev/null and b/20190110/osi-logo.jpg differ diff --git a/20190110/pgslides.sty b/20190110/pgslides.sty new file mode 120000 index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64 --- /dev/null +++ b/20190110/pgslides.sty @@ -0,0 +1 @@ +../common/pgslides.sty \ No newline at end of file diff --git a/20190110/putty.png b/20190110/putty.png new file mode 100644 index 0000000000000000000000000000000000000000..63693df07f200e3e74119fed16237b438cac651b Binary files /dev/null and b/20190110/putty.png differ