Y es que el proceso de arranque de un PC pasa por sucesivas etapas, y es interesante conocerlas, incluso identificarlas. Por supuesto, algunas etapas son comunes en todos los sistemas, sean Linux, Windows, etc. Y el caso es que me apeteció crear mi propio ‘apunte táctico’ para mejorar mi culturilla.
Así que esta entrada va a ir de esto.
1- La primera etapa, por supuesto, es el encendido ‘físico’, por el que se suministra la alimentación eléctrica, con el voltaje adecuado, y en corriente continua, tanto a la placa madre y sus componentes como a los diversos elementos de hardware del ordenador. De esto se ocupa, evidentemente, la fuente de alimentación que, al encenderse, transforma la corriente alterna proveniente de la toma ‘doméstica’ y la lleva a la placa base, donde su circuitería electrica y electrónica distribuye los voltajes y amperajes adecuados, por medio de resistencias, condensadores, etc, a sus componentes, y a las conexiones de los distintos elementos hardware del PC (disco duro, CDRom...)
Y, una vez encendido, las posteriores etapas son…
2- El BootStrap y la BIOS
En este proceso el procesador busca en una ROM (Read Only Memory o sea persistente, y no modificable), situada en la placa base, las secuencias iniciales del arranque que debe implementar, y pasa a recibir las instrucciones de una parte de esa memoria ROM, de un 'programa' que se llama el ‘Basic Input/Output System’
O sea, lo que muchos solemos llamar ‘la’ BIOS. Los nuevos ordenadores tienen algo similar, que es 'la UEFI'. Las configuraciones 'personalizables' de la BIOS se encuentran en la CMOS, que es una pequeña memoria RAM (Memoria de acceso aleatorio, o sea que esta NO es persistente) que tiene, igualmente, la placa base, y que está alimentada por la famosa pila de botón tipo CR2032 de 3 voltios, que está en la CPU y que cuando se atrasa el reloj del sistema sabemos que tenemos que cambiarla… y al quitarla nos borra las personalizaciones de la BIOS, que tendremos que reponer.
Volviendo al Bootstrap y la BIOS, hay fijados dos tipos de secuencias de inicio, el ‘Cold Start’ (cuando se inicia desde la situación de PC apagado), y el ‘Warm Start’ (cuando se inicia desde ‘Reset’). En el primer caso, en Cold Start, o arranque en frío, el programa de la BIOS manda iniciar, primeramente, una verificación general (llamada ‘POST’: Power On Self Test) de placa base, teclado, discos, ROM del video, puertos de periféricos, etc, etc.
Y un paso final de la carga del programa de la BIOS es identificar el orden de inicio de los dispositivos de almacenamiento, como disco duro, CD/DVD, USB, etc. que pueden contener un Sistema Operativo que permita arrancar al PC. (En algunos modelos de BIOS, lo que piden es que introduzcas manualmente con qué dispositivo quieres arrancar)
3- El gestor de arranque (GRUB)
Identificado ese 'dispositivo habilitado para cargar un S.O viable', el programa de la BIOS buscará el Boot Sector (bien el MBR o bien una partición de inicio, la EFI, si no tenemos BIOS, sino UEFI) donde se encuentran instrucciones que tiene que seguir. Y la primera es arrancar el gestor de arranque (en Linux, el GRUB).
La configuración básica del GRUB se encuentra en un archivo llamado (generalmente) /boot/grub/grub.cfg... que está en el dispositivo, y precisamente en esos primeros sectores de arranque que le permiten funcionar sin haber montado aún la partición.
Y entonces, en una segunda fase, el GRUB carga dicha configuración, ‘monta’ el dispositivo, etc, y nos muestra, en pantalla, un menú donde podemos elegir el sistema operativo, y la versión del kernel, si tienes más de uno, o el modo (por ejemplo, en 'Recovery Mode') en que queremos iniciar el PC. El famoso Menú del GRUB, vamos.
4. Cargando la imagen del kernel Linux
Y una vez que elegimos en este Menú del GRUB con qué sistema (y kernel), o en qué modo queremos iniciar el PC, el GRUB le pasa el control del arranque al propio sistema. Y lo primero es cargar el kernel del sistema elegido.
El kernel se carga, igualmente, en varias fases. Se empieza utilizando un pequeño archivo de imagen bzImage, ejecutable, cuyo nombre contiene la palabra ‘vmlinuz’ y que se encuentra, generalmente, en el directorio /boot. Este archivo es, en realidad, una imagen de un 'mini-linux' que contiene lo justo para iniciar la carga del kernel, y activar funcionalidades adicionales (controladores, librerías…) para el hardware y software específicos. Y este ‘mini-linux’ creado se carga en la RAM del PC (por eso se le suele llamar initramfs, de 'initial ram file system'), y que provee un archivo que se llama initdr (que también está en esa carpeta /boot).
5- Funcionando el initramfs.
Como digo, este ‘mini-linux' que arranca desde la RAM empieza a verificar todo el hardware, a adecuarlo dando muchas instrucciones de carga de controladores, etc, etc., hasta que llega a empezar a cargar el primer proceso del sistema, que es el proceso init (de PID=1).
El proceso 'init' es un proceso básico, que se mantiene mientras el PC esté encendido. Y ya solo queda ir empezando a ‘cargar realmente’ el sistema operativo, a través del ‘sistema de inicio y gestor de servicios y eventos’, cuya misión es terminar el proceso de inicio y gestionar todos los procesos de usuario.
Aquí hay varias alternativas, como sysvinit, systemd, etc.. Hoy en día el más común es el systemd (pero, hay quien lo critica y, por ejemplo, la distro Devuan utiliza el sysvinit 'de toda la vida'). Son sistemas para introducir y gestionar los ‘servicios’ básicos que precisa el kernel… que llegan hasta cargar el ‘DM’, o ‘Display Manager’ llamado muchas veces Gestor de Inicio de sesión, o Gestor de Usuarios, que es el que carga en el sistema, como proceso final, y para el usuario que se indique, el entorno gráfico también elegido, las configuraciones y personalizaciones propias del usuario, etc.
6- El Display Manager
Llamado muchas veces Gestor de Inicio de sesión, o
Gestor de Usuarios, acabo de decir que es el que se ocupa de terminar de cargar el sistema para el usuario
elegido, su entorno gráfico, también elegido, sus personalizaciones,
etc.
Actualmente, en Debian, el DM usado es el LightDM (antes se usaba el GDM3, y también existen el LXDM, el KDM, etc, etc.). Supongo que se cargará, por ejemplo, con la instrucción 'systemctl enable lightdm'
Y, a partir de aquí, en unos segundos, queda todo 'en orden de marcha' y aparece en pantalla el Escritorio del usuario, en su distribución (y entorno gráfico) elegidos… y todo debería funcionar perfectamente.
Por cierto, la instrucción, por consola...
systemd-analyze
nos indica los tiempos de carga del kernel y de los servicios y procesos básicos del sistema, y la instrucción
systemd-analyze plot > 0-graficocarga.svg
nos crea, en la ruta donde hayamos abierto la consola, un gráfico detallado con toda la cadena de ejecución, de nombre (en este caso) 0-graficocarga.svg.
Y la interesante orden...
system-analyze blame
nos presenta, en pantalla (consola) todos los mini-procesos ejecutados, con sus tiempos de ejecución
Y un apunte final… mi ordenador, con Buster, tarda...
- unos 9 segundos, desde que pulso el botón de encendido hasta que aparece el GRUB
- unos 6 segundos, desde que doy ENTER, en el GRUB, para iniciar la carga del kernel elegido hasta que salen las primeras letras en pantalla (supongo que será la carga del initramfs)
- unos 29 segundos, desde ese instante hasta que sale en pantalla el Display Manager (el LightDM) es decir, la carga del kernel y los servicios y procesos básicos.
- y unos 23 segundos, desde que introduzco la contraseña de usuario y doy al ENTER hasta que me aparece, completamente operativo, el Escritorio Cinnamon de mi usuario, con los lanzadores, applets y enlaces personalizados.
$ systemd-analyze
ResponderEliminarStartup finished in 14.725s (firmware) + 615ms (loader) + 2.225s (kernel) + 2.277s (userspace) = 19.843s
graphical.target reached after 2.277s in userspace