¿Es el kernel un proceso?

30
  1. En Linux, siempre decimos que el primer proceso es init(pid == 1). Pero, ¿por qué no es el kernel (inicio) el que configura el sistema y crea el initproceso? ¿Es el kernel un proceso?
  2. Sabemos que todos los hilos de espacio de usuario están enraizados en el proceso de inicio. Entonces, ¿qué pasa con el planificador y otras cosas del núcleo, como la administración de memoria?

Básicamente, lo que me confunde es la estructura del núcleo. Si es un proceso, ¿es un proceso único o consta de múltiples procesos?

MarianD
fuente

Respuestas:

19

Respuestas cortas:

  1. No, no es un proceso.
  2. Los hilos de usuario no están enraizados en init.

Init es solo el primer proceso; no gestiona ningún proceso o subproceso. Crea algunos, usando el kernel syscalls fork () y exec.

Creo que tienes una idea turbia de lo que es un proceso. no solo significa un poco de código de ejecución. Sí, el núcleo se ejecuta antes de init (y el gestor de arranque incluso antes). Pero un "proceso" tiene una definición específica de:

  • Se ejecuta en el espacio del usuario.
  • Se ejecuta con una ID de proceso
  • Muchas interacciones deben pasar por el núcleo
  • Todos los recursos deben provenir del núcleo
  • Necesita ser programado por el núcleo

Entonces, una vez que el núcleo se inicializa, ejecuta init, que luego genera cualquier otro proceso que su configuración le indique.

En lo que respecta al # 2, todas las cosas del núcleo están, bueno, en el núcleo. Piense en el núcleo como una gran área de código. De nuevo, no es un proceso, sino un gran blob de código. Partes del núcleo se ocupan de la gestión de la memoria, partes del mismo con partes de programación de sí mismo (como controladores, etc.), y partes del mismo con procesos de planificación.

Rich Homolka
fuente
3
Me pregunto si el OP sabe lo suficiente como para que su mente se vuelva loca por los micro núcleos. No incluí mi edición porque pensé que sería una distracción, en cualquier caso.
nuevo123456
44
Una forma de pensar en el núcleo es como una biblioteca gigantesca, con puntos de entrada (el sistema llama) para pedirle que haga algo en su nombre. Otra visión complementaria es que espera a que se manejen los eventos, ya sea una llamada del sistema del usuario o una interrupción de hardware (por ejemplo, llegó un nuevo paquete de red). Algunas cosas tardan en manejarse, por lo que el kernel simplemente envía el trabajo a subprocesos internos y regresa a quien llamó.
vonbrand
15

El núcleo no se comporta realmente como un proceso en absoluto. No se programa, se ejecuta en nombre de un proceso (denominado contexto de proceso o contexto de usuario) o se ejecuta como resultado de una interrupción o excepción (denominado contexto de interrupción).

Dicho esto, el kernel de Linux genera subprocesos del kernel para realizar algunas tareas, o para evitar ejecutar algo en el contexto de interrupción durante demasiado tiempo (eso es lo que hace el subproceso ksoftirqd, evitando latencias excesivas que podrían conducir, por ejemplo, a la caída de audio, ...) .

Puede ver los hilos del kernel en la salida del pscomando. Se identifican fácilmente: su nombre está entre paréntesis. Algunos de ellos ejecutan una instancia por CPU, la CPU se identifica con un número después de una barra oblicua, por lo que [ksoftirqd / 0] es la instancia de ksoftirqd en la CPU 0.

ninjalj
fuente
1

Hay conceptos en micro-núcleos en los que varias partes del núcleo son procesos con el centinela principal, en su mayoría solo administra IPC.

Linux, para bien o para mal, no es un sistema de micro kernel.

Jé Queue
fuente
1

No, no lo es ... El núcleo (y las extensiones del núcleo) se cargan directamente en la memoria. Si hay un código inseguro en el núcleo, nada se interpone entre él y un gran problema.

Aparte de eso, el núcleo básicamente ejecuta / cambia entre procesos. Obviamente, algo que realmente ejecuta procesos no será un proceso en sí mismo.

(tl; dr 1. no 2. parte del núcleo / su extensión)

Aurel Bílý
fuente
0

ninjalj escribió: "El núcleo no se comporta realmente como un proceso en absoluto. No se programa"

Bueno, está el proceso inactivo (básicamente pid 0, aunque no se muestra en ninguna parte) que está programado y casi siempre en un estado ejecutable.

user55078
fuente