6. Elemente eines RTOS

Transcrição

6. Elemente eines RTOS
Vorlesung Real-Time Systems
3. Echtzeitbetriebssysteme
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
1
Übersicht
1.
2.
3.
4.
5.
6.
7.
8.
9.
Ziel dieses Kapitels
Definition
Anforderungen an ein Echtzeitbetriebssystem (RTOS)
Unterschiede RTOS – Standard-OS
Standards
Elemente eines RTOS
System Overhead
Zusammenfassung
Case Study
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
2
1. Ziel dieses Kapitels
Ein Echtzeitbetriebssystem (Real-Time Operating System – RTOS) hat
zunächst die gleichen Aufgaben wie ein Standard-Betriebssystem. Darüber
hinaus muss es aber spezielle Anforderungen erfüllen und spezielle Dienste
liefern, um die Echtzeitfähigkeit zu gewährleisten.
In diesem Kapitel werden die wesentlichen Unterschiede eines RTOS zu einem
Standard-OS beschrieben. Die charakteristischen Konzepte eines RTOS
werden vorgestellt.
"Sie müssen das System
neu starten, damit Ihre
Änderungen wirksam
werden"...
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
3
2. Definition
Definition RTOS:
Ein Echtzeitbetriebssystem oder auch RTOS (real-time operating system) ist
ein Betriebssystem mit zusätzlichen Echtzeit-Funktionen für die Einhaltung von
Zeitbedingungen und die Vorhersagbarkeit des Systemverhaltens.
Echtzeitbetriebsyssteme sind in der Regel deutlich kompakter als StandardBetriebssysteme und kommen häufig in eingebetteten Systemen zum Einsatz.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
4
3. Anforderungen an ein RTOS
RTOS unterliegen anderen Anforderungen als Standardbetriebssysteme:
l
l
l
l
l
l
l
l
l
stabiler Betrieb rund um die Uhr
l u.U. jahrelang
definierte Reaktionszeiten
effizienter Prozesswechsel (geringer Prozesskontext)
Interruptbehandlung
echtzeitfähiges Scheduling
Prozesssynchronisation
l Semaphore, Mutex, etc.
echtzeitfähige Prozesskommunikation
Zeitdienste
l absolute, relative Uhren, Timeouts, Weckdienste, etc.
einfaches Speichermanagement
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
5
3. Anforderungen an ein RTOS
l
l
l
l
l
Unterstützung für Ein-/Ausgabe
l z.B. Zugriff auf Hardware-Register
Unterstützung für Buskommunikation
l z.B. zum Senden/Empfangen von CAN-Botschaften
Konfigurierbarkeit
l z.B. Allokierung von Speicherbereichen, Scheduling Algorithmus
Skalierbarkeit
l optionale Komponenten sollten nur bei Bedarf implementiert werden
minimaler Speicherbedarf
RTOS stehen oft in Form von Sourcecode zur Verfügung, der, abhängig von
der gegebenen Konfiguration, teilweise generiert / parametrisiert und dann
zusammen mit der Applikation übersetzt und gelinkt wird.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
6
4. Unterschiede RTOS – Standard-OS
Warum kann ein Standard-OS in der Regel nicht für Echtzeitanwendungen
verwendet werden?
l Existenz von Monitor und Tastatur (Maus) werden vorausgesetzt
l bei eingebetteten Systemen meist nicht vorhanden
l Hintergrundspeicher wird vorausgesetzt
l bei eingebetteten Systemen meist nicht vorhanden
l Das System zeigt nichtdeterministisches Verhalten
l z.B. wegen Verwendung von Puffern, Fragmentierung von Dateien und
Speicher
l ungeeignete Scheduling-Strategien
l z.B. nur "Round Robin"
l „Timing“-Services ungeeignet
l zu geringe Auflösung, Schwankungen, ...
l viel zu hohe Hardware-Anforderungen (Prozessor, Speicher, ... )
l auch selten/nie benötigte Dienstprogramme und Bibliotheken immer
vorhanden
l viel zu hohe Lizenzkosten (für die hohen Stückzahlen eingebetteter Systeme)
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
7
4. Unterschiede RTOS – Standard-OS
Ziele eines Standard-OS:
l alle Prozesse werden (weitgehend) gleich (fair) behandelt
l der Gesamtdurchsatz des Systems wird optimiert
l weniger Prozesswechsel und lange kritische Bereiche
l blockweise Ein-/Ausgabe, Sammlung "gleicher Aufträge"
Ziele eines RTOS:
l einige Prozesse sind wichtiger als andere und haben höhere Priorität
l kritische Prozesse verdrängen weniger wichtige
l vorhersagbare Laufzeiten sind wichtiger als optimaler Gesamtdurchsatz
l kurze kritische Bereiche
l sofortige Bearbeitung anstehender Aufträge (Ein-/Ausgabe)
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
8
5. RTOS Standards
Es gibt kein "typisches" Echtzeitbetriebssystem, da die Anforderungen je nach
Einsatzbereich sehr unterschiedlich sind. Anders als bei PC-Betriebssystemen
haben sich bislang nicht ein oder zwei RTOS-Produkte durchgesetzt.
Es existieren einige Derivate, z.B.
l RT-Linux (http://www.rtlinux.org)
l RT-Java (kein RTOS im eigentlichen Sinne)
l Windows CE für eingebettete Systeme
Außerdem viele proprietäre Lösungen wie QNX, LynxOS, VxWorks, ...
Dazu gibt es die folgenden Standards:
l POSIX (ISO/IEC 9945-1:1996): an UNIX angelehnter Standard für
Betriebssystem-Schnittstellen mit Ergänzungen für Echtzeit.
l OSEK/VDX: „de facto“- Standard der Automobilindustrie. Zielt auf minimale
Betriebssystemkerne
l AUTOSAR: basierend auf OSEK, mit einigen Erweiterungen
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
9
5. RTOS Standards
POSIX = Portable Operating System Interface
wurde durch Arbeitsgruppen in der IEEE definiert und durch ANSI und ISO
standardisiert. POSIX hat seine Ursprünge in der UNIX-Welt und soll die
Portierung von (stark) betriebssystemabhängigen Programmen vereinfachen.
Der POSIX 1003.1 Standard = ISO/IEC 9945-1:1996 = ANSI/IEEE Std. 1003.1
besteht aus mehreren Teilen. Betriebssysteme unterstützen oft nur Teilmengen
des gesamten POSIX-Standards. Es besteht die Möglichkeit, ein
Betriebssystem zertifizieren zu lassen. (QNX und VxWorks sind z.B. POSIXkonform).
Bestandteile von POSIX:
asynchr./synchr. I/O, shared memory, RT signals, message queues, priority
scheduling, memory locking, semaphores, timers, ...
POSIX 1003.1 - 1990: Basisdienste eines Betriebssystems
l POSIX 1003.1b - 1993: Real-Time-Erweiterungen
l POSIX 1003.1c - 1995: Threads
l POSIX 1003.1d - 1999: weitere RT-Erweiterungen
l POSIX 1003.1j - 2000: weitere RT-Erweiterungen
l POSIX 1003.1q - 2000: Tracing, Ausführungszeitmessung, ...
l
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
10
5. RTOS Standards
Typisches C POSIX Interface:
typedef ... pthread_t; /* details not defined */
typedef ... pthread_attr_t;
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
int pthread_attr_setstacksize(..);
int pthread_attr_getstacksize(..);
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg);
/* create thread and call the start_routine with the argument */
int pthread_join(pthread_t thread, void **value_ptr);
int pthread_exit(void *value_ptr);
/* terminate the calling thread and make the pointer value_ptr
available to any joining thread */
pthread_t pthread_self(void);
All functions return 0 if successful,
otherwise an error number
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
11
5. RTOS Standards
OSEK:
l "Offene Systeme und deren Schnittstellen für die Elektronik im Kraftfahrzeug"
l ist ein Gemeinschaftsprojekt der deutschen Automobilindustrie (u.a. BMW,
DaimlerChrysler, VW, Opel, Bosch, Siemens)
VDX:
l "Vehicle Distributed eXecutive"
l PSA, Renault
Der Standard ist auf Skalierbarkeit und Minimalität (8 Bit bis 32 Bit Mikroprozessen)
zugeschnitten; er besteht aus drei Teilen:
l OS: Operating System: Schnittstellen für Tasks, Scheduling, Alarme, Ereignisse,
Ressourcen, Interrupts, ...
l COM: Communication: Schnittstellen für Nachrichtenübertragung, Übertragungsmodi,
Monitoring, Message Queues, ... zwischen Prozessen und Prozessoren
l NM: Network Management standard: Verwaltung eines Netzwerkes, Modi für
Erkennung/Behandlung von Ausfällen, ...
Außerdem eine Konfigurationssprache:
l OIL = OSEK Implementation Language: für die Beschreibung der Betriebssystem- und
Prozesskonfigurationen; das Betriebssystem wird daraus generiert
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
12
5. RTOS Standards
Beispiel OIL File (Auszug):
CPU ExampleCPU {
OS MyOs {
...
};
TASK MyTask1 {
PRIORITY = 17;
...
};
TASK MyTask1 {
StackSize = 64;
...
};
ALARM MyAlarm1 {
ACTION = ACTIVATETASK {
TASK = MyTask1;
};
START = TRUE;
...
};
MESSAGE MyMsg1 {
ITEMTYPE = "SensorData";
...
};
ISR MyIsr1 {
RCV_MESSAGES = MyMsg1;
RCV_MESSAGES = MyMsg2;
...
};
}; // End CPU ExampleCPU
OIL Generator
(optional)
OIL Files
Application
C Code
System
Generator
OS Kernel
C Code
C Code
Compiler
Linker
OS Libraries
Object Code
Executable
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
13
5. RTOS Standards
Im OIL-File kann definiert werden, ob eine Task unterbrechbar ist oder nicht. OSEK
unterstützt nur statische Prioritäten.
OSEK unterscheidet 2 Klassen von Tasks:
l Basic Tasks: können sich nicht selbst blockieren
l Extended Tasks: können blockieren (mittels wait() Anweisung)
Der Standard definiert 4 Klassen von Betriebssystemen ("Basic / Extended
Conformance Classes") mit unterschiedlicher Komplexität:
l BCC1:
l nur Basic Tasks
l jede Task kann nur einmal aktiviert sein
l alle Tasks haben verschiedene Prioritäten
l BCC2: BCC1 plus:
l mehrfache Aktivierung derselben Task möglich
l gleiche Priorität für verschiedene Tasks möglich
l ECC1: BCC1 plus:
l extended Tasks, nicht mehrfach aktivierbar
l ECC2: BCC2 plus:
l extended Tasks
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
14
5. RTOS Standards
Der OSEK Standard ist frei verfügbar (www.osek-vdx.org), Implementierungen
sind aber kommerziell.
Es gibt auch einige Initiativen für eine freie Implementierung des Standards:
l www.openosek.org
l trampoline.rts-software.org
l opensek.sourceforge.net (FreeeOSEK)
Es existieren ebenso Ansätze für ein zeitgesteuertes Betriebssystem
(OSEK-Time), sowie eine fehlertolerante Kommunikationsschicht.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
15
5. RTOS Standards
AUTOSAR = AUTomotive Open System ARchitecture ist eine Initiative von
inzwischen über 100 Firmen der Automobilindustrie zur Standardisierung der
Softwarearchitektur für Steuergeräte.
AUTOSAR definiert
– unter anderem – ein
Standard-API für ein
Betriebssystem:
AUTOSAR-OS.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
16
5. RTOS Standards
AUTOSAR-OS basiert auf OSEK-OS. Applikationen, die für ein OSEK-OS
entwickelt wurden, laufen auch mit einem AUTOSAR-OS.
Darüberhinaus definiert AUTOSAR-OS einige Erweiterungen, wie z.B.:
l Schedule Tables: statisches Abarbeiten von Tasks
l OS-Applications: eine Menge von OS-Objekten (Tasks, Schedule Tables,
ISRs, ...), die eine zusammenhängende funktionale Einheit bilden, werden zu
einer OS-Application zusammengefasst. OS-Applications werden unterteilt in:
l trusted OS-Applications: uneingeschränkter Zugriff auf Speicher und
Betriebssystemdienste
l non-trusted OS-Applications: nur eingeschränkter Zugriff auf Speicher
und Betriebssystemdienste. Zeitverhalten wird überwacht.
l Memory Protection: Das OS überwacht den Zugriff auf Daten, Stack und
Code einer OS-Application. Versucht eine non-trusted OS-Application auf
Daten einer anderen OS-Application zuzugreifen, wird eine
Fehlerbehandlungsroutine ausgelöst (E_OS_PROTECTION_MEMORY).
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
17
5. RTOS Standards
l Timing Protection: Überwachung des Zeitverhaltens von non-trusted
Applications. Bei Verletzung einer der u.g. Zeitschranken wird eine
Fehlerbehandlungsroutine ausgelöst (E_OS_PROTECTION_TIME):
l execution time protection: stellt sicher, dass eine Task oder Kategorie 2
ISR ihre konfigurierte maximale Ausführungszeit ("Execution Budget")
nicht überschreitet.
l locking time protection: definiert die maximale Zeit ("Lock Budget"), für
die eine Task geblockt bzw. gesperrt werden darf (z.B. Warten auf Zugriff
auf Ressourcen). Unterbrechungen durch höher-priore Tasks, aufgrund
des "normalen" Scheduling, sind nicht im Lock Budget enthalten.
l inter-arrival time protection: überwacht die minimale Zeitspanne ("Time
Frame") zwischen 2 Aktivierungen einer Task. Das schützt u.A. vor sog.
"babbling idiots"; z.B. Sensoren, die aufgrund einer Fehlfunktion dauernd
Interrupts auslösen.
l Bemerkung: Mit den o.g. protection Mechanismen ist sichergestellt, dass
Deadline-Verletzungen bei Tasks erkannt werden. Eine "deadline
protection" ist somit nicht nötig.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
18
5. RTOS Standards
Ähnlich wie bei OSEK-OS gibt es für AUTOSAR-OS vier verschiedene
Scalability Classes mit aufsteigender Komplexität. Protection-Mechanismen
sind z.B. nur in den höchsten Klassen verfügbar.
Die Sprache OIL wurde in AUTOSAR durch ein xml-Austauschformat abgelöst.
Der Nachfolger von OSEK-COM für die Kommunikation ist AUTOSAR-COM.
Der AUTOSAR Standard ist frei verfügbar (www.autosar.org). Wer ihn
kommerziell nutzen will, muss Mitglied im AUTOSAR Konsortium sein und
einen entsprechenden Beitrag zahlen.
Die ersten Serienfahrzeuge mit – teilweise – AUTOSAR Software gehen bereits
dieses Jahr in Produktion.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
19
Einschub: Mikrocontroller
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
20
6. Elemente eines RTOS
Timer
!
Events
Tasks
Message
Queues
Objekte
Semaphore
Interrupts
Scheduler
Mailboxes
Services
Time Management
l Interrupt Handling
l Speichermanagement
l Gerätemanagement
l ...
l
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
21
6. Elemente eines RTOS
Der Scheduler ist verantwortlich für die Zuteilung von Rechenzeit an die
aktiven Tasks, gemäß eines Scheduling-Algorithmus.
POSIX unterstützt prioritätenbasiertes Scheduling, gemischt mit FIFO, RoundRobin, OTHER (d.h. selbst implementiert). Prioritäten können sich dynamisch
ändern.
OSEK und AUTOSAR unterstützen statische Prioritäten. AUTOSAR stellt
zusätzlich Schedule Tables zur Verfügung. Diese können mit etwas mehr
Aufwand aber auch in einem OSEK-OS implementiert werden.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
22
6. Elemente eines RTOS
Timer
Für ein Echtzeitsystem ist es naturgemäß essentiell, Zugriff auf die "echte" Zeit
zu haben, z.B. um:
l verstrichene Zeit zu messen,
l eine Task für einen bestimmten Zeitraum zu verzögern
l eine Task zu einem bestimmten Zeitpunkt zu aktivieren
l nach einem bestimmten Zeitraum zu reagieren, wenn ein erwartetes Ereignis
nicht eintritt
l in bestimmten Zeiträumen ein Lebenszeichen zu senden
Jedes RTOS stellt dazu Uhren und Timer Services mit unterschiedlicher
Genauigkeit und Komplexität zur Verfügung. Sie benutzen die Uhren, die i.d.R.
vom Prozessor zur Verfügung gestellt werden. Die Zeit wird dabei in Ticks, d.h.
Prozessortakte, gemessen und entsprechend der Taktfrequuenz umgerechnet.
Uhren unterscheiden sich in:
l globale Uhren für ein gesamtes Netzwerk; z.B. per GPS
l lokale Uhren. In einem Netzwerk entsteht hierbei das Problem der
Uhrensynchronisation
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
23
6. Elemente eines RTOS
Beispiel: eine bestimmte Zeitspanne warten
start = clock();
//get current time
while (clock() - start < 31.4)
; // wait
Dieses "busy waiting" sollte allerdings vermieden werden. Meist stellt das
RTOS dazu eigene Services zur Verfügung. In POSIX z.B. sleep() und
nanosleep(). Dabei kann die entsprechende Task für den gegebenen
Zeitraum suspendiert werden.
Zusätzlich ist zu beachten, dass die tatsächlich verstrichene Zeit i.d.R. nicht
exakt gleich der für sleep() angegebenen ist, wie die folgende Graphik zeigt:
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
24
6. Elemente eines RTOS
Time specified by
program
Granularity
difference
between
clock and
delay
Process
runnable here
but not
executable
Process
executing
Interrupts
disabled
Time
Diesen Overhead nennt man local drift. Es lässt sich zumindest vermeiden,
dass dieser Drift sich im Laufe der Zeit aufsummiert, indem man absolute
Delays verwendet:
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
25
6. Elemente eines RTOS
Beispiel:
interval = 31.4;
next
= clock() + interval; //time of next activation
for(;;) //forever
do_something();
delay_until (next);
next = clock() + interval;
OSEK / AUTOSAR stellt hierfür z.B. Alarme zur Verfügung (SetAbsAlarm(),
SetRelAlarm(), ...).
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
26
6. Elemente eines RTOS
Events
sind ein Mechanismus, mit dem Tasks über bestimmte Ereignisse informiert
werden können; z.B. wenn eine globale Variable aktualisiert wurde.
In OSEK gibt es dazu z.B. die folgenden APIs:
l DeclareEvent(): definiert ein Event
l WaitEvent(): warte auf ein oder mehrere Event(s); die aufrufende Task wird
suspendiert.
l SetEvent(): wecke die Task(s), die auf diese(s) Event(s) warten, wieder auf.
Events werden typischerweise in einem Event-Register verwaltet. Jedes Event
entspricht einem Bit in diesem Register. Dadurch können Events auch verknüpft
werden (durch logisches Und / Oder).
Damit eine Task nicht ewig auf ein Event wartet, sollte immer sicherheitshalber
zusätzlich ein Timeout definiert werden, z.B. mittels eines Alarms. Die Task
wartet dann bis entweder der Alarm auslöst oder das Event stattfindet. Im
ersten Fall wird eine entsprechende Fehlerbehandlung ausgeführt. Viele RTOS
Services stellen einen zusätzlichen timeout-Parameter zur Verfügung, so dass
nicht zusätzlich ein Alarm benutzt werden muss.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
27
6. Elemente eines RTOS
Ähnlich wie Timeouts sind Watchdog Timer eine Möglichkeit, die Inaktivität
einer Task zu bemerken. Ein Watchdog Timer muss durch eine Task immer
wieder "aufgezogen" werden. Wenn sie das nicht tut, wird eine
Fehlerbehandlung ausgelöst.
Beispiel (AUTOSAR):
/** Application: **/
for (;;)
do_something();
WdgM_UpdateAliveCounter(my_id);
/** Watchdog Manager: **/
void WdgM_MainFunction_AliveSupervision()
for each id
if AliveCounterExpired(id)
Error(id);
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
28
6. Elemente eines RTOS
Ressourcen (Betriebsmittel)
Eine Ressource ist ein
l (angeschlossenes) Gerät oder
l gemeinsam genutzte Daten.
Unterbrechbare Ressourcen können einer Task ohne unerfreuliche
Nebenerscheinungen entzogen werden (z.B. CPU). Ununterbrechbare
Ressourcen können ihrem Besitzer nicht entzogen werden, ohne dass dessen
Ausführung fehlschlägt (z.B. CD-Brenner). Allerdings gibt es in manchen Fällen
recht einfache aber sehr spezielle Möglichkeiten den Zugriff zu regeln (z.B.
Drucker-Spooling).
In allen anderen Fällen tritt ein Problem auf, wenn mehrere Tasks auf
gemeinsam genutzte Ressourcen zugreifen, so dass es die Aufgabe des
Betriebssystems ist, dafür Schutzmechanismen zur Verfügung zu stellen.
Zur abstrakten Formulierung des Problems für den allgemeinen Fall, werden die
Teile eines Computer-Programms, in denen auf gemeinsam genutzte Daten
zugegriffen wird, kritischer Abschnitt (= Ressource) genannt.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
29
6. Elemente eines RTOS
Das Betriebssystem stellt primitive Operationen zur Verfügung, um
wechselseitigen Ausschluss zu erzielen. Diese sind vor dem Betreten und
nach dem Verlassen eines kritischen Abschnitts zu verwenden.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
30
6. Elemente eines RTOS
Semaphoren
Ein Mittel (neben anderen) zur Interprozess-Kommunikation (IPC) sind
Semaphoren [Dijkstra, 1965]. Ein (zählendes) Semaphor ist eine Integer-Variable,
die eine bestimmte Anzahl an Weckrufen (Kapazität) verwaltet, und
l deren Wert Null anzeigt, dass alle Weckrufe verbraucht sind,
l ein Wert größer Null bedeutet, dass noch Kapazität vorhanden ist.
Operationen auf Semaphoren sind:
l DOWN() (sem_wait() in POSIX) prüft, ob der Wert des
Semaphors größer als Null ist: dann wird der Wert vermindert.
Ist der Wert Null, blockiert die Task und kann später durch einen
anderen Thread per UP() wieder aktiviert werden.
l UP() (sem_post() in POSIX) inkrementiert das Semaphor und
weckt irgendeine wartende Task.
Beides sind atomare Operationen, d.h. es ist sichergestellt, dass während der
Ausführung keine andere Task auf das Semaphor zugreifen kann. Wir beschränken
uns auf eine maximale Kapazität von 1 (auch binären Semaphoren bzw. Mutexe).
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
31
6. Elemente eines RTOS
Beispiel Semaphoren in POSIX für Konto-Buchungen:
#include <semaphore.h>
...
sem_t sem;
/* DEFINE semaphore */
int konten[100];
void buchen (int KNr, int betrag){
/* Down */
sem_wait(&sem);
int alt = konten[KNr];
int neu = alt + betrag;
konten[KNr] = neu;
/* Up */
sem_post(&sem);
}
...
main(...
sem_init(/* name */ &sem, /* shared flag */ 0, /* init value */ 1);
...
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
32
6. Elemente eines RTOS
Interrupts
(Unterbrechungen) werden von einem Gerät ausgelöst und führen dazu, dass eine
entsprechende Interrupt-Routine (Behandlungsroutine) durch das Betriebssystem
ausgeführt wird:
l Dazu wird die CPU (falls möglich) in den Kern-Modus umgeschaltet und
während dieser Zeit werden keine weiteren Interrupts entgegen genommen.
l Die Zeit, die ein System braucht um Interrupts zu verarbeiten (d.h. die
Zeitspanne bis zum Aufruf der Behandlungsroutine), wird Interrupt Latency
genannt.
l Interrupt-Routinen haben üblicherweise eine höhere Priorität als andere
Tasks.
l In Interrupt-Routinen wird oft ein gemeinsam genutzter Puffer benutzt, um
Daten mit Tasks auszutauschen, welcher dadurch geschützt wird, dass
Ø
Ø
l
Interrupts unterbunden werden (disable), bevor auf die Daten zugegriffen wird und
Interrupts wieder erlaubt werden (enable), wenn man damit fertig ist.
Dies ist wiederum nicht anderes, als ein binäres Semaphor zu benutzen!
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
33
6. Elemente eines RTOS
Bemerkung: In der Tat implementiert ein Betriebssystem ein Semaphor
dadurch, während der Semaphor-Operationen die Interrupts zu unterbinden.
Schlussfolgerungen:
l Interrupt-Routinen lassen sich als hoch priorisierte Task mit einer
bestimmten Periodenlänge modellieren und so in die Analyse einbringen
l Der Disable/Enable-Interupt-Mechanismus lässt sich in Blockiert-Zeiten
umsetzen.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
34
6. Elemente eines RTOS
In OSEK gibt es 2 Arten von Interrupt Service Routinen:
ISR Kategorie 1: Die Routine benutzt keine Betriebssystemdienste (kann also
insbesondere keine neuen Tasks aktivieren). Die unterbrochene Task wird im
Anschluss an die ISR fortgesetzt. Diese Kategorie wird für extrem hochpriore
Interrupts verwendet, die sehr schnell bearbeitet werden müssen.
l
ISR Kategorie 2: Aufrufe von Betriebssystemdiensten sind erlaubt. Im
Anschluss findet ein Rescheduling statt, d.h. der Scheduler wählt die nächste
auszuführende Task.
l
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
35
6. Elemente eines RTOS
Synchronisation via messages
Messages ermöglichen sowohl Kommunikation als auch Synchronisation
zwischen Tasks. Kommunikation kann
l asynchron oder
l synchron
Process P1
Process P2
erfolgen.
receive message
send message
time
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
time
36
6. Elemente eines RTOS
Asynchrone Kommunikation:
benutzt einen gemeinsamen Puffer: Mailbox oder Message Queue. Der Zugriff
auf diesen Puffer muss natürlich (z.B. durch ein Semaphor) geschützt sein.
Process P1
Process P2
send message
message
receive message
time
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
time
37
6. Elemente eines RTOS
Synchrone Kommunikation:
oder auch Rendezvous; benötigt keinen Puffer.
Process P1
Process P2
send message
blocked
M
receive message
time
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
time
38
6. Elemente eines RTOS
Remote Invocation:
oder auch Client/Server Kommunikation. Die Message M enthält die Parameter
des "Funktionsaufrufs". Die Antwort liefert den Rückgabewert der Funktion.
Process P1
Process P2
send message
M
receive message
blocked
reply
time
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
time
39
6. Elemente eines RTOS
Message Queue:
Sender Tasks
Sender
...
Receiver Tasks
queue size
Sender
Receiver
...
Receiver
message size
Eine Message Queue ist charakterisiert durch:
l ihre Länge, d.h. die maximale Anzahl Nachrichten
l die maximale Größe (bzw. Datentyp) einer Nachricht
l das Verhalten, wenn die Queue voll bzw. leer ist
l voll: der Sender wird blockiert
l leer: der Receiver wird blockiert
l alternativ: bei voller Queue wird der letzte Wert überschrieben ("last-isbest Semantik"). Beim Versuch eine leere Queue zu lesen erhält der
Receiver nur einen Fehlerstatus, wird aber nicht blockiert.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
40
6. Elemente eines RTOS
Prinzipiell kann eine Message aus beliebigen Datentypen bestehen.
Wenn Sender und Receiver aber auf verschiedenen Prozessoren liegen, muss
der Datentyp ggf. angepasst werden.
Die Message wird vom Sender-Prozessor als Folge von Bytes verschickt (z.B.
in Form einer CAN-Message). Diese Bytefolge wird beim Empfänger wieder
entsprechend interpretiert und in den Datentyp des Empfänger-Prozessors
umgewandelt.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
41
6. Elemente eines RTOS
Message Queues in POSIX:
l POSIX unterstützt asynchrone message queues (mqd_t)
l Eine message queue kann mehrere sender und receiver haben
l Für Messages können Prioritäten definiert werden
l POSIX message queues haben verschiedene Attribute:
l maximale Größe (Anzahl Messages)
l Größe einer Message
l Anzahl Messages in der Queue
l verschiedene Flags, die das Verhalten steuern
l Zum Setzen und Lesen dieser Eigenschaften gibt es Attribut-Objekte (struct
mq_attr).
l Ähnlich wie Files oder Streams wird eine Queue durch mq_open, mq_close,
mq_unlink erzeugt bzw. gelöscht.
l Daten werden von/auf character buffer gelesen/geschrieben.
l Es ist nicht definiert, welcher der wartenden Sender/Receiver geweckt wird,
wenn eine Queue nicht mehr voll/leer ist.
l Ein Receiver kann sich durch ein Signal (vgl. OS Event) informieren lassen,
wenn in eine leere Queue geschrieben wurde.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
42
6. Elemente eines RTOS
/* Establish connection between a process and a message queue NAME and
return message queue descriptor or (mqd_t) -1 on error. */
extern mqd_t mq_open (const char *__name, int __oflag, ...);
/* Removes the association between message queue descriptor MQDES and its message
queue. */
extern int mq_close (mqd_t __mqdes);
/* Query status and attributes of message queue MQDES. */
extern int mq_getattr (mqd_t __mqdes, struct mq_attr *__mqstat);
/* Set attributes associated with message queue MQDES */
extern int mq_setattr (mqd_t __mqdes,
const struct mq_attr *__restrict __mqstat,
struct mq_attr *__restrict __omqstat);
/* Remove message queue named NAME. */
extern int mq_unlink (const char *__name);
/*Register notification issued upon message arrival to an empty message queue MQDES.*/
extern int mq_notify (mqd_t __mqdes, const struct sigevent *__notification);
/* Receive the oldest from highest priority messages in message queue MQDES.
extern ssize_t mq_receive (mqd_t __mqdes, char *__msg_ptr, size_t __msg_len,
unsigned int *__msg_prio);
*/
/* Add message pointed by MSG_PTR to message queue MQDES. */
extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
unsigned int __msg_prio);
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
43
6. Elemente eines RTOS
Send / Receive mit Timeouts:
/* Receive the oldest from highest priority messages in message queue
MQDES, stop waiting if ABS_TIMEOUT expires. */
extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
size_t __msg_len,
unsigned int *__restrict __msg_prio,
const struct timespec *__restrict __abs_timeout);
/* Add message pointed by MSG_PTR to message queue MQDES, stop blocking
on full message queue if ABS_TIMEOUT expires. */
extern int mq_timedsend (mqd_t __mqdes, const char *__msg_ptr,
size_t __msg_len, unsigned int __msg_prio,
const struct timespec *__abs_timeout);
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
44
7. System Overhead
Das Betriebssystem benötigt Rechenzeit um alle Kernel-Aufgaben zu
behandeln:
l Queuing von Tasks
l Kontextwechsel
l Update interner Datenstrukturen
l Intertask Kommunikation: Senden und Empfangen von Nachrichten
l Bedienung von Interrupts
Normalerweise ist die Prozessorzeit für das OS gegenüber den anderen Tasks
vernachlässigbar.
In einigen Fällen jedoch, wenn Anwendungstasks kleine Ausführungszeiten
haben und enge Zeitbedingungen, kann die Kernel-Aktivität nicht mehr
vernachlässigt werden und signifikante Interferenzen erzeugen.
Vorhersagbarkeit kann dann nur noch durch Betrachtung des Systemoverheads
in der Schedulability Analyse erreicht werden.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
45
7. System Overhead
Einer der wichtigsten Beiträge zum Systemoverhead ist die Context Switching
Zeit, z.B. für das Sichern/Wiederherstellen der Prozessor-Register, des Stacks,
etc.:
l ist intrinsische Grenze für den Kernel
l nicht abhängig vom Scheduling Algorithmus
l nicht abhängig von der Struktur der Tasks
l i.W. Hardware-abhängig
Ein weiterer wichtiger Beitrag ist die Prozessorzeit zur Behandlung der Timerund anderer Interrupts.
Diese Zeiten müssen bei der Schedulability Analyse zusätzlich berücksichtigt
werden (s. nächstes Kapitel).
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
46
8. Zusammenfassung
Wichtige Eigenschaften von RTOS
l Skalierbarkeit, minimaler Ressourcenverbrauch
l Vorhersagbarkeit
l Stabilität
RTOS Standards
l POSIX
l OSEK
l AUTOSAR
l proprietäre Lösungen
Elemente eines RTOS
l Tasks, Scheduler
l Timer
l Interrupts
l Events
l Message Queues
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
47
9. Case Study
Im Folgenden wird eine einfache Anwendung, die in C++ programmiert ist und
POSIX-Threads benutzt, vorgestellt:
l Dabei wird ein autonomes Fahrzeug simuliert, das einer Linie folgt.
l Das Fahrzeug verfügt über einen Sensor, mit dem festgestellt werden
kann, wie weit das Fahrzeug von der Linie entfernt ist.
l Der Lenkung wird dabei der Kurs (als Winkel in einem KoordinatenSystem) mitgeteilt: Ist das Fahrzeug zu weit rechts, wird der Winkel nach
links korrigiert und umgekehrt.
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
48
9. Case Study
Zur Erinnerung: So programmiert man in etwa einen Regelkreislauf:
void main (void){
int state1, state2,…, staten;
initializeClock();
while(1){
readSensors(…);
if (CalculateNewSetValues(…))
ActuateProcess(…);
else
Error();
WaitForNextCycle(…);
}
}
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
49
9. Case Study
Abstrakte Klasse Task:
class Task {
public:
Task(int);
protected:
int T; // period in ms
public:
friend void *timer_main( void * task);
friend void *execute_main( void * task);
virtual void execute() = 0;// abstract class
protected:
/* Function to block the Process until next tick */
void waitForNextCycle() {
sem_wait( &timersemaphore );
}
private:
/* Semaphore for timer */
sem_t timersemaphore;
};
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
50
9. Case Study
void *timer_main( void * task) {
cout << "Clock initialized!" <<endl;
while( true ) {
Task *t = (Task *) task;
usleep( t->T * 1000 );
sem_post( &(t->timersemaphore) );
}
return NULL;
}
void *execute_main( void * task) {
cout << "Start execution ...." <<endl;
Task *t = (Task *) task;
t->execute();
return NULL;
}
// Construktor starts threads:
Task::Task(int t=1000): T(t) {
sem_init( &timersemaphore, 0, 0 );
pthread_t timerthread;
pthread_t executethread;
pthread_create( &timerthread, NULL, &timer_main, (void *) this );
pthread_create( &executethread, NULL, &execute_main, (void *) this );
};
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
51
9. Case Study
Fahrzeug auf dem Bildschirm anzeigen:
class Display : public Task {
public:
Display(int T): Task(T) {};
void execute();
};
void Display::execute() {
cout << "... Display::execute T=" << T << endl;
sem_post(& mutex); // don't start without me!
while( true )
{
// critical region:
sem_wait(& mutex);
p.display("P= ");
cout << "Abstand =" << (int) Abstand(p, Ldir) << endl << endl;
sem_post(& mutex);
waitForNextCycle();
}
}
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
52
9. Case Study
Fahrzeug bewegen:
class Fahren : public Task {
public:
Fahren(int T, int v, int d): Task(T), V(v), D(d) {};
void execute();
private:
int V; // speed
int D; // direction
};
void Fahren::execute() {
while( true ) {
// simulate moving the vehicle:
sem_wait(& mutex); // enter critical region
// compute distance travelled during period
double realV = (T * V) / 1000.0;
p.move(realV, D);
sem_post(& mutex); // end critical region
// calculateNewSetValue() and actuateProcess():
int entf = Abstand(p, Ldir);
const int deltha = 1;
if (entf > 0)
D += deltha;
else if (entf < 0)
D -= deltha;
waitForNextCycle();
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
}
}
53
9. Case Study
Hauptprogramm:
int main( int argc, char *argv[] )
{
InitAll(45); // direction of line [0, 90]
sleep(1);
Display D(...);
cout << "Los geht's!!" << endl;
Fahren F(/* period in ms */ ,
/* speed in pixels per second */ ,
/* start direction [0, 90] */ 0 );
// sleep forever:
sem_t block;
sem_init( &block, 0, 0 );
sem_wait( &block );
return EXIT_SUCCESS;
}
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
54
9. Case Study
Aufgaben:
l Ermitteln Sie sinnvolle Werte für die Perioden der beiden Tasks
l Bestimmen Sie ein Task-Modell (Prioritäten, Blockierungen, etc.)
l Überlegen Sie sich sinnvolle Erweiterungsmöglichkeiten
Friedhelm Stappert – Echtzeitbetriebssysteme – Real-Time Systems - SoSe 2009 – Hochschule Darmstadt
55

Documentos relacionados