Herunterladen Inhalt Inhalt Diese Seite drucken

Kommunikation Und Koordination Durch Spinlocks - Siemens Rmos3 Bedienungsanleitung

Echtzeit-betriebssystem rmos3 rmos3 v3.50 benutzerhandbuch
Inhaltsverzeichnis
Betriebssystem-Eigenschaften von RMOS3
8.4 Taskkommunikation, -koordination, -synchronisierung
8.4.3

Kommunikation und Koordination durch Spinlocks

Spinlocks
Ein Spinlock ist eine Programmiertechnik zur Synchronisation von Tasks bzw.
Programmteilen, die parallel auf mehreren Cores laufen.
Spinlocks sind in ihrer Funktionalität Semaphoren recht ähnlich. Semaphore warten passiv
auf die Freigabe des Betriebsmittels. Dies bedeutet, die Task, die die Semaphore
angefordert hat, wechselt in den Zustand WARTEND und der Scheduler kann dem Core
eine Task der Ready-Task Queue zuweisen und diese Task wird RECHNEND.
Spinlocks warten aktiv auf die Freigabe eines bereits angeforderten Spinlocks. Die Prüfung
findet periodisch mit dem Prozessorbefehl "pause" statt. Spinlocks verbrauchen deswegen
Rechenzeit. Ein Core, der nicht im Besitz des Spinlocks ist, wird um 100% gebremst, das
heißt, auch andere Tasks können auf diesem Core nicht mehr zur Ausführung kommen. Der
Core, der gerade im Besitz des Spinlocks ist, wird ebenfalls um ca. 20% gebremst (bei 2
Cores).
Spinlocks sind wesentlich einfacher für das Betriebssystem als Semaphore.
Spinlocks sind in folgenden Fällen sinnvoll:
● Semaphore stehen nicht zur Verfügung (z.B. in Interrupthandlern).
● Die Ausführungszeit des zu schützenden Programmteils beträgt wenige Nanosekunden.
● Die Performance des zu schützenden Programmteils soll erhöht werden (Spinlock: 5
● Die zu schützende Sequenz enthält keine SVC-Aufrufe.
● Eine bisher mit
● Der Zugriff auf eine IO-Baugruppe soll geschützt werden.
● Globale Variablen sollen vor einem gemeinsamen Zugriff von Tasks auf
Vor Aufruf des Spinlocks sollten die Interrupts gesperrt werden, damit nach Erhalt des
Spinlocks die Verweildauer nicht durch einen Interrupt verlängert wird. Verwendet der
Anwender die Funktion
kümmern (mit disable). Alternativ gibt es die Funktion
Interrupts automatisch unterstützt.
Unter RMOS3 kann
Spinlock besitzt,
muss dann entsprechend oft aufgerufen werden, um den Spinlock wieder freizugeben.
Die Spinlock-Struktur hat einen internen Zähler, in dem erfasst wird, wie oft der Spinlock auf
demselben Core bereits aufgerufen wurde (z.B. durch Unterprogrammaufrufe, in denen
ebenfalls ein Spinlock angefordert wird). Der Zähler hat einen Maximalwert von 255. Danach
erfolgt ein Überlauf auf 0.
Spinlocks sollten nicht auf Taskebene verwendet werden. Wenn doch, darf es in keinem Fall
zu einem Wechsel der Task auf einen anderen Core kommen.
110
Befehle (ca. 5ns), Semaphore 500 Befehle (ca. 500ns)).
/
enable
durch einen anderen Core geschützt werden.
unterschiedlichen Cores geschützt werden.
RmGetSpinLock
RmGetSpinLock
RmGetSpinLock
geschützte Codesequenz soll gegen Unterbrechung
disable
, so muss er sich selbst um das Sperren der Interrupts
geschachtelt werden. Das heißt, dass der Core, der den
öfters aufrufen kann, ohne zu blockieren.
ist in diesem Fall nicht wirksam.
RmReleaseSpinLock
, die das Sperren der
RmGetSpinLockIRQ
RmReleaseSpinLock
RMOS3 V3.50 Benutzerhandbuch
Bedienhandbuch, 07/2012, A5E03692290-01
Inhaltsverzeichnis
loading

Inhaltsverzeichnis