diff options
Diffstat (limited to 'realtime')
42 files changed, 3368 insertions, 46 deletions
diff --git a/realtime/Makefile b/realtime/Makefile new file mode 100644 index 0000000..fa8db4f --- /dev/null +++ b/realtime/Makefile @@ -0,0 +1,7 @@ +SUBDIRS = rt-app-basics rt-basics rt-specialties + +all clean:: + for dir in $(SUBDIRS) ; do \ + (cd $$dir && make $@); \ + done + diff --git a/realtime/rt-basics/handout_rt-basics_de.tex b/realtime/rt-basics/handout_rt-basics_de.tex index 4c391b2..8d98ccc 100644 --- a/realtime/rt-basics/handout_rt-basics_de.tex +++ b/realtime/rt-basics/handout_rt-basics_de.tex @@ -1,17 +1,173 @@ -\documentclass{article} +\documentclass{lxarticle} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{lxheaders} +\usepackage{lxextras} \begin{document} -\section*{Titel} +\section*{Realtime Linux} -\subsection*{Abschnitt1} +\subsection*{Grundlagen} -Text +\subsubsection*{Was ist Echtzeit?} +Vor der Betrachtung verschiedener Ansätze, Linux echtzeitfähig zu machen, ist es +notwendig, einige grundlegende Begrifflichkeiten zur erläutern: +\begin{itemize} +\item Echtzeit: +Zur Definition eines Echtzeitsystems kann man folgende Aussagen Treffen: Auf +einem Echtzeitsystem hängt die Korrektheit einer Berechnung nicht nur von ihrer +logischen Korrektheit, sondern auch von der Ausführung zum korrekten Zeitpunkt +ab. Das Nichteinhalten eines bestimmten Zeitrahmens resultiert in einem Fehler. +\item Latenzzeit: Unter Latenzzeit versteht man den Zeitraum zwischen dem +Auftreten eines Events und der Reaktion auf dieses Event. +\item Jitter: Mit Jitter bezeichnet man die Varianz der Latenzzeit. +\end{itemize} -\subsection*{Abschnitt2} +\subsubsection*{Anwendungsbereiche} +Die wohl gängigsten Anwendungsbereiche für Echtzeitsysteme sind die +Steuerungs- und Automatisierungstechnik, Multimediasysteme und die Luft- und +Raumfahrttechnik. Ein weiteres interessantes Einsatzgebiet stellt die +Finanzdienstleistung dar. Hier geht es insbesondere um die zeitgenaue, +zuverlässige Abwicklung von Finanztransaktionen über hochverteilte Systeme. -Text +\subsubsection*{Anforderungen an ein Echtzeitsystem} +Ein Echtzeitsystem muß in der Lage sein, in einem garantierten Zeitrahmen auf +ein Ereignis zu reagieren. Es muß also möglich sein, in möglichst kurzer Zeit +von einer niederprioren Task auf eine hochpriore Task umzuschalten, falls diese +Rechenzeit benötigt. Das System muß also möglichst ''feingranular'' +unterbrechbar sein. +Doch allein die Unterbrechbarkeit kann kein deterministisches Zeitverhalten +garantieren. So kann eine niederpriore Task Resourcen blockieren, die von einer +hochprioren Task benötigt werden. Wird die niederpriore Task nun unterbrochen, +kommt es zur ''Prioritätsinversion / priority inversion'', da die hochpriore Task +auf die Freigabe der Resource wartet, diese aber erst wieder dann freigegeben +wird, wenn die niederpriore Task wieder Rechenzeit bekommt. +Gelöst werden kann dieses Problem durch ''prioriy inheritance'' und ''priority ceiling''. +\begin{itemize} +\item Prioritätsvererbung / priority inheritance: Hier wird die Priorität der +niederprioren Task angehoben, um zu erreichen, daß die blockierte Resource +freigegeben werden kann. +\item Prioritätsgrenzen / priority ceiling: Hier wird für jede Resource eine +Prioritätsgrenze festgelegt. Jede Task, die die Resource belegt, wird auf die +Prioritätsgrenze der Resource angehoben. +\end{itemize} + +\subsection*{Realtime Linux Varianten} +\subsubsection*{Historisches zu Echtzeitlinux} +Im Gegensatz zu traditionellen Echtzeitsystem wurde Linux ursprünglich nicht als +solches designt. Als General Purpose Operating System wurde Linux auf Fairness +und Durchsatz optimiert. Linux echtzeitfähig zu machen, bedeutet also, ein +Standardbetriebssystem um Echtzeitfunktionen bzw. entsprechende Sonderfälle zu +erweitern. Mit dieser Tatsache lassen sich die zwei technischen Ansätze für +Realtime Linux erklären. +\begin{itemize} +\item Dual Kernel Ansatz: Hier koexistieren ein Echtzeitkernel, der für alle +zeitkritischen Dinge zuständig ist, und ein Standard Linux Kernel. Dieser Ansatz +setzt voraus, daß alle externen Events zuerst vom Echtzeitkernel bearbeitet +werden, bevor Sie an den Linux Kernel weitergereicht werden können. Die +bekanntesten Vertreter dieser Technik sind RTAI und Xenomai. +\item In-Kernel Ansatz: Diese Methode macht Linux an sich zu einem +Echtzeitsystem. Dieser Ansatz wird mit dem Realtime Preemption Patch verfolgt +und ist die Variante, die von den Linux Entwicklern zur Integration in den +Hauptzweig von Linux abgenickt wurde. +\end{itemize} + +\subsubsection*{RTAI} +Das Realtime Application Interface (RTAI) ist eine Entwicklung der Technischen +Universität Mailand und entstand unter der Schirmherrschaft von Professor Paolo +Mantegazza. Oberstes Designziel von RTAI ist und war es, die kleinstmöglichen +Latenzzeiten auf einer gegebenen Hardwareplattform zu erzielen. Dieses +Designziel bedingt diverse Einschränkungen für RTAI Applikationen. Weiterhin +wird nur eine recht kleine Anzahl an Zielplattormen unterstützt (derzeit x86, +x86\_64 und diverse ARM Plattformen). +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/rtai.png} +\caption{Technischer Aufbau von RTAI} +\label{img:rtai} +\end{figure} +RTAI ist ein typischer Vertreter des Dual Kernel Ansatzes. Abbildung +\ref{img:rtai} zeigt die Funktionsweise von RTAI. + +\subsubsection*{Xenomai} +Das Xenomai Projekt wurde im Jahre 2001 gegründet. Im Gegensatz zu RTAI erlaubt +Xenomai auch Echtzeit im Userpace (RTAI erlaubt dies nur sehr eingeschränkt). +Die Besonderheit von Xenomai sind die sogenannten Skins, die es vereinfachen sollen, +Applikationen von anderen Echtzeitsystemen nach Xenomai zu portieren. +Xenomai Skins bilden die API dieser Systeme ab. Xenomai unterstützt derzeit +folgende Architekturen: PowerPC32, PowerPC64, x86, x86\_64, Blackfin, ARM und +ia64). Die zentralen Begriffe im Designkonzept von Xenomai stellen Xenomai +Nucleus, die Interrupt Pipeline (IPIPE), Hardware Abstraction Layer (HAL) und +System Abstraction Layer (SAL) dar. +IPIPE kann bildlich als virtueller Interruptkontroller betrachtet werden. +Sie organisiert das System in verschiedenen Domains. Interrupts werden von +IPIPE entgegengenommen und an die einzelnen Domains verteilt. +Nucleus beeinhaltet die Xenomai Core Funktionalität. Dieser ist zuständig dafür, +alle notwendigen Resourcen bereitzustellen, die Skins benötigen, um die Funktionalität +von RTOSsen nachbilden zu können. Der Hardware Abstraction Layer beinhaltet +den Plattform und CPU abhängigen Code. Alle darüberliegenden Layer (darunter auch Nucleus) +bauen darauf auf. HAL ist kombiniert mit dem System Abstraction Layer. Dieser +soll die darüberliegenden Layer, wie z.B. Nucleus, noch portierbarer machen. +Abbildung \ref{img:xenomai} zeigt das technische Zusammenspiel der Xenomai +Komponenten. Abbildung \ref{img:ipipe} zeigt die Funktionsweise von IPIPE. +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/xenomai.png} +\caption{Technischer Aufbau von Xenomai} +\label{img:xenomai} +\end{figure} +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/ipipe.png} +\caption{Technische Funktionsweise von IPIPE} +\label{img:ipipe} +\end{figure} + +\subsubsection*{Preempt RT} +Der Realtime Preemption Patch entstand ursprünglich aus Arbeiten von Ingo Molnar +und Thomas Gleixner. Beide sind bis zum heutigen Zeitpunkt die treibenden Kräfte +bei der Entwicklung von Preempt RT. +Im Gegensatz zu RTAI und Xenomai macht Preempt RT den Linux Kernel an sich +echtzeitfähig. Dies wird im Besonderen durch folgende Mechanismen erreicht: +\begin{itemize} +\item Sleeping Spinlocks: Spinlocks werden durch RT Mutexe ersetzt. Raw +Spinlocks ersetzen die Eigenschaft der ursprünglichen Spinlocks. +\item Threaded Interrupt Handlers: Interrupt Handler laufen per Default nicht im +harten Interruptkontext, sondern als Kernelthread. +\end{itemize} +Viele Mechanismen, die ursprünglich in Preempt RT entwickelt wurden, haben +bereits Ihren Weg in den Mainline Linuxzweig gefunden: High Resolution Timer +(Hochauflösende Timer unabhängig vom Scheduler Tick), Priority Inheritance, +generisches Interrupthandling für alle Architekturen und mit 2.6.30 nun auch die +Threaded Interrupt Handler. +Weiterhin hat sich die Linux Entwicklergemeinde bereits 2006 darauf geeinigt, +daß Preempt RT in den Linux Kernel integriert wird. Weiterhin bietet der +Realtime Preemption Patch den großen Vorteil, daß Echtzeitapplikationen als POSIX +Realtime Applikationen geschrieben werden. Es wird keine spezielle API +verwendet. Preempt RT Unterstützt eine Vielzahl von Architekturen (PowerPc, x86, +x86\_64, MIPS, ARM, ...). +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/preempt_rt.png} +\caption{Überblick Preempt RT} +\label{img:preempt_rt} +\end{figure} +Wie Abbildung \ref{img:preempt_rt} zeigt, integriert Preempt RT die +Echtzeitfunktionalität ''nahtlos'' in den Linux Kernel. Auch die Entwickler +anderer Projekte haben die Vorzüge von Preempt RT bereits erkannt. Die Roadmap +für Xenomai 3 sieht Preempt RT Support vor. Dies würde den Einsatz von Xenomai +Skins auf Preempt RT Kerneln ermgöglichen. + +\subsection*{Kontrollfragen} + +\begin{enumerate} +\item Was sind die wichtigsten Anforderungen an ein Echtzeitsystem? +\item Welche beiden Ansätze gibt es, um Linux echtzeitfähig zu machen? +\item Was sind die bekanntesten Vertreter für Echtzeitlinux und welche der oben +beschriebenen Ansätze verfolgen Sie? +\item Wird für das Schreiben einer Echtzeitapplikation mit Preempt RT eine +spezielle API benötigt? +\end{enumerate} \end{document} diff --git a/realtime/rt-basics/hints_rt-basics_de.tex b/realtime/rt-basics/hints_rt-basics_de.tex index fd15c6e..11c5c34 100644 --- a/realtime/rt-basics/hints_rt-basics_de.tex +++ b/realtime/rt-basics/hints_rt-basics_de.tex @@ -1,17 +1,18 @@ -\documentclass{article} +\documentclass{lxarticle} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{lxheaders} +\usepackage{lxextras} \begin{document} -\section*{Block \lq Grundlagen Realtime\rq} +\section*{Block \lq Was ist Linux?\rq} \subsection*{Lernziele} \begin{itemize} -\item Kennenlernen der verschiedenen Ansätze (RTAI, Xenomai, RT-Preempt) -\item Kennenlernen der Funktion von RT-Preempt -\item Verstehen, wie der RT-Preempt-Patch beschafft und angewendet werden kann -\item Anwendungen, Grenzen, Geschichte von RT-Preempt +\item Lernziel 1 +\item Lernziel 2 +\item Lernziel 3 \end{itemize} \subsection*{Unterrichts-Ablauf} diff --git a/realtime/rt-basics/images/dual_kernel.png b/realtime/rt-basics/images/dual_kernel.png Binary files differnew file mode 100644 index 0000000..c58d156 --- /dev/null +++ b/realtime/rt-basics/images/dual_kernel.png diff --git a/realtime/rt-basics/images/dual_kernel.svg b/realtime/rt-basics/images/dual_kernel.svg new file mode 100644 index 0000000..31f80ec --- /dev/null +++ b/realtime/rt-basics/images/dual_kernel.svg @@ -0,0 +1,251 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3367" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="dual_kernel.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/dual_kernel.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs3369"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3375" /> + <inkscape:perspective + id="perspective3442" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3230" /> + <inkscape:perspective + id="perspective10" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="285.06246" + inkscape:cy="582.52552" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1024" + inkscape:window-height="694" + inkscape:window-x="0" + inkscape:window-y="-60" /> + <metadata + id="metadata3372"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <rect + style="fill:#fc7100;fill-opacity:1;stroke:#000000;stroke-width:1.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3448" + width="474.28571" + height="84.285713" + x="91.428574" + y="574.36218" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="237.14285" + y="634.36218" + id="text3377"><tspan + sodipodi:role="line" + id="tspan3379" + x="237.14285" + y="634.36218">Hardware</tspan></text> + <image + y="156.14793" + x="212.8571" + id="image3444" + height="257.28574" + width="237.14284" + sodipodi:absref="/home/jan/work/omnicron/tmp/tux_huge.png" + xlink:href="/home/jan/work/omnicron/tmp/tux_huge.png" /> + <rect + style="fill:#fc7100;fill-opacity:1;stroke:#000000;stroke-width:2.17993641;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3450" + width="602.27716" + height="63.705776" + x="28.861397" + y="465.2236" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="217.14285" + y="511.21933" + id="text3452"><tspan + sodipodi:role="line" + id="tspan3454" + x="217.14285" + y="511.21933">Micro Kernel</tspan></text> + <g + transform="matrix(0.6623212,0,0,0.6661406,103.9692,395.35442)" + id="g3519" + inkscape:label="Calque 1"> + <g + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + id="g3252"> + <path + sodipodi:type="star" + style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:27.82019997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:24.29999924;stroke-dasharray:none;stroke-opacity:1" + id="path2383" + sodipodi:sides="3" + sodipodi:cx="191.09729" + sodipodi:cy="183.1349" + sodipodi:r1="187.79253" + sodipodi:r2="93.896263" + sodipodi:arg1="0.52359878" + sodipodi:arg2="1.5707963" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="M 353.73039,277.03117 L 191.09729,277.03117 L 28.464191,277.03117 L 109.78074,136.18677 L 191.09729,-4.6576233 L 272.41384,136.18677 L 353.73039,277.03117 z" + transform="matrix(0.35945,0,0,0.35945,28.8492,30.1932)" /> + <g + id="g3163" + transform="translate(-0.510735,-1.02147)"> + <path + id="path3155" + d="M 94.9375,108.40625 C 94.290019,108.49207 93.517293,108.86225 92.914114,109.2178 C 92.310935,109.57335 91.770059,109.9684 91.3641,110.47287 C 90.958141,110.97733 90.867103,111.63392 90.72033,112.21243 C 90.573557,112.79094 90.525438,113.26403 90.78125,113.90625 C 91.037062,114.54847 91.509887,115.41161 92.055252,115.93025 C 92.600617,116.44889 92.987635,116.9934 93.711376,117.22111 C 94.435117,117.44881 95.279851,117.7648 96,117.875 C 96.720149,117.9852 97.25089,117.77544 97.962055,117.59387 C 98.67322,117.4123 99.587555,117.07103 100.18371,116.67654 C 100.77986,116.28205 101.11025,115.82907 101.4724,115.36585 C 101.83455,114.90263 101.94155,114.45667 101.97237,113.8935 C 102.00319,113.33033 101.88899,112.7735 101.48418,112.24977 C 101.07937,111.72604 100.64982,111.06226 100.17793,110.52197 C 99.706043,109.98168 99.142309,109.4912 98.534118,109.19736 C 97.925927,108.90352 97.23572,108.65607 96.630291,108.50605 C 96.024862,108.35603 95.584981,108.32043 94.9375,108.40625 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + transform="matrix(1.41667,0,0,1.57627,-38.6775,-62.2193)" + sodipodi:nodetypes="czzzzzzzzzzzzzzzz" /> + <path + id="path3157" + d="M 95.757212,60.26801 C 94.839875,60.407623 93.290633,60.580795 92.160034,60.92426 C 91.029435,61.267725 89.911438,61.914443 89.056586,63.01801 C 88.201734,64.121577 87.553727,65.489742 87.081665,67.17426 C 86.609604,68.858778 86.309324,70.138052 86.376336,72.54926 C 86.443347,74.960468 86.871609,78.248439 87.363796,81.26801 C 87.855982,84.287581 88.351917,87.858919 88.986053,90.86176 C 89.620189,93.864601 90.703057,96.535287 91.517717,98.646292 C 92.332377,100.7573 93.087791,102.49111 93.836704,103.50233 C 94.585617,104.51355 94.896259,104.9036 95.686679,105.33051 C 96.477099,105.75742 97.567003,106.06303 98.522102,105.98676 C 99.477201,105.91049 100.41608,104.41885 101.13839,103.59677 C 101.8607,102.77469 102.88842,99.504338 103.69761,96.48345 C 104.5068,93.462561 105.30597,91.53964 106.35271,86.599296 C 107.39945,81.658952 108.47781,74.293841 108.97508,71.01801 C 109.47234,67.742179 109.22234,67.929863 108.72878,66.467389 C 108.23521,65.004915 107.35398,64.101592 106.50643,63.26801 C 105.65887,62.434428 105.19482,61.932957 103.70986,61.473812 C 102.2249,61.014666 101.16364,60.702221 99.837564,60.539052 C 98.511488,60.375883 96.674549,60.128397 95.757212,60.26801 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + sodipodi:nodetypes="czzzzzzzzzzzzzzzzzzz" /> + </g> + </g> + </g> + <g + transform="matrix(0.6623212,0,0,0.6661406,262.54063,386.49727)" + id="g3526" + inkscape:label="Calque 1"> + <g + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + id="g3528"> + <path + sodipodi:type="star" + style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:27.82019997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:24.29999924;stroke-dasharray:none;stroke-opacity:1" + id="path3530" + sodipodi:sides="3" + sodipodi:cx="191.09729" + sodipodi:cy="183.1349" + sodipodi:r1="187.79253" + sodipodi:r2="93.896263" + sodipodi:arg1="0.52359878" + sodipodi:arg2="1.5707963" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="M 353.73039,277.03117 L 191.09729,277.03117 L 28.464191,277.03117 L 109.78074,136.18677 L 191.09729,-4.6576233 L 272.41384,136.18677 L 353.73039,277.03117 z" + transform="matrix(0.35945,0,0,0.35945,28.8492,30.1932)" /> + <g + id="g3532" + transform="translate(-0.510735,-1.02147)"> + <path + id="path3534" + d="M 94.9375,108.40625 C 94.290019,108.49207 93.517293,108.86225 92.914114,109.2178 C 92.310935,109.57335 91.770059,109.9684 91.3641,110.47287 C 90.958141,110.97733 90.867103,111.63392 90.72033,112.21243 C 90.573557,112.79094 90.525438,113.26403 90.78125,113.90625 C 91.037062,114.54847 91.509887,115.41161 92.055252,115.93025 C 92.600617,116.44889 92.987635,116.9934 93.711376,117.22111 C 94.435117,117.44881 95.279851,117.7648 96,117.875 C 96.720149,117.9852 97.25089,117.77544 97.962055,117.59387 C 98.67322,117.4123 99.587555,117.07103 100.18371,116.67654 C 100.77986,116.28205 101.11025,115.82907 101.4724,115.36585 C 101.83455,114.90263 101.94155,114.45667 101.97237,113.8935 C 102.00319,113.33033 101.88899,112.7735 101.48418,112.24977 C 101.07937,111.72604 100.64982,111.06226 100.17793,110.52197 C 99.706043,109.98168 99.142309,109.4912 98.534118,109.19736 C 97.925927,108.90352 97.23572,108.65607 96.630291,108.50605 C 96.024862,108.35603 95.584981,108.32043 94.9375,108.40625 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + transform="matrix(1.41667,0,0,1.57627,-38.6775,-62.2193)" + sodipodi:nodetypes="czzzzzzzzzzzzzzzz" /> + <path + id="path3536" + d="M 95.757212,60.26801 C 94.839875,60.407623 93.290633,60.580795 92.160034,60.92426 C 91.029435,61.267725 89.911438,61.914443 89.056586,63.01801 C 88.201734,64.121577 87.553727,65.489742 87.081665,67.17426 C 86.609604,68.858778 86.309324,70.138052 86.376336,72.54926 C 86.443347,74.960468 86.871609,78.248439 87.363796,81.26801 C 87.855982,84.287581 88.351917,87.858919 88.986053,90.86176 C 89.620189,93.864601 90.703057,96.535287 91.517717,98.646292 C 92.332377,100.7573 93.087791,102.49111 93.836704,103.50233 C 94.585617,104.51355 94.896259,104.9036 95.686679,105.33051 C 96.477099,105.75742 97.567003,106.06303 98.522102,105.98676 C 99.477201,105.91049 100.41608,104.41885 101.13839,103.59677 C 101.8607,102.77469 102.88842,99.504338 103.69761,96.48345 C 104.5068,93.462561 105.30597,91.53964 106.35271,86.599296 C 107.39945,81.658952 108.47781,74.293841 108.97508,71.01801 C 109.47234,67.742179 109.22234,67.929863 108.72878,66.467389 C 108.23521,65.004915 107.35398,64.101592 106.50643,63.26801 C 105.65887,62.434428 105.19482,61.932957 103.70986,61.473812 C 102.2249,61.014666 101.16364,60.702221 99.837564,60.539052 C 98.511488,60.375883 96.674549,60.128397 95.757212,60.26801 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + sodipodi:nodetypes="czzzzzzzzzzzzzzzzzzz" /> + </g> + </g> + </g> + <g + transform="matrix(0.6623212,0,0,0.6661406,442.54063,461.0687)" + id="g3538" + inkscape:label="Calque 1"> + <g + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + id="g3540"> + <path + sodipodi:type="star" + style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:27.82019997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:24.29999924;stroke-dasharray:none;stroke-opacity:1" + id="path3542" + sodipodi:sides="3" + sodipodi:cx="191.09729" + sodipodi:cy="183.1349" + sodipodi:r1="187.79253" + sodipodi:r2="93.896263" + sodipodi:arg1="0.52359878" + sodipodi:arg2="1.5707963" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="M 353.73039,277.03117 L 191.09729,277.03117 L 28.464191,277.03117 L 109.78074,136.18677 L 191.09729,-4.6576233 L 272.41384,136.18677 L 353.73039,277.03117 z" + transform="matrix(0.35945,0,0,0.35945,28.8492,30.1932)" /> + <g + id="g3544" + transform="translate(-0.510735,-1.02147)"> + <path + id="path3546" + d="M 94.9375,108.40625 C 94.290019,108.49207 93.517293,108.86225 92.914114,109.2178 C 92.310935,109.57335 91.770059,109.9684 91.3641,110.47287 C 90.958141,110.97733 90.867103,111.63392 90.72033,112.21243 C 90.573557,112.79094 90.525438,113.26403 90.78125,113.90625 C 91.037062,114.54847 91.509887,115.41161 92.055252,115.93025 C 92.600617,116.44889 92.987635,116.9934 93.711376,117.22111 C 94.435117,117.44881 95.279851,117.7648 96,117.875 C 96.720149,117.9852 97.25089,117.77544 97.962055,117.59387 C 98.67322,117.4123 99.587555,117.07103 100.18371,116.67654 C 100.77986,116.28205 101.11025,115.82907 101.4724,115.36585 C 101.83455,114.90263 101.94155,114.45667 101.97237,113.8935 C 102.00319,113.33033 101.88899,112.7735 101.48418,112.24977 C 101.07937,111.72604 100.64982,111.06226 100.17793,110.52197 C 99.706043,109.98168 99.142309,109.4912 98.534118,109.19736 C 97.925927,108.90352 97.23572,108.65607 96.630291,108.50605 C 96.024862,108.35603 95.584981,108.32043 94.9375,108.40625 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + transform="matrix(1.41667,0,0,1.57627,-38.6775,-62.2193)" + sodipodi:nodetypes="czzzzzzzzzzzzzzzz" /> + <path + id="path3548" + d="M 95.757212,60.26801 C 94.839875,60.407623 93.290633,60.580795 92.160034,60.92426 C 91.029435,61.267725 89.911438,61.914443 89.056586,63.01801 C 88.201734,64.121577 87.553727,65.489742 87.081665,67.17426 C 86.609604,68.858778 86.309324,70.138052 86.376336,72.54926 C 86.443347,74.960468 86.871609,78.248439 87.363796,81.26801 C 87.855982,84.287581 88.351917,87.858919 88.986053,90.86176 C 89.620189,93.864601 90.703057,96.535287 91.517717,98.646292 C 92.332377,100.7573 93.087791,102.49111 93.836704,103.50233 C 94.585617,104.51355 94.896259,104.9036 95.686679,105.33051 C 96.477099,105.75742 97.567003,106.06303 98.522102,105.98676 C 99.477201,105.91049 100.41608,104.41885 101.13839,103.59677 C 101.8607,102.77469 102.88842,99.504338 103.69761,96.48345 C 104.5068,93.462561 105.30597,91.53964 106.35271,86.599296 C 107.39945,81.658952 108.47781,74.293841 108.97508,71.01801 C 109.47234,67.742179 109.22234,67.929863 108.72878,66.467389 C 108.23521,65.004915 107.35398,64.101592 106.50643,63.26801 C 105.65887,62.434428 105.19482,61.932957 103.70986,61.473812 C 102.2249,61.014666 101.16364,60.702221 99.837564,60.539052 C 98.511488,60.375883 96.674549,60.128397 95.757212,60.26801 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + sodipodi:nodetypes="czzzzzzzzzzzzzzzzzzz" /> + </g> + </g> + </g> + </g> +</svg> diff --git a/realtime/rt-basics/images/gpos_vs_rt.png b/realtime/rt-basics/images/gpos_vs_rt.png Binary files differnew file mode 100644 index 0000000..07a4a79 --- /dev/null +++ b/realtime/rt-basics/images/gpos_vs_rt.png diff --git a/realtime/rt-basics/images/gpos_vs_rt.svg b/realtime/rt-basics/images/gpos_vs_rt.svg new file mode 100644 index 0000000..7862037 --- /dev/null +++ b/realtime/rt-basics/images/gpos_vs_rt.svg @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="gpos_vs_rt.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/gpos_vs_rt.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective2447" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3230" /> + <inkscape:perspective + id="perspective3357" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="486.9722" + inkscape:cy="699.91284" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1024" + inkscape:window-height="694" + inkscape:window-x="0" + inkscape:window-y="-60" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <image + y="58.076473" + x="137.14288" + id="image2449" + height="400" + width="420" + sodipodi:absref="/home/jan/work/omnicron/tmp/221401waage_517.jpg" + xlink:href="/home/jan/work/omnicron/tmp/221401waage_517.jpg" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="565.14288" + y="208.07646" + id="text2453"><tspan + sodipodi:role="line" + id="tspan2455" + x="565.14288" + y="208.07646" + style="font-size:32px;text-align:center;text-anchor:middle">Realtime</tspan><tspan + sodipodi:role="line" + x="565.14288" + y="248.07646" + id="tspan2457" + style="font-size:32px;text-align:center;text-anchor:middle">Operating System</tspan></text> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="169.57031" + y="210.39732" + id="text2459"><tspan + sodipodi:role="line" + id="tspan2461" + x="169.57031" + y="210.39732" + style="font-size:32px;text-align:center;text-anchor:middle">General Purpose</tspan><tspan + sodipodi:role="line" + x="169.57031" + y="250.39732" + id="tspan2463" + style="font-size:32px;text-align:center;text-anchor:middle">Operating System</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.47621512;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 15.652393,155.44315 L 15.652393,269.85264 L 331.49046,265.56229 L 331.49046,158.30338 L 331.49046,158.30338 L 331.49046,162.59374" + id="path2465" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.45622063;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 410.78525,152.57601 L 410.78525,267.0055 L 718.0719,262.7144 L 718.0719,155.43674 L 718.0719,155.43674 L 718.0719,159.72785" + id="path3237" /> + </g> +</svg> diff --git a/realtime/rt-basics/images/ipipe.png b/realtime/rt-basics/images/ipipe.png Binary files differnew file mode 100644 index 0000000..b7468fa --- /dev/null +++ b/realtime/rt-basics/images/ipipe.png diff --git a/realtime/rt-basics/images/ipipe.svg b/realtime/rt-basics/images/ipipe.svg new file mode 100644 index 0000000..cc7baa9 --- /dev/null +++ b/realtime/rt-basics/images/ipipe.svg @@ -0,0 +1,185 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="ipipe.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/xenomai.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lend" + style="overflow:visible;"> + <path + id="path3854" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.8) rotate(180) translate(12.5,0)" /> + </marker> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1" + inkscape:cx="336.82532" + inkscape:cy="280.92561" + inkscape:document-units="px" + inkscape:current-layer="g3159" + showgrid="false" + inkscape:window-width="906" + inkscape:window-height="694" + inkscape:window-x="88" + inkscape:window-y="-41" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g3159" + transform="matrix(1.1055858,0,0,1.0705292,-68.76791,-183.84127)"> + <rect + y="804.67487" + x="202.62572" + height="128.83612" + width="371.50049" + id="rect3157" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.10543263;stroke-opacity:1" + transform="matrix(0.9999966,2.6189089e-3,0,1,0,0)" /> + <text + id="text2383" + y="884.51947" + x="219.0838" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="884.51947" + x="219.0838" + id="tspan2385" + sodipodi:role="line">Xenomai Domain</tspan></text> + <rect + y="612.91962" + x="202.97916" + height="130.6824" + width="371.49274" + id="rect3325" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.11331356;stroke-opacity:1" + transform="matrix(0.9999965,2.6564951e-3,0,1,0,0)" /> + <text + id="text3327" + y="694.63696" + x="250.1862" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="694.63696" + x="250.1862" + id="tspan3329" + sodipodi:role="line">Linux Domain</tspan></text> + <rect + y="993.10321" + x="203.88388" + height="130.6824" + width="371.49274" + id="rect3331" + style="fill:#ecfc00;fill-opacity:1;stroke:#000000;stroke-width:1.11331355999999992;stroke-opacity:1" + transform="matrix(0.9999965,2.656493e-3,0,1,0,0)" /> + <text + id="text3333" + y="1074.8231" + x="298.12457" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="1074.8231" + x="298.12457" + id="tspan3335" + sodipodi:role="line">Interrupts</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Lend)" + d="M 253,879.36218 C 253,816.36218 253,816.36218 253,816.36218" + id="path3337" + transform="matrix(0.9044979,0,0,0.9341174,62.200428,171.72934)" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-opacity:1" + d="M 347.11695,993.62386 C 347.11695,934.77446 347.11695,934.77446 347.11695,934.77446" + id="path4626" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="347" + y="851.36218" + id="text4628" + transform="matrix(0.9044979,0,0,0.9341174,62.200428,171.72934)"><tspan + sodipodi:role="line" + id="tspan4630" + x="347" + y="851.36218">.....</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-opacity:1" + d="M 459.27506,992.68977 C 459.27506,933.84037 459.27506,933.84037 459.27506,933.84037" + id="path4632" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-opacity:1" + d="M 291.91302,805.86818 C 291.91302,747.01782 291.91302,747.01782 291.91302,747.01782" + id="path4634" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-opacity:1" + d="M 347.99157,806.33518 C 347.99157,747.48482 347.99157,747.48482 347.99157,747.48482" + id="path4636" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="383.05804" + y="767.24927" + id="text4638" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan4640" + x="383.05804" + y="767.24927">.....</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-opacity:1" + d="M 460.14968,805.40105 C 460.14968,746.55072 460.14968,746.55072 460.14968,746.55072" + id="path4642" /> + </g> + </g> +</svg> diff --git a/realtime/rt-basics/images/mar01.png b/realtime/rt-basics/images/mar01.png Binary files differnew file mode 100644 index 0000000..7f18317 --- /dev/null +++ b/realtime/rt-basics/images/mar01.png diff --git a/realtime/rt-basics/images/mar01.svg b/realtime/rt-basics/images/mar01.svg new file mode 100644 index 0000000..78d99db --- /dev/null +++ b/realtime/rt-basics/images/mar01.svg @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3840" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="mar01.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs3842"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3848" /> + <inkscape:perspective + id="perspective4064" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4094" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4161" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4228" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="263.27793" + inkscape:cy="709.64957" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1024" + inkscape:window-height="694" + inkscape:window-x="24" + inkscape:window-y="-27" /> + <metadata + id="metadata3845"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <image + y="39.862186" + x="117.71429" + id="image4066" + height="201" + width="60" + sodipodi:absref="/tmp/ocal-ZPHSVU-Anonymous_Groom.png" + xlink:href="/tmp/ocal-ZPHSVU-Anonymous_Groom.png" /> + <image + y="93.076469" + x="410.64285" + id="image4163" + height="134" + width="217" + sodipodi:absref="/home/jan/work/omnicron/tmp/rtai.jpg" + xlink:href="/home/jan/work/omnicron/tmp/rtai.jpg" /> + <image + y="50.076473" + x="558.64288" + id="image4096" + height="200" + width="141" + sodipodi:absref="/tmp/ocal-FKLEVU-Anonymous_Bride.png" + xlink:href="/tmp/ocal-FKLEVU-Anonymous_Bride.png" /> + <image + y="183.64789" + x="47.071484" + id="image4230" + height="44.857128" + width="308.42877" + sodipodi:absref="/home/jan/work/omnicron/tmp/Xenomai.png" + xlink:href="/home/jan/work/omnicron/tmp/Xenomai.png" /> + </g> +</svg> diff --git a/realtime/rt-basics/images/mar02.png b/realtime/rt-basics/images/mar02.png Binary files differnew file mode 100644 index 0000000..f1f53a1 --- /dev/null +++ b/realtime/rt-basics/images/mar02.png diff --git a/realtime/rt-basics/images/mar02.svg b/realtime/rt-basics/images/mar02.svg new file mode 100644 index 0000000..3c9ac3a --- /dev/null +++ b/realtime/rt-basics/images/mar02.svg @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3840" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="mar02.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/mar01.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs3842"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3848" /> + <inkscape:perspective + id="perspective4064" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4094" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4161" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4228" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4329" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="263.27793" + inkscape:cy="709.64957" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1024" + inkscape:window-height="694" + inkscape:window-x="24" + inkscape:window-y="-27" /> + <metadata + id="metadata3845"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <image + y="39.862186" + x="117.71429" + id="image4066" + height="201" + width="60" + sodipodi:absref="/tmp/ocal-ZPHSVU-Anonymous_Groom.png" + xlink:href="/tmp/ocal-ZPHSVU-Anonymous_Groom.png" /> + <image + y="93.076469" + x="410.64285" + id="image4163" + height="134" + width="217" + sodipodi:absref="/home/jan/work/omnicron/tmp/rtai.jpg" + xlink:href="/home/jan/work/omnicron/tmp/rtai.jpg" /> + <image + y="50.076473" + x="558.64288" + id="image4096" + height="200" + width="141" + sodipodi:absref="/tmp/ocal-FKLEVU-Anonymous_Bride.png" + xlink:href="/tmp/ocal-FKLEVU-Anonymous_Bride.png" /> + <image + y="183.64789" + x="47.071484" + id="image4230" + height="44.857128" + width="308.42877" + sodipodi:absref="/home/jan/work/omnicron/tmp/Xenomai.png" + xlink:href="/home/jan/work/omnicron/tmp/Xenomai.png" /> + <image + y="281.2908" + x="249.28574" + id="image4331" + height="107.85714" + width="144.28572" + sodipodi:absref="/tmp/ocal-5YSIVU-freedo_Wedding_Ring.png" + xlink:href="/tmp/ocal-5YSIVU-freedo_Wedding_Ring.png" /> + <image + y="264.14792" + x="317.85712" + id="image4335" + height="107.85714" + width="144.28572" + sodipodi:absref="/tmp/ocal-5YSIVU-freedo_Wedding_Ring.png" + xlink:href="/tmp/ocal-5YSIVU-freedo_Wedding_Ring.png" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="220" + y="433.79074" + id="text4337"><tspan + sodipodi:role="line" + id="tspan4339" + x="220" + y="433.79074">RTAI / Fusion</tspan></text> + </g> +</svg> diff --git a/realtime/rt-basics/images/mar03.png b/realtime/rt-basics/images/mar03.png Binary files differnew file mode 100644 index 0000000..97ab7ba --- /dev/null +++ b/realtime/rt-basics/images/mar03.png diff --git a/realtime/rt-basics/images/mar03.svg b/realtime/rt-basics/images/mar03.svg new file mode 100644 index 0000000..71e98ae --- /dev/null +++ b/realtime/rt-basics/images/mar03.svg @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3840" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="mar03.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/mar03.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs3842"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3848" /> + <inkscape:perspective + id="perspective4064" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4094" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4161" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4228" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4329" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4473" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="263.27793" + inkscape:cy="709.64957" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1024" + inkscape:window-height="694" + inkscape:window-x="24" + inkscape:window-y="-27" /> + <metadata + id="metadata3845"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <image + y="39.862186" + x="117.71429" + id="image4066" + height="201" + width="60" + sodipodi:absref="/tmp/ocal-ZPHSVU-Anonymous_Groom.png" + xlink:href="/tmp/ocal-ZPHSVU-Anonymous_Groom.png" /> + <image + y="93.076469" + x="410.64285" + id="image4163" + height="134" + width="217" + sodipodi:absref="/home/jan/work/omnicron/tmp/rtai.jpg" + xlink:href="/home/jan/work/omnicron/tmp/rtai.jpg" /> + <image + y="50.076473" + x="558.64288" + id="image4096" + height="200" + width="141" + sodipodi:absref="/tmp/ocal-FKLEVU-Anonymous_Bride.png" + xlink:href="/tmp/ocal-FKLEVU-Anonymous_Bride.png" /> + <image + y="183.64789" + x="47.071484" + id="image4230" + height="44.857128" + width="308.42877" + sodipodi:absref="/home/jan/work/omnicron/tmp/Xenomai.png" + xlink:href="/home/jan/work/omnicron/tmp/Xenomai.png" /> + <image + y="332.71936" + x="190.71431" + id="image4331" + height="107.85714" + width="144.28572" + sodipodi:absref="/tmp/ocal-5YSIVU-freedo_Wedding_Ring.png" + xlink:href="/tmp/ocal-5YSIVU-freedo_Wedding_Ring.png" /> + <image + y="272.71933" + x="377.85712" + id="image4335" + height="107.85714" + width="144.28572" + sodipodi:absref="/tmp/ocal-5YSIVU-freedo_Wedding_Ring.png" + xlink:href="/tmp/ocal-5YSIVU-freedo_Wedding_Ring.png" /> + <image + y="280.14789" + x="291.5" + id="image4475" + height="133" + width="137" + sodipodi:absref="/tmp/ocal-5MEMVU-spite_overcloud_thunder.png" + xlink:href="/tmp/ocal-5MEMVU-spite_overcloud_thunder.png" /> + </g> +</svg> diff --git a/realtime/rt-basics/images/nuclear.png b/realtime/rt-basics/images/nuclear.png Binary files differnew file mode 100644 index 0000000..a434e91 --- /dev/null +++ b/realtime/rt-basics/images/nuclear.png diff --git a/realtime/rt-basics/images/preempt_rt.png b/realtime/rt-basics/images/preempt_rt.png Binary files differnew file mode 100644 index 0000000..463673f --- /dev/null +++ b/realtime/rt-basics/images/preempt_rt.png diff --git a/realtime/rt-basics/images/preempt_rt.svg b/realtime/rt-basics/images/preempt_rt.svg new file mode 100644 index 0000000..a9c0ac7 --- /dev/null +++ b/realtime/rt-basics/images/preempt_rt.svg @@ -0,0 +1,254 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="preempt_rt.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/preempt_rt.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lend" + style="overflow:visible;"> + <path + id="path3854" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.8) rotate(180) translate(12.5,0)" /> + </marker> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.70710678" + inkscape:cx="437.82107" + inkscape:cy="620.16427" + inkscape:document-units="px" + inkscape:current-layer="g3159" + showgrid="false" + inkscape:window-width="906" + inkscape:window-height="694" + inkscape:window-x="88" + inkscape:window-y="-41" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g3159" + transform="matrix(1.1055858,0,0,1.0705292,-68.76791,-183.84127)"> + <rect + style="fill:#00b8fc;fill-opacity:1;stroke:#000000;stroke-width:1.10370838999999998;stroke-opacity:1" + id="rect4714" + width="627.88263" + height="281.19434" + x="85.955544" + y="207.66618" /> + <rect + style="fill:#ecfc00;fill-opacity:1;stroke:#000000;stroke-width:1.18113208;stroke-opacity:1" + id="rect4700" + width="627.80646" + height="322.06793" + x="86.633232" + y="488.18066" /> + <rect + y="838.86499" + x="87.663139" + height="128.50444" + width="627.00702" + id="rect3157" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.43426394;stroke-opacity:1" + transform="matrix(0.9999988,1.5477038e-3,0,1,0,0)" /> + <text + id="text2383" + y="918.14752" + x="304.10635" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="918.14752" + x="304.10635" + id="tspan2385" + sodipodi:role="line">Hardware</tspan></text> + <rect + y="658.21362" + x="120.17767" + height="130.42729" + width="560.55804" + id="rect3325" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.36624408;stroke-opacity:1" + transform="matrix(0.9999985,1.7570719e-3,0,1,0,0)" /> + <text + id="text3327" + y="743.21082" + x="335.20877" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="743.21082" + x="335.20877" + id="tspan3329" + sodipodi:role="line">Linux</tspan></text> + <rect + y="500.0282" + x="541.06018" + height="131.12286" + width="136.75529" + id="rect4680" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.67662036;stroke-opacity:1" + transform="matrix(0.9999738,7.2405849e-3,0,1,0,0)" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="619.31989" + y="555.37689" + id="text4682" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan4684" + x="619.31989" + y="555.37689" + style="text-align:center;text-anchor:middle">IRQ</tspan><tspan + sodipodi:role="line" + x="619.31989" + y="601.3363" + id="tspan4686" + style="text-align:center;text-anchor:middle">Thread</tspan></text> + <rect + y="325.95078" + x="124.87892" + height="130.9637" + width="208.23135" + id="rect4688" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.8344155;stroke-opacity:1" + transform="matrix(0.9999887,4.7494726e-3,0,1,0,0)" /> + <text + id="text4690" + y="405.06094" + x="184.15723" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="405.06094" + x="184.15723" + id="tspan4692" + sodipodi:role="line">App</tspan></text> + <rect + y="325.59882" + x="354.0275" + height="130.74443" + width="331.42499" + id="rect4694" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.0518117;stroke-opacity:1" + transform="matrix(0.9999956,2.9790553e-3,0,1,0,0)" /> + <text + id="text4696" + y="405.06009" + x="449.17447" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="405.06009" + x="449.17447" + id="tspan4698" + sodipodi:role="line">RT App</tspan></text> + <rect + y="500.85446" + x="265.56952" + height="131.12286" + width="136.75529" + id="rect4702" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.67662036;stroke-opacity:1" + transform="matrix(0.9999738,7.2405556e-3,0,1,0,0)" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="339.36279" + y="554.22833" + id="text4704" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan4706" + x="339.36279" + y="554.22833" + style="text-align:center;text-anchor:middle">IRQ</tspan><tspan + sodipodi:role="line" + x="339.36279" + y="600.18774" + id="tspan4708" + style="text-align:center;text-anchor:middle">Thread</tspan></text> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="446.68961" + y="566.89685" + id="text4710" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan4712" + x="446.68961" + y="566.89685">.....</tspan></text> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="62.225395" + y="400.40973" + id="text4716" + transform="matrix(0.9044979,0,0,0.9341174,62.200428,171.72934)"><tspan + sodipodi:role="line" + id="tspan4718" + x="62.225395" + y="400.40973">Kernel</tspan></text> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="128.20709" + y="252.22173" + id="text4720" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan4722" + x="128.20709" + y="252.22173">User</tspan></text> + </g> + </g> +</svg> diff --git a/realtime/rt-basics/images/prio_inv.png b/realtime/rt-basics/images/prio_inv.png Binary files differnew file mode 100644 index 0000000..574afb3 --- /dev/null +++ b/realtime/rt-basics/images/prio_inv.png diff --git a/realtime/rt-basics/images/prio_inv.svg b/realtime/rt-basics/images/prio_inv.svg new file mode 100644 index 0000000..c655052 --- /dev/null +++ b/realtime/rt-basics/images/prio_inv.svg @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="297mm" + height="210mm" + id="svg4744" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="prio_inv.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/prio_inv.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4746"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lend" + style="overflow:visible;"> + <path + id="path3854" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.8) rotate(180) translate(12.5,0)" /> + </marker> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 372.04724 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="1052.3622 : 372.04724 : 1" + inkscape:persp3d-origin="526.18109 : 248.03149 : 1" + id="perspective4753" /> + </defs> + <sodipodi:namedview + inkscape:document-units="mm" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.61399264" + inkscape:cx="492.88764" + inkscape:cy="377.9895" + inkscape:current-layer="layer1" + id="namedview4748" + showgrid="false" + inkscape:window-width="906" + inkscape:window-height="694" + inkscape:window-x="123" + inkscape:window-y="-28" /> + <metadata + id="metadata4750"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <rect + style="fill:#00b8fc;fill-opacity:1;stroke:#000000;stroke-width:0.84919637;stroke-opacity:1" + id="rect4755" + width="272.82034" + height="67.731445" + x="135.47668" + y="215.23705" /> + <rect + style="fill:#fcfa00;fill-opacity:1;stroke:#000000;stroke-width:0.66878808;stroke-opacity:1" + id="rect4757" + width="168.76497" + height="67.91185" + x="135.4655" + y="309.28543" /> + <rect + style="fill:#fc7100;fill-opacity:1;stroke:#000000;stroke-width:0.66878808;stroke-opacity:1" + id="rect4759" + width="168.76497" + height="67.91185" + x="136.61319" + y="406.2153" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 101.74657,494.53451 L 101.74657,196.48534" + id="path5270" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="13.915524" + y="355.52271" + id="text5789"><tspan + sodipodi:role="line" + id="tspan5791" + x="13.915524" + y="355.52271">Prio</tspan></text> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="158.2692" + y="262.0885" + id="text5793"><tspan + sodipodi:role="line" + id="tspan5795" + x="158.2692" + y="262.0885">Task 1</tspan></text> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="158.40906" + y="358.99274" + id="text5797"><tspan + sodipodi:role="line" + id="tspan5799" + x="158.40906" + y="358.99274">Task 2</tspan></text> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="159.61105" + y="452.56006" + id="text5801"><tspan + sodipodi:role="line" + id="tspan5803" + x="159.61105" + y="452.56006">Task 3</tspan></text> + <rect + style="fill:#fc7100;fill-opacity:1;stroke:#000000;stroke-width:0.66878808;stroke-opacity:1" + id="rect5805" + width="168.76497" + height="67.91185" + x="409.13431" + y="405.01862" /> + <rect + style="fill:#fcfa00;fill-opacity:1;stroke:#000000;stroke-width:0.92613;stroke-opacity:1" + id="rect5807" + width="324.8613" + height="67.65451" + x="575.52429" + y="306.04123" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75060922;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 407.64817,233.15777 L 407.42676,396.27469" + id="path5814" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.58791548;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 578.18282,474.38161 L 578.18282,376.24928" + id="path5816" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="324.10812" + y="356.46768" + id="text5818"><tspan + sodipodi:role="line" + id="tspan5820" + x="324.10812" + y="356.46768">blockiert</tspan></text> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="586.28711" + y="413.35428" + id="text5822"><tspan + sodipodi:role="line" + id="tspan5824" + x="586.28711" + y="413.35428">unterbrochen</tspan></text> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="428.41046" + y="451.47217" + id="text5826"><tspan + sodipodi:role="line" + id="tspan5828" + x="428.41046" + y="451.47217">Task 3</tspan></text> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="670.6911" + y="353.93771" + id="text5830"><tspan + sodipodi:role="line" + id="tspan5832" + x="670.6911" + y="353.93771">Task 2</tspan></text> + </g> +</svg> diff --git a/realtime/rt-basics/images/rtai.dia b/realtime/rt-basics/images/rtai.dia Binary files differnew file mode 100644 index 0000000..dedf883 --- /dev/null +++ b/realtime/rt-basics/images/rtai.dia diff --git a/realtime/rt-basics/images/rtai.dia~ b/realtime/rt-basics/images/rtai.dia~ Binary files differnew file mode 100644 index 0000000..c4024ff --- /dev/null +++ b/realtime/rt-basics/images/rtai.dia~ diff --git a/realtime/rt-basics/images/rtai.png b/realtime/rt-basics/images/rtai.png Binary files differnew file mode 100644 index 0000000..c6c21ce --- /dev/null +++ b/realtime/rt-basics/images/rtai.png diff --git a/realtime/rt-basics/images/rtai.svg b/realtime/rt-basics/images/rtai.svg new file mode 100644 index 0000000..39b34e4 --- /dev/null +++ b/realtime/rt-basics/images/rtai.svg @@ -0,0 +1,273 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="rtai.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.5" + inkscape:cx="713.45482" + inkscape:cy="537.44764" + inkscape:document-units="px" + inkscape:current-layer="g3159" + showgrid="false" + inkscape:window-width="906" + inkscape:window-height="694" + inkscape:window-x="88" + inkscape:window-y="-31" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g3159" + transform="matrix(1.1055858,0,0,1.0705292,-68.76791,-183.84127)"> + <rect + style="fill:#00c2fc;fill-opacity:1;stroke:#000000;stroke-width:0.70241845;stroke-opacity:1" + id="rect3228" + width="657.20056" + height="175.55843" + x="64.646378" + y="255.23193" /> + <rect + style="fill:#fcf800;fill-opacity:1;stroke:#000000;stroke-width:1.02652764;stroke-opacity:1" + id="rect3226" + width="656.88165" + height="375.13019" + x="64.06218" + y="431.41074" /> + <rect + y="806.15021" + x="62.441948" + height="76.543472" + width="658.19678" + id="rect3157" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.13413763;stroke-opacity:1" /> + <text + id="text2383" + y="861.16669" + x="302.29761" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="861.16669" + x="302.29761" + id="tspan2385" + sodipodi:role="line">Hardware</tspan></text> + <rect + y="652.98529" + x="83.228462" + height="76.574478" + width="623.01147" + id="rect3164" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.1036309;stroke-opacity:1" /> + <text + id="text3166" + y="705.27673" + x="302.23563" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="705.27673" + x="302.23563" + id="tspan3168" + sodipodi:role="line">RT Kernel</tspan></text> + <rect + y="521.28082" + x="84.68071" + height="77.063293" + width="197.03423" + id="rect3170" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.62262768;stroke-opacity:1" /> + <text + id="text3176" + y="573.85217" + x="128.00005" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="573.85217" + x="128.00005" + id="tspan3178" + sodipodi:role="line">Linux</tspan></text> + <rect + y="522.2688" + x="299.24976" + height="77.063293" + width="197.03423" + id="rect3180" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.62262768;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="341.50241" + y="564.7182" + id="text3182" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3184" + x="341.50241" + y="564.7182">RT App</tspan></text> + <rect + y="522.15295" + x="509.44202" + height="77.063293" + width="197.03423" + id="rect3186" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.62262768;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="555.10895" + y="564.60419" + id="text3188" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3190" + x="555.10895" + y="564.60419">RT App</tspan></text> + <rect + y="337.62781" + x="85.736412" + height="76.947311" + width="276.30084" + id="rect3192" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.73675251;stroke-opacity:1" /> + <text + id="text3194" + y="390.14197" + x="128.99979" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="390.14197" + x="128.99979" + id="tspan3196" + sodipodi:role="line">Linux App</tspan></text> + <rect + y="337.58328" + x="380.85403" + height="76.947311" + width="276.30084" + id="rect3198" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.73675251;stroke-opacity:1" /> + <text + id="text3200" + y="390.09756" + x="424.11719" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="390.09756" + x="424.11719" + id="tspan3202" + sodipodi:role="line">Linux App</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 190.79792,651.99969 L 190.79792,598.80099 L 190.79792,598.80099" + id="path3206" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 387.76183,652.67974 L 387.76183,599.48103 L 387.76183,599.48103" + id="path3208" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 604.86584,652.817 L 604.86584,599.6183 L 604.86584,599.6183" + id="path3210" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.30547941px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 155.6171,521.34664 L 155.6171,414.03866 L 155.6171,414.03866" + id="path3212" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.16561925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 234.83091,520.18588 L 455.83604,414.91101" + id="path3214" /> + <rect + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.91918838;stroke-opacity:1" + id="rect3216" + width="140.17979" + height="44.477608" + x="536.05273" + y="446.30197" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="579.94427" + y="475.21246" + id="text3218" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3220" + x="579.94427" + y="475.21246">FIFO</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 605.4261,521.18321 L 605.4261,489.78725" + id="path3222" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 606.27056,445.30965 L 606.27056,413.91369" + id="path3224" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="103.65495" + y="301.68082" + id="text3230" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3232" + x="103.65495" + y="301.68082">Userspace</tspan></text> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="102.72641" + y="767.17688" + id="text3234" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3236" + x="102.72641" + y="767.17688">Kernelspace</tspan></text> + </g> + </g> +</svg> diff --git a/realtime/rt-basics/images/single_kernel.png b/realtime/rt-basics/images/single_kernel.png Binary files differnew file mode 100644 index 0000000..d398b29 --- /dev/null +++ b/realtime/rt-basics/images/single_kernel.png diff --git a/realtime/rt-basics/images/single_kernel.svg b/realtime/rt-basics/images/single_kernel.svg new file mode 100644 index 0000000..31a06ce --- /dev/null +++ b/realtime/rt-basics/images/single_kernel.svg @@ -0,0 +1,234 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3367" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="single_kernel.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/single_kernel.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs3369"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3375" /> + <inkscape:perspective + id="perspective3442" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3230" /> + <inkscape:perspective + id="perspective10" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="285.06246" + inkscape:cy="582.52552" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="777" + inkscape:window-height="694" + inkscape:window-x="94" + inkscape:window-y="0" /> + <metadata + id="metadata3372"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <rect + style="fill:#fc7100;fill-opacity:1;stroke:#000000;stroke-width:1.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3448" + width="474.28571" + height="84.285713" + x="91.428574" + y="574.36218" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="237.14285" + y="634.36218" + id="text3377"><tspan + sodipodi:role="line" + id="tspan3379" + x="237.14285" + y="634.36218">Hardware</tspan></text> + <image + y="289.00507" + x="204.28568" + id="image3444" + height="257.28574" + width="237.14284" + sodipodi:absref="/home/jan/work/omnicron/tmp/tux_huge.png" + xlink:href="/home/jan/work/omnicron/tmp/tux_huge.png" /> + <g + transform="matrix(0.6623212,0,0,0.6661406,193.9692,368.21156)" + id="g3519" + inkscape:label="Calque 1"> + <g + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + id="g3252"> + <path + sodipodi:type="star" + style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:27.82019997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:24.29999924;stroke-dasharray:none;stroke-opacity:1" + id="path2383" + sodipodi:sides="3" + sodipodi:cx="191.09729" + sodipodi:cy="183.1349" + sodipodi:r1="187.79253" + sodipodi:r2="93.896263" + sodipodi:arg1="0.52359878" + sodipodi:arg2="1.5707963" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="M 353.73039,277.03117 L 191.09729,277.03117 L 28.464191,277.03117 L 109.78074,136.18677 L 191.09729,-4.6576233 L 272.41384,136.18677 L 353.73039,277.03117 z" + transform="matrix(0.35945,0,0,0.35945,28.8492,30.1932)" /> + <g + id="g3163" + transform="translate(-0.510735,-1.02147)"> + <path + id="path3155" + d="M 94.9375,108.40625 C 94.290019,108.49207 93.517293,108.86225 92.914114,109.2178 C 92.310935,109.57335 91.770059,109.9684 91.3641,110.47287 C 90.958141,110.97733 90.867103,111.63392 90.72033,112.21243 C 90.573557,112.79094 90.525438,113.26403 90.78125,113.90625 C 91.037062,114.54847 91.509887,115.41161 92.055252,115.93025 C 92.600617,116.44889 92.987635,116.9934 93.711376,117.22111 C 94.435117,117.44881 95.279851,117.7648 96,117.875 C 96.720149,117.9852 97.25089,117.77544 97.962055,117.59387 C 98.67322,117.4123 99.587555,117.07103 100.18371,116.67654 C 100.77986,116.28205 101.11025,115.82907 101.4724,115.36585 C 101.83455,114.90263 101.94155,114.45667 101.97237,113.8935 C 102.00319,113.33033 101.88899,112.7735 101.48418,112.24977 C 101.07937,111.72604 100.64982,111.06226 100.17793,110.52197 C 99.706043,109.98168 99.142309,109.4912 98.534118,109.19736 C 97.925927,108.90352 97.23572,108.65607 96.630291,108.50605 C 96.024862,108.35603 95.584981,108.32043 94.9375,108.40625 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + transform="matrix(1.41667,0,0,1.57627,-38.6775,-62.2193)" + sodipodi:nodetypes="czzzzzzzzzzzzzzzz" /> + <path + id="path3157" + d="M 95.757212,60.26801 C 94.839875,60.407623 93.290633,60.580795 92.160034,60.92426 C 91.029435,61.267725 89.911438,61.914443 89.056586,63.01801 C 88.201734,64.121577 87.553727,65.489742 87.081665,67.17426 C 86.609604,68.858778 86.309324,70.138052 86.376336,72.54926 C 86.443347,74.960468 86.871609,78.248439 87.363796,81.26801 C 87.855982,84.287581 88.351917,87.858919 88.986053,90.86176 C 89.620189,93.864601 90.703057,96.535287 91.517717,98.646292 C 92.332377,100.7573 93.087791,102.49111 93.836704,103.50233 C 94.585617,104.51355 94.896259,104.9036 95.686679,105.33051 C 96.477099,105.75742 97.567003,106.06303 98.522102,105.98676 C 99.477201,105.91049 100.41608,104.41885 101.13839,103.59677 C 101.8607,102.77469 102.88842,99.504338 103.69761,96.48345 C 104.5068,93.462561 105.30597,91.53964 106.35271,86.599296 C 107.39945,81.658952 108.47781,74.293841 108.97508,71.01801 C 109.47234,67.742179 109.22234,67.929863 108.72878,66.467389 C 108.23521,65.004915 107.35398,64.101592 106.50643,63.26801 C 105.65887,62.434428 105.19482,61.932957 103.70986,61.473812 C 102.2249,61.014666 101.16364,60.702221 99.837564,60.539052 C 98.511488,60.375883 96.674549,60.128397 95.757212,60.26801 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + sodipodi:nodetypes="czzzzzzzzzzzzzzzzzzz" /> + </g> + </g> + </g> + <g + transform="matrix(0.6623212,0,0,0.6661406,313.9692,475.0687)" + id="g3526" + inkscape:label="Calque 1"> + <g + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + id="g3528"> + <path + sodipodi:type="star" + style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:27.82019997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:24.29999924;stroke-dasharray:none;stroke-opacity:1" + id="path3530" + sodipodi:sides="3" + sodipodi:cx="191.09729" + sodipodi:cy="183.1349" + sodipodi:r1="187.79253" + sodipodi:r2="93.896263" + sodipodi:arg1="0.52359878" + sodipodi:arg2="1.5707963" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="M 353.73039,277.03117 L 191.09729,277.03117 L 28.464191,277.03117 L 109.78074,136.18677 L 191.09729,-4.6576233 L 272.41384,136.18677 L 353.73039,277.03117 z" + transform="matrix(0.35945,0,0,0.35945,28.8492,30.1932)" /> + <g + id="g3532" + transform="translate(-0.510735,-1.02147)"> + <path + id="path3534" + d="M 94.9375,108.40625 C 94.290019,108.49207 93.517293,108.86225 92.914114,109.2178 C 92.310935,109.57335 91.770059,109.9684 91.3641,110.47287 C 90.958141,110.97733 90.867103,111.63392 90.72033,112.21243 C 90.573557,112.79094 90.525438,113.26403 90.78125,113.90625 C 91.037062,114.54847 91.509887,115.41161 92.055252,115.93025 C 92.600617,116.44889 92.987635,116.9934 93.711376,117.22111 C 94.435117,117.44881 95.279851,117.7648 96,117.875 C 96.720149,117.9852 97.25089,117.77544 97.962055,117.59387 C 98.67322,117.4123 99.587555,117.07103 100.18371,116.67654 C 100.77986,116.28205 101.11025,115.82907 101.4724,115.36585 C 101.83455,114.90263 101.94155,114.45667 101.97237,113.8935 C 102.00319,113.33033 101.88899,112.7735 101.48418,112.24977 C 101.07937,111.72604 100.64982,111.06226 100.17793,110.52197 C 99.706043,109.98168 99.142309,109.4912 98.534118,109.19736 C 97.925927,108.90352 97.23572,108.65607 96.630291,108.50605 C 96.024862,108.35603 95.584981,108.32043 94.9375,108.40625 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + transform="matrix(1.41667,0,0,1.57627,-38.6775,-62.2193)" + sodipodi:nodetypes="czzzzzzzzzzzzzzzz" /> + <path + id="path3536" + d="M 95.757212,60.26801 C 94.839875,60.407623 93.290633,60.580795 92.160034,60.92426 C 91.029435,61.267725 89.911438,61.914443 89.056586,63.01801 C 88.201734,64.121577 87.553727,65.489742 87.081665,67.17426 C 86.609604,68.858778 86.309324,70.138052 86.376336,72.54926 C 86.443347,74.960468 86.871609,78.248439 87.363796,81.26801 C 87.855982,84.287581 88.351917,87.858919 88.986053,90.86176 C 89.620189,93.864601 90.703057,96.535287 91.517717,98.646292 C 92.332377,100.7573 93.087791,102.49111 93.836704,103.50233 C 94.585617,104.51355 94.896259,104.9036 95.686679,105.33051 C 96.477099,105.75742 97.567003,106.06303 98.522102,105.98676 C 99.477201,105.91049 100.41608,104.41885 101.13839,103.59677 C 101.8607,102.77469 102.88842,99.504338 103.69761,96.48345 C 104.5068,93.462561 105.30597,91.53964 106.35271,86.599296 C 107.39945,81.658952 108.47781,74.293841 108.97508,71.01801 C 109.47234,67.742179 109.22234,67.929863 108.72878,66.467389 C 108.23521,65.004915 107.35398,64.101592 106.50643,63.26801 C 105.65887,62.434428 105.19482,61.932957 103.70986,61.473812 C 102.2249,61.014666 101.16364,60.702221 99.837564,60.539052 C 98.511488,60.375883 96.674549,60.128397 95.757212,60.26801 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + sodipodi:nodetypes="czzzzzzzzzzzzzzzzzzz" /> + </g> + </g> + </g> + <g + transform="matrix(0.6623212,0,0,0.6661406,343.9692,338.21156)" + id="g3538" + inkscape:label="Calque 1"> + <g + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + id="g3540"> + <path + sodipodi:type="star" + style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:27.82019997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:24.29999924;stroke-dasharray:none;stroke-opacity:1" + id="path3542" + sodipodi:sides="3" + sodipodi:cx="191.09729" + sodipodi:cy="183.1349" + sodipodi:r1="187.79253" + sodipodi:r2="93.896263" + sodipodi:arg1="0.52359878" + sodipodi:arg2="1.5707963" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="M 353.73039,277.03117 L 191.09729,277.03117 L 28.464191,277.03117 L 109.78074,136.18677 L 191.09729,-4.6576233 L 272.41384,136.18677 L 353.73039,277.03117 z" + transform="matrix(0.35945,0,0,0.35945,28.8492,30.1932)" /> + <g + id="g3544" + transform="translate(-0.510735,-1.02147)"> + <path + id="path3546" + d="M 94.9375,108.40625 C 94.290019,108.49207 93.517293,108.86225 92.914114,109.2178 C 92.310935,109.57335 91.770059,109.9684 91.3641,110.47287 C 90.958141,110.97733 90.867103,111.63392 90.72033,112.21243 C 90.573557,112.79094 90.525438,113.26403 90.78125,113.90625 C 91.037062,114.54847 91.509887,115.41161 92.055252,115.93025 C 92.600617,116.44889 92.987635,116.9934 93.711376,117.22111 C 94.435117,117.44881 95.279851,117.7648 96,117.875 C 96.720149,117.9852 97.25089,117.77544 97.962055,117.59387 C 98.67322,117.4123 99.587555,117.07103 100.18371,116.67654 C 100.77986,116.28205 101.11025,115.82907 101.4724,115.36585 C 101.83455,114.90263 101.94155,114.45667 101.97237,113.8935 C 102.00319,113.33033 101.88899,112.7735 101.48418,112.24977 C 101.07937,111.72604 100.64982,111.06226 100.17793,110.52197 C 99.706043,109.98168 99.142309,109.4912 98.534118,109.19736 C 97.925927,108.90352 97.23572,108.65607 96.630291,108.50605 C 96.024862,108.35603 95.584981,108.32043 94.9375,108.40625 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + transform="matrix(1.41667,0,0,1.57627,-38.6775,-62.2193)" + sodipodi:nodetypes="czzzzzzzzzzzzzzzz" /> + <path + id="path3548" + d="M 95.757212,60.26801 C 94.839875,60.407623 93.290633,60.580795 92.160034,60.92426 C 91.029435,61.267725 89.911438,61.914443 89.056586,63.01801 C 88.201734,64.121577 87.553727,65.489742 87.081665,67.17426 C 86.609604,68.858778 86.309324,70.138052 86.376336,72.54926 C 86.443347,74.960468 86.871609,78.248439 87.363796,81.26801 C 87.855982,84.287581 88.351917,87.858919 88.986053,90.86176 C 89.620189,93.864601 90.703057,96.535287 91.517717,98.646292 C 92.332377,100.7573 93.087791,102.49111 93.836704,103.50233 C 94.585617,104.51355 94.896259,104.9036 95.686679,105.33051 C 96.477099,105.75742 97.567003,106.06303 98.522102,105.98676 C 99.477201,105.91049 100.41608,104.41885 101.13839,103.59677 C 101.8607,102.77469 102.88842,99.504338 103.69761,96.48345 C 104.5068,93.462561 105.30597,91.53964 106.35271,86.599296 C 107.39945,81.658952 108.47781,74.293841 108.97508,71.01801 C 109.47234,67.742179 109.22234,67.929863 108.72878,66.467389 C 108.23521,65.004915 107.35398,64.101592 106.50643,63.26801 C 105.65887,62.434428 105.19482,61.932957 103.70986,61.473812 C 102.2249,61.014666 101.16364,60.702221 99.837564,60.539052 C 98.511488,60.375883 96.674549,60.128397 95.757212,60.26801 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + sodipodi:nodetypes="czzzzzzzzzzzzzzzzzzz" /> + </g> + </g> + </g> + </g> +</svg> diff --git a/realtime/rt-basics/images/xenomai.png b/realtime/rt-basics/images/xenomai.png Binary files differnew file mode 100644 index 0000000..d1ff146 --- /dev/null +++ b/realtime/rt-basics/images/xenomai.png diff --git a/realtime/rt-basics/images/xenomai.svg b/realtime/rt-basics/images/xenomai.svg new file mode 100644 index 0000000..8f71daa --- /dev/null +++ b/realtime/rt-basics/images/xenomai.svg @@ -0,0 +1,274 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="xenomai.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/rtai.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1" + inkscape:cx="420.5163" + inkscape:cy="792.79929" + inkscape:document-units="px" + inkscape:current-layer="g3159" + showgrid="false" + inkscape:window-width="906" + inkscape:window-height="694" + inkscape:window-x="88" + inkscape:window-y="-31" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g3159" + transform="matrix(1.1055858,0,0,1.0705292,-68.76791,-183.84127)"> + <rect + style="fill:#00c2fc;fill-opacity:1;stroke:#000000;stroke-width:0.70241845;stroke-opacity:1" + id="rect3228" + width="657.20056" + height="175.55843" + x="64.646378" + y="221.60361" /> + <rect + style="fill:#fcf800;fill-opacity:1;stroke:#000000;stroke-width:1.07145548;stroke-opacity:1" + id="rect3226" + width="656.83746" + height="408.71277" + x="64.084282" + y="397.80533" /> + <rect + y="854.72406" + x="62.441948" + height="76.543472" + width="658.19678" + id="rect3157" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.13413763;stroke-opacity:1" /> + <text + id="text2383" + y="909.74054" + x="302.29761" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="909.74054" + x="302.29761" + id="tspan2385" + sodipodi:role="line">Hardware</tspan></text> + <rect + y="652.98529" + x="83.228462" + height="76.574478" + width="623.01147" + id="rect3164" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:1.1036309;stroke-opacity:1" /> + <text + id="text3166" + y="705.27673" + x="280.52774" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="705.27673" + x="280.52774" + id="tspan3168" + sodipodi:role="line">Adeos / IPIPE</tspan></text> + <rect + y="521.28082" + x="84.68071" + height="77.063293" + width="197.03423" + id="rect3170" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.62262768;stroke-opacity:1" /> + <text + id="text3176" + y="573.85217" + x="128.00005" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="573.85217" + x="128.00005" + id="tspan3178" + sodipodi:role="line">Linux</tspan></text> + <rect + y="522.2688" + x="299.24976" + height="77.063293" + width="197.03423" + id="rect3180" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.62262768;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="328.63376" + y="564.7182" + id="text3182" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3184" + x="328.63376" + y="564.7182">Nucleus</tspan></text> + <rect + y="522.15295" + x="509.44202" + height="77.063293" + width="197.03423" + id="rect3186" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.62262768;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="555.10895" + y="564.60419" + id="text3188" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3190" + x="555.10895" + y="564.60419">RT App</tspan></text> + <rect + y="302.13153" + x="85.736412" + height="76.947311" + width="276.30084" + id="rect3192" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.73675251;stroke-opacity:1" /> + <text + id="text3194" + y="354.64569" + x="128.99979" + style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + xml:space="preserve"><tspan + style="fill:#000000;fill-opacity:1" + y="354.64569" + x="128.99979" + id="tspan3196" + sodipodi:role="line">Linux App</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 190.79792,651.99969 L 190.79792,598.80099 L 190.79792,598.80099" + id="path3206" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 387.76183,652.67974 L 387.76183,599.48103 L 387.76183,599.48103" + id="path3208" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.91918838px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 604.86584,652.817 L 604.86584,599.6183 L 604.86584,599.6183" + id="path3210" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.50373888px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 155.6171,521.13241 L 155.6171,378.75642 L 155.6171,378.75642" + id="path3212" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="103.65495" + y="266.75162" + id="text3230" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3232" + x="103.65495" + y="266.75162">Userspace</tspan></text> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="102.72641" + y="767.17688" + id="text3234" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3236" + x="102.72641" + y="767.17688">Kernelspace</tspan></text> + <rect + y="301.67725" + x="386.98862" + height="77.063293" + width="197.03423" + id="rect3289" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.62262768;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="430.66626" + y="347.65201" + id="text3291" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3293" + x="430.66626" + y="347.65201">RT App</tspan></text> + <rect + y="415.63928" + x="357.13901" + height="77.063293" + width="197.03423" + id="rect3295" + style="fill:#00fc00;fill-opacity:1;stroke:#000000;stroke-width:0.62262768;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-size:36.76753235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="413.20154" + y="459.79306" + id="text3297" + transform="scale(0.984018,1.0162416)"><tspan + sodipodi:role="line" + id="tspan3299" + x="413.20154" + y="459.79306">Skins</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 422,260.36218 C 422,221.36218 422,221.36218 422,221.36218" + id="path3301" + transform="matrix(0.9044979,0,0,0.9341174,62.200428,171.72934)" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 422,374.36218 L 422,342.36218" + id="path3303" + transform="matrix(0.9044979,0,0,0.9341174,62.200428,171.72934)" /> + </g> + </g> +</svg> diff --git a/realtime/rt-basics/pres_rt-basics_de.tex b/realtime/rt-basics/pres_rt-basics_de.tex index 07db328..128b115 100644 --- a/realtime/rt-basics/pres_rt-basics_de.tex +++ b/realtime/rt-basics/pres_rt-basics_de.tex @@ -1,24 +1,214 @@ -\documentclass{article} +\documentclass{beamer} +\usetheme{linutronix} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{pgf} +\usepackage{graphicx} +\usepackage{lxextras} + +\title{Block \lq Realtime Linux\rq} +\institute{Linutronix GmbH} \begin{document} -\section*{Block \lq Was ist Linux?\rq} +\maketitle + + +% ----- Slide ------------------ +\begin{frame} +\frametitle{Was ist Echtzeit?} +\begin{itemize} +\item Korrektheit bedeutet auch Ausführung zum korrekten Zeitpunkt +\item Nicht Einhalten des korrekten Zeitrahmens führt zu einem Fehler +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Echtzeit ''anschaulich''} +\begin{overprint} +\onslide<1> +\begin{alertblock}{Wir erinnern uns} +Nicht Einhalten des korrekten Zeitrahmens führt zu einem Fehler! +\end{alertblock} +\onslide<2> +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/nuclear.png} +\end{figure} +\end{overprint} +\end{frame} + +\begin{frame} +\frametitle{Anwendungsbereiche} +\begin{itemize} +\item Steuerungs- / Automatisierungstechnik +\item Multimediasysteme +\item Luft- und Raumfahrttechnik +\item Finanzdienstleistung +\item ... +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Anforderungen} +\begin{itemize} +\item Deterministisches Zeitverhalten +\item Unterbrechbarkeit +\item Priority Inheritance / Priority Ceiling +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Priority Inversion} +\begin{figure}[h] +\centering +\includegraphics[width=0.8\textwidth]{images/prio_inv.png} +\end{figure} +\end{frame} + +\begin{frame} +\frametitle{Linux und Echtzeit} +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/gpos_vs_rt.png} +\end{figure} +\end{frame} -\subsection*{Lernziele} +\begin{frame} +\frametitle{Ansätze} \begin{itemize} -\item Lernziel 1 -\item Lernziel 2 -\item Lernziel 3 +\item Dual-Kernel +\item In-Kernel / Single Kernel \end{itemize} +\end{frame} -\subsection*{Unterrichts-Ablauf} +\begin{frame} +\frametitle{Dual-Kernel} +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/dual_kernel.png} +\end{figure} +\end{frame} -Hinweise zur Präsentation, Zeitplanung, etc. +\begin{frame} +\frametitle{Single-Kernel} +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/single_kernel.png} +\end{figure} +\end{frame} + +\begin{frame} +\frametitle{RTAI} +\begin{itemize} +\item Prof. Paolo Mantegazza, Universität Mailand +\item Dual-Kernel Ansatz +\item Echtzeit im Kernelspace +\item Userspace Echtzeittasks nur eingeschränkt möglich +\item Oberstes Designziel: Möglichst niedrige Latenzzeiten +\item Unterstützte Plattformen: x86, x86\_64, einige ARM Plattformen +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{RTAI} +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/rtai.png} +\end{figure} +\end{frame} + +\begin{frame} +\frametitle{Xenomai} +\begin{itemize} +\item Gegründet 2001 +\item Echtzeit im Userpace +\item Skins bilden API verschiedenster RTOSse nach +\item Dual-Kernel Ansatz +\item Unterstützte Plattformen: x86, x86\_64, PowerPC, ARM, ia64 +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Xenomai} +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/xenomai.png} +\end{figure} +\end{frame} + +\begin{frame} +\frametitle{Xenomai / IPIPE} +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/ipipe.png} +\end{figure} +\end{frame} + +\begin{frame} +\frametitle{Drum prüfe, wer sich ewig bindet...} +\begin{overprint} +\onslide<1> +\begin{figure}[h] +\centering +\includegraphics[width=0.8\textwidth]{images/mar01.png} +\end{figure} +\onslide<2> +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/mar02.png} +\end{figure} +\onslide<3> +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/mar03.png} +\end{figure} +\end{overprint} +\end{frame} + +\begin{frame} +\frametitle{Preempt RT} +\begin{itemize} +\item Thomas Gleixner, Ingo Molnar +\item In-Kernel Ansatz +\item Große Entwicklergemeinde +\item Viele Funktionen bereits nach ''Mainline'' Linux übernommen +\item POSIX Realtime +\item Hohe Akzeptanz, vollständige Integration in Linux 2006 beschlossen +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Preempt RT und Mainline} +\textit{''Controlling a laser with Linux is crazy, but everyone in this room is +crazy in his own way. So if you want to use Linux to control an industrial +welding laser, I have no problem with your using Preempt RT''} - Linus Torvalds +auf dem Kernel Summit 2006 +\end{frame} + +\begin{frame} +\frametitle{Wie macht Preempt RT Linux echtzeitfähig?} +\begin{overprint} +\onslide<1> +\begin{alertblock}{Wir erinnern uns...} +Unterbrechbarkeit ist eine zentrale Anforderung an ein Echtzeitsystem +\end{alertblock} +\onslide<2> +\begin{itemize} +\item Locking Primitiven: Spinlocks werden durch RT Mutexe ersetzt, die schlafen +können. Raw Spinlocks ersetzen die ursprüngliche Spinlock +\item Interrupt Handler laufen per default in einem Kernelthread +\end{itemize} +\end{overprint} +\end{frame} -\subsection*{Übungen bei vorhandener Hardware} +\begin{frame} +\frametitle{Preempt RT} +\begin{figure}[h] +\centering +\includegraphics[height=0.5\textwidth]{images/preempt_rt.png} +\end{figure} +\end{frame} -Hinweise zu Übungen, Zeitlimit dazu. \end{document} diff --git a/realtime/rt-specialties/Makefile b/realtime/rt-specialties/Makefile new file mode 100644 index 0000000..e80961b --- /dev/null +++ b/realtime/rt-specialties/Makefile @@ -0,0 +1,9 @@ +all: + pdflatex pres_rt-specialties_de.tex + pdflatex hints_rt-specialties_de.tex + pdflatex handout_rt-specialties_de.tex + pdflatex handout_rt-specialties_de.tex + +clean: + rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out + diff --git a/realtime/rt-specialties/handout_rt-specialties_de.tex b/realtime/rt-specialties/handout_rt-specialties_de.tex index 4c391b2..33dc9b6 100644 --- a/realtime/rt-specialties/handout_rt-specialties_de.tex +++ b/realtime/rt-specialties/handout_rt-specialties_de.tex @@ -1,17 +1,305 @@ -\documentclass{article} +\documentclass{lxarticle} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{lxheaders} +\usepackage{lxextras} \begin{document} -\section*{Titel} +\section*{Anwendung des Preempt RT Patches} +\subsection*{Besorgen und Anwenden des Patches} +Preempt RT wird als Patch gegen den Mainline Linux Kernel gepflegt. +Unter:\newline +http://www.kernel.org/pub/linux/kernel/projects/rt sind die aktuellsten Patche +für Preempt RT zu finden. Im Unterverzeichnis older/ sind ältere Patche +archiviert. Das Vorbereiten eines Kerneltrees mit Preempt RT ist denkbar +einfach: +\begin{lstlisting} +# Vanilla Kernel +wget http://www.kernel.org/pub/linux/kernel\ +/v2.6/linux-2.6.29.5.tar.bz2 -\subsection*{Abschnitt1} +# Preempt RT Patch +wget http://www.kernel.org/pub/linux/kernel\ +/projects/rt/patch-2.6.29.5-rt21.bz2 -Text +# Extract the kernel tree +tar xjvf linux-2.6.29.5.tar.bz2 +# Patch the kernel tree +cd linux-2.6.29.5 +bzcat ../patch-2.6.29.5-rt21.bz2 | patch -p1 +\end{lstlisting} +Mit Steven Rostedt's Version des Pythonskripts ''ketchup'' geht es sogar noch einfacher (Steven +Rostedt's ketchup Version steht unter:\newline +http://people.redhat.com/srostedt/rt/tools/ketchup-0.9.8-rt3 zum Download +bereit): +\begin{lstlisting} +mkdir linux-2.6.29.5-rt21 +cd linux-2.6.29.5-rt21 +ketchup -f --no-gpg 2.6.29.5-rt21 +\end{lstlisting} -\subsection*{Abschnitt2} +\subsection*{Konfigurieren und Übersetzen eines Preempt RT Kernels} +Die Konfiguration und das Übersetzen machen keinen Unterschied zu Linux ohne +Preempt RT Patch: +\begin{lstlisting} +# external build directory +mkdir ../build +# base build on existing config +cp /boot/config-x-x-x ../build/.config +make O=../build oldconfig +\end{lstlisting} +Für ein Echtzeitsystem müssen verschiedene Kerneloptionen aktiviert werden: +\begin{lstlisting} +make O=../build menuconfig +\end{lstlisting} +Die wichtigsten Optionen befinden sich unter dem Menupunkt ''Kernel features'' +bzw. ''Processor type and features''. +\begin{figure}[ht!] +\centering +\includegraphics[height=0.5\textwidth]{images/menu_rt_001.png} +\end{figure} +Dort müssen folgende Optionen aktiviert werden: +\begin{itemize} +\item High Resolution Timer Support +\item Preemption Mode (Complete Preemption (Real-Time)) +\end{itemize} +\begin{figure}[ht!] +\centering +\includegraphics[height=0.5\textwidth]{images/menu_rt_002.png} +\end{figure} +\begin{figure}[ht!] +\centering +\includegraphics[height=0.5\textwidth]{images/menu_rt_003.png} +\end{figure} +\begin{figure}[ht!] +\centering +\includegraphics[height=0.5\textwidth]{images/menu_rt_004.png} +\end{figure} +Das Übersetzen des Kernels erfolgt nun wie üblich mit +\begin{lstlisting} +make O=../build +make O=../build modules +make O=../build install +make O=../build modules_install +\end{lstlisting} +\section*{Testen eines Preempt RT Systems} +\subsection*{RT Tests} +Die RT Tests sind eine Sammlung von Programmen, zur Validierung der +Eigenschaften von Echtzeitsystemen. Die RT Tests umfassen folgende Tools: +\begin{itemize} +\item cyclictest: High Resolution Timer Testsoftware. +\item hwlatdetect: Python Script zur Steuerung des Kernelmoduls zur Erkennung +von System Management Interrupts (hwlat\_detector). +\item pi\_stress: Stresstest für Mutexe mit Priority Inheritance Attribut +\item signaltest: Benchmark, bei dem Signale zwischen Tasks ausgetauscht werden. +\end{itemize} +Die Sourcen der RT Tests werden in einem GIT Tree verwaltet. +\begin{lstlisting} +# Checkout RT Tests +git-clone git://git.kernel.org/pub/scm/linux/kernel\ +/git/clrkwllms/rt-tests.git -Text +# Compile RT Tests +cd rt-tests +make +\end{lstlisting} +\subsection*{Cyclictest} +Cyclictest ist die wohl meistgenutzte Testsoftware auf Preempt RT Systemen. Mit +Cyclictest kann eine bestimmte Anzahl von Timertasks mit einem definierten +Interval aufgesetzt werden. Für diese Tasks wird kontinuierlich die Abweichung +zum gewünschten Intervall gemessen und hierfür die Maximale und Durchschnittliche +Abweichung aufgezeichnet. Die wichtigsten Parameter für Cyclictest sind die +Anzahl und die Priorität der gewünschten Timertasks, die Art des zu verwendenden +Timers und das gewünschte Timerintervall: +\begin{lstlisting} +# 4 Timertasks (2000 , 2500, 3000, 3500us) +# -i options tells us the interval of the first task +# the interval of all other tasks will be increased +# by 500us +# The -p options tells us the priority of the first task +# the priorities of all other tasks will be decremented by 1 +# -n = using nanosleep +zi:~# cyclictest -p80 -n -t4 -i2000 +0.32 0.30 0.12 1/56 2124 +T: 0 ( 2121) P:80 I:2000 C: 1258 Min: 62 Act: 99 Avg: 83 Max: 161 +T: 1 ( 2122) P:79 I:2500 C: 1007 Min: 47 Act: 76 Avg: 77 Max: 130 +T: 2 ( 2123) P:78 I:3000 C: 841 Min: 54 Act: 76 Avg: 82 Max: 136 +T: 3 ( 2124) P:77 I:3500 C: 723 Min: 67 Act: 95 Avg: 96 Max: 177 +\end{lstlisting} +\subsection*{Lastszenarien} +Um eine Aussage über das Echtzeitverhaltens treffen zu können, interessiert in +der Hauptsache das Verhalten in Worst-Case Szenarien (hohe CPU Last, hohe +Interruptlast). Ein ausgezeichnetes Werkzeug, um CPU Last zu erzeugen, ist +''hackbench''. Hackbench wurde ursprünglich als Schedulerbenchmark entwickelt. +Es erzeugt eine bestimme Anzahl an Prozessgruppen von Clients und Servern, die +über Sockets miteinander kommunizieren:\newline +http://people.redhat.com/mingo/cfs-scheduler/tools/hackbench.c + +Interruptlast, läßt sich hervorragend mit einem Floodping von einem entfernten +Rechner erzeugen. Ein Floodping schickt eine große Anzahl von ICMP Paketen in +kurzer Zeit. Dies erzeugt eine hohe Anzahl von Netzwerkinterrupts. Um Floodpings +zu generieren muß das Programm ping mit Rootrechten und mit der Option -f +ausgeführt werden. +\subsection*{Pitfall} +Ein sehr häufig gemeldetes Phänomen bei Testläufen von Cyclictest mit einem +Floodping als Lastszenario, sind extrem große Ausreißer in der Größenordnung von +50ms. Dies ist auf ein ''Feature'' aktueller Preempt RT Kernel zurückzuführen. +Da Preempt RT auch auf vielen Desktops eingesetzt wird, auf denen Low Latency +Anwendungen betrieben werden (z.B. Multimedia Anwendungen), häuften sich +Fehlerberichte, die letztendlich nicht auf ein Kernelproblem zurückzuführen +waren, sondern auf eine Realtime Applikation, die den Rest des Systems +aushungerte. Daher wurde eine Option eingeführt, die die Laufzeit von Realtime +Tasks beschränken kann. Überschreiten die Realtime Tasks dieses Zeitlimit, +werden diese für einen bestimmten Zeitraum nicht mehr geschedult. Die +Standardeinstellung liegt bei 950ms. Bei Überschreiten der 950ms werden die +Echtzeittasks für 50ms suspendiert. +Da Interrupts unter Preempt RT als Kernelthread mit Echtzeitprioriät laufen +und durch den Floodping eine hohe Anzahl an Netzwerkinterrupts +(einschliesslich der zugehörigen Softinterrupts) erzeugt wird, nehmen Realtime +Tasks im System einen Großteil der Resourcen ein. Somit kann es passieren, daß +dieses Zeitlimit überschritten wird. +Das Limit für die Rechenzeit kann durch Schreiben des gewünschten Wertes nach +/proc/sys/kernel/sched\_rt\_runtime\_us angepaßt werden. +Zum Deaktivieren dieser Funktion muß Folgendes getan werden: +\begin{lstlisting} +echo -1 > /proc/sys/kernel/sched_rt_runtime_us +\end{lstlisting} +\section*{Erstellen einer Realtime Task für Preempt RT} +\subsection*{Schedulingklassen / Prioritäten} +Eine Realtime Applikation auf Preempt RT ist eine POSIX Realtime Applikation. +POSIX sieht für Echtzeitapplikationen folgende Schedulingstrategien vor: +\begin{itemize} +\item SCHED\_FIFO: Scheduling mit statischen Prioriäten +\item SCHED\_RR: Round Robin mit Prioritäten +\end{itemize} +Echtzeitpriorität bekommt eine Applikation nur dann, wenn dies explizit +gewünscht wird. Hierzu ist die Funktion sched\_setscheduler() vorgesehen. +\subsection*{Beispiel einer Echtzeitapplikation} +Das folgende Beispiel zeigt eine einfache POSIX Realtimeapplikation: +\begin{lstlisting} +/* + * POSIX Realtime Example + * based on the example on http://rt.wiki.kernel.org + / +#include <stdlib.h> +#include <stdio.h> +#include <time.h> +#include <sched.h> +#include <sys/mman.h> +#include <string.h> + +#define MAX_SAFE_STACK (8*1024) /* The maximum stack size which is + guranteed safe to access without + faulting */ + +void stack_prefault(void) { + + unsigned char dummy[MAX_SAFE_STACK]; + + memset(&dummy, 0, MAX_SAFE_STACK); + return; +} + +int main(int argc, char* argv[]) +{ + struct sched_param param; + + /* Declare ourself as a real time task */ + param.sched_priority = 80; + if(sched_setscheduler(0, SCHED_FIFO, ¶m) == -1) { + perror("sched_setscheduler failed"); + exit(-1); + } + + /* Lock memory !!!*/ + if(mlockall(MCL_CURRENT|MCL_FUTURE) == -1) { + perror("mlockall failed"); + exit(-2); + } + + /* Pre-fault our stack */ + stack_prefault(); + + while(1) { + [...] + } +} +\end{lstlisting} +Die oben aufgelistete Applikation zeigt sehr schön, was notwendig ist, um eine +Applikation mit deterministischem Zeitverhalten zu erzeugen: +\begin{itemize} +\item RT Scheduling Policy und Priorität festlegen +\item Speicher locken, um undeterministisches Zeitverhalten durch +Pagefaults auszuschliessen. +\item ''Stack Pre-Faulting'', um zu vermeiden, daß Stackfaults +undeterministisches Zeitverhalten verursachen +\end{itemize} +Eine Ausgezeichnete Einführung zum Erstellen von Echtzeitapplikationen und zur +Verwendung von Preempt RT findet sich unter:\newline +http://rt.wiki.kernel.org +\subsection*{Tracing / Latenzen aufspüren} +\subsubsection*{FTrace} +Ein hervorragendes Werkzeug, um kernelseitige Codepfade aufzuspüren, die lange +Latenzzeiten verursachen, ist Ftrace. Ftrace wird über DebugFS, einem virtuellen +Dateisystem, gesteuert und platziert dort auch seine Ausgaben. Die einfachste +Methode, FTrace zu verwenden ist Cyclictest. Cyclictest biete bereits einige +Optionen, um FTrace zu steuern. Die Option -f schällt Cyclictests Ftrace +Support an, -b <max\_latency> veranlaßt Cyclictest, bei Überschreiten einer +maximalen Latenzzeit, abzubrechen und einen Trace zu triggern. +\subsubsection*{Kerneloptionen für FTrace} +Um FTrace verwenden zu können, müssen beim Konfigurieren des Kernels einige +unter dem Menupunkt ''Kernel hacking-->Tracers'' einige Optionen aktiviert werden: +\begin{itemize} +\item Kernel Function Tracer +\item Beliebige Optionen, die mit Trace beginnen (der zu verwendende +Tracetyp kann cyclictest über die Commandline mitgegeben werden, siehe +cyclictest -h. Default ist der Event Tracer) +\end{itemize} +\subsubsection*{Beispiel eines Traces} +Das Erstellen eines Traces mit cyclictest läßt sich am Besten mit einem Beispiel +erläutern: +\begin{lstlisting} +# mount DebugFS +mkdir -p /mnt/debugfs +mount -t debugs debugfs /mnt/debugfs + +# list available tracers +zi:~# cat /mnt/debugfs/tracing/available_tracers +wakeup_rt wakeup preemptoff function sched_switch nop + +# start trace +cyclictest -p80 -n -f -b 100 + +zi:~# less /mnt/debugfs/tracing/trace +# tracer: function +# +# TASK-PID CPU# TIMESTAMP FUNCTION +# | | | | | +IRQ-129-772 [000] 4154503386.851178: __rt_mutex_adjust_prio<-t +IRQ-129-772 [000] 4154503386.851186: __rt_mutex_adjust_prio<-t +IRQ-129-772 [000] 4154503386.851189: task_setprio<-__rt_mutex_ +IRQ-129-772 [000] 4154503386.851192: task_rq_lock <-task_setpr +IRQ-129-772 [000] 4154503386.851195: sched_clock <-sched_clock +IRQ-129-772 [000] 4154503386.851199: dequeue_task <-task_setpr +IRQ-129-772 [000] 4154503386.851202: dequeue_task_fair <-deque +IRQ-129-772 [000] 4154503386.851206: update_curr <-dequeue_tas +IRQ-129-772 [000] 4154503386.851217: enqueue_task_rt <-task_se +IRQ-129-772 [000] 4154503386.851221: dequeue_rt_stack<-enqueue +IRQ-129-772 [000] 4154503386.851226: switched_to_rt <-task_set +IRQ-129-772 [000] 4154503386.851234: timer_interrupt<-ret_from +[...] +\end{lstlisting} + +\subsection*{Kontrollfragen} +\begin{itemize} +\item Welche Optionen sollten beim Übersetzen eines Preempt RT Kernels +mindestens gesetzt sein? +\item Wozu dient das Tool cyclictest? +\item Welchen bekannten ''Pitfall'' gibt es bzgl. hoher Latencies mit Floodping +als Lastszenario? Wie kann dieser umgangen werden? +\item Welche 3 Schritte sind notwendig, um das deterministische Zeitverhalten +einer Applikation zu garantieren? +\end{itemize} \end{document} diff --git a/realtime/rt-specialties/hints_rt-specialties_de.tex b/realtime/rt-specialties/hints_rt-specialties_de.tex index b8b74bc..e07f25a 100644 --- a/realtime/rt-specialties/hints_rt-specialties_de.tex +++ b/realtime/rt-specialties/hints_rt-specialties_de.tex @@ -1,25 +1,27 @@ -\documentclass{article} +\documentclass{lxarticle} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{lxheaders} +\usepackage{lxextras} \begin{document} -\section*{Block \lq Realtime-Besonderheiten\rq} +\section*{Block \lq Was ist Linux?\rq} \subsection*{Lernziele} \begin{itemize} -\item Verstehen, warum Kernel-Treiber SMP-fest sein müssen -\item Kennenlernen der Grundregeln für korrektes Locking im Kernel -\item Kennenlernen von Möglichkeiten zum Test der RT-Funktionalität - (lockdep, cyclictest) +\item Beschaffen und anwenden des Preempt RT Patches +\item Konfigurieren und Kompilieren eines Preempt RT Kernels +\item Testen des Preempt RT Kernels \end{itemize} \subsection*{Unterrichts-Ablauf} -Hinweise zur Präsentation, Zeitplanung, etc. +Vortrag + Übungen (insgesamt 90 - 120 Minuten) \subsection*{Übungen bei vorhandener Hardware} -Hinweise zu Übungen, Zeitlimit dazu. +RT Kernel für das Entwicklungssystem. Testen des RT Kernels und dessen +Echtzeitverhaltens auf dem Entwicklungssystem. \end{document} diff --git a/realtime/rt-specialties/images/g4894.png b/realtime/rt-specialties/images/g4894.png Binary files differnew file mode 100644 index 0000000..6b9f247 --- /dev/null +++ b/realtime/rt-specialties/images/g4894.png diff --git a/realtime/rt-specialties/images/menu_rt_001.png b/realtime/rt-specialties/images/menu_rt_001.png Binary files differnew file mode 100644 index 0000000..27f26cd --- /dev/null +++ b/realtime/rt-specialties/images/menu_rt_001.png diff --git a/realtime/rt-specialties/images/menu_rt_002.png b/realtime/rt-specialties/images/menu_rt_002.png Binary files differnew file mode 100644 index 0000000..c4dd8dc --- /dev/null +++ b/realtime/rt-specialties/images/menu_rt_002.png diff --git a/realtime/rt-specialties/images/menu_rt_003.png b/realtime/rt-specialties/images/menu_rt_003.png Binary files differnew file mode 100644 index 0000000..8449d80 --- /dev/null +++ b/realtime/rt-specialties/images/menu_rt_003.png diff --git a/realtime/rt-specialties/images/menu_rt_004.png b/realtime/rt-specialties/images/menu_rt_004.png Binary files differnew file mode 100644 index 0000000..21045c8 --- /dev/null +++ b/realtime/rt-specialties/images/menu_rt_004.png diff --git a/realtime/rt-specialties/images/pitfall.png b/realtime/rt-specialties/images/pitfall.png Binary files differnew file mode 100644 index 0000000..a083003 --- /dev/null +++ b/realtime/rt-specialties/images/pitfall.png diff --git a/realtime/rt-specialties/images/pitfall.svg b/realtime/rt-specialties/images/pitfall.svg new file mode 100644 index 0000000..bdfc4de --- /dev/null +++ b/realtime/rt-specialties/images/pitfall.svg @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="792pt" + height="612pt" + id="svg4691" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="pitfall.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs4693"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 382.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="990 : 382.5 : 1" + inkscape:persp3d-origin="495 : 255 : 1" + id="perspective4700" /> + <inkscape:perspective + id="perspective20" + inkscape:persp3d-origin="90 : 60 : 1" + inkscape:vp_z="180 : 90 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 90 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + inkscape:document-units="in" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.43415836" + inkscape:cx="490" + inkscape:cy="380" + inkscape:current-layer="layer1" + id="namedview4695" + showgrid="false" + inkscape:window-width="777" + inkscape:window-height="694" + inkscape:window-x="0" + inkscape:window-y="0" /> + <metadata + id="metadata4697"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g4755" + transform="matrix(2.6403336,0,0,2.4856297,25.373428,151.72498)"> + <g + id="g2474" + transform="translate(207.14286,240)"> + <path + id="path2167" + style="opacity:1;fill:#000000;fill-opacity:0.39215686;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + transform="matrix(1.093023,0,0,0.842105,-449.57615,-588.31045)" + d="M 367.85713,604.50507 C 367.85713,612.00036 340.35462,618.0765 306.42856,618.0765 C 272.5025,618.0765 244.99999,612.00036 244.99999,604.50507 C 244.99999,597.00978 272.5025,590.93364 306.42856,590.93364 C 340.35462,590.93364 367.85713,597.00978 367.85713,604.50507 z" /> + <path + id="path2169" + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.49999952;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="M -38.366697,-154.03579 C -38.366697,-106.45336 -78.601717,-76.585723 -120.60133,-76.585723 C -162.60093,-76.585723 -195.91902,-97.142383 -195.91902,-144.72481 C -195.91902,-192.30724 -161.83237,-230.92485 -119.83278,-230.92485 C -77.833167,-230.92485 -38.366697,-201.61822 -38.366697,-154.03579 z" /> + <path + id="path2171" + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.50000119;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="M -92.266587,-185.80507 C -88.974947,-170.69628 -70.512827,-157.9914 -58.003827,-159.36286 C -45.494817,-160.73432 -40.031307,-172.58272 -41.584257,-185.80507 C -43.137207,-199.0274 -55.750417,-209.75858 -69.738737,-209.75858 C -83.727047,-209.75858 -95.550867,-200.88001 -92.266587,-185.80507 z" /> + <path + id="path2173" + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="M -96.631567,-188.85315 C -99.432827,-172.07333 -118.94378,-163.19223 -133.32452,-164.71536 C -147.70527,-166.23851 -157.84425,-176.37155 -153.76668,-190.59614 C -149.84821,-204.2657 -135.34576,-213.1164 -119.22855,-214.87495 C -103.87249,-216.55048 -93.836587,-205.59541 -96.631567,-188.85315 z" /> + <path + id="path2175" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="M -54.955147,-120.00315 C -35.563807,-164.77146 -78.057907,-147.52991 -100.06113,-150.43917 C -129.6546,-154.35203 -147.89706,-167.90437 -156.64093,-137.64851 C -162.45911,-117.51627 -151.86379,-87.343823 -118.49223,-84.253623 C -86.109857,-81.255013 -64.429777,-98.129303 -54.955147,-120.00315 z" /> + <path + id="path2182" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.50000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M -92.281567,-193.24411 C -85.247077,-198.69989 -68.966957,-202.51813 -55.470537,-199.26799" /> + <path + id="path2184" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.50000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M -92.073437,-191.12679 C -83.780857,-185.22099 -66.976157,-181.08779 -48.678887,-180.64384" /> + <path + id="path2186" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.50000238;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M -91.561127,-192.46927 C -87.012907,-194.49878 -78.385717,-193.52634 -73.191017,-190.53255" /> + <path + id="path2188" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.50000072;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M -96.951897,-195.68429 C -104.71553,-201.14007 -122.68309,-204.95831 -137.57845,-201.70816" /> + <path + id="path2190" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.50000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M -97.048287,-193.26964 C -105.25822,-185.63676 -121.89541,-180.29485 -140.0103,-179.72107" /> + <path + id="path2192" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M -96.557957,-193.69653 C -103.49043,-194.37538 -110.15904,-194.05739 -115.47511,-192.10333" /> + </g> + </g> + </g> +</svg> diff --git a/realtime/rt-specialties/images/thumb.png b/realtime/rt-specialties/images/thumb.png Binary files differnew file mode 100644 index 0000000..6b9f247 --- /dev/null +++ b/realtime/rt-specialties/images/thumb.png diff --git a/realtime/rt-specialties/images/thumb.svg b/realtime/rt-specialties/images/thumb.svg new file mode 100644 index 0000000..9dd0510 --- /dev/null +++ b/realtime/rt-specialties/images/thumb.svg @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg4789" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="thumb.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs4791"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective4797" /> + <inkscape:perspective + id="perspective4891" + inkscape:persp3d-origin="31.057341 : 38.773214 : 1" + inkscape:vp_z="62.114681 : 58.159821 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 58.159821 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.35" + inkscape:cx="350" + inkscape:cy="520" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="777" + inkscape:window-height="694" + inkscape:window-x="0" + inkscape:window-y="0" /> + <metadata + id="metadata4794"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <g + transform="matrix(2.2879403,0,0,1.9333886,19.286101,148.62532)" + id="g4894" + inkscape:label="Ebene 1" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-specialties/images/thumb.png"> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1" + d="M 41.170639,110.94497 C 42.131869,113.28037 42.056699,113.0115 42.896889,114.1923 C 41.969312,115.97194 44.898116,118.97037 48.383799,119.76051 C 49.507048,120.56961 49.903311,120.30025 52.299619,121.27211 C 58.356641,122.77968 66.085401,121.9375 70.823561,121.81605 C 75.124991,121.51645 79.41525,120.17798 81.280831,119.44983 C 84.661022,118.13049 86.78171,116.82102 88.335754,114.25496 C 91.046488,109.77894 90.113227,106.17538 87.706007,104.18412 C 90.382541,101.51454 91.669184,97.152614 90.704161,93.898234 C 94.508891,91.209724 95.540465,84.271374 94.863987,78.085094 C 94.522513,74.962334 93.036658,72.780764 92.072269,71.443744 C 92.782581,65.900674 91.599915,60.272684 89.120714,56.268294 C 87.41304,53.510084 83.940323,50.110774 80.519977,50.024434 C 77.099631,49.938094 69.415201,52.354294 68.403481,47.244774 C 67.391761,42.135254 72.371751,35.082944 73.534111,27.675154 C 74.248791,23.120434 70.474441,17.739634 67.980861,14.215834 C 65.494381,10.702094 62.041921,8.7951439 57.684111,6.7658539 C 54.096361,5.0951639 48.415189,5.5675339 45.925219,9.1570439 C 43.260689,12.998194 44.090429,19.239174 45.092349,23.858744 C 45.998149,28.035154 47.695539,31.970064 48.287689,36.273354 C 48.868549,40.494514 50.164909,48.246034 49.106779,52.050464 C 45.882339,55.056064 42.600159,55.099934 38.986699,57.093044 C 35.594339,58.964204 33.823939,63.176654 34.548469,66.919794 C 35.061549,69.570474 37.958069,71.349814 35.739289,74.091144 C 33.091899,77.361994 31.481839,82.297624 34.836819,85.210614 C 38.191789,88.123604 37.687799,89.385374 38.188199,89.851284 C 38.688589,90.317194 38.787859,91.454134 37.586109,94.610074 C 35.645569,99.706164 34.969639,100.12145 38.922519,103.72618 C 40.390999,105.06533 37.396909,110.17207 41.170639,110.94497 z" + id="path3128" + sodipodi:nodetypes="cccccssccscsccsssssscsssccssc" /> + <path + sodipodi:nodetypes="ccssccsccsccsccscscsccsscccssscsssssscssscsscscscsssssscsscccccccscsscccccsccssccccccsscssccccccc" + id="path8092" + d="M 70.823561,121.81605 C 66.085401,121.9375 58.356641,122.77968 52.299619,121.27211 C 55.656491,121.47531 58.548621,121.04894 60.086071,120.88674 C 63.462791,120.53055 67.192471,119.57209 69.944951,118.59737 C 73.064041,117.49283 73.672841,117.04139 75.670361,115.85783 C 75.414041,117.17356 74.791451,118.5315 73.803671,119.4424 C 77.198442,118.50835 84.499756,116.10462 86.492036,113.18378 C 88.429655,110.34307 88.601101,107.29043 85.496095,104.79093 C 84.373291,103.94306 84.024458,102.19986 85.806965,103.01437 C 86.38267,102.27147 87.779458,99.728974 88.111128,97.979504 C 88.804697,94.321204 87.263038,88.117034 84.182962,85.576144 C 86.172142,86.359534 88.959955,89.356624 90.046062,91.031534 C 92.927379,88.060044 93.779873,82.897434 93.113685,77.978004 C 92.248692,71.590494 90.014835,69.799834 84.73879,66.649764 C 87.881122,67.168244 89.359604,68.258974 90.643189,69.495754 C 91.074018,65.302684 89.530354,60.906084 87.570339,57.233014 C 86.14698,54.565644 83.449894,51.867614 80.519977,50.024434 C 83.940323,50.110774 87.41304,53.510084 89.120714,56.268294 C 91.599915,60.272684 92.782581,65.900674 92.072269,71.443744 C 93.036658,72.780764 94.522513,74.962334 94.863987,78.085094 C 95.540465,84.271374 94.508891,91.209724 90.704161,93.898234 C 91.669184,97.152614 90.382541,101.51454 87.706007,104.18412 C 90.113227,106.17538 91.046488,109.77894 88.335754,114.25496 C 86.78171,116.82102 84.661022,118.13049 81.280831,119.44983 C 79.41525,120.17798 75.124991,121.51645 70.823561,121.81605 z M 38.188199,89.851284 C 37.687799,89.385374 38.191789,88.123604 34.836819,85.210614 C 31.481839,82.297624 33.091899,77.361994 35.739289,74.091144 C 37.958069,71.349814 35.061549,69.570474 34.548469,66.919794 C 33.823939,63.176654 35.594339,58.964204 38.986699,57.093044 C 42.600159,55.099934 45.882339,55.056064 49.106779,52.050464 C 50.164909,48.246034 48.868549,40.494514 48.287689,36.273354 C 47.695539,31.970064 45.998149,28.035154 45.092349,23.858744 C 44.090429,19.239174 43.260689,12.998194 45.925219,9.1570439 C 48.415189,5.5675339 54.096361,5.0951639 57.684111,6.7658539 C 62.041921,8.7951439 65.494381,10.702094 67.980861,14.215834 C 70.474441,17.739634 74.248791,23.120434 73.534111,27.675154 C 72.371751,35.082944 67.391761,42.135254 68.403481,47.244774 C 65.966661,43.090294 71.277011,33.683014 71.741501,28.023024 C 72.173861,22.702744 68.977341,18.506994 66.513141,15.196274 C 64.930081,13.069374 61.283261,10.188154 57.806571,8.8197839 C 54.962951,7.7005739 51.113399,6.4705439 47.985389,9.9913339 C 45.137169,13.009924 46.044469,19.803564 46.974489,23.387494 C 48.263719,28.355684 49.794549,33.154204 50.510939,39.072884 C 50.972909,42.889654 51.164149,48.006724 50.773309,52.049874 C 52.388179,52.768974 57.845431,50.486174 60.978181,49.820704 C 65.238851,48.915624 70.426461,46.809454 74.687691,49.443604 C 68.527361,48.927964 63.869771,50.382564 58.460261,51.940494 C 54.426811,53.102114 50.470919,54.609784 46.497499,55.894614 C 43.451409,57.157874 39.926599,58.357294 37.782079,60.779344 C 35.855469,62.955274 35.108689,65.336334 37.645909,67.812734 C 41.030029,71.115744 37.019619,74.976584 35.034559,77.597314 C 32.367939,81.117874 36.912969,83.907404 38.798349,86.372714 C 40.857029,89.064634 39.307489,93.545424 37.961699,96.678164 C 36.567509,99.923604 38.990399,99.933374 40.975779,103.75712 C 42.120859,105.9625 39.874969,108.78161 41.170639,110.94497 C 37.396909,110.17207 40.390999,105.06533 38.922519,103.72618 C 34.969639,100.12145 35.645569,99.706164 37.586109,94.610074 C 38.787859,91.454134 38.688589,90.317194 38.188199,89.851284 z M 48.383799,119.76051 C 46.304349,119.39492 41.900229,116.74798 42.896889,114.1923 C 43.737079,115.90881 48.956979,116.80855 48.383799,119.76051 L 48.383799,119.76051 z M 61.944051,106.0826 C 60.070141,105.70878 54.915861,101.74929 57.493391,101.28654 C 61.287781,102.32686 65.469701,104.35839 69.588021,103.28335 C 73.700151,102.20991 78.712808,101.30953 82.507952,102.99747 C 78.500154,103.54114 75.762845,104.51196 71.890071,105.2329 C 68.760541,105.81549 65.209391,106.73398 61.944051,106.0826 z M 82.599485,97.052304 C 83.810322,93.992764 80.297493,88.426484 82.190947,87.490244 C 83.123059,90.474514 87.048271,93.577164 84.078499,96.254254 C 83.922706,96.653754 83.092709,98.111094 82.599485,97.052304 z M 53.449791,87.358584 C 49.500679,84.255794 50.526269,83.471524 52.869781,84.041934 C 55.361961,84.648514 61.502121,84.966554 63.285491,84.544934 C 67.279171,83.600754 75.427651,81.900984 78.752617,84.910394 C 75.257931,84.333494 68.644881,86.015124 64.289191,86.725644 C 61.857651,87.122274 55.382531,88.877134 53.449791,87.358584 z M 80.596084,81.454004 C 84.02012,79.165214 80.413178,71.584134 83.664027,70.673714 C 84.900881,74.123284 85.877771,81.264664 80.813289,81.694264 L 80.596089,81.454014 L 80.596084,81.454004 z M 51.358349,70.368364 C 47.750589,68.816654 47.835069,66.802844 52.500609,67.236454 C 58.270181,67.772684 64.357171,66.342544 69.858661,65.638074 C 73.432941,65.180374 79.606826,64.459574 82.079845,65.986084 C 77.633542,66.773784 72.981011,66.859144 68.739291,68.164734 C 63.829991,69.675814 52.107579,70.690624 51.358349,70.368364 z M 79.145086,52.109884 C 81.356839,54.214244 84.099868,57.760524 81.732109,60.849754 C 82.046922,57.455914 78.805672,55.042494 79.145086,52.109884 z M 53.232611,38.288304 C 54.787401,34.551104 61.305021,36.243034 65.150331,36.103174 C 68.229611,38.978454 62.456401,37.601404 60.762231,37.944104 C 58.493281,37.495924 54.835871,40.768974 53.232611,38.288304 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1" /> + </g> + </g> +</svg> diff --git a/realtime/rt-specialties/pres_rt-specialties_de.tex b/realtime/rt-specialties/pres_rt-specialties_de.tex index 07db328..046521d 100644 --- a/realtime/rt-specialties/pres_rt-specialties_de.tex +++ b/realtime/rt-specialties/pres_rt-specialties_de.tex @@ -1,24 +1,231 @@ -\documentclass{article} +\documentclass{beamer} +\usetheme{linutronix} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{pgf} +\usepackage{graphicx} +\usepackage{lxextras} + +\title{Block \lq Anwendung des Preempt RT Patches\rq} +\institute{Linutronix GmbH} \begin{document} -\section*{Block \lq Was ist Linux?\rq} +\maketitle + + +% ----- Slide ------------------ +\begin{frame}[fragile] +\frametitle{Besorgen und Anwenden des Preempt RT Patches} +\begin{lstlisting} +# Vanilla Kernel +wget http://www.kernel.org/pub/linux/kernel\ +/v2.6/linux-2.6.29.5.tar.bz2 + +# Preempt RT Patch +wget http://www.kernel.org/pub/linux/kernel\ +/projects/rt/patch-2.6.29.5-rt21.bz2 + +# Extract the kernel tree +tar xjvf linux-2.6.29.5.tar.bz2 +# Patch the kernel tree +cd linux-2.6.29.5 +bzcat ../patch-2.6.29.5-rt21.bz2 | patch -p1 +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Besorgen und Anwenden des Preempt RT Patches} +\begin{lstlisting} +mkdir linux-2.6.29.5-rt21 +cd linux-2.6.29.5-rt21 +ketchup -f --no-gpg 2.6.29.5-rt21 +\end{lstlisting} +\end{frame} -\subsection*{Lernziele} +\begin{frame}[fragile] +\frametitle{Konfigurieren und Übersetzen eines Preempt RT Kernels} +\begin{overprint} +\onslide<1> +\begin{lstlisting} +# external build directory +mkdir ../build +# base build on existing config +cp /boot/config-x-x-x ../build/.config +make O=../build oldconfig +\end{lstlisting} +\onslide<2> +\begin{lstlisting} +make O=../build menuconfig +\end{lstlisting} +\onslide<3> +\begin{figure}[ht!] +\centering +\includegraphics[height=0.5\textwidth]{images/menu_rt_001.png} +\end{figure} +\onslide<4> +\begin{figure}[ht!] +\centering +\includegraphics[height=0.5\textwidth]{images/menu_rt_002.png} +\end{figure} +\onslide<5> +\begin{figure}[ht!] +\centering +\includegraphics[height=0.5\textwidth]{images/menu_rt_003.png} +\end{figure} +\onslide<6> +\begin{figure}[ht!] +\centering +\includegraphics[height=0.5\textwidth]{images/menu_rt_004.png} +\end{figure} +\onslide<7> +\begin{lstlisting} +make O=../build +make O=../build modules +make O=../build install +make O=../build modules_install +\end{lstlisting} +\end{overprint} +\end{frame} + +\begin{frame} +\frametitle{Testen eines Preempt RT Systems} +RT Tests: \begin{itemize} -\item Lernziel 1 -\item Lernziel 2 -\item Lernziel 3 +\item cyclictest +\item hwlatdetect +\item pi\_stress +\item signaltest \end{itemize} +\end{frame} -\subsection*{Unterrichts-Ablauf} +\begin{frame} +\frametitle{Cyclictest} +\begin{itemize} +\item Ursprünglich entwickelt von Thomas Gleixner für Preempt RT Testing +\item High Resolution Timer Testsoftware +\item Setzt beliebige Anzahl von Realtime Tasks mit unterschiedlicher Priorität +und unterschiedlichen Intervallen auf +\item Viele Debuggingmöglichkeiten +\item Sehr Aussagekräftig, um Echtzeitverhalten auf einer bestimmten Plattform +zu beurteilen. +\end{itemize} +\end{frame} -Hinweise zur Präsentation, Zeitplanung, etc. +\begin{frame} +\frametitle{Lastszenarien} +Geeignete Lastszenarien, um Worst-Case Situationen nachstellen / provozieren zu +können: +\begin{itemize} +\item CPU Last: ''hackbench'', ursprünglich als Scheduler Benchmark geschrieben. +\item Interrupt Last: Floodping (''ping -F'') +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Pitfall!} +\begin{lstlisting} +cat /proc/sys/kernel/sched_rt_runtime_us +\end{lstlisting} +\begin{figure}[l!] +\centering +\includegraphics[height=0.4\textwidth]{images/pitfall.png} +\end{figure} +\end{frame} + +\begin{frame} +\frametitle{Echtzeitapplikationen mit Preempt RT} +\begin{columns} +\column[r]{7cm} +\begin{figure}[l!] +\centering +\includegraphics[height=0.4\textwidth]{images/thumb.png} +\end{figure} +\column[l]{8cm} +\huge +POSIX! +\end{columns} +\end{frame} + +\begin{frame} +\frametitle{Schedulingstrategien} +\begin{itemize} +\item SCHED\_FIFO: Static priority +\item SCHED\_RR: Round Robin mit Prioritäten +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Aufbau einer RT Applikation} +\begin{overprint} +\onslide<1> +Schedulingstrategie / Priorität +\begin{lstlisting} +struct sched_param param; + +param.sched_priority = 80; +if(sched_setscheduler(0, SCHED_FIFO, ¶m) + == -1) { + perror("sched_setscheduler failed"); + exit(-1); +} +\end{lstlisting} +\onslide<2> +Lock memory: +\begin{lstlisting} +if(mlockall(MCL_CURRENT|MCL_FUTURE) == -1) { + perror("mlockall failed"); + exit(-2); +} +\end{lstlisting} +\onslide<3> +''Stack prefaulting'' +\begin{lstlisting} +void stack_prefault(void) { + unsigned char dummy[MAX_SAFE_STACK]; + memset(&dummy, 0, MAX_SAFE_STACK); + return; +} +\end{lstlisting} +\end{overprint} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Tracing / Latency hunting} +\begin{itemize} +\item FTrace +\item Cyclictest unterstützt Traces mittels FTrace +\item Unterschiedliche Tracer (müssen im Kernel aktiviert sein) +\item Kommunikation mit FTrace über Debugfs +\end{itemize} +\end{frame} -\subsection*{Übungen bei vorhandener Hardware} +\begin{frame}[fragile] +\frametitle{Cyclictest + FTrace} +\begin{lstlisting}[basicstyle=\ttfamily\fontsize{8}{10}\selectfont] +# mount DebugFS +mkdir -p /mnt/debugfs +mount -t debugs debugfs /mnt/debugfs -Hinweise zu Übungen, Zeitlimit dazu. +# list available tracers +zi:~# cat /mnt/debugfs/tracing/available_tracers +wakeup_rt wakeup preemptoff function sched_switch nop +\end{lstlisting} +\end{frame} +\begin{frame}[fragile] +\frametitle{Cyclictest + FTrace} +\begin{lstlisting}[basicstyle=\ttfamily\fontsize{8}{10}\selectfont] +cyclictest -p80 -n -f -b 100 +zi:~# less /mnt/debugfs/tracing/trace +# tracer: function +# +# TASK-PID CPU# TIMESTAMP FUNCTION +# | | | | | +IRQ-129-772 [000] 4154503386.851178: __rt_mutex_adjust_prio +IRQ-129-772 [000] 4154503386.851186: __rt_mutex_adjust_prio +IRQ-129-772 [000] 4154503386.851189: task_setprio<-__rt_mut +[...] +\end{lstlisting} +\end{frame} \end{document} |
