Articulo de referencia

inicial

Versión 7 Unix : listado de /etc , mostrando init y rc Versión 7 Unix: contenido de un script de shell Bourne /etc/rc En los sistemas operativos tipo Unix , init (abreviatura de...

Versión 7 Unix : listado de /etc , mostrando init y rc
Versión 7 Unix: contenido de un script de shell Bourne /etc/rc

En los sistemas operativos tipo Unix , init (abreviatura de inicialización ) es el primer proceso del espacio de usuario 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 antecesor directo o indirecto de todos los demás procesos y adopta automáticamente todos los procesos huérfanos . Init es iniciado por el núcleo durante el proceso de arranque ; en la mayoría de los sistemas tipo Unix, se producirá un pánico del núcleo si este no puede iniciarlo o si falla por cualquier motivo. A Init se le suele asignar el identificador de proceso 1.

En sistemas Unix como System III y System V , el diseño de init divergió de la funcionalidad proporcionada por init en Research Unix y sus derivados BSD . Hasta principios de la década de 2010, [ 1 ] la mayoría de las distribuciones de Linux empleaban un init tradicional que era algo compatible con System V, mientras que algunas distribuciones como Slackware usan scripts de inicio al estilo BSD, y otras distribuciones como Gentoo tienen sus propias versiones personalizadas. 

Desde entonces, la mayoría de las distribuciones de Linux han adoptado un sistema de inicio más moderno, principalmente el proporcionado por el proyecto systemd . Algunas distribuciones han optado por crear su propio sistema compatible con System V-init, como OpenRC de Gentoo Linux y runit de Void Linux . Estos proyectos suelen incluir características que originalmente no estaban presentes en System V-init, como la multihilo o el inicio interactivo. La mayoría de los sistemas de inicio modernos también pueden iniciar, detener y habilitar servicios dinámicamente después del arranque, con la intervención del usuario.

Investigación al estilo Unix/BSD

El script de inicialización de Research Unix, `init`, ejecuta el script de shell de inicialización ubicado en `<script>` /etc/rc, [ 2 ] y luego inicia `getty` en terminales bajo el control de ` <script>` /etc/ttys. [ 3 ] No hay niveles de ejecución; el /etc/rcarchivo determina qué programas ejecuta `init`. La ventaja de este sistema es su simplicidad y facilidad de edición manual. Sin embargo, el nuevo software agregado al sistema puede requerir cambios en los archivos existentes, lo que podría provocar que el sistema no arranque.

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 /etc/rc, las variantes de BSD han admitido durante mucho tiempo un archivo específico del sitio /etc/rc.localque se ejecuta en un subshell cerca del final de la secuencia de arranque.

Se introdujo un sistema totalmente modular con NetBSD 1.5 y se adaptó a FreeBSD 5.0, OpenBSD 4.9 y versiones posteriores. Este sistema ejecuta los scripts en el /etc/rc.ddirectorio. A diferencia del orden de los scripts de System V, que se deriva del nombre de archivo de cada script, este sistema utiliza etiquetas de dependencia explícitas dentro de cada script. [ 8 ] El orden en que se ejecutan los scripts lo determina la utilidad rcorder en función de los requisitos indicados en estas etiquetas.

Estilo SysV

sysv-rc-conf , una utilidad TUI que selecciona qué scripts de inicio de estilo SysV se ejecutarán en cada nivel de ejecución.

En comparación con sus predecesores, el sistema UNIX III de AT&T introdujo un nuevo estilo de configuración de inicio del sistema, [ 9 ] que sobrevivió (con modificaciones) en el sistema UNIX V y por lo tanto se denomina "inicio al estilo SysV".

En cualquier momento, un sistema System V en funcionamiento se encuentra en uno de los estados predeterminados, denominados niveles de ejecución . Al menos un nivel de ejecución representa el estado operativo normal del sistema; normalmente, los demás niveles de ejecución representan el modo de usuario único (utilizado para reparar un sistema defectuoso), el apagado del sistema y otros estados. El cambio de un nivel de ejecución a otro activa un conjunto de scripts específicos para cada nivel, que suelen montar sistemas de archivos, iniciar o detener demonios , iniciar o detener el sistema X Window , apagar la máquina, etc.

niveles de ejecución

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, existen siete niveles de ejecución, de los cuales tres se consideran "estándar", ya que son esenciales para el funcionamiento del sistema:

  1. Apagar
  2. Modo de usuario único (también conocido como S o s )
  3. Reiniciar

Aparte de estos niveles de ejecución estándar, los sistemas Unix y similares manejan los niveles de ejecución de forma algo diferente. El denominador común, el /etc/inittabarchivo, define la función de cada nivel de ejecución configurado en un sistema determinado.

niveles de ejecución predeterminados

En las distribuciones de Linux que utilizan por defecto el nivel de ejecución 5 en la tabla de la derecha, este nivel activa un entorno gráfico multiusuario que ejecuta el Sistema X Window , generalmente con un gestor de pantalla como GDM o KDM . Sin embargo, los sistemas operativos Solaris e illumos suelen reservar el nivel de ejecución 5 para apagar automáticamente el equipo.

En la mayoría de los sistemas, todos los usuarios pueden comprobar el nivel de ejecución actual con el comando runlevelo . [ 13 ] El usuario root normalmente cambia el nivel de ejecución actual ejecutando los comandos o . El archivo establece el nivel de ejecución predeterminado con la entrada.who -rtelinitinit/etc/inittab:initdefault:

En los sistemas Unix, el cambio de nivel de ejecución se logra iniciando únicamente los servicios que faltan (ya que cada nivel define solo aquellos que se inician o se detienen). Por ejemplo, cambiar un sistema del nivel de ejecución 3 al 4 podría implicar que solo se inicie el servidor X local. Al volver al nivel de ejecución 3, este se detendría de nuevo.

Otras implementaciones

Tradicionalmente, uno de los principales inconvenientes de `init` es que inicia las tareas de forma secuencial, esperando a que cada una termine de cargarse antes de pasar a la siguiente. Cuando los procesos de inicio se bloquean por problemas de entrada/salida (E/S), esto puede provocar largas demoras durante el arranque. Acelerar la E/S, por ejemplo, mediante el uso de unidades SSD, puede reducir las demoras, pero no soluciona la causa raíz.

Se han realizado diversos esfuerzos para reemplazar los demonios de inicio tradicionales para abordar este y otros problemas de diseño, entre ellos:

General

  1. Scripts de arranque en GoboLinux
  2. busybox-init , adecuado para sistemas operativos embebidos , utilizado por Alpine Linux (antes de ser reemplazado por OpenRC ), SliTaz 5 (Rolling), Tiny Core Linux y VMware ESXi , y utilizado por OpenWrt antes de ser reemplazado por procd
  3. dinit, un gestor de servicios y sistema de inicio. [ 21 ]
  4. Epoch, un sistema de inicio de Linux de un solo hilo centrado en la simplicidad y la gestión de servicios [ 24 ]
  5. ginitd, un paquete de software que consta de un sistema de inicio y un sistema de gestión de servicios [ 26 ]
  6. Initng , un reemplazo completo de init diseñado para iniciar procesos de forma asíncrona
  7. launchd , un reemplazo para init en Darwin y sistemas operativos basados ​​en Darwin como macOS e iOS a partir de Mac OS X v10.4 (lanza SystemStarter para ejecutar procesos antiguos de 'rc.local' y SystemStarter)
  8. OpenRC , un generador de procesos que utiliza el init proporcionado por el sistema, a la vez que proporciona aislamiento de procesos, inicio paralelo y dependencia de servicios; utilizado por Alpine Linux , Gentoo y sus derivados, y disponible como opción en Devuan y Artix Linux .
  9. runit , un reemplazo completo multiplataforma para init con inicio paralelo de servicios, utilizado por defecto en Void Linux [ 35 ]
  10. s6, un conjunto de software que incluye un sistema de inicio [ 38 ] [ 39 ]
  11. Service Management Facility (SMF), un reemplazo/rediseño completo de init desde cero en illumos / Solaris a partir de Solaris 10, pero lanzado como el único servicio por el init original de estilo System V.
  12. Shepherd , el gestor de servicios y demonios de GNU que proporciona una inicialización asíncrona basada en dependencias; escrito en Guile Scheme y diseñado para ser manipulable interactivamente durante el funcionamiento normal del sistema [ 43 ].
  13. systemd , un conjunto de software que reemplaza por completo a init en Linux e incluye un demonio init, con inicio concurrente de servicios, gestor de servicios y otras características. Utilizado por Debian (reemplaza a SysV init) y Ubuntu , entre otras distribuciones populares de Linux. A partir de febrero de 2019, systemd ha sido adoptado por la mayoría de las principales distribuciones de Linux. [ 49 ]
  14. SystemStarter , un generador de procesos iniciado por el init de estilo BSD en Mac OS X anterior a Mac OS X v10.4
  15. Upstart , un reemplazo completo de init diseñado para iniciar procesos de forma asíncrona. Iniciado por Ubuntu y utilizado por ellos hasta 2014. También se utilizó en Fedora 9, [ 52 ] [ 53 ] Red Hat Enterprise Linux 6 [ 54 ] y ChromeOS de Google . [ 55 ]

Soporte del sistema operativo

Compatibilidad, interfaz y programación

Véase también

Referencias

  1. "Lennart Poettering sobre el tumultuoso ascenso de systemd" . The New Stack . 8 de noviembre de 2018. Archivado del original el 8 de noviembre de 2018. Consultado el 30 de enero de 2024 .
  2. Manual del programador de Unix, versión 7init(8)  
  3. Manual del programador de Unix, versión 7ttys(5)  
  4. Manual del administrador del sistema 4.2BSDinit(8)  
  5. Manual de formatos de archivo de 4.2BSDttys(5)  
  6. Manual del administrador del sistema 4.3BSDinit(8)  
  7. Manual de formatos de archivo de 4.3BSDttys(5)  
  8. Andrew Smallshaw (7 de diciembre de 2009). "Scripts de inicio de Unix y Linux, Parte 2" . Archivado del original el 18 de diciembre de 2009. Recuperado el 6 de junio de 2011 .
  9. "init(8)" . minnie.tuhs.org . Archivado del original el 27-07-2021 . Recuperado el 12-09-2015 .
  10. "Nivel de ejecución del sistema" . IBM . Archivado del original el 26 de marzo de 2026. Consultado el 26 de marzo de 2026 .
  11. "Initscripts" . Documentación de Gentoo Linux . Gentoo.org. 13 de diciembre de 2014. Archivado del original el 3 de diciembre de 2020. Consultado el 8 de diciembre de 2020 .
  12. "Niveles de ejecución" . Administración de Oracle Solaris: Tareas comunes . Oracle . Archivado del original el 10 de abril de 2016. Consultado el 14 de noviembre de 2017 .
  13. "Páginas man de UNIX : runlevel (8)" . Unixhelp.ed.ac.uk. 27 de mayo de 1997. Archivado del original el 14 de julio de 2014. Consultado el 12 de julio de 2014 . 
  14. 1 2 3 "gobolinux/Scripts: 🧰 La colección de scripts de GoboLinux" . GitHub . Consultado el 25 de abril de 2026 .
  15. "Página web de Erik Andersen" . Archivado del original el 13 de junio de 2010. Consultado el 23 de diciembre de 2009 .
  16. Proyectos activos archivados el 29 de julio de 2010 en Wayback Machine , el sitio web de Rob Landley.
  17. Denys Vlasenko Archivado el 5 de septiembre de 2017 en Wayback Machine , mantenedor de BusyBox
  18. "BusyBox 1.36.1 (estable)" .
  19. "Licencia" . Archivado del original el 24 de febrero de 2018. Recuperado el 23 de febrero de 2018 .
  20. "Registro de cambios de BusyBox 1.2.2.1" (Documento). BusyBox. Esta es la última versión de BusyBox bajo la antigua licencia dual 'GPLv2 o posterior'. Las versiones futuras (que contengan cambios posteriores a svn 16112) solo tendrán licencia GPLv2, sin la indicación 'o posterior'.
  21. 1 2 3 "GitHub - davmac314/dinit: Monitoreo de servicio / sistema "init" . GitHub . Archivado del original el 12-12-2021 . Recuperado el 12-12-2021 .
  22. "Versión 0.22.1" . 4 de julio de 2026. Consultado el 14 de julio de 2026 .
  23. "GitHub - Subsentient/epoch: El sistema de inicio de Epoch" . GitHub . Consultado el 25 de abril de 2026 .
  24. "Página principal del sistema de inicio de Epoch" . Archivado del original el 2 de agosto de 2014. Consultado el 31 de julio de 2014 .
  25. 1 2 "GitHub - finit-project/finit: Inicialización rápida para Linux. Cookies incluidas" . GitHub . Consultado el 25 de abril de 2026 .
  26. ^ Wood-Mattheusson, SM (16 de diciembre de 2024) . "ginitd: el sistema de init eficaz" .
  27. 1 2 "initng/initng: Componentes principales de InitNG" . GitHub . Consultado el 25 de abril de 2026 .
  28. "rsmarples (Roy Marples)" . GitHub . Consultado el 30 de abril de 2026 .
  29. "GitHub - OpenRC/openrc: El sistema de inicio de OpenRC" . GitHub . Consultado el 30 de abril de 2026 .
  30. "Versión 0.63.3" . 2 de julio de 2026. Consultado el 3 de julio de 2026 .
  31. "GitHub - openwrt/procd: [ MIRROR ] Administrador de procesos/servicios de OpenWrt" . GitHub . Consultado el 25 de abril de 2026 .
  32. "g-pape" . GitHub . Consultado el 30 de abril de 2026 .
  33. "GitHub - g-pape/runit: un esquema de inicio UNIX con supervisión de servicios" . GitHub . Consultado el 30 de abril de 2026 .
  34. "Versión 2.3.1" . 7 de febrero de 2026. Consultado el 25 de abril de 2026 .
  35. "Página principal de Void Linux" . Archivado del original el 29/08/2020 . Consultado el 31/08/2020 .
  36. «skarnet/s6» . GitHub . Consultado el 25 de abril de 2026 .
  37. "Versión 2.15.1.0" . 14 de julio de 2026. Consultado el 14 de julio de 2026 .
  38. "s6: por qué otra suite de supervisión" . Archivado del original el 13 de septiembre de 2021. Consultado el 13 de septiembre de 2021 .
  39. "Sistema de inicio s6" . Archivado del original el 13 de septiembre de 2021.
  40. "Proyecto de código abierto GNU Shepherd en Open Hub: Colaborador Ludovic Courtès" . Open Hub . Consultado el 25 de abril de 2026 .
  41. "Proyecto de código abierto GNU Shepherd en Open Hub: Colaboradores" . Open Hub . Consultado el 25 de abril de 2026 .
  42. Ludovic Courtès (3 de diciembre de 2025). "GNU Shepherd 1.0.9 lanzado" . Consultado el 3 de diciembre de 2025 .
  43. "The Shepherd - Proyecto GNU" . Free Software Foundation, Inc. Archivado del original el 12 de febrero de 2016. Consultado el 16 de enero de 2016 .
  44. "systemd README" , freedesktop.org , archivado del original el 7 de julio de 2013 , consultado el 9 de septiembre de 2012.
  45. "Systemd alcanza un máximo histórico en cuanto al número de nuevas confirmaciones y colaboradores durante 2018 - Phoronix" . Archivado del original el 21 de septiembre de 2009. Consultado el 30 de diciembre de 2018 .
  46. Se utilizó la estadística "contributors" de: systemd/systemd , systemd, 2023-12-03 , consultado el 2023-12-03.
  47. "systemd-stable v261.1" . 26 de junio de 2026. Consultado el 27 de junio de 2026 .
  48. Poettering, Lennart (21 de abril de 2012), Actualización de estado de systemd , archivado del original el 23 de abril de 2012 , recuperado el 28 de abril de 2012
  49. Ver Systemd#Adoption
  50. Wilfredo Sanchez (28 de mayo de 2001). "Resumen de la WWDC" . Nombre ingenioso por determinar . Archivado del original el 11 de marzo de 2007. Consultado el 23 de diciembre de 2006 .
  51. "1.13.2 "Se ve exuberante desde el lateral" : Serie 1.x : advenedizo" . Launchpad . Consultado el 1 de enero de 2022 .  
  52. Fedora 14 Características aceptadas , 13/07/2010, archivado del original el 27/03/2022 , recuperado el 13/07/2010
  53. "Fedora defers systemd to F15". Linux Weekly News. 2010-09-14. Archived from the original on 2010-09-19. Retrieved 2010-09-17.
  54. "Deployment". Red Hat Enterprise Linux 6: Technical Notes. Red Hat. Archived from the original on 2018-08-29. Retrieved 2013-12-31.
  55. Software Architecture: Chromium OS design documents, archived from the original on 9 April 2022, retrieved 25 January 2014
  56. 12"systemdfree.com — Because your init should do one thing". Retrieved 2026-04-25. As of 2024, the systemd project encompasses: an init daemon, a service manager, a login manager (logind), a DNS resolver (systemd-resolved), a time synchronization daemon (systemd-timesyncd), a network manager (systemd-networkd), a bootloader (systemd-boot), a home directory manager (systemd-homed), a credential manager, a container manager (systemd-nspawn), a journal binary log system (journald), a device manager (udev, absorbed in 2012), and a cryptography layer for encrypted storage. These are not plugins. They are deeply coupled components sharing internal APIs, dbus interfaces, and cgroup hierarchies. [...] GNOME's dependency on logind, NetworkManager's integration with systemd-networkd, and PulseAudio's replacement by PipeWire — which also integrates deeply with systemd session management
  57. "Comparison of init systems - Gentoo wiki". 2025-09-16. Retrieved 2026-04-25.
  58. 12"The BusyBox Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-07-14.
  59. 12"The Epoch Init System Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-04-25.
  60. 12"The finit Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-07-14.
  61. 12"The InitNG Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-04-25.
  62. 12"The Open launchd Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-04-25.
  63. 1 2 "El proyecto de código abierto OpenRC en Open Hub: Página de idiomas" . Open Hub . Consultado el 14 de julio de 2026 .
  64. 1 2 stokito (2025-11-18). " [ OpenWrt Wiki ] El sistema UCI" . Recuperado el 2026-04-25 .
  65. bluewavenet (18-02-2025). " [ OpenWrt Wiki ] Inicialización del sistema Procd y gestión de demonios" . Consultado el 25-04-2026 .
  66. 1 2 "El proyecto de código abierto openwrt-procd en Open Hub: Página de idiomas" . Open Hub . Consultado el 14 de julio de 2026 .
  67. 1 2 "El proyecto de código abierto runit en Open Hub: Página de idiomas" . Open Hub . Consultado el 25 de abril de 2026 .
  68. 1 2 "El proyecto de código abierto s6 en Open Hub: Página de idiomas" . Open Hub . Consultado el 14 de julio de 2026 .
  69. 1 2 "El proyecto de código abierto GNU Shepherd en Open Hub: Página de idiomas" . Open Hub . Consultado el 25 de abril de 2026 .
  70. 1 2 "El proyecto de código abierto systemd en Open Hub: Página de idiomas" . Open Hub . Consultado el 14 de julio de 2026 .
  71. 1 2 "El proyecto de código abierto Upstart en Open Hub: Página de idiomas" . Open Hub . Consultado el 25 de abril de 2026 .
  • Página man de FreeBSD init
  • Un documento que resume los esquemas de inicialización de Unix (2007)
  • Guía de inicio rápido de Solaris Service Management Facility en Wayback Machine (archivada el 31 de diciembre de 2005)
  • Historia de los sistemas de inicio modernos (1992-2015 ) . Archivado el 11 de octubre de 2015 en Wayback Machine.