HardwareSoftwareTutoriales

Proceso de arranque: explicado paso a paso

El proceso de arranque de un ordenador es bastante complejo. Desde que pulsas el botón de encendido hasta que se inicia el sistema operativo ocurren muchas cosas que deberías conocer. Aquí tienes este tutorial en el que aprenderás todo sobre este proceso que ya no tendrá secretos para ti…

Te recomiendo leer estos artículos para comprender mejor este tutorial:

Secuencia de arranque general

bios uefi partes placa base

Cuando presionas el botón de reinicio o de encendido de un dispositivo, solo pasan unos breves segundos antes de que el sistema operativo esté funcionando. Sin embargo, durante ese intervalo de tiempo, se producen una serie de eventos que describiremos a continuación:

Etapa 1: inicio de la CPU

A nivel de componentes electrónicos, existen varios circuitos encargados del proceso de arranque. Entre ellos se encuentra el RTC (Reloj en Tiempo Real), que mantiene almacenada la hora y sirve como base para la temporización del sistema operativo. También está el circuito generador de la señal de reinicio, un oscilador que produce la señal de reloj para sincronizar la RAM, la CPU, los buses, entre otros elementos.

Cuando se presiona el botón de encendido (arranque en frío) o el botón de reinicio (arranque en caliente), la fuente de alimentación suministra la energía necesaria. Una señal llamada «Power Good» verifica que la energía se suministre de manera estable a la CPU. La CPU inicializa sus registros, estableciéndolos en cero durante un reinicio para borrar cualquier dato residual del funcionamiento previo, o los establece en un valor conocido en caso de un arranque desde cero.

En el registro CS (Segmento de Código) se carga una dirección específica. Por ejemplo, en los procesadores 8086, se cargaba la dirección FFFF0h y el registro IP (Puntero de Instrucción) se establecía en 0000h, lo que correspondía a la dirección segmentada FFFFh:0000h en el mapa físico de memoria. Con la llegada de los procesadores 286, se empleaba la dirección 00FFFF0h, y para los procesadores 386 y posteriores, se utilizaban direcciones diferentes.

En otras arquitecturas ISA (Arquitectura de Conjunto de Instrucciones), las direcciones de arranque también varían. Por ejemplo, en PowerPC/POWER de 32 y 64 bits, las direcciones efectivas pueden ser 0x00000100 o 0x0000000000000100 respectivamente. En SPARC, serían 0x00 o 0x20, dependiendo de la versión. Sea cual sea la dirección específica, apunta hacia una rutina de arranque específica que se ejecutará a partir de ese punto.

Etapa 2: reset code

A partir de ese instante, se inicia la ejecución de un programa almacenado en una memoria persistente. En este caso, se hace referencia a una dirección específica que almacena un conjunto de instrucciones destinadas a iniciar una rutina de reinicio (reset code) para activar ciertos componentes de hardware que complementan a la CPU, como el controlador de interrupciones.

Cada vez que se ejecuta una instrucción del programa de arranque, el registro PC (Contador de Programa) incrementa la dirección en +1 para avanzar en la secuencia completa. De esta manera, se va ejecutando paso a paso toda la secuencia de instrucciones.

Etapa 3: startup code

Una vez finalizada la rutina anterior, se procede a ejecutar otra rutina (startup code) almacenada en la memoria no volátil. Durante el proceso de arranque, también se realiza un diagnóstico conocido como POST (Power-On Self-Test) para verificar el estado del hardware.

El autodiagnóstico se inicia cuando la CPU se examina a sí misma y luego envía una señal a través del bus del sistema para verificar la respuesta de todos los elementos conectados a él. Se evalúa la memoria de la GPU, se verifican las señales que controlan la pantalla, se realizan pruebas en los chips de RAM (escribiendo datos en las primeras direcciones y luego leyéndolos para verificar su integridad), se comprueba el funcionamiento del teclado y se envía información adicional a través de otros buses del sistema para verificar otros periféricos, entre otros procedimientos.

Los resultados del test se comparan con un registro de los dispositivos almacenado en un chip (CMOS Setup). Si se detecta algún problema, se mostrará un mensaje de error o se emitirán pitidos para indicar la naturaleza del problema.

Etapa 4: bootstrap

A continuación, se ejecuta la rutina que corresponde al proceso de bootstrapping. Esta rutina contiene las instrucciones necesarias para iniciar el sistema operativo a través del gestor de arranque o bootloader. En sistemas GNU/Linux, el gestor de arranque puede ser GRUB, LiLo, Syslinux, Windows Loader, entre otros.

Si no se detecta ningún medio de almacenamiento que contenga un sistema operativo, se mostrará el mensaje «No boot device available» y se detendrá el proceso de arranque. Esto indica que no se ha encontrado ningún dispositivo de inicio válido y, por lo tanto, no se puede continuar con la carga del sistema operativo.

Hasta aquí es igual para cualquier sistema operativo, sin embargo, a partir de aquí varía como veremos en los tres subapartados siguientes…

Secuencia de arranque en Linux

Ubuntu Linux

Si usamos Linux, el proceso de arranque seguiría de esta forma:

Etapa 5: MBR/GPT

En sistemas UNIX como Linux, cuando se trabaja en modo BIOS Legacy o CSM (Compatibility Support Module), se activa una rutina que carga el IPL (Initial Program Loader). Esta rutina se encarga de cargar los primeros 512 bytes del primer sector del disco duro, conocido como MBR (Master Boot Record). Los primeros 446 bytes del MBR se reservan para el código de programas, los siguientes 64 bytes se utilizan para la tabla de particiones, y los últimos 2 bytes contienen un número mágico (magic number) en hexadecimal, siempre siendo AA55. Si este número mágico no coincide, se considera un error. En realidad, el MBR de Linux está «vacío» y no puede iniciar por sí mismo, por lo que necesita un bootloader.

En el caso de los sistemas EFI/UEFI, el firmware es capaz de reconocer y leer tanto la tabla de particiones como los sistemas de archivos (FAT16, FAT32, ISO9660, UDF y HFS/HFS+). Por lo tanto, no se limita únicamente a los primeros bytes o al MBR. Además, se puede utilizar tanto MBR como el moderno GPT (GUID Partition Table), e incluso otros tipos de tablas nativas, como las de Apple. En este caso, se utiliza una partición especial llamada ESP (EFI System Partition), donde se guardan los archivos del firmware para el arranque (<EFI_SYSTEM_PARTITION>/EFI/<FABRICANTE_EFI>/).

Etapa 6: bootloader

Según la configuración de Prioridad de Arranque (Boot Priority), el firmware buscará en una unidad de almacenamiento específica el gestor de arranque (/boot) y el sistema operativo o sistemas operativos (multiboot). A partir de este momento, el bootloader asume el control para iniciar el sistema operativo:

  1. Stage 1: en esta fase inicial, la primera etapa se carga en la memoria RAM y es ejecutada por la CPU. Esta etapa corresponde a los primeros 512 bytes del MBR. Su función principal es permitir la carga de la siguiente etapa.
  2. Stage 1.5: una vez cargada en la memoria principal, esta etapa busca la etapa 2 en el sistema de archivos de la partición adecuada.
  3. Stage 2: esta etapa es más compleja que las anteriores. En el caso de GRUB, lee el archivo menu.lst o grub.cfg (en GRUB2) que contiene la configuración y opciones de arranque para uno o varios sistemas operativos instalados. Cuando se muestra el menú del gestor en la pantalla, se nos permite elegir la opción que deseamos arrancar. Una vez seleccionada la opción, en el caso de ser Linux, el gestor de arranque apunta al kernel y se monta el initramfs (initial RAM file system) en /dev/ram0. A partir de aquí, la tarea del bootloader finaliza.

Etapa 7: kernel loading

En la primera fase del arranque, se carga el kernel (kernel loading stage), donde la imagen initrd/initramfs del kernel se descomprime en la parte superior de la memoria RAM y establece funciones esenciales para interactuar con el hardware. Durante este proceso, se abordan diferentes problemas, como el linuxrc, encargado de crear un sistema raíz provisional (/ o root). También se incluye el uso de usplash para arranques gráficos. Todo este proceso se lleva a cabo en kernelspace o modo privilegiado.

En la segunda fase (kernel init stage), se ejecuta el kernel gracias a una función llamada intercambiador (swapper) o proceso 0 conocida como inicio (startup), la cual varía según la arquitectura. En esta etapa, se establece el manejador de memoria (tablas de paginación, mapas, etc.), se detecta el tipo de CPU y las funcionalidades adicionales de punto flotante. Luego, se realizan las tareas no dependientes de la arquitectura, como la llamada syscall start_kernel(), que configura la mayor parte del sistema, incluyendo la gestión de interrupciones (IRQ), utilizando el reloj del sistema, configurando la memoria, montando el ramdisk cargado previamente en el sistema raíz temporal, y cargando en la RAM algunos módulos de controladores (utilizando udev o scripts…) que no fueron compilados como parte del kernel.

A continuación, pivot_root() desmonta el sistema de archivos temporal y lo reemplaza por el sistema de archivos real. El espacio vacío dejado por el sistema temporal queda disponible para ser utilizado por otros procesos. En caso de que no sea posible crear el sistema raíz por cualquier motivo, se produce un kernel panic. Posteriormente, se montan los sistemas de archivos (FS) y se inician algunos dispositivos. El planificador toma el control de la gestión para decidir qué procesos se cargarán en la RAM y se ejecutarán. Esto da lugar al proceso 1 o PID=1.

Etapa 8: primer proceso (init)

Una vez que el sistema ha sido iniciado, el proceso con PID=1, cuando se utiliza un kernel «bare-metal» sin ningún otro componente, podría ser asumido por un shell, por ejemplo. Sin embargo, en una distribución típica, este proceso suele ser systemd, init de SysV u otro gestor similar. A partir del proceso inicial, se desencadenan el resto de procesos ejecutados durante la sesión. En este caso, el PID=1 puede consistir en una serie de scripts que establecen estructuras de procesos para modos de usuario único o multiusuario, se inicia un entorno de escritorio en caso de tener una sesión gráfica, entre otras acciones…

Proceso de arranque en Windows

En el proceso de Windows  habría ligeras diferencias con respecto al de Linux, y en resumidas cuentas sería:

  1. Se carga el gestor de arranque de Windows, denominado WinLoad o Windows Loader y usa la ruta específica BOOTMGR para montar la partición de arranque.
  2. Ahora, el gestor de arranque de Windows cargará dos archivos denominados NTOSKRNL.EXE y HAL.DLL para la gestión de hardware y el kernel.
  3. Después de eso, WinLoad lee los archivos del Registro de Windows y selecciona un perfil de hardware, cargando todos los drivers necesarios.
  4. En este punto se haría cargo del proceso el núcleo o kernel Windows NT. Y se iniciaría el archivo de inicio de sesión WINLOGON.EXE, para mostrar la pantalla de bienvenida de Windows…

En Windows anteriores a Vista puede variar.

Proceso de arranque en Mac

Captura de pantalla macOS Big Sur

Aquí deberíamos diferenciar entre los PPC, los x86 y los actuales Apple Silicon. Pero, a nivel genérico, el procedimiento seguiría así:

En los Mac con chip de seguridad T2, éste entra en funcionamiento justo antes de que el firmware evalúe la firma del boot.efi.

  1. Presionas el botón de encendido.
  2. Se pone en marcha el OpenFirmware (PowerPC), el EFI (Intel x86) o el firmware para los ARM actuales.
  3. Se comprueba el hardware con el Apple Hardware Test y se inicializa el hardware presente.
  4. Se selecciona la partición de arranque.
  5. El control paso ahora al fichero /System/Library/CoreServices/BootX del bootloader. Y se intenta cargar una serie de drivers presentes en la lista /usr/sbin/kextcache.
  6. Se carga el kernel XNU del sistema operativo macOS. El núcleo tomará el control.
  7. Ahora se procede a poner en marcha el proceso init, que es ejecutado por el kernel. Y se determina el dispositivo root.
  8. Se inician una serie de servicios al estilo BSD, en el que se basa macOS y se ponen en marcha los demonios.
  9. Finalmente se iniciará sesión.

No olvides comentar con dudas, opiniones, etc…

Isaac

Geek de los sistemas electrónicos, especialmente del hardware informático. Con alma de escritor y pasión por compartir todo el conocimiento sobre tecnología.
Los datos de carácter personal que nos facilite mediante este formulario quedarán registrados en un fichero de Miguel Ángel Navas Carrera, con la finalidad de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento del interesado. Si no se acepta no podrás comentar en este blog. Puedes consultar Política de privacidad. Puede ejercitar los derechos de acceso, rectificación, cancelación y oposición en info@profesionalreview.com
Botón volver arriba