22/2/09

Como es el inicio de Linux

Es una pregunta muy interesante, a si que veamos gráficamente que es lo que ocurre cuando iniciamos nuestro querido linux.


Resumen:

Cuando el sistema es encendido o reiniciado, el procesador ejecuta cierto código en lugares muy definidos. En una PC (Computadora Personal) este lugar es el sistema básico de entrada/salida llamado BIOS por sus siglas en inglés, que está almacenado en los circuitos de memoria flash en la tarjeta madre (motherboard). Como las PCs ofrecen mucha flexibilidad el BIOS debe determinar que dispositivos son candidatos para iniciar (boot).

La segunda fase del boot loader también inicia una aplicación de “splash” de tal forma que el usuario en vez de ver los mensajes de inicialización en modo de texto, ven una imágen gráfica, comúnmente con una pequeña barra que crece mientras se pone el equipo operable.

Finalmente se ejecuta XWindows y su ambiente gráfico y normalmente lo primero que muestran es una pantalla de acceso o Login. Una vez identificado el usuario se carga el espacio de dicho usuario y se ejecutan los programas que requiere la sesión de trabajo de dicho usuario.

En detalle:
  1. Al arrancar lo primero que hace el ordenador es ir a la BIOS que va a detectar los dispositivos y chequearlos, si todo sale correcto cargará en memoria el MBR, que es el dispositivo de arranque.

  2. En caso de ya tener linux instalado se iniciaría GRUB o LILO o SYSLINUX.

  3. GRUB lee la tabla de particiones del MBR, detecta en que particiones hay un sistema operativo y te muestra en un menú de arranque para elegir.
    Debemos recordar que el MBR como es un sector, solo puede almacenar 512 bytes por defecto (si es que ext2/3 no
    se ha modificado) que definen la estructura del MBR. El Master Boot Record es el sector de la primera pista del disco duro (sector
    0), y el resto de esa pista no se usará; Por lo que debemos tener en cuenta esto:
    * 0-445 bytes = Código del MBR que sirve para cargar en memoria el sector de la partición activa
    * 446-462 bytes = 16 bytes de la información de la 1ª partición
    * 463-479 bytes = 16 bytes de la información de la 2ª partición
    * 480-496 bytes = 16 bytes de la información de la 3ª partición
    * 497-512 bytes = 16 bytes de la información de la 4ª partición

    Con lo que estaremos limitados siempre a tener 4 particiones primarias, ó 3 más 1 extendida, que dentro de las extendidas pueden existir muchas.

  4. LILO es más antiguo, es casi idéntico a GRUB en su proceso, excepto que no contiene una interfaz de línea de comandos. Por lo tanto todos los cambios en su configuración deben ser escritos en el MBR, y reiniciar el sistema. Un error en la configuración puede arruinar el proceso de arranque a tal grado de que sea necesario usar otro dispositivo que contenga un programa que sea capaz de arreglar ese defecto.
    De forma adicional, LILO no entiende sistema de archivos, por lo tanto no hay archivos y todo se almacena en el MBR directamente.
    Cuando el usuario selecciona una opción del menú de carga de LILO, dependiendo de la respuesta, carga los 512 bytes del MBR para sistemas como Microsoft Windows, o la imagen del kernel para Linux.

  5. Si seleccionas linux:
    El GRUB detecta la partición /boot por defecto y carga en memoria:
    * El fichero del kernel de linux: –> kernel.img
    * Un fichero llamado INITIAL RAM DISK: intrd.img que contiene los drivers necesarios para que el kernel pueda empezar a funcionar.
  6. Una vez que el kernel se ha cargado en memoria y está listo, se lleva a cabo su ejecución. Esto se realiza llamando la función startup del kernel (en los procesadores x86, se encuentra en la función startup_32() del archivo /arch/i386/boot/head), esta función establece el manejo de memoria (tablas de paginación y paginación de memoria), detecta el tipo del CPU y funcionalidad adicional como capacidades de punto flotante. Después cambia a funcionalidades que no dependen del hardware por medio de la llamada a la función start_kernel().
    El proceso de arranque en Linux monta el disco RAM que fue cargado anteriormente como un sistema de archivos temporal. Esto permite que los módulos que contienen drivers puedan ser cargados sin depender de otros drivers de dispositivos físicos, y además mantiene el kernel más pequeño.
    Monta el árbol del directorio raíz / y lanza los procesos “padre” que se encargan de la supervisión/ejecución de todos los procesos de las aplicaciones usuario/sistema. INIT (el primer proceso en espacio de usuario) se encuentra en /sbin

  7. INIT consulta un fichero de configuración (nivel de ejecución del sistema) mirando su fichero de configuración: INITTAB (se encuentra en /etc) y sigue las intrucciones que hay en él.
    Para ello utiliza los RunLevel’s, y existen 6 posibles tipos que se identifican por un número:
    * 0 Apagado del sistema
    * 1 Monousuario sin entorno gráfico, sin entorno de red
    * 2 Multiusuario sin entorno gráfico, sin entorno de red
    * 3 Multiusuario sin entorno gráfico pero con entorno de red
    * 4 No se usa por razones históricas
    * 5 Por defecto, Multiusuario, con entorno gráfico, con red
    * 6 Reinicio del sistema

    Por ejemplo, si nosotros introducimos en consola “init 0” el sistema se apagaría.
    Bueno, ahora INIT hace básicamente dos cosas:
    1. Ejecuta scripts de configuración global del sistema rc.sysinit (se encuentra en /etc/rc.d):
    * Crea las variables de entorno del sistema
    * Activa la partición swap
    * Inicializa el reloj
    * Controla/chequea el sistema de ficheros ext2/3
    * …
    2. En función del número de RunLevel se va al directorio /etc/rc.d/rcn.d (para el runlevel 5 iría a /etc/rc.d/rc5.d) y ejecuta todos los scripts que hay dentro:
    kn nombre_proceso –> kill = parar o matar
    sn nombre_proceso –> start = empezar
    A los procesos llamados desde INIT (/etc/rc.d/rcn.d) con los scripts sn nombre_proceso se los llama demonios (procesos que están continuamente ejecutándose en segundo plano)
  8. INIT crea consolas virtuales, en estos momentos existen 7, 6 más la gráfica: Si el runlevel es el 5, para que te muestre un entorno gráfico lanza primero un servidor gráfico el cual se conecta de forma local a tu mismo equipo para crear el escritorio

  9. Te ofrece la pantalla de logueo y cuando accedes carga tu perfil desde /etc/rc.d/rc.local
Con eso estamos!

Basado en:

No hay comentarios.: