Arranque (informática)
# Arranque (informática)

En informática, el arranque o secuencia de arranque (en inglés: bootstrapping, boot o booting) es el proceso que inicia el gestor de arranque que es un programa ejecutado por el BIOS cuando se enciende una computadora. Se encarga de la inicialización del sistema operativo y de los dispositivos.

Además de cargar un sistema operativo o una utilidad independiente, el proceso de inicio también puede cargar un programa de volcado de almacenamiento para diagnosticar problemas en un sistema operativo.

Boot es la abreviatura de bootstrap o bootstrap load y deriva de la frase en inglés de to pull oneself up by one's bootstraps (trad. levantarse por medios propios). El uso llama la atención sobre el requisito de que, si la mayoría del software se carga en un ordenador mediante otro software que ya se está ejecutando en el ordenador, debe existir algún mecanismo para cargar el software inicial del hardware. Los primeros ordenadores usaban una variedad de métodos ad hoc para obtener un pequeño programa en la memoria para resolver este problema. La invención de la memoria de solo lectura (ROM) de varios tipos resolvió esta paradoja al permitir que los ordenadores se vendían con un programa de inicio que no se podía borrar. El crecimiento de la capacidad de ROM ha permitido implementar procedimientos de puesta en marcha cada vez más elaborados.

## Cargador de arranque

Un cargador o gestor de arranque (en inglés: bootloader) es un programa sencillo (que no tiene la totalidad de las funcionalidades de un sistema operativo) diseñado exclusivamente para preparar todo lo que necesita el sistema operativo para funcionar. Normalmente se utilizan los cargadores de arranque multietapas, en los que varios programas pequeños se suman los unos a los otros, hasta que el último de ellos carga el sistema operativo.

En las computadoras modernas (después de 1975), el proceso de arranque comienza con la CPU ejecutando los programas contenidos en la memoria ROM en una dirección predefinida (se configura la CPU para ejecutar este programa, sin ayuda externa, al encender la computadora).

### Cargador de arranque de segunda etapa

Este programa contiene funcionalidades rudimentarias para buscar unidades que se puedan seleccionar para participar en el arranque, y cargar un pequeño programa desde una sección especial de la unidad más prometedora. El pequeño programa no es, en sí mismo, un sistema operativo sino, simplemente, un cargador de arranque de segundo nivel, como Lilo o Grub, que es capaz de cargar el sistema operativo propiamente dicho y, finalmente, transferirle el control. El sistema se auto-iniciará y puede cargar los controladores de dispositivos y otros programas que son necesarios para el normal funcionamiento del sistema operativo.

El proceso de arranque se considera completo cuando la computadora está preparada para contestar a los requerimientos del exterior. La típica computadora moderna arranca en, aproximadamente, un minuto (del cual, 15 segundos son empleados por los cargadores de arranque preliminares y, el resto, por el cargador del sistema operativo), mientras que los grandes servidores pueden necesitar varios minutos para arrancar y comenzar todos los servicios; para asegurar una alta disponibilidad, ofrecen unos servicios antes que otros.

La mayoría de los sistemas embebidos deben arrancar casi instantáneamente, por ejemplo, esperar un minuto para poder ver la televisión se considera inaceptable. Por ello, tienen el sistema operativo en la ROM o memoria flash, gracias a lo que pueden ser ejecutados de forma casi instantánea.

## Bootsplash & Splashy

En Linux, durante el proceso de arranque se muestra por pantalla la secuencia de módulos y otros componentes del sistema operativo en modo texto. Por defecto se muestra así, pero un parche llamado splashy, (sustituto de bootsplash) permite ocultar esas líneas de texto (con la opción "quiet" y "splash" en las líneas de arranque), ofreciendo en su lugar una imagen más amigable, con una barra de progreso. No obstante se puede cambiar al modo "verbose" (detallado) pulsando la tecla F2, lo que nos mostrará de nuevo los mensajes propios del proceso de arranque. También dota a la consola de Linux de un fondo totalmente configurable.

Todo esto es posible gracias al framebuffer, que nos posibilita las consolas a resoluciones y profundidades de color altas.

## Ordenadores personales (PC)

### Dispositivos de arranque

El dispositivo de arranque es el dispositivo desde el que se carga el sistema operativo. El firmware UEFI o BIOS de una PC moderna admite el arranque desde varios dispositivos, generalmente una unidad de estado sólido o unidad de disco duro a través de la GPT o Master Boot Record (MBR) en dicha unidad o disco, una unidad de disco óptico (usando El Torito), un dispositivo de almacenamiento masivo USB (unidad flash basada en FTL, tarjeta SD o ranura para tarjeta multimedia, disco duro USB unidad de disco, unidad de disco óptico USB, etc.), o una tarjeta de interfaz de red (usando PXE). Los dispositivos de arranque BIOS más antiguos y menos comunes incluyen disquetes, Zip drives y LS-120.

Normalmente, el firmware del sistema (UEFI o BIOS) permitirá al usuario configurar un "orden de arranque". Si el orden de arranque se establece en "primero, la unidad de DVD; segundo, la unidad de disco duro", entonces el firmware intentará arrancar desde la unidad de DVD y, si esto falla (por ejemplo, porque no hay DVD en la unidad), intentará arrancar desde la unidad de disco duro local.

Por ejemplo, en una PC con Windows instalado en el disco duro, el usuario podría establecer el orden de inicio en el que se indicó anteriormente y luego insertar un Linux Live CD para probar Linux sin tener que instalar un sistema operativo en el disco duro. Este es un ejemplo de arranque dual, en el que el usuario elige qué sistema operativo iniciar después de que el ordenador haya realizado su autocomprobación de encendido (POST). En este ejemplo de arranque dual, el usuario elige insertar o quitar el DVD del ordenador, pero es más común elegir qué sistema operativo arrancar seleccionando desde un menú gestor de arranque en el dispositivo seleccionado, usando el teclado del ordenador para seleccionar desde un menú de arranque BIOS o UEFI, o ambos; el menú de inicio generalmente se ingresa presionando las teclas F8 o F12 durante el POST; la Configuración del BIOS generalmente se ingresa presionando las teclas F2 o DEL durante la POST.

Hay varios dispositivos disponibles que permiten al usuario "arrancar rápidamente" en lo que suele ser una variante de Linux para varias tareas sencillas como el acceso a Internet; algunos ejemplos son Splashtop y Latitude ON.

### Secuencia de arranque

Al iniciarse, la CPU x86 de un ordenador personal compatible con IBM, ejecuta en modo real, la instrucción ubicada en vector de reinicio (la dirección de memoria física FFFF0h en 16- procesadores bit x86 y FFFFFFF0h en procesadores x86 de 32 y 64 bits), generalmente apunta al punto de entrada del firmware (UEFI o BIOS) dentro de la ROM. Esta ubicación de memoria normalmente contiene una instrucción de salto que transfiere la ejecución a la ubicación del programa de inicio del firmware (UEFI o BIOS). Este programa ejecuta una autoprueba de encendido (POST) para comprobar e inicializar los dispositivos necesarios, como la memoria principal (DRAM), el bus PCI y los dispositivos PCI (incluido el funcionamiento integrado ROM opcional). Uno de los pasos más complicados es configurar DRAM sobre SPD, lo que se complica aún más por el hecho de que en este punto la memoria es muy limitada.

Después de inicializar el hardware requerido, el firmware (UEFI o BIOS) pasa por una lista preconfigurada de dispositivos de almacenamiento no volátil ("secuencia de arranque de dispositivo") hasta que encuentre uno que sea de arranque. Un dispositivo MBR de arranque se define como uno que se puede leer y donde los dos últimos bytes del primer sector contienen la palabra little-endian AA55h, encontrada como secuencia de bytes 55h, AAh en el disco (también conocida como Firma de arranque MBR), o donde se establezca de otro modo que el código dentro del sector es ejecutable en PC x86.

Una vez que el BIOS ha encontrado un dispositivo de arranque, carga el sector de arranque en la dirección lineal 7C00h (normalmente segmento:offset $0000h:7C00h,^{:29}$ pero algunos BIOS usan erróneamente 07C0h:0000h) y transfieren la ejecución al código de arranque. En el caso de un disco duro, esto se denomina Master Boot Record (MBR). El código MBR convencional comprueba la tabla de particiones del MBR en busca de una partición configurada como "arrancable". (el que tiene el indicador activo establecido). Si se encuentra una partición activa, el código MBR carga el código sector de arranque de esa partición, conocido como Registro de arranque de volumen (VBR), y lo ejecuta. El código de inicio MBR suele ser específico del sistema operativo.

El código de sector de arranque es el cargador de arranque de primera etapa. Se encuentra en discos fijos y unidades extraíbles, y debe caber en los primeros 446 bytes del Master Boot Record para dejar espacio para la tabla de partición predeterminada de 64 bytes con cuatro entradas de partición y la firma de arranque de dos bytes, que requiere el BIOS para un cargador de arranque adecuado — o incluso menos, cuando características adicionales como más de cuatro entradas de partición (hasta 16 con 16 bytes cada una), una firma de disco (6 bytes), una marca de tiempo de disco (6 bytes), una Partición activa avanzada (18 bytes) o caregadores multi-boot también deben ser compatibles en algunos entornos. En floppy y superfloppy Volume Boot Records, hasta 59 bytes están ocupados para el Bloque de parámetros de BIOS extendido en los volúmenes FAT12 y FAT16 desde DOS 4.0, mientras que el FAT32 EBPB introducido con DOS 7.1 requiere incluso 87 bytes, dejando solo 423 bytes para el cargador de arranque cuando se asume un tamaño de sector de 512 bytes. Por lo tanto, los sectores de arranque de Microsoft tradicionalmente imponían ciertas restricciones en el proceso de arranque, por ejemplo, el archivo de arranque tenía que ubicarse en una posición fija en el directorio raíz del sistema de archivos y almacenarse como sectores consecutivos, condiciones atendidas por el comando SYS y ligeramente relajado en versiones posteriores de DOS. Luego, el cargador de arranque pudo cargar los primeros tres sectores del archivo en la memoria, que resultó contener otro cargador de arranque integrado capaz de cargar el resto del archivo en la memoria. Cuando Microsoft agregó LBA y compatibilidad con FAT32, incluso cambiaron a un cargador de arranque que llegaba a "dos" sectores físicos y usaba instrucciones 386 por razones de tamaño. Al mismo tiempo, otros proveedores lograron incluir mucha más funcionalidad en un solo sector de arranque sin relajar las restricciones originales de solo una memoria disponible mínima (32 KB) y soporte de procesador (8088/8086). Por ejemplo, los sectores de arranque de DR-DOS pueden localizar el archivo de arranque en el sistema de archivos FAT12, FAT16 y FAT32 y cargarlo. en la memoria como un todo a través de CHS o LBA, incluso si el archivo no está almacenado en una ubicación fija y en sectores consecutivos.

El VBR suele ser específico del sistema operativo; sin embargo, su función principal es cargar y ejecutar el archivo del cargador de arranque del sistema operativo (como bootmgr o ntldr), que es el cargador de arranque de segunda etapa, desde una partición activa. Luego, el gestor de arranque carga el kernel del sistema operativo desde el dispositivo de almacenamiento.

Si no hay una partición activa, o el sector de inicio de la partición activa no es válido, el MBR puede cargar un cargador de inicio secundario que seleccionará una partición (a menudo a través de la entrada del usuario) y cargará su sector de inicio, que generalmente carga el kernel del sistema operativo correspondiente. En algunos casos, el MBR también puede intentar cargar cargadores de arranque secundarios antes de intentar arrancar la partición activa. Si todo lo demás falla, debería emitir un INT 18h Llamada de interrupción del BIOS (seguido de un INT 19h en caso de que INT 18h regresara) para devolver el control al BIOS, que luego intentaría arrancar otros dispositivos, intentaría un arranque remoto a través de la red.

Muchos sistemas modernos (Intel Macs y PC más nuevos) usan UEFI.

A diferencia del BIOS, UEFI (sin Arranque heredado a través de CSM) no depende de los sectores de arranque, el sistema UEFI carga el gestor de arranque (archivo de Aplicación EFI en disco USB o en la Partición del sistema EFI) directamente, y el kernel del sistema operativo es cargado por el gestor de arranque.

