Guía Hardware

Cómo es el proceso de arranque paso a paso

Actualizado a: 19 de enero de 2024

La secuencia o proceso de arranque es todo un misterio para algunos usuarios. Simplemente pulsan el botón de encendido o de reinicio y en unos instantes aparece el sistema operativo. Pero para que esto suceda han pasado muchas cosas antes dentro de tu PC. ¿Quieres saber qué? Pues a delante…

¿Qué es el arranque o boot?

arranque BIOS

El arranque, también conocido como boot en inglés, es el proceso mediante el cual un sistema informático se inicia o se pone en funcionamiento. Es el conjunto de pasos que ocurren desde que se enciende el sistema hasta que el sistema operativo y las aplicaciones están listas para ser utilizadas.

El término «boot» en el contexto del arranque de un sistema informático tiene sus orígenes en la frase en inglés «bootstrapping» o «to pull oneself up by one’s bootstraps», que se refiere a la acción de levantarse a sí mismo tirando de las correas de las botas. Este concepto se utiliza metafóricamente para describir el proceso de iniciar un sistema informático, ya que implica que el sistema, en su estado inicial, debe cargar y poner en funcionamiento todos los componentes necesarios para llegar a un estado completamente funcional.

En los primeros días de la informática, cuando se encendía un ordenador, era necesario cargar el sistema operativo y otros programas desde medios de almacenamiento externos, como cintas magnéticas o tarjetas perforadas. Esto se hacía mediante una serie de instrucciones y comandos específicos que se ingresaban manualmente en el sistema. Estos comandos iniciales, que activaban la carga y la ejecución de los programas, se conocieron como «bootstrap loaders» o «boot loaders». Con el tiempo, este término se acortó a «boot», que se utiliza comúnmente en la actualidad para referirse al proceso de arranque de un sistema informático.

¿Qué es el bootloader o gestor de arranque?

El bootloader o gestor de arranque es un programa especializado que se encarga de iniciar el sistema operativo en un sistema informático. Su principal función es cargar el núcleo del sistema operativo desde el dispositivo de almacenamiento (como el disco duro) a la memoria RAM y transferir el control al sistema operativo para su ejecución.

El bootloader es una parte importante del proceso de arranque y se encuentra en una ubicación específica del dispositivo de almacenamiento, generalmente en el sector de arranque (boot sector). Al encender el sistema, el firmware del sistema (como la BIOS o UEFI) busca y carga el bootloader desde el sector de arranque.

Una de las principales tareas del bootloader es permitir al usuario seleccionar qué sistema operativo desea iniciar cuando hay múltiples opciones instaladas en el sistema. Para ello, muestra un menú en pantalla con las diferentes opciones disponibles y espera a que el usuario elija una de ellas.

Además de cargar el sistema operativo, el bootloader también realiza otras funciones importantes, como la detección y configuración de hardware básico, la carga de controladores de dispositivos necesarios para el sistema operativo y la aplicación de opciones de configuración adicionales.

En los sistemas Linux, uno de los bootloaders más comunes es GRUB (Grand Unified Bootloader). GRUB permite al usuario seleccionar el sistema operativo y las opciones de arranque, como el modo de recuperación, y proporciona flexibilidad para configurar diferentes parámetros de arranque.

Secuencia de arranque inicial

Cuando activas el botón de reinicio o encendido de un dispositivo, transcurren unos pocos segundos antes de que el sistema operativo esté completamente operativo. Sin embargo, durante ese lapso de tiempo, ocurren una serie de sucesos que detallaremos a continuación:

Etapa 1: inicio de la CPU

A nivel de componentes electrónicos, se encuentran diversos circuitos que desempeñan un papel crucial en el proceso de arranque. Uno de ellos es el RTC (Real-Time Clock), encargado de almacenar la hora y servir como base para la sincronización temporal del sistema operativo. Otro componente importante es el circuito generador de la señal de reinicio, un oscilador que produce una señal de reloj para sincronizar elementos como la RAM, la CPU y los buses.

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 para el sistema. Una señal llamada «Power Good» verifica que la energía se suministre de manera estable a la CPU. La CPU realiza una inicialización de sus registros, estableciéndolos en cero durante un reinicio para eliminar cualquier dato residual del funcionamiento anterior, o los configura 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 que varía dependiendo de la arquitectura del procesador. 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 el avance de los procesadores, como los 286, 386 y posteriores, se emplearon direcciones diferentes.

En otras arquitecturas de conjunto de instrucciones (ISA), 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, las direcciones serían 0x00 o 0x20, dependiendo de la versión. Independientemente de la dirección específica, apunta hacia una rutina de arranque particular que se ejecutará a partir de ese punto.

Etapa 2: reset code

A partir de ese momento, se da inicio a la ejecución de un programa almacenado en una memoria no volátil. En este caso, se hace referencia a una dirección específica que contiene un conjunto de instrucciones diseñadas para iniciar una rutina de reinicio (código de reinicio) con el fin de activar ciertos componentes de hardware complementarios a la CPU, como el controlador de interrupciones.

Cada vez que se ejecuta una instrucción del programa de arranque, el registro PC (Program Counter) incrementa la dirección en 1 para avanzar a la siguiente instrucción en la secuencia. De esta manera, el programa se ejecuta paso a paso, siguiendo la secuencia completa de instrucciones.

Etapa 3: startup code

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

El autodiagnóstico se inicia cuando la CPU se somete a una autoevaluación y envía una señal a través del bus del sistema para verificar la respuesta de todos los dispositivos 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 y leyendo datos en las primeras direcciones 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 de las pruebas se comparan con un registro de dispositivos almacenado en un chip llamado 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 procede a ejecutar la rutina correspondiente al proceso de bootstrap. 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, u 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 interrumpirá 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 este punto, el proceso es similar para cualquier sistema operativo. Sin embargo, a partir de aquí, hay variaciones que se describen en los apartados siguientes.

Secuencia de arranque dependiente

Ahora vamos a ver cómo seguiría según el sistema operativo empleado, ya que varía de uno a otro:

Secuencia de arranque en Linux

usar aplicaciones de Linux en Chromebooks

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 de compatibilidad BIOS Legacy o CSM (Compatibility Support Module), se activa una secuencia que carga el IPL (Initial Program Loader). Esta secuencia 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 del programa, 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 formato hexadecimal, que siempre es 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 tanto, necesita un gestor de arranque.

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 el MBR tradicional como el moderno GPT (GUID Partition Table), e incluso otros tipos de tablas nativas, como las utilizadas por Apple. En este caso, se utiliza una partición especial llamada ESP (EFI System Partition), donde se almacenan los archivos del firmware para el arranque (<EFI_SYSTEM_PARTITION>/EFI/<FABRICANTE_EFI>/).

Etapa 6: bootloader

De acuerdo con la configuración de la Prioridad de Arranque (Boot Priority), el firmware buscará en una unidad de almacenamiento designada el gestor de arranque (/boot) y los sistemas operativos disponibles (multiboot). A partir de este punto, el gestor de arranque toma el control para iniciar el sistema operativo:

  1. Stage 1: Durante esta fase inicial, se carga en la memoria RAM la primera etapa, la cual es ejecutada por la CPU. Esta etapa consiste en los primeros 512 bytes del MBR y tiene como principal función permitir la carga de la siguiente etapa.
    • Stage 1.5: Una vez que se ha cargado en la memoria principal, esta etapa se encarga de buscar la etapa 2 en el sistema de archivos de la partición correspondiente.
  2. Stage 2: Esta etapa es más compleja que las anteriores. En el caso de GRUB, se encarga de leer 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. Al mostrar el menú del gestor en la pantalla, se nos permite seleccionar la opción de arranque deseada. Una vez seleccionada la opción, en el caso de ser Linux, el gestor de arranque apunta al kernel y monta el initramfs (initial RAM file system) en /dev/ram0. A partir de este punto, la tarea del gestor de arranque concluye.

Etapa 7: kernel loading

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

En la segunda fase (etapa de inicio del kernel), el kernel se ejecuta mediante una función llamada intercambiador (swapper) o proceso 0, también conocido como inicio (startup), que varía según la arquitectura. En esta etapa, se establece el administrador de memoria (tablas de paginación, mapas, etc.), se detecta el tipo de CPU y sus características adicionales, como la unidad de punto flotante. A continuación, se realizan tareas que no dependen 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 que se cargó 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.

Después, se utiliza la función pivot_root() para desmontar el sistema de archivos temporal y reemplazarlo 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. A continuación, 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 con un PID de 1.

Etapa 8: primer proceso (init)

Una vez que el sistema ha arrancado, el proceso con PID=1, en un kernel «bare-metal» sin ningún otro componente adicional, podría ser un shell. Sin embargo, en una distribución típica, este proceso suele ser systemd, init de SysV u otro gestor similar. A partir de este proceso inicial, se desencadenan los demás procesos que se ejecutan durante la sesión. En el caso de PID=1, puede consistir en una serie de scripts que establecen la estructura de procesos para modos de usuario único o multiusuario, inician un entorno de escritorio si se está utilizando una sesión gráfica, el inicio de sesión o login pidiendo los credenciales, y realizan otras acciones necesarias.

Proceso de arranque en Windows

Windows 11

En el proceso de Windows no es igual que el proceso de arranque o la secuencia de arranque para Linux. En este caso lo voy a resumir con estos 4 pasos:

  1. Se carga el gestor de arranque de Windows, conocido como WinLoad o Windows Loader, el cual utiliza la ruta específica BOOTMGR para montar la partición de arranque.
  2. A continuación, el gestor de arranque de Windows carga dos archivos importantes: NTOSKRNL.EXE y HAL.DLL. Estos archivos son responsables de gestionar el hardware y el kernel del sistema.
  3. Una vez cargados, WinLoad lee los archivos del Registro de Windows y selecciona un perfil de hardware adecuado, cargando todos los controladores necesarios.
  4. En este punto, el control del proceso es transferido al núcleo o kernel de Windows NT. A continuación, se inicia el archivo de inicio de sesión WINLOGON.EXE, el cual muestra la pantalla de bienvenida de Windows.

En Windows anteriores a Vista puede variar respecto a esta descripción. En cambio, en Windows posteriores, como 8.x, 10, y Windows 11, es igual.

No obstante, el proceso de Windows es algo más complejo que eso, pero estos son los pasos elementales que debes conocer para comprender el proceso.

Proceso de arranque en Mac

portátil Macbook con macOS

En este punto, debemos hacer una distinción entre los procesadores PowerPC (PPC), los procesadores x86 y los procesadores Apple Silicon más recientes. Sin embargo, de manera general, el procedimiento de arranque seguiría los siguientes pasos:

  1. Presionas el botón de encendido para iniciar el dispositivo.
  2. Se activa el firmware correspondiente, como el OpenFirmware en los sistemas PowerPC, el EFI en los sistemas Intel x86, o el firmware diseñado para los procesadores ARM actuales. 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.
  3. Se realiza una verificación del hardware mediante el Apple Hardware Test, asegurando su correcto funcionamiento.
  4. Se selecciona la partición de arranque que se utilizará para cargar el sistema operativo.
  5. El control se transfiere al bootloader, que se encuentra en el archivo /System/Library/CoreServices/BootX. En esta etapa, se intenta cargar una serie de controladores (drivers) presentes en la lista /usr/sbin/kextcache.
  6. Se carga el núcleo del sistema operativo macOS, conocido como kernel XNU. A partir de este momento, el kernel toma el control del sistema.
  7. Se inicia el proceso init, que es ejecutado por el kernel. Durante este proceso, se determina el dispositivo raíz (root) del sistema.
  8. Se inician una serie de servicios basados en el estilo BSD, en el cual se fundamenta macOS. Además, se activan los demonios necesarios para el funcionamiento del sistema.
  9. Finalmente, se muestra la pantalla de inicio de sesión, donde puedes iniciar sesión con tu cuenta de usuario y comenzar a utilizar el sistema macOS.

Conclusión

En definitiva, el proceso de arranque de un ordenador es una secuencia compleja y crucial que permite que el sistema se inicie correctamente. Desde el momento en que se presiona el botón de encendido hasta el inicio del sistema operativo, se llevan a cabo una serie de pasos fundamentales. Desde la activación del firmware y la comprobación del hardware, hasta la carga del gestor de arranque y el kernel, cada etapa desempeña un papel vital en la preparación del ordenador para su funcionamiento. A medida que avanzamos en la era de los procesadores ARM y los sistemas EFI, la secuencia de arranque ha evolucionado, adaptándose a nuevas tecnologías y arquitecturas. Comprender este proceso nos brinda una visión más profunda del funcionamiento interno de nuestro ordenador y nos ayuda a apreciar la complejidad y la importancia de cada paso en el arranque del sistema.

Jaime Herrera

Jaime Herrera

Ingeniero Informático apasionado por el hardware y la tecnología. Llevo más de diez años dedicándome al análisis de componentes como procesadores, tarjetas gráficas y sistemas de almacenamiento. Mi objetivo es ofrecer información clara y precisa, combinando mi experiencia técnica con un enfoque práctico para ayudar a los lectores a entender mejor el mundo del hardware.

>
Guía Hardware
Logo