2016-06-11 15 views
0

Mein Verständnis ist, dass udelay() nicht verhindert, dass der Scheduler in Stresssituationen die CPU Aufgaben mit höherer Priorität zuweist.Warum ist die Verwendung von udelay() in einem Linux-Treiber unzuverlässig?

Ich denke jedoch, dass meine Kenntnis der wahren Ursachen etwas oberflächlich ist, und würde einige tiefere Einblicke darauf schätzen.

+0

Wo wird gesagt, dass udelay nicht verhindert, dass der Scheduler in Stresssituationen die CPU Aufgaben mit höherer Priorität zuweist? – ransh

Antwort

0

Siehe delays - Information on the various kernel delay/sleep mechanisms.

Es gibt keine Unterhaltung von udelay() unzuverlässig, ganz im Gegenteil, es ist die empfohlene Art und Weise in Atom Kontext sowie in nicht-atomarem Kontext für ein paar Mikrosekunden schlafen.

Während Sie richtig sagen dass udelay() nicht daran hindert, den Scheduler von Zuweisung der CPU zu höherer Priorität Aufgaben in einer Situation von Stress, schafft es eine solche Stress selbst von busy-Warte statt wodurch man die CPU zu anderen (vielleicht gleiche Priorität) Aufgaben von Anfang an, weshalb es nicht für längere Verzögerungen empfohlen wird.

+0

Wo ist dokumentiert, dass "udelay nicht verhindert, dass der Scheduler in Stresssituationen die CPU Aufgaben mit höherer Priorität zuweist"? Thx – ransh

+0

@ransh - Es ist zum Beispiel in dem oben verlinkten Dokument unter Verwendung des Begriffs NON-ATOMIC CONTEXT dokumentiert - die Ausführung kann unterbrochen werden (möglicherweise ändert sich der Zustand der aktuellen Aufgabe). – Armali

+0

Kann im atomaren Kontext verwendet werden, obwohl unterbrochen werden kann? – ransh