2008-09-08 6 views
4

Hatte eine interessante Diskussion mit einigen Kollegen über die besten Planungsstrategien für Echtzeitaufgaben, aber nicht jeder hatte ein gutes Verständnis der gemeinsamen oder nützlichen Planungsstrategien.Taskplaner

Für Ihre Antwort, wählen Sie bitte eine Strategie und gehen Sie etwas detaillierter, anstatt ein wenig Informationen über verschiedene Strategien zu geben. Wenn Sie etwas zu jemandem anderer Beschreibung hinzuzufügen und es ist kurz, um einen Kommentar, anstatt eine neue Antwort hinzufügen

  • (wenn es lange oder nützlich ist, oder einfach eine viel bessere Beschreibung, dann bitte eine Antwort verwenden) Was ist die Strategie - Beschreiben Sie den allgemeinen Fall (gehen Sie davon aus, dass die Leute wissen, was eine Aufgabenwarteschlange ist, Semaphore, Sperren und andere Betriebssystemgrundlagen außerhalb des Schedulers selbst)
  • Worauf ist diese Strategie optimiert (Task Latenz, Effizienz, Echtzeit, Jitter, Ressource Teilen, usw.)
  • Ist es in Echtzeit oder kann es in Echtzeit gemacht werden

Aktuelle Strategien:

-Adam

Antwort

8

Wie in einem Papier in niedrigen , Swaminathan und Chakrabarty beschreiben die Herausforderungen der Echtzeit-Aufgabenplanung dem Titel beschrieben - Leistungsfähige (eingebettete) Geräte mit mehreren Prozessorgeschwindigkeiten und Stromverbrauchsprofilen verfügbar. Der Scheduling-Algorithmus, den sie skizzieren (und es wird gezeigt, dass er nur etwa 1% schlechter als eine optimale Lösung in Tests ist), hat eine interessante Möglichkeit, Aufgaben zu planen, die sie die LEDF-Heuristik nennen.

Vom Papier:

Die Niedrigenergie früheste Frist ersten heuristischen oder einfach LEDF, ist eine Erweiterung des bekannte früheste Frist ersten (EDF) -Algorithmus. Die Operation von LEDF ist wie folgt: LEDF unterhält eine Liste aller freigegebenen Aufgaben, die "Bereit-Liste" genannt. Wenn die Aufgaben freigegeben sind, wird die Aufgabe mit der nächstliegenden Frist als ausgeführt. Eine Überprüfung wird durchgeführt, um zu sehen, wenn die Task-Frist von bei der niedrigeren Spannung (Geschwindigkeit) erfüllt werden kann. Wenn die Frist eingehalten werden kann, weist LEDF die niedrigere Spannung der Task zu und die Task beginnt mit der Ausführung. Während der Ausführung der Task können andere Tasks des Typs in das System gelangen. Diese Aufgaben werden angenommen, um automatisch auf der "Bereit-Liste" platziert werden. LEDF wählt erneut die Aufgabe mit der nächsten auszuführenden Frist aus. Wie Solange Aufgaben warten auf ausgeführt werden, hält LEDF nicht die Pro- Leerlauf. Dieser Vorgang wird wiederholt, bis alle Aufgaben geplant wurden.

Und in Pseudo-Code:

Repeat forever { 
    if tasks are waiting to be scheduled { 
     Sort deadlines in ascending order 
     Schedule task with earliest deadline 
     Check if deadline can be met at lower speed (voltage) 
     If deadline can be met, 
      schedule task to execute at lower voltage (speed) 
     If deadline cannot be met, 
      check if deadline can be met at higher speed (voltage) 
     If deadline can be met, 
      schedule task to execute at higher voltage (speed) 
     If deadline cannot be met, 
      task cannot be scheduled: run the exception handler! 
    } 
} 

Es scheint, dass Echtzeit-Scheduling ein interessantes und ich entwickelnden Problem so klein ist, werden Low-Power-Geräte mehr allgegenwärtig. Ich denke, das ist ein Bereich, in dem wir weitere Forschungsprojekte finden werden, und ich freue mich darauf, auf dem Laufenden zu bleiben!

2

Ein gängiges Echtzeit-Scheduling-Schema ist die Verwendung von prioritätsbasierten präemptiven Multitasking.
Jeder Aufgabe wird eine andere Prioritätsstufe zugewiesen.
Die Aufgabe mit der höchsten Priorität in der Bereit-Warteschlange ist die auszuführende Aufgabe. Es wird ausgeführt, bis es die CPU entweder aufgibt (d. H. Verzögerungen, wartet auf ein Semaphor usw.) oder eine Task höherer Priorität wird zum Ausführen bereit.

Der Vorteil dieses Schemas ist, dass der Systementwickler die volle Kontrolle darüber hat, welche Aufgaben mit welcher Priorität ausgeführt werden. Der Scheduling-Algorithmus ist ebenfalls einfach und sollte deterministisch sein.

Auf der anderen Seite können Aufgaben mit niedriger Priorität für die CPU ausgehungert werden. Dies würde auf ein Designproblem hinweisen.