- 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 elinit
proceso? ¿Es el kernel un proceso? - Sabemos que todos los subprocesos del espacio de usuario tienen su raíz en el proceso de inicio. Entonces, ¿qué pasa con el programador y otras cosas del núcleo, como la gestió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?
Respuesta1
Respuestas cortas:
- No, no es un proceso.
- Los hilos de usuario no tienen su raíz en el inicio.
Init es sólo el primer proceso; no gestiona ningún proceso o hilo. Crea algunos, utilizando las llamadas al sistema del kernel fork() y exec.
Creo que tienes una idea confusa de lo que es un proceso. no significa solo un poco de ejecución de código. Sí, el kernel se ejecuta antes de init (y el cargador de arranque incluso antes). Pero un "proceso" tiene una definición específica de:
- Se ejecuta en el espacio del usuario
- Se ejecuta con un ID de proceso
- Muchas interacciones necesitan pasar por el kernel.
- Todos los recursos deben provenir del kernel.
- Necesita ser programado por kernel
Entonces, una vez que el kernel se inicializa, ejecuta init, que luego genera cualquier otro proceso que indique su configuración.
En lo que respecta al punto 2, todo el material del núcleo está, bueno, en el núcleo. Piense en el kernel como una gran área de código. Nuevamente, 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 de él de la programación de partes de sí mismo (como controladores, etc.) y partes de él de la programación de procesos.
Respuesta2
El núcleo realmente no se comporta como un proceso en absoluto. No se programa, se ejecuta en nombre de un proceso (llamado contexto de proceso o contexto de usuario), o se ejecuta como resultado de una interrupción o excepción (llamado contexto de interrupción).
Dicho esto, el kernel de Linux genera subprocesos del kernel para realizar algunas tareas o para evitar ejecutar algo en un contexto de interrupción durante demasiado tiempo (eso es lo que hace el subproceso ksoftirqd, evitando latencias excesivas que podrían provocar, por ejemplo, pérdida de audio,...) .
Puede ver los subprocesos del kernel en la salida del ps
comando. 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, por lo que [ksoftirqd/0] es la instancia de ksoftirqd en la CPU 0.
Respuesta3
Hay conceptos en los micronúcleos en los que varias partes del núcleo son de hecho procesos y el centinela primario en su mayoría solo administra IPC.
Linux, para bien o para mal, no es un sistema de micronúcleo.
Respuesta4
ninjalj escribió: "El kernel realmente no se comporta como un proceso en absoluto. No se programa".
Bueno, existe el proceso inactivo (básicamente pid 0, aunque no se muestra en ninguna parte) que está programado y casi siempre en un estado ejecutable.