mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik wie funktioniert ein Taskwechsel?


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen zusammen,

ich hab ein Verständisproblem was den Taswechsel angeht...
mal angenommen ein niederpriorer Task läuft ab. jetzt meldet sich ein 
höherprioer Task an. Dann unterbricht der niederpriore Task durch eine 
ISR und anschließen (präemtiv) läuft der höher priore Task ab (soweit 
richtig?). Dieser läuft nun ab ohne unterbrochen zu werden. Aber was 
passiert danach?
Und was würde passieren wenn der niederpriore Task eine Semaphore "hält" 
und somit der höherpriore Task nicht ganz ablaufen kann?
Muss zwischen den Taskwechseln immer eine ISR ausgelöst werden?

Wär super wenn mir jemand weiterhelfen könnte!
vielen Dank schon mal
Gruß
Markus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:

> ich hab ein Verständisproblem was den Taswechsel angeht...
> mal angenommen ein niederpriorer Task läuft ab. jetzt meldet sich ein
> höherprioer Task an. Dann unterbricht der niederpriore Task durch eine
> ISR und anschließen (präemtiv) läuft der höher priore Task ab (soweit
> richtig?).

Das kann man so nicht sagen. Das hängt vom 'Betriebssystem' ab, wie es 
implementiert ist. Manche mögen das so machen, andere wiederrum nícht. 
Task existieren ja nicht im luftleeren Raum sondern im Kontext eines 
Schedulers, der ihnen Rechenzeit zuteilt.

> Dieser läuft nun ab ohne unterbrochen zu werden. Aber was
> passiert danach?

Dann kommt wieder der Scheduler zum Zug, der den nächsten Task auswählt.

> Und was würde passieren wenn der niederpriore Task eine Semaphore "hält"
> und somit der höherpriore Task nicht ganz ablaufen kann?

Dann blockieren sich die beiden und im schlimmsten Fall hast du einen 
Deadlock.

> Muss zwischen den Taskwechseln immer eine ISR ausgelöst werden?

Auch das hängt wieder von der Systemarchitektur ab.
Bei beispielsweise kooperativem Multitasking entscheiden die Tasks 
selber, wenn sie die Kontrolle abgeben und zurück zum Scheduler geben.

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin

1. es gibt einen sceduler, der die rechenzeit der einzelnen Prozesse / 
Tesks steuert.

2. es gibt meist einen Timer IRQ der dei zeitscheibensteuerung für die 
OS funktionen übernimmt.

3. der Sceduler wird nach fast jedem OS funktionsaufruf kurz angestossen 
und nach ablaufen des timers; es wird jetzt wieder neu ermittelt, welche 
task auszuführen ist.


Das warten auf eine Semaphore blokiert deine task solage bis die resorce 
zur verfügung steht (oder der angegebene timeout abgelaufen ist) und 
wird danach ausgeführt.

die Funktion prüft als erstes ob die Resource zur verfügung steht oder 
nicht, setzt dann entsprechend den Status der Resource und task neu. 
danach wird der sceduler neu angeschmissen um rauszubekommen, welche 
task nun ausgeführt werden soll. der wählt die höchst priorisierte task 
aus der liste der als lauffähig markierten Tasks aus. Welche das nun ist 
hängt vom algorithmus ab. ob hier z.B. zeitscheiben eine rolle spielen 
oder nicht, mehrer task die gleiche priorität haben dürfen, ...

Der Timer wird z.B. alle 10ms aufgerufen, und dient z.B. zur steuerung 
der Timeouts. Das warten der Semaphore mit timeout würde z.B. da zu 
führen, das nach n durchläufen ohne freigabe der resource die task in 
die liste der ausführbaren task geschoben wird. (mit dem vermerk 
timeout) , oder zur timeoutsteuerung für round robin seculer, ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.