RTOS Shared Resource Protection-Priority Inversion und Lösungsstrategie

Prioritätsinversions- und Auflösungsstrategien in RTOS

Überblick

Im vorherigen Abschnitt wurde beschrieben, dass binäre Semaphore verwendet werden können, um gemeinsam genutzte Ressourcen zwischen Aufgaben zu schützen. Das binäre Semaphor erfüllt zwar die Aufgabe, gemeinsam genutzte Ressourcen zu schützen, aber in einigen Fällen bringt diese Strategie Nebenwirkungen mit sich, nämlich eine Prioritätsumkehr.

Wie es zur Prioritätsumkehr kam

Im Idealfall sollten gemäß unserem Design Aufgaben mit hoher Priorität immer zuerst ausgeführt werden, einschließlich der Beschaffung verschiedener Ressourcen zuerst. Aber leider beeinflusst die Priorität hauptsächlich die Priorität des Erhaltens wichtiger Ressourcen wie der CPU. Bei anderen gemeinsam genutzten Ressourcen ermöglicht die Priorität nicht, dass Aufgaben mit hoher Priorität tatsächlich gemeinsam genutzte Ressourcen erhalten, wie wir denken.

Betrachten Sie eine Ausführung der folgenden drei Aufgaben:

1) Aufgabe 1 mit einer Priorität von 1 wird zuerst ausgeführt (dh sie belegt zu diesem Zeitpunkt die CPU) und möchte die Ressource „LED-Licht“ erhalten. Daher initiiert sie eine Anwendung über das Semaphor und erhält die Ressource von LED-Licht (*Binärwert zu diesem Zeitpunkt Die „aktuelle Anzahl der Nachrichten“ des Semaphors wird von 1 auf 0 reduziert* ).

2) Aufgabe 2 mit einer Priorität von 2 wechselt zu einem bestimmten Zeitpunkt in den Bereitschaftszustand. Da ihre Priorität höher als 1 ist, beansprucht sie die CPU-Ressourcen von Aufgabe 1 und wechselt in den Ausführungszustand. Gleichzeitig wird Aufgabe 1 vorübergehend sein Wird in der Bereitschaftsliste gespeichert und wartet darauf, CPU-Ressourcen zu erhalten. Erneut ausführen.

3) Aufgabe 3 mit einer Priorität von 3 wechselt zu einem bestimmten Zeitpunkt in den Bereitschaftszustand. Da ihre Priorität höher als 2 ist, beansprucht sie die CPU-Ressourcen von Aufgabe 2 und wechselt in den Ausführungszustand. Gleichzeitig wird Aufgabe 2 vorübergehend ausgeführt Wird in der Bereitschaftsliste gespeichert und wartet darauf, die CPU zu erhalten. Die Ressource wird erneut ausgeführt.

4) Während der Ausführung von Aufgabe 3 möchte es auch die Ressource „LED-Lampe“ erhalten, daher initiiert es auch eine Erfassungsanforderung an das Semaphor, das die LED-Lampenressource verwaltet, aber leider das „**“ im binären Semaphor Zu diesem Zeitpunkt beträgt die **aktuelle Anzahl der Nachrichten 0, ****, daher muss Aufgabe 3 aufgrund der Anwendung fehlschlagen

Guess you like

Origin blog.csdn.net/wangyx1234/article/details/128066362