6 Stimmen

Userspace-Prozess greift dem Kernel-Thread vor?

Ich lese gerade "Understanding the Linux kernel, 3rd edition" und auf S.22 kann ich lesen:

I ersten Anweisung bis zur letzten. Wenn jedoch eines der folgenden Ereignisse eintritt, verschachtelt die CPU die Kernel-Kontrollpfade verschachtelt:

  • Ein Prozess, der im Benutzermodus ausgeführt wird, ruft einen Systemaufruf auf, und die entsprechende Kernel-Kontrollpfad prüft, ob die Anforderung nicht sofort erfüllt werden kann; er ruft dann den Scheduler auf, um einen neuen Prozess zur Ausführung auszuwählen. Das Ergebnis ist ein Prozess Wechsel statt. Der erste Kernel-Kontrollpfad bleibt unvollendet, und die CPU nimmt die Ausführung eines anderen Kernel-Kontrollpfads wieder auf. In diesem Fall werden die beiden Kontrollpfade im Namen von zwei verschiedenen Prozessen ausgeführt.

Der Kernel-Kontrollpfad kann von einem Benutzerraumprozess unterbrochen werden, der einen Systemaufruf ausführt? Ich dachte, die Priorität sei ziemlich hoch:

  • unterbricht
  • Kernel-Threads
  • Benutzerraumprozesse

Ich habe in den Errata nachgesehen und konnte nichts darüber finden.

4voto

Jonathan Leffler Punkte 694013

Sie haben Recht, was die Prioritätenliste angeht, aber was das Buch (meiner Meinung nach) sagen will, ist Folgendes:

  • Wenn ein (Benutzer-)Prozess einen Systemaufruf tätigt, beginnt der Kernel in seinem Namen zu arbeiten.
  • Wenn der Systemaufruf abgeschlossen werden kann (der Kernel-Kontrollpfad stößt nicht auf ein Hindernis), kehrt er normalerweise direkt zum aufrufenden Prozess zurück - denken Sie an getpid() Funktionsaufruf.
  • Kann der Systemaufruf hingegen nicht abgeschlossen werden (z. B. weil das Plattensystem einen Block in den Kernel-Pufferpool einlesen muss, bevor die Daten an den aufrufenden Prozess zurückgegeben werden können), dann wird der Scheduler verwendet, um einen neuen Prozess auszuwählen, der ausgeführt werden soll, wobei der (Kernel-Thread of Control, der im Namen des Benutzerprozesses lief) vorzeitig beendet wird.
  • Zu gegebener Zeit kann der ursprüngliche Systemaufruf fortgesetzt werden, und der ursprüngliche (Kernel-)Kontrollfaden, der im Namen des Benutzerprozesses lief, kann fortgesetzt und schließlich abgeschlossen werden, wobei die Kontrolle an den Benutzerprozess zurückgegeben wird, der im Benutzerraum und nicht im Kernel läuft.

Also "Nein": Es ist nicht der Fall, dass der "Kernel-Pfad von einem User-Space-Prozess unterbrochen werden kann, der einen Systemaufruf ausführt".

Der Kernelpfad kann unterbrochen werden, während er einen Systemaufruf im Namen eines Userspace-Prozesses ausführt, weil: eine Unterbrechung auftritt, oder der Kernelpfad warten muss, bis eine Ressource verfügbar wird, oder ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X