From 03cf86041d8ec9aaebdfb3d787a37b725854d256 Mon Sep 17 00:00:00 2001 From: Jan Altenberg Date: Fri, 19 Jun 2009 04:14:47 +0200 Subject: Added lots of content for the RT basics stuff. --- realtime/rt-basics/images/ipipe.png | Bin 0 -> 18012 bytes realtime/rt-basics/images/ipipe.svg | 185 +++++++++++++++++++++ realtime/rt-basics/images/nuclear.png | Bin 0 -> 1134159 bytes realtime/rt-basics/images/preempt_rt.png | Bin 0 -> 26716 bytes realtime/rt-basics/images/preempt_rt.svg | 254 ++++++++++++++++++++++++++++ realtime/rt-basics/images/prio_inv.png | Bin 0 -> 23132 bytes realtime/rt-basics/images/prio_inv.svg | 204 +++++++++++++++++++++++ realtime/rt-basics/images/rtai.dia | Bin 0 -> 634 bytes realtime/rt-basics/images/rtai.dia~ | Bin 0 -> 801 bytes realtime/rt-basics/images/rtai.png | Bin 0 -> 33749 bytes realtime/rt-basics/images/rtai.svg | 273 ++++++++++++++++++++++++++++++ realtime/rt-basics/images/xenomai.png | Bin 0 -> 34356 bytes realtime/rt-basics/images/xenomai.svg | 274 +++++++++++++++++++++++++++++++ 13 files changed, 1190 insertions(+) create mode 100644 realtime/rt-basics/images/ipipe.png create mode 100644 realtime/rt-basics/images/ipipe.svg create mode 100644 realtime/rt-basics/images/nuclear.png create mode 100644 realtime/rt-basics/images/preempt_rt.png create mode 100644 realtime/rt-basics/images/preempt_rt.svg create mode 100644 realtime/rt-basics/images/prio_inv.png create mode 100644 realtime/rt-basics/images/prio_inv.svg create mode 100644 realtime/rt-basics/images/rtai.dia create mode 100644 realtime/rt-basics/images/rtai.dia~ create mode 100644 realtime/rt-basics/images/rtai.png create mode 100644 realtime/rt-basics/images/rtai.svg create mode 100644 realtime/rt-basics/images/xenomai.png create mode 100644 realtime/rt-basics/images/xenomai.svg (limited to 'realtime/rt-basics') diff --git a/realtime/rt-basics/images/ipipe.png b/realtime/rt-basics/images/ipipe.png new file mode 100644 index 0000000..b7468fa Binary files /dev/null and b/realtime/rt-basics/images/ipipe.png differ 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 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Xenomai Domain + + Linux Domain + + Interrupts + + + ..... + + + + ..... + + + + diff --git a/realtime/rt-basics/images/nuclear.png b/realtime/rt-basics/images/nuclear.png new file mode 100644 index 0000000..a434e91 Binary files /dev/null and b/realtime/rt-basics/images/nuclear.png differ diff --git a/realtime/rt-basics/images/preempt_rt.png b/realtime/rt-basics/images/preempt_rt.png new file mode 100644 index 0000000..463673f Binary files /dev/null and b/realtime/rt-basics/images/preempt_rt.png differ diff --git a/realtime/rt-basics/images/preempt_rt.svg b/realtime/rt-basics/images/preempt_rt.svg new file mode 100644 index 0000000..b186ef5 --- /dev/null +++ b/realtime/rt-basics/images/preempt_rt.svg @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + Hardware + + Linux + + IRQThread + + App + + RT App + + IRQThread + ..... + Kernel + User + + + diff --git a/realtime/rt-basics/images/prio_inv.png b/realtime/rt-basics/images/prio_inv.png new file mode 100644 index 0000000..574afb3 Binary files /dev/null and b/realtime/rt-basics/images/prio_inv.png differ diff --git a/realtime/rt-basics/images/prio_inv.svg b/realtime/rt-basics/images/prio_inv.svg new file mode 100644 index 0000000..c20b77f --- /dev/null +++ b/realtime/rt-basics/images/prio_inv.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + Prio + Task 1 + Task 2 + Task 3 + + + + + blockiert + unterbrochen + Task 3 + Task 2 + + diff --git a/realtime/rt-basics/images/rtai.dia b/realtime/rt-basics/images/rtai.dia new file mode 100644 index 0000000..dedf883 Binary files /dev/null and b/realtime/rt-basics/images/rtai.dia differ diff --git a/realtime/rt-basics/images/rtai.dia~ b/realtime/rt-basics/images/rtai.dia~ new file mode 100644 index 0000000..c4024ff Binary files /dev/null and b/realtime/rt-basics/images/rtai.dia~ differ diff --git a/realtime/rt-basics/images/rtai.png b/realtime/rt-basics/images/rtai.png new file mode 100644 index 0000000..c6c21ce Binary files /dev/null and b/realtime/rt-basics/images/rtai.png differ 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 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + Hardware + + RT Kernel + + Linux + + RT App + + RT App + + Linux App + + Linux App + + + + + + + FIFO + + + Userspace + Kernelspace + + + diff --git a/realtime/rt-basics/images/xenomai.png b/realtime/rt-basics/images/xenomai.png new file mode 100644 index 0000000..d1ff146 Binary files /dev/null and b/realtime/rt-basics/images/xenomai.png differ 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 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + Hardware + + Adeos / IPIPE + + Linux + + Nucleus + + RT App + + Linux App + + + + + Userspace + Kernelspace + + RT App + + Skins + + + + + -- cgit v1.2.3 From 70f1e16d1f2994ef3c055fa914495f49f1b47700 Mon Sep 17 00:00:00 2001 From: Jan Altenberg Date: Fri, 19 Jun 2009 20:16:42 +0200 Subject: Completed RT Basics chapter --- realtime/rt-basics/images/dual_kernel.png | Bin 0 -> 43070 bytes realtime/rt-basics/images/dual_kernel.svg | 251 ++++++++++++++++++++++++++++ realtime/rt-basics/images/gpos_vs_rt.png | Bin 0 -> 124609 bytes realtime/rt-basics/images/gpos_vs_rt.svg | 134 +++++++++++++++ realtime/rt-basics/images/mar01.png | Bin 0 -> 43535 bytes realtime/rt-basics/images/mar01.svg | 122 ++++++++++++++ realtime/rt-basics/images/mar02.png | Bin 0 -> 72568 bytes realtime/rt-basics/images/mar02.svg | 158 +++++++++++++++++ realtime/rt-basics/images/mar03.png | Bin 0 -> 74787 bytes realtime/rt-basics/images/mar03.svg | 163 ++++++++++++++++++ realtime/rt-basics/images/preempt_rt.svg | 2 +- realtime/rt-basics/images/prio_inv.svg | 5 +- realtime/rt-basics/images/single_kernel.png | Bin 0 -> 34007 bytes realtime/rt-basics/images/single_kernel.svg | 234 ++++++++++++++++++++++++++ 14 files changed, 1067 insertions(+), 2 deletions(-) create mode 100644 realtime/rt-basics/images/dual_kernel.png create mode 100644 realtime/rt-basics/images/dual_kernel.svg create mode 100644 realtime/rt-basics/images/gpos_vs_rt.png create mode 100644 realtime/rt-basics/images/gpos_vs_rt.svg create mode 100644 realtime/rt-basics/images/mar01.png create mode 100644 realtime/rt-basics/images/mar01.svg create mode 100644 realtime/rt-basics/images/mar02.png create mode 100644 realtime/rt-basics/images/mar02.svg create mode 100644 realtime/rt-basics/images/mar03.png create mode 100644 realtime/rt-basics/images/mar03.svg create mode 100644 realtime/rt-basics/images/single_kernel.png create mode 100644 realtime/rt-basics/images/single_kernel.svg (limited to 'realtime/rt-basics') diff --git a/realtime/rt-basics/images/dual_kernel.png b/realtime/rt-basics/images/dual_kernel.png new file mode 100644 index 0000000..c58d156 Binary files /dev/null and b/realtime/rt-basics/images/dual_kernel.png differ 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 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + Hardware + + + Micro Kernel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/realtime/rt-basics/images/gpos_vs_rt.png b/realtime/rt-basics/images/gpos_vs_rt.png new file mode 100644 index 0000000..07a4a79 Binary files /dev/null and b/realtime/rt-basics/images/gpos_vs_rt.png differ 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 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + RealtimeOperating System + General PurposeOperating System + + + + diff --git a/realtime/rt-basics/images/mar01.png b/realtime/rt-basics/images/mar01.png new file mode 100644 index 0000000..7f18317 Binary files /dev/null and b/realtime/rt-basics/images/mar01.png differ 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 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/realtime/rt-basics/images/mar02.png b/realtime/rt-basics/images/mar02.png new file mode 100644 index 0000000..f1f53a1 Binary files /dev/null and b/realtime/rt-basics/images/mar02.png differ 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 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + RTAI / Fusion + + diff --git a/realtime/rt-basics/images/mar03.png b/realtime/rt-basics/images/mar03.png new file mode 100644 index 0000000..97ab7ba Binary files /dev/null and b/realtime/rt-basics/images/mar03.png differ diff --git a/realtime/rt-basics/images/mar03.svg b/realtime/rt-basics/images/mar03.svg new file mode 100644 index 0000000..25c40ad --- /dev/null +++ b/realtime/rt-basics/images/mar03.svg @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/realtime/rt-basics/images/preempt_rt.svg b/realtime/rt-basics/images/preempt_rt.svg index b186ef5..a9c0ac7 100644 --- a/realtime/rt-basics/images/preempt_rt.svg +++ b/realtime/rt-basics/images/preempt_rt.svg @@ -15,7 +15,7 @@ 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/ipipe.png" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/preempt_rt.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> + 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"> + + + + + + + + + + + + + image/svg+xml + + + + + + + Hardware + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 088976ed259b779438aad64b0997b6bdde5169d4 Mon Sep 17 00:00:00 2001 From: Jan Altenberg Date: Sat, 20 Jun 2009 00:34:08 +0200 Subject: Commit missing RT basics changes --- realtime/rt-basics/handout_rt-basics_de.tex | 168 +++++++++++++++++++++- realtime/rt-basics/hints_rt-basics_de.tex | 13 +- realtime/rt-basics/pres_rt-basics_de.tex | 210 ++++++++++++++++++++++++++-- 3 files changed, 369 insertions(+), 22 deletions(-) (limited to 'realtime/rt-basics') diff --git a/realtime/rt-basics/handout_rt-basics_de.tex b/realtime/rt-basics/handout_rt-basics_de.tex index 4c391b2..8576b7d 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 Echteit?} +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 deren +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 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 proprietären 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, die Skins benötigen, um die Funktionalität von +RTOSsen nachzubilden. 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 Preempton 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 ''natlos'' 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 welchen 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/pres_rt-basics_de.tex b/realtime/rt-basics/pres_rt-basics_de.tex index 07db328..c60f8a5 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 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} -- cgit v1.2.3 From 3ed5b5306f5fa4ee95bcb5a57733bd116ce008e3 Mon Sep 17 00:00:00 2001 From: Jan Altenberg Date: Sat, 20 Jun 2009 03:36:56 +0200 Subject: Adding one more missing rt-basic file --- realtime/rt-basics/images/mar03.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'realtime/rt-basics') diff --git a/realtime/rt-basics/images/mar03.svg b/realtime/rt-basics/images/mar03.svg index 25c40ad..71e98ae 100644 --- a/realtime/rt-basics/images/mar03.svg +++ b/realtime/rt-basics/images/mar03.svg @@ -16,7 +16,7 @@ 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/mar02.png" + inkscape:export-filename="/home/jan/work/omnicron/schulung/realtime/rt-basics/images/mar03.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> Date: Sat, 20 Jun 2009 12:10:29 +0200 Subject: RT basics fixes --- realtime/rt-basics/handout_rt-basics_de.tex | 22 +++++++++++----------- realtime/rt-basics/pres_rt-basics_de.tex | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'realtime/rt-basics') diff --git a/realtime/rt-basics/handout_rt-basics_de.tex b/realtime/rt-basics/handout_rt-basics_de.tex index 8576b7d..8d98ccc 100644 --- a/realtime/rt-basics/handout_rt-basics_de.tex +++ b/realtime/rt-basics/handout_rt-basics_de.tex @@ -10,13 +10,13 @@ \subsection*{Grundlagen} -\subsubsection*{Was ist Echteit?} +\subsubsection*{Was ist Echtzeit?} Vor der Betrachtung verschiedener Ansätze, Linux echtzeitfähig zu machen, ist es -notwendig einige grundlegende Begrifflichkeiten zur erläutern: +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 deren +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 @@ -47,7 +47,7 @@ Gelöst werden kann dieses Problem durch ''prioriy inheritance'' und ''priority \begin{itemize} \item Prioritätsvererbung / priority inheritance: Hier wird die Priorität der niederprioren Task angehoben, um zu erreichen, daß die blockierte Resource -freigegeben kann. +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. @@ -94,7 +94,7 @@ RTAI ist ein typischer Vertreter des Dual Kernel Ansatzes. Abbildung 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 proprietären Echtzeitsystemen nach Xenomai zu portieren. +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 @@ -104,9 +104,9 @@ 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, die Skins benötigen, um die Funktionalität von -RTOSsen nachzubilden. Der Hardware Abstraction Layer beinhaltet den Plattform -und CPU abhängigen Code. Alle darüberliegenden Layer (darunter auch Nucleus) +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 @@ -143,7 +143,7 @@ generisches Interrupthandling für alle Architekturen und mit 2.6.30 nun auch di 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 Preempton Patch den großen Vorteil, daß Echtzeitapplikationen als POSIX +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, ...). @@ -154,7 +154,7 @@ x86\_64, MIPS, ARM, ...). \label{img:preempt_rt} \end{figure} Wie Abbildung \ref{img:preempt_rt} zeigt, integriert Preempt RT die -Echtzeitfunktionalität ''natlos'' in den Linux Kernel. Auch die Entwickler +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. @@ -164,7 +164,7 @@ Skins auf Preempt RT Kerneln ermgöglichen. \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 welchen der oben +\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? diff --git a/realtime/rt-basics/pres_rt-basics_de.tex b/realtime/rt-basics/pres_rt-basics_de.tex index c60f8a5..128b115 100644 --- a/realtime/rt-basics/pres_rt-basics_de.tex +++ b/realtime/rt-basics/pres_rt-basics_de.tex @@ -181,7 +181,7 @@ Nicht Einhalten des korrekten Zeitrahmens führt zu einem Fehler! \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 an industrial +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} -- cgit v1.2.3