Was macht der Kernel, wenn es keine zu planenden Prozesse gibt?

Die Hauptaufgabe des Kernels ist die Prozessplanung.Wenn beispielsweise ein Prozess blockiert wird, plant er die Ausführung eines anderen Prozesses.

Was macht der Kernel also, wenn es keine zu planenden Prozesse gibt?

An diesem Punkt wechselt der Kernel in den Ruhezustand und seine allgemeine Logik ist:

while (1) {
  while (!need_resched()) { // 判断是否有其他进程可执行
    asm("hlt"); // 如果没有,则执行hlt指令
  }
  schedule_idle(); // 如果有,则转而执行其他进程
}

Aus dem Obigen ist ersichtlich, dass, wenn kein anderer Prozess auszuführenist, der hlt-Assemblerbefehl in der Leerlaufschleife ausgeführt wird.Die Funktion dieses Befehls besteht darin, die Ausführung der CPU auszusetzen,bis eine Unterbrechung auftritt.

Wenn beispielsweise ein Interrupt auftritt, der Kernel ein neues TCP-Paket erhält, wechselt ein Prozess von einem blockierten Zustand in einen ausführbaren Zustand.

Wenn die Unterbrechungslogik ausgeführt wird, verlässt die obige Leerlaufschleife auch den Halt-Zustand und führt die Ausführung der Funktion need_resched() in einer Schleife fort. Zu diesem Zeitpunkt gibt die Funktion wahr zurück, was anzeigt, dass es andere Prozesse gibt, die ausgeführt werden können ausgeführt, sodass die Logik die hlt-Schleife verlässt und mit der Ausführung der Funktion schedule_idle() fortfährt. Die Funktion der Funktion schedule_idle() besteht darin, vom Leerlaufprozess zum Zielprozess zu wechseln und dann den entsprechenden Code auszuführen.

Auf diese Weise kehrt der Kernel aus dem Ruhezustand in den normalen Prozessplanungszustand zurück.

Wenn alle anderen Prozesse ausgeführt werden und in den blockierenden Zustand eintreten, was dazu führt, dass kein Prozess vom Kernel geplant werden muss, wechselt die Kernel-Logik zum obigen Code für die Leerlaufschleife, fährt mit der Ausführung von der Funktion schedule_idle() fort und tritt in die nächste Schleife ein .

Die obige Leerlaufschleife wird auch durch einen Prozess im Kernel repräsentiert, seine PID ist 0 und sein Name ist Swapper.

Nur Soße.

3b66b91e32a98d8ab37b8917a8534636.jpeg

07844325770a38a93a5b41485df6662d.jpeg

おすすめ

転載: blog.csdn.net/weiqifa0/article/details/130468862