Warum gibt es für jeden Prozess in Linux einen Kernel-Stack?

Warum gibt es für jeden Prozess in Linux einen Kernel-Stack?

Ich habe vor Kurzem begonnen, mich mit Linux zu beschäftigen, und es gibt eine Reihe von Fragen, die ich stellen möchte.

  1. Beim Lesen bin ich auf den Begriff „Kernel-Stack“ gestoßen und ich verstehe nicht, warum der Linux-Kernel für jeden Prozess einen Kernel-Stack verwendet.

  2. Warum kommt es bei der Ausführung eines Prozesses vor, dass das ESP-Register die Adresse ganz oben im
    Kernel-Stack des Prozesses hat und nicht die Adresse ganz oben im Benutzermodus-Stack des jeweiligen Prozesses?

Antwort1

Wenn ein Prozess als Ergebnis eines Systemaufrufs in den Kernelmodus wechselt, wird der Stapel vom Benutzermodusstapel auf den Kernelstapel umgeschaltet. Dies geschieht, um die Integrität des Kernels zu bewahren, da der Prozess (z. B. ein anderer Thread) andernfalls dem Stapel schädliche Dinge antun könnte.

Für jeden Prozess wird ein separater Kernel-Stack benötigt, um den Status des Prozesses zu speichern. Der Status muss gespeichert werden, falls ein Taskwechsel durchgeführt wird, d. h. der aktuelle Prozess in den Ruhezustand versetzt wird und ein anderer Prozess zur Ausführung angesetzt wird. Wenn dies geschieht, werden die Registerwerte (einschließlich des Stackpointer-Registers) wiederhergestellt, sodass der auszuführende Prozess genau an dem Punkt fortgesetzt werden kann, an dem er angehalten wurde.

verwandte Informationen