En los sistemas operativos de computadora basados en Unix , init (abreviatura de inicialización ) es el primer proceso que se inicia durante el arranque del sistema operativo. Init es un proceso demonio que continúa ejecutándose hasta que se apaga el sistema. Es el antepasado directo o indirecto de todos los demás procesos y adopta automáticamente todos los procesos huérfanos . El kernel inicia init durante el proceso de arranque ; Se producirá un pánico en el kernel si el kernel no puede iniciarlo o si muere por cualquier motivo. A Init normalmente se le asigna el identificador de proceso 1.
En sistemas Unix como System III y System V , el diseño de init se ha diferenciado de la funcionalidad proporcionada por init en Research Unix y sus derivados BSD . Hasta principios de la década de 2010, [1] [ verificación fallida ] la mayoría de las distribuciones de Linux empleaban un inicio tradicional que era algo compatible con System V, mientras que algunas distribuciones como Slackware usan scripts de inicio de estilo BSD y otras, como Gentoo , tienen sus propios scripts de inicio personalizados. versiones.
Desde entonces, se han creado varias implementaciones de inicio adicionales, intentando abordar las limitaciones de diseño en las versiones tradicionales. Estos incluyen launchd , Service Management Facility , systemd , Runit y OpenRC .
Research Unix init ejecuta el script de shell de inicialización ubicado en /etc/rc
, [2] luego inicia getty en terminales bajo el control de /etc/ttys
. [3] No hay niveles de ejecución; el /etc/rc
archivo determina qué programas se ejecutan mediante init. La ventaja de este sistema es que es sencillo y fácil de editar manualmente. Sin embargo, el nuevo software agregado al sistema puede requerir cambios en los archivos existentes que corren el riesgo de que el sistema no pueda iniciarse.
BSD init era, antes de 4.3BSD, el mismo que el init de Research UNIX; [4] [5] en 4.3BSD , agregó soporte para ejecutar un sistema de ventanas como X en terminales gráficas bajo el control de /etc/ttys
. [6] [7] Para eliminar el requisito de editar archivos /etc/rc
, las variantes de BSD han admitido durante mucho tiempo un /etc/rc.local
archivo específico del sitio que se ejecuta en un subshell cerca del final de la secuencia de inicio.
Se introdujo un sistema completamente modular con NetBSD 1.5 y se trasladó a FreeBSD 5.0 y sus sucesores. Este sistema ejecuta scripts en el /etc/rc.d
directorio. A diferencia del orden de los scripts del System V, que se deriva del nombre de archivo de cada script, este sistema utiliza etiquetas de dependencia explícitas colocadas dentro de cada script. [8] El orden en el que se ejecutan los scripts lo determina la utilidad rorder según los requisitos establecidos en estas etiquetas.
En comparación con sus predecesores, UNIX System III de AT&T introdujo un nuevo estilo de configuración de inicio del sistema, [9] que sobrevivió (con modificaciones) en UNIX System V y, por lo tanto, se denomina "init estilo SysV".
En cualquier momento, un System V en ejecución se encuentra en uno de un número predeterminado de estados, llamados niveles de ejecución . Al menos un nivel de ejecución es el estado operativo normal del sistema; normalmente, otros niveles de ejecución representan el modo de usuario único (utilizado para reparar un sistema defectuoso), el apagado del sistema y varios otros estados. Cambiar de un nivel de ejecución a otro hace que se ejecute un conjunto de scripts por nivel de ejecución, que normalmente montan sistemas de archivos, inician o detienen demonios , inician o detienen el sistema X Window , apagan la máquina, etc.
Los niveles de ejecución en System V describen ciertos estados de una máquina, caracterizados por los procesos y demonios que se ejecutan en cada uno de ellos. En general, hay siete niveles de ejecución, de los cuales tres se consideran "estándar", ya que son esenciales para el funcionamiento de un sistema:
Aparte de estos estándares, los sistemas Unix y similares tratan los niveles de ejecución de manera algo diferente. El denominador común, el /etc/inittab
archivo, define lo que hace cada nivel de ejecución configurado en un sistema determinado.
En las distribuciones de Linux que tienen por defecto el nivel de ejecución 5 en la tabla de la derecha, el nivel de ejecución 5 invoca un entorno gráfico multiusuario que ejecuta el sistema X Window , generalmente con un administrador de pantalla como GDM o KDM . Sin embargo, los sistemas operativos Solaris e ilumos normalmente reservan el nivel de ejecución 5 para apagar y apagar automáticamente la máquina.
En la mayoría de los sistemas, todos los usuarios pueden verificar el nivel de ejecución actual con el comando runlevel
o who -r
. [12] El usuario root normalmente cambia el nivel de ejecución actual ejecutando los comandos telinit
o init
. El /etc/inittab
archivo establece el nivel de ejecución predeterminado con la :initdefault:
entrada.
En los sistemas Unix, el cambio del nivel de ejecución se logra iniciando solo los servicios que faltan (ya que cada nivel define solo aquellos que se inician/detienen). [ cita necesaria ] Por ejemplo, cambiar un sistema del nivel de ejecución 3 al 4 podría iniciar solo el servidor X local. Volviendo al nivel de ejecución 3, se detendría nuevamente.
Tradicionalmente, uno de los principales inconvenientes de init es que inicia las tareas en serie, esperando a que cada una termine de cargarse antes de pasar a la siguiente. Cuando los procesos de inicio terminan bloqueados en la entrada/salida (E/S), esto puede provocar grandes retrasos durante el inicio. Acelerar la E/S, por ejemplo mediante el uso de SSD, puede acortar los retrasos, pero no soluciona la causa raíz.
Se han realizado varios esfuerzos para reemplazar los demonios de inicio tradicionales para abordar este y otros problemas de diseño, que incluyen:
En febrero de 2019 , la mayoría de las principales distribuciones de Linux adoptaron[actualizar] systemd . [23]