Busqué en Internet cuál es el primer proceso que se ejecuta al iniciar el sistema.
Encontré dos respuestas que son init y sched . ¿Qué es realmente?
¿Cuál se ejecuta primero? sched proceso programado o proceso de init ?
Por lo general, es el proceso de init , cuya ruta está codificada en el propio núcleo. init realiza funciones de muy bajo nivel, como iniciar upstart en el caso de Ubuntu (anterior a 15.40) o systemd en el caso de Ubuntu 15.04 y posteriores, Arch, Fedora y otros, que cargan los procesos y la configuración restantes. Tenga en cuenta que el sistema no termina de iniciarse cuando se ejecuta init ; ese es un error común. De hecho, init configura su pantalla de inicio de sesión y otras tareas relacionadas. Aquí hay una página de WikiPedia en init : https://en.wikipedia.org/wiki/Linux_startup_process#SysV_init
Init es el padre de todos los procesos. Su función principal es crear procesos a partir de un script almacenado en el archivo /etc/inittab. Este archivo generalmente tiene entradas que hacen que init genere gettys en cada línea en la que los usuarios pueden iniciar sesión. También controla los procesos autónomos requeridos por cualquier sistema en particular. Un nivel de ejecución es una configuración de software del sistema que permite que solo exista un grupo seleccionado de procesos. Los procesos generados por init para cada uno de estos niveles de ejecución se definen en el archivo /etc/inittab.
Sin embargo, el kernel de Linux inicia el programador pero no está en el espacio de usuario, que es lo que la mayoría de la gente asocia como el hogar de un proceso. Además, el Bourne Shell ( /bin/sh ) se puede sustituir si falta el init o no se puede llamar. En teoría, también puede sustituirlo por cualquier ejecutable utilizando la opción de arranque del kernel de Linux init=*some path here* .
Está programado, según Linux 3.13 start kernel() primero llama a sched () y ejecuta el primer proceso de espacio de usuario init, es decir , rest_init() crea un subproceso del kernel que pasa otra función kernel_init() como punto de entrada y el kernel queda inactivo a menos que se le llame.
start_kernel() { ... sched_init(); rest_init(); calls function kernel_init(); }El núcleo tiene al menos un proceso ejecutable, que se conoce como tarea inactiva, intercambiador, init_task y sched. Son diferentes nombres de un mismo proceso cuyo pid es 0 . Este init_task es una variable global del kernel, por lo que tiene una dirección fija, puede verlo desde System.map mediante el comando grep 'D init_task' /boot/System.map-* . La dirección no cambiará a menos que vuelva a compilar el núcleo.
El programa init cuyo pid es 1, generado por init_task(pid 0). En Ubuntu, el programa init es el demonio de gestión de procesos Upstart, mientras que en otros sistemas podría ser systemd. La dirección de init cambiaba cada vez que se reiniciaba el sistema.
Entonces, el proceso 0 se ejecuta primero, luego genera el proceso 1.