Details zur Signalausführung

Details zur Signalausführung

Ich lese gerade die Linux-Dokumentation zu „Signalen“ und diese Fragen gehen mir immer noch durch den Kopf:

1) Ein „Signal“-HandlerAusführungist erledigt, wenn der 'Ziel'-Prozess seineAusführungstokenvon demPlaner?

2) Oder 'Signal'-HandlerAusführungFindet statt inwas auch immerProzess 'Kontext' geschiehtausführenwann wurde das „Signal“ gesendet? (Derselbe Stil wie ein Hardware-ISR).

3) Was ist mit der Prozessausführung?PrioritätenWerden sie bei der Behandlung von „Signalen“ mitgerissen?

Antwort1

1) Der Signalhandler wird beim nächstenZielprozesskehrt vom Kernelmodus in den Benutzermodus zurück.

Dies tritt entweder auf, wenn die erneute Ausführung des Prozesses nach einer Hardwareunterbrechung geplant ist (und er nicht bereits im Kernelmodus ausgeführt wurde) oder wenn der Prozess von einem Systemaufruf zurückkehrt (auf einigen Architekturen ist dies dasselbe).

Im Normalbetrieb kehrt Ihr Prozess beim Verlassen des Kernelmodus einfach zur nächsten Anweisung nach dem Punkt zurück, an dem er den Benutzermodus ursprünglich verlassen hat.

Wenn jedoch ein Signal für Ihren Prozess ansteht, wird der KernelumschreibenIhren Prozesskontext so, dass bei der Rückkehr in den Benutzermodus stattdessen die erste Anweisung Ihres Signalhandlers ausgeführt wird und Ihr Stapel so geändert wurde, dass es aussieht, als hätten Sie an der Stelle, an der Sie den Benutzermodus ursprünglich verlassen haben, einen „speziellen“ Unterprogrammaufruf an den Signalhandler getätigt (die Rückkehr von diesem „speziellen“ Unterprogrammaufruf erfordert einen Systemaufruf zum Wiederherstellen des ursprünglichen Zustands).

Für weitere Einzelheiten lesen SieDas,DasUndDas.

AlsoDer „Ziel“-Prozess kann seineAusführungstokenvon demPlanerbeliebig oft, bevor der Signalhandler schließlich ausgeführt wird (falls er aus irgendeinem Grund im Kernelmodus bleibt).

2) Nein – der Signalhandler wird immer nur im Benutzermoduskontext Ihres Prozesses ausgeführt.

3) Es gibt keine wirkliche AusführungPrioritätenin einem Time-Shared-System wie Linux, es sei denn, Sie zählen dieHübschWert eines Prozesses, also können Sie nichtwegfegenetwas, das nicht da ist.


Erschwerend kommt hinzu, dass Threads und sog.EchtzeitPlanungsrichtlinien, daher gelten die obigen Kommentare nur für Single-Thread-Prozesse, die mit nicht-Echtzeit-Planungsrichtlinien ausgeführt werden (die einzige Art von Prozess, die existiertein der guten alten Zeit:-).

verwandte Informationen