¿Qué hace el núcleo cuando no hay procesos para programar?

La principal responsabilidad del kernel es la programación de procesos, por ejemplo, cuando un proceso está bloqueado, programará la ejecución de otro proceso.

Entonces, ¿qué está haciendo el kernel cuando no hay procesos para programar?

En este punto, el núcleo entrará en estado inactivo y su lógica general es:

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

De lo anterior se puede ver que cuando no hay otro proceso para ejecutar, la instrucción ensambladora hlt se ejecutará en el bucle inactivo.La función de esta instrucción es suspender la ejecución de la CPU hasta que ocurra una interrupción.

Cuando ocurre una interrupción, por ejemplo, el núcleo recibe un nuevo paquete tcp, un proceso cambiará de un estado bloqueado a un estado ejecutable.

Cuando se ejecuta la lógica de interrupción, el bucle inactivo anterior también saldrá del estado de detención y continuará ejecutando la función need_resched() en un bucle. En este momento, la función devuelve verdadero, lo que indica que hay otros procesos que pueden ser ejecutado, de modo que la lógica salga del ciclo hlt y continúe ejecutando la función schedule_idle(), la función de la función schedule_idle() es cambiar del proceso inactivo al proceso de destino y luego ejecutar su código correspondiente.

De esta forma, el núcleo vuelve del estado inactivo al estado normal de programación de procesos.

Cuando todos los demás procesos se ejecutan y entran en el estado de bloqueo, lo que da como resultado que el kernel no programe ningún proceso, la lógica del kernel cambiará al código de bucle inactivo anterior, continuará ejecutándose desde la función schedule_idle() e ingresará al siguiente bucle. .

El bucle inactivo anterior también está representado por un proceso en el kernel, su pid es 0 y su nombre es swapper.

Solo salsa.

3b66b91e32a98d8ab37b8917a8534636.jpeg

07844325770a38a93a5b41485df6662d.jpeg

Supongo que te gusta

Origin blog.csdn.net/weiqifa0/article/details/130468862
Recomendado
Clasificación