¿que es init?

Init, el 1º de la clase

Init, el 1º de la clase

init es un programa esencial para GNU/Linux, pero que pasa desapercibido a los ojos del usuario convencional.

Init es el primer proceso a nivel usuario que ejecuta el kernel linux, por lo que el numero de proceso siempre sera 1, y se encarga de muchas cosas imprescindibles para el sistema.

Normalmente, en las distribuciones mas populares, init viene totalmente configurado para que funcione en el 99% de los casos, por ello nunca suele ser una preocupacion importante, pero si eres una persona curiosa (como yo) y te gusta saber como funcionan las cosas, te interesará este articulo.

¿Cuando empieza a funcionar init?

Cuando el kernel se inicia (es decir, se cargue en memoria, comience a ejecutarse, inicialice todos los controladores de dispositivos y establezca las estructuras de datos necesarias), finaliza sus tareas dentro del proceso de arranque del sistema al momento de iniciar la ejecución de  init.

El kernel busca el archivo binario correspondiente a init en una pocas ubicaciones que fueron históricamente utilizadas para este fin,  la ubicación correcta para init (en un sistema GNU/Linux) es /sbin/init, pero si el kernel no puede encontrar a init, intenta ejecutar /bin/sh, y si esta ejecución también falla, el inicio del sistema es abortado.

¿Que hace init?

En el momento en el que init comienza su ejecución, finaliza el proceso de arranque del sistema realizando una serie de tareas administrativas. La lista exacta de tareas que init realiza puede variar en distintos sistemas GNU/Linux. Normalmente init realiza el chequeo de los sistemas de archivos, borra el contenido de /tmp, inicia la ejecución de varios servicios, e inicia un getty para cada terminal o consola virtual a través de los cuales los usuarios pueden ingresar al sistema.

init también se encarga de adoptar procesos huérfanos: cuando un proceso inicia un proceso hijo y muere antes que este, el proceso hijo pasa a ser un hijo de init inmediatamente. Esto es importante por varias razones técnicas, pero es bueno saberlo, debido a que facilita el entendimiento de la lista de los procesos y los grafos de árboles de procesos.

Al cerrar el sistema, es init quien se encarga de matar todos los procesos restantes, desmontar todos los sistemas de archivos, y por último detener el procesador, además de cualquier otra cosa que haya sido configurado para hacer.

¿Como funciona?

Cuando init comienza su ejecución, lee el archivo de configuración /etc/inittab. Este archivo puede parecer un poco complicado a primera vista.

Las líneas de texto dentro del archivo consisten de cuatro campos delimitados por dos puntos:

id:runlevel:action:process

id: Este campo identifica a la línea dentro del archivo. Este campo silo es relevante para líneas getty, especifica la terminal en que debe ejecutarse. Para las demás este campo no tiene importancia. El valor en este campo debe ser único (no se permite que existan dos id iguales) y la longitud no puede exceder la de cuatro caracteres.

runlevel: Los niveles de ejecución en los cuales la línea debe ser considerada. Estos están dados por dígitos simples, sin delimitadores. Mas adelante hablaremos de los niveles de ejecución.

action: Define la manera en que debe ser tratada la línea. Por ejemplo, si el valor es respawn, entonces el comando que se detalle en el próximo campo se ejecutará nuevamente cada vez que finalice, en cambio, si el valor es once, el comando se ejecuta una única vez. Existen muchos mas valores, si quieres conocerlos puedes consultar el manual de init.

process: Como su nombre indica, es el proceso a ejecutar.

En caso de que un comando falle cuando comience su ejecución,  init esta configurado para reiniciarlo, pero para evitar que el comando se repita indefinidamente probocando un excesivo consumo de recursos,  init registra la frecuencia de reinicio de un comando, y si la frecuencia crece a valores muy altos, init espera cinco minutos antes de reiniciarlo nuevamente.

Niveles de ejecución.

Un nivel de ejecución es un estado de init y de la totalidad del sistema, y define que servicios están operando. Los niveles de ejecución son identificados por números. GNU/Linux permite tener hasta 10 niveles de ejecución (runlevels) distintos, 0-9, pero normalmente solo algunos de estos niveles están definidos por defecto.

0
 Parar (apagar) el sistema.
1
 Modo de usuario individual (para tareas especiales de administración).
2-5
 Operación normal (definidas para los usuarios).
6
 Reiniciar el sistema.

No existe aún un consenso de como utilizar los niveles de ejecución definidos para usuarios (2 a 5). Se puede decidir que metodología utilizar en tu sistema, pero es mas sencillo mantener la manera en que tu distribución GNU/Linux realiza las cosas.

Derivados y reemplazos de init

Existen algunas variantes disponibles para init. La mayoría de las distribuciones GNU/Linux utilizan sysvinit, el cual está basado en el diseño de init de System V.  Algunas distribuciones como ubuntu (y sus derivados) utilizan upstart como reemplazo de sysvinit. Existe otro sustituto de init, aun en desarrollo beta, llamado Initng, su principal ventaja es que inicia todos los procesos que iniciaria init de manera asincrónica, aumentando considerablemente la velocidad del arranque del sistema. Las versiones BSD de Unix tienen un init diferente. La principal diferencia se encuentra en los niveles de ejecución.

Fuentes y mas información

Guia para administradores de sistemas GNU/Linux
Upstat, el sustituto de init para ubuntu
man init
Niveles de ejecución en Red Hat

You may also like...

2 Responses

  1. 20 diciembre, 2008

    Información Bitacoras.com…

    Si lo deseas, puedes hacer click para valorar este post en Bitacoras.com. Gracias….

  2. 15 enero, 2009

    […] la línea. Por ejemplo, si el valor es respawn, entonces el comando que se … fique por dentro clique aqui. Fonte: […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *