Frage

Wir haben zwei Aufgaben (T1 und T2) in unserem vxWorks-Embedded-System, die die gleiche Priorität haben (110).
Wie geht der reguläre vxWorks-Planer damit um, wenn beide Aufgaben zur Ausführung bereit sind?
Welche Aufgabe wird zuerst ausgeführt?

War es hilfreich?

Lösung

Die Aufgabe, die zuerst ausgeführt wird, ist die Aufgabe, die zuerst erzeugt wird, wie durch die VxWorks-Scheduleraufgabe realisiert.VxWorks verwendet Prioritätsbasierte Planung standardmäßig.Da in Ihrem Fall also T1 und T2 die gleiche Priorität haben, läuft derjenige, der zuerst die CPU erhält, auf unbestimmte Zeit weiter, bis er explizit blockiert wird (mit taskSuspend oder taskDelay), zu diesem Zeitpunkt wird die andere READY-Aufgabe ausgeführt, bis sie blockiert wird, und so weiter.Dies sollte durch Semaphore oder Mutexe (Mutizes?) gesteuert werden.

Das Hauptproblem bei der prioritätsbasierten Planung wird durch genau dieses Problem beleuchtet.Wie bestimmen wir, wie lange diese Aufgaben ausgeführt werden sollen?Die Tatsache, dass sie die gleiche Priorität haben, erschwert die Sache.Ein weiteres Problem besteht darin, dass VxWorks-Aufgaben mit hoher Priorität (eine niedrigere Zahl bedeutet eine höhere Priorität) Ihrer Anwendung den Vorrang geben können, worauf Sie in Ihrem Code vorbereitet sein müssen.Diese Probleme können durch die Verwendung gelöst werden Round-Robin-Planung.Die zusätzlichen Probleme, die das Round-Robin-Scheduling mit sich bringt, und die Lösungen werden alle beschrieben Hier.

Andere Tipps

VxWorks hat 256 Prioritätsstufen (0 am höchsten ist, 255 ist am niedrigsten). Zu jedem gegebenen Zeitpunkt läuft die Aufgabe mit höchster Priorität auf der CPU. Jede Prioritätsstufe hat konzeptionell eine Warteschlange, in der mehrere Aufgaben anstehen für die Ausführung.

Wir haben drei Aufgaben zur gleichen Priorität A, B, C. Angenommen A ausgeführt wird.
Wenn A-Blöcke (taskDelay, SemTake, msgQReceive), wird B Ausführung starten.
Wenn A entblockiert wird am Ende der Warteschlange gesetzt. Wir haben jetzt B, C, A.
Wenn Blöcke B, C übernimmt, etc ...

Wenn Round Robin (Time Slicing) Terminierung aktiviert ist, das gleiche Konzept gilt, aber die Aufgabe am Ende der Warteschlange gestellt wird, wenn seine Zeitscheibe vorbei ist.

Beachten Sie, dass eine Aufgabe, durch eine höhere Priorität Aufgabe hat keinen Einfluss auf die Reihenfolge der Warteschlange empted vorge werden. Wenn A ausgeführt wurde und wird vorweggenommen, es wird die Ausführung fortgesetzt werden, wenn die höhere Priorität Aufgabe erledigt ist. Es ist nicht am Ende der Warteschlange gestellt bekommen.

Standardmäßig ist die eine, die zum ersten Mal ausgeführt wird angestoßen wird, und wenn es die CPU gibt auf den andere werden nie ausgeführt werden.

Sie können explizit Round-Robin aktivieren, als sie Zeitscheibe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top