Arrancando
En informática, arranque es el proceso de iniciar una computadora tal como se inicia a través de un hardware, como un botón o un comando de software. Una vez que se enciende, la unidad central de procesamiento (CPU) de una computadora no tiene software en su memoria principal, por lo que algún proceso debe cargar el software en la memoria antes de que pueda ejecutarse. Esto puede hacerse por hardware o firmware en la CPU, o por un procesador separado en el sistema informático.
Reiniciar una computadora también se llama reiniciar, lo que puede ser "difícil", p. después de que la energía eléctrica a la CPU se cambie de apagado a encendido, o "suave", donde no se corta la energía. En algunos sistemas, un arranque suave puede, opcionalmente, borrar la memoria RAM a cero. Tanto el arranque duro como el suave pueden iniciarse mediante hardware, como presionar un botón o mediante un comando de software. El arranque se completa cuando se alcanza el sistema de tiempo de ejecución operativo, normalmente el sistema operativo y algunas aplicaciones.
El proceso de devolver una computadora desde un estado de suspensión (suspensión) no implica el arranque; sin embargo, restaurarlo desde un estado de hibernación sí lo hace. Como mínimo, algunos sistemas integrados no requieren una secuencia de inicio notable para comenzar a funcionar y, cuando se encienden, simplemente pueden ejecutar programas operativos que se almacenan en la ROM. Todos los sistemas informáticos son máquinas de estado, y un reinicio puede ser el único método para volver a un estado cero designado desde un estado bloqueado no deseado.
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 se deriva de la frase to pull oneself up by one's bootstraps. El uso llama la atención sobre el requisito de que, si la mayoría del software se carga en una computadora mediante otro software que ya se está ejecutando en la computadora, debe existir algún mecanismo para cargar el software inicial en la computadora. Las primeras computadoras 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 las computadoras se enviaran 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.
Historia
Hay muchos métodos diferentes disponibles para cargar un programa inicial corto en una computadora. Estos métodos abarcan desde entradas físicas simples hasta medios extraíbles que pueden contener programas más complejos.
Ejemplos de ROM de circuito integrado previo
Primeras computadoras
Las primeras computadoras en las décadas de 1940 y 1950 eran esfuerzos de ingeniería únicos en su tipo que podían tardar semanas en programarse y la carga del programa era uno de los muchos problemas que debían resolverse. Una de las primeras computadoras, ENIAC, no tenía un programa almacenado en la memoria, pero se configuraba para cada problema mediante una configuración de cables de interconexión. Bootstrapping no se aplicó a ENIAC, cuya configuración de hardware estaba lista para resolver problemas tan pronto como se encendía.
El sistema EDSAC, la segunda computadora de programa almacenado que se construyó, usaba interruptores escalonados para transferir un programa fijo a la memoria cuando se presionaba su botón de inicio. El programa almacenado en este dispositivo, que David Wheeler completó a fines de 1948, cargó más instrucciones de la cinta perforada y luego las ejecutó.
Primeras computadoras comerciales
Las primeras computadoras programables de venta comercial, como la UNIVAC I y la IBM 701, incluían funciones para simplificar su funcionamiento. Por lo general, incluían instrucciones que realizaban una operación completa de entrada o salida. La misma lógica de hardware se podía utilizar para cargar el contenido de una tarjeta perforada (las más típicas) u otros medios de entrada, como un tambor magnético o una cinta magnética, que contenían un programa de arranque pulsando un solo botón. Este concepto de arranque recibió una variedad de nombres para las computadoras IBM de la década de 1950 y principios de la de 1960, pero IBM usó el término "Carga de programa inicial" con IBM 7030 Stretch y luego lo utilizó para sus líneas de mainframe, comenzando con System/360 en 1964.
La computadora IBM 701 (1952–1956) tenía un "Carga" botón que inició la lectura de la primera palabra de 36 bits en la memoria principal desde una tarjeta perforada en un lector de tarjetas, una cinta magnética en una unidad de cinta o una unidad de tambor magnético, según la posición del interruptor selector de carga. Luego, la media palabra de 18 bits de la izquierda se ejecutaba como una instrucción, que generalmente lee palabras adicionales en la memoria. A continuación, se ejecutaba el programa de arranque cargado, que, a su vez, cargaba un programa más grande desde ese medio en la memoria sin más ayuda del operador humano. IBM 704, IBM 7090 e IBM 7094 tenían mecanismos similares, pero con diferentes botones de carga para diferentes dispositivos. El término "bota" se ha utilizado en este sentido desde al menos 1958.
Otras computadoras IBM de esa época tenían características similares. Por ejemplo, el sistema IBM 1401 (c. 1958) usaba un lector de tarjetas para cargar un programa desde una tarjeta perforada. Los 80 caracteres almacenados en la tarjeta perforada se leían en las ubicaciones de memoria 001 a 080, luego la computadora se bifurcaba a la ubicación de memoria 001 para leer su primera instrucción almacenada. Esta instrucción era siempre la misma: trasladar la información de estas primeras 80 ubicaciones de memoria a un área de ensamblaje donde la información de las tarjetas perforadas 2, 3, 4, etc., podría combinarse para formar el programa almacenado. Una vez que esta información se movía al área de ensamblaje, la máquina se bifurcaba a una instrucción en la ubicación 080 (leer una tarjeta) y se leía la siguiente tarjeta y se procesaba su información.
Otro ejemplo fue el IBM 650 (1953), una máquina decimal, que tenía un grupo de diez interruptores de 10 posiciones en su panel de operador que eran direccionables como una palabra de memoria (dirección 8000) y podían ejecutarse como una instrucción. Por lo tanto, establecer los interruptores en 7004000400 y presionar el botón apropiado leería la primera tarjeta en el lector de tarjetas en la memoria (código de operación 70), comenzando en la dirección 400 y luego saltando a 400 para comenzar a ejecutar el programa en esa tarjeta. El IBM 7040 y 7044 tienen un mecanismo similar, en el que el botón Cargar hace que se ejecute la instrucción configurada en las teclas de entrada en el panel frontal, y el canal que configura la instrucción recibe un comando para transferir datos a la memoria comenzando en la dirección 00100; cuando finaliza esa transferencia, la CPU salta a la dirección 00101.
Los competidores de IBM también ofrecían la carga del programa con un solo botón.
- El CDC 6600 (c. 1964) tenía un muerto panel con 144 interruptores de toggle; el interruptor de inicio muerto entró 12 palabras de 12 bits de los interruptores de toggle a la memoria del procesador periférico (PP) 0 e inició la secuencia de carga al causar PP 0 para ejecutar el código cargado en memoria. PP 0 carga el código necesario en su propia memoria y luego inicializa los otros PP.
- El GE 645 (c. 1965) tenía un botón "SYSTEM BOOTLOAD" que, cuando se pulsaba, causó que uno de los controladores I/O cargara un programa de 64 palabras en memoria de un diodo sólo lectura y entregar una interrupción para que ese programa empezara a funcionar.
- El primer modelo del PDP-10 tenía un botón "READ IN" que, al presionar, reiniciar el procesador y comenzar una operación de I/O en un dispositivo especificado por interruptores en el panel de control, leyendo en una palabra de 36 bits dando una dirección de destino y contar para lecturas posteriores de palabras; cuando la lectura completa, el procesador comenzó a ejecutar el código leído al saltar a la última palabra leída en.
Una variación notable de esto se encuentra en el Burroughs B1700 donde no hay una ROM de arranque ni una operación IPL cableada. En cambio, después de reiniciar el sistema, lee y ejecuta microinstrucciones secuencialmente desde una unidad de cinta de casete montada en el panel frontal; esto configura un cargador de arranque en la RAM que luego se ejecuta. Sin embargo, dado que esto hace pocas suposiciones sobre el sistema, también puede usarse para cargar cintas de diagnóstico (rutina de prueba de mantenimiento) que muestran un código inteligible en el panel frontal incluso en casos de falla grave de la CPU.
IBM System/360 y sucesores
En IBM System/360 y sus sucesores, incluidas las máquinas z/Architecture actuales, el proceso de arranque se conoce como carga del programa inicial (IPL).
IBM acuñó este término para el 7030 (Stretch), lo revivió para el diseño del System/360 y continúa usándolo en esos entornos en la actualidad. En los procesadores System/360, el operador de la computadora inicia una IPL seleccionando la dirección del dispositivo de tres dígitos hexadecimales (CUU; C=dirección del canal de E/S, UU=unidad de control y dirección del dispositivo) y luego presionando el botón LOAD botón . En los modelos System/360 de gama alta, la mayoría de System/370 y algunos sistemas posteriores, las funciones de los interruptores y el botón LOAD se simulan usando áreas seleccionables en la pantalla de una consola gráfica, a menudo un dispositivo tipo IBM 2250 o un IBM Dispositivo similar al 3270. Por ejemplo, en System/370 Model 158, la secuencia de teclado 0-7-X (cero, siete y X, en ese orden) da como resultado una IPL desde la dirección del dispositivo que se tecló en el área de entrada. El Amdahl 470V/6 y las CPU relacionadas admitían cuatro dígitos hexadecimales en aquellas CPU que tenían instalada la unidad de segundo canal opcional, para un total de 32 canales. Más tarde, IBM también soportaría más de 16 canales.
La función IPL en System/360 y sus sucesores anteriores a IBM Z, y sus compatibles como Amdahl's, lee 24 bytes de un dispositivo especificado por el operador en el almacenamiento principal a partir de la dirección real cero. El segundo y tercer grupo de ocho bytes se tratan como palabras de comando de canal (CCW) para continuar cargando el programa de inicio (la CPU siempre simula el primer CCW y consiste en un comando de lectura de IPL, 02h , con el encadenamiento de comandos y la supresión de la indicación de longitud incorrecta aplicada). Cuando se completan los comandos del canal de E/S, el primer grupo de ocho bytes se carga en la palabra de estado del programa (PSW) del procesador y el programa de inicio comienza a ejecutarse en la ubicación designada por ese PSW. El dispositivo de IPL suele ser una unidad de disco, de ahí la importancia especial del comando de tipo de lectura 02h, pero también se utiliza exactamente el mismo procedimiento para IPL desde otros dispositivos de tipo de entrada, como unidades de cinta, o incluso lectores de tarjetas, de manera independiente del dispositivo, lo que permite, por ejemplo, la instalación de un sistema operativo en una computadora nueva a partir de una cinta magnética de distribución inicial del sistema operativo. Para los controladores de disco, el comando 02h también hace que el dispositivo seleccionado busque el cilindro 0000h, cabeza 0000h, simulando un comando Buscar cilindro y cabezal, 07h, y para buscar registro 01h, simulando un Comando Buscar ID igual, 31h; Las búsquedas y las búsquedas no son simuladas por los controladores de cintas y tarjetas, ya que para estas clases de dispositivos, un comando de lectura de IPL es simplemente un comando de lectura secuencial.
El disco, la cinta o la plataforma de tarjetas deben contener un programa especial para cargar el sistema operativo real o la utilidad independiente en el almacenamiento principal y, para este propósito específico, "Texto IPL" se coloca en el disco mediante el programa independiente DASDI (Inicialización de dispositivo de almacenamiento de acceso directo) o un programa equivalente que se ejecuta en un sistema operativo, por ejemplo, ICKDSF, pero las cintas y cubiertas de tarjetas compatibles con IPL generalmente se distribuyen con este " Texto de IPL" ya presente.
IBM introdujo algunos cambios evolutivos en el proceso de IPL, modificando algunos detalles para System/370 Extended Architecture (S/370-XA) y posteriores, y agregando un nuevo tipo de IPL para z/Architecture.
Miniordenadores
Las minicomputadoras, comenzando con Digital Equipment Corporation (DEC) PDP-5 y PDP-8 (1965), simplificaron el diseño mediante el uso de la CPU para ayudar en las operaciones de entrada y salida. Esto ahorró costos pero hizo que el arranque fuera más complicado que presionar un solo botón. Las minicomputadoras normalmente tenían alguna forma de activar programas cortos mediante la manipulación de una serie de interruptores en el panel frontal. Dado que las primeras minicomputadoras usaban memoria de núcleo magnético, que no perdía su información cuando se cortaba la energía, estos cargadores de arranque permanecerían en su lugar a menos que se borraran. El borrado a veces ocurría accidentalmente cuando un error del programa provocaba un bucle que sobrescribía toda la memoria.
Otras minicomputadoras con una forma de arranque tan simple incluyen la serie HP 2100 de Hewlett-Packard (mediados de la década de 1960), la Data General Nova original (1969) y la PDP-4 de DEC (1962) y PDP-11 (1970).
Como las operaciones de E/S necesarias para generar una operación de lectura en un dispositivo de E/S de una minicomputadora solían ser diferentes para diferentes controladores de dispositivos, se necesitaban diferentes programas de arranque para diferentes dispositivos.
DEC agregó más tarde, en 1971, una memoria de solo lectura de matriz de diodos opcional para el PDP-11 que almacenaba un programa de arranque de hasta 32 palabras (64 bytes). Consistía en una tarjeta de circuito impreso, la M792, que se conectaba al Unibus y contenía una serie de diodos semiconductores de 32 por 16. Con los 512 diodos en su lugar, la memoria contenía todos los "uno" pedacitos; la tarjeta se programó cortando cada diodo cuyo bit debía ser "cero". DEC también vendió versiones de la tarjeta, la serie BM792-Yx, preprogramada para muchos dispositivos de entrada estándar simplemente omitiendo los diodos innecesarios.
Siguiendo el enfoque anterior, el PDP-1 anterior tiene un cargador de hardware, de modo que un operador solo necesita empujar la "carga" interruptor para indicar al lector de cinta de papel que cargue un programa directamente en la memoria central. Los sucesores del PDP-7, PDP-9 y PDP-15 del PDP-4 tienen un botón de lectura adicional para leer un programa desde una cinta de papel y saltar a él. Data General Supernova usó los interruptores del panel frontal para hacer que la computadora cargara automáticamente las instrucciones en la memoria desde un dispositivo especificado por los interruptores de datos del panel frontal y luego saltar al código cargado.
Ejemplos de cargadores de arranque de minicomputadoras tempranas
En una minicomputadora con un lector de cintas de papel, el primer programa que se ejecuta en el proceso de arranque, el cargador de arranque, leería en la memoria central el cargador de arranque de segunda etapa (a menudo llamado cargador binario) que podría leer cintas de papel con suma de verificación o el sistema operativo desde un medio de almacenamiento externo. El pseudocódigo para el cargador de arranque puede ser tan simple como las siguientes ocho instrucciones:
- Establecer el registro P a 9
- Ver el lector de cinta de papel listo
- Si no está listo, saltar a 2
- Lea un byte de lector de cinta de papel a acumulador
- Acumulador de tiendas a domicilio en el registro P
- Si termina la cinta, salta a 9
- Incremento del registro P
- Salta a 2
Un ejemplo relacionado se basa en un cargador para una minicomputadora Nicolet Instrument Corporation de la década de 1970, que utiliza la unidad perforadora de lectura de cinta de papel en una teleimpresora Teletype Model 33 ASR. Los bytes de su cargador de segunda etapa se leen de la cinta de papel en orden inverso.
- Establecer el registro P a 106
- Ver el lector de cinta de papel listo
- Si no está listo, saltar a 2
- Lea un byte de lector de cinta de papel a acumulador
- Acumulador de tiendas a domicilio en el registro P
- Decremento del registro P
- Salta a 2
La longitud del cargador de la segunda etapa es tal que el byte final sobrescribe la ubicación 7. Después de que se ejecuta la instrucción en la ubicación 6, la ubicación 7 inicia la ejecución del cargador de la segunda etapa. El cargador de la segunda etapa luego espera a que la cinta mucho más larga que contiene el sistema operativo se coloque en el lector de cinta. La diferencia entre el cargador de arranque y el cargador de segunda etapa es la adición de un código de verificación para atrapar los errores de lectura de la cinta de papel, una ocurrencia frecuente con un costo relativamente bajo, 'trabajo a tiempo parcial'. hardware, como el Teletipo Modelo 33 ASR. (Los Friden Flexowriters eran mucho más confiables, pero también comparativamente costosos).
Arrancando las primeras microcomputadoras
Las primeras microcomputadoras, como la Altair 8800 (lanzada por primera vez en 1975) y una máquina similar aún anterior (basada en la CPU Intel 8008) no tenían hardware de arranque como tal. Cuando se enciende, la CPU vería una memoria que contendría datos aleatorios. Los paneles frontales de estas máquinas tenían interruptores de palanca para ingresar direcciones y datos, un interruptor por bit de la palabra de memoria de la computadora y el bus de direcciones. Las adiciones simples al hardware permitieron cargar una ubicación de memoria a la vez desde esos conmutadores para almacenar el código de arranque. Mientras tanto, se impidió que la CPU intentara ejecutar el contenido de la memoria. Una vez cargado correctamente, la CPU se habilitó para ejecutar el código de arranque. Este proceso, similar al utilizado para varias minicomputadoras anteriores, era tedioso y tenía que estar libre de errores.
Era de la memoria de solo lectura del circuito integrado
La introducción de la memoria de solo lectura (ROM) de circuito integrado, con sus muchas variantes, incluidas las ROM programadas con máscara, las ROM programables (PROM), las ROM programables borrables (EPROM) y la memoria flash, redujo el tamaño físico y el costo de ROM. Esto permitió que los programas de arranque de firmware se incluyeran como parte de la computadora.
Miniordenadores
El Data General Nova 1200 (1970) y Nova 800 (1971) tenían un interruptor de carga de programa que, en combinación con opciones que proporcionaban dos chips ROM, cargaba un programa en la memoria principal desde esos chips ROM y saltaba a él. Digital Equipment Corporation presentó las memorias ROM BM873 (1974), M9301 (1977), M9312 (1978), REV11-A y REV11-C, MRV11-C y MRV11-D basadas en ROM de circuito integrado, todas utilizables como arranque ROM. El PDP-11/34 (1976), PDP-11/60 (1977), PDP-11/24 (1979) y la mayoría de los modelos posteriores incluyen módulos ROM de arranque.
Una computadora de conmutación telefónica italiana, llamada "Gruppi Speciali", patentada en 1975 por Alberto Ciaramella, investigador del CSELT, incluía una ROM (externa). Gruppi Speciali fue, a partir de 1975, una máquina de un solo botón que arrancaba el sistema operativo desde una memoria ROM compuesta de semiconductores, no de núcleos de ferrita. Aunque el dispositivo ROM no estaba incrustado de forma nativa en la computadora de Gruppi Speciali, debido al diseño de la máquina, también permitía el arranque de la ROM con un solo botón en máquinas no diseñadas para eso (por lo tanto, este "dispositivo de arranque" era independiente de la arquitectura), p. el PDP-11. También existía el almacenamiento del estado de la máquina después del apagado, que fue otra característica crítica en el concurso de cambio de teléfono.
Algunas minicomputadoras y superminicomputadoras incluyen un procesador de consola independiente que arranca el procesador principal. El PDP-11/44 tenía un Intel 8085 como procesador de consola; la VAX-11/780, el primer miembro de la línea de superminicomputadoras de 32 bits VAX de Digital, tenía un procesador de consola basado en LSI-11 y la VAX-11/730 tenía un procesador de consola basado en 8085. Estos procesadores de consola podrían iniciar el procesador principal desde varios dispositivos de almacenamiento.
Algunas otras superminicomputadoras, como la VAX-11/750, implementan funciones de consola, incluida la primera etapa de arranque, en microcódigo de CPU.
Microprocesadores y microordenadores
Normalmente, un microprocesador, después de una condición de reinicio o encendido, realiza un proceso de inicio que generalmente toma la forma de "comenzar la ejecución del código que se encuentra comenzando en una dirección específica" o "busque un código multibyte en una dirección específica y salte a la ubicación indicada para comenzar la ejecución". Un sistema creado con ese microprocesador tendrá la ROM permanente ocupando estas ubicaciones especiales para que el sistema siempre comience a operar sin la asistencia del operador. Por ejemplo, los procesadores Intel x86 siempre comienzan ejecutando las instrucciones que comienzan en F000:FFF0, mientras que para el procesador MOS 6502, la inicialización comienza leyendo una dirección de vector de dos bytes en $FFFD (byte MS) y $FFFC (byte LS) y saltando a esa ubicación para ejecutar el código de arranque.
La primera computadora de Apple Computer, la Apple 1 presentada en 1976, presentaba chips PROM que eliminaban la necesidad de un panel frontal para el proceso de arranque (como era el caso de la Altair 8800) en una computadora comercial. De acuerdo con el anuncio de Apple que anuncia 'No más interruptores, no más luces... el firmware en PROMS le permite ingresar, mostrar y depurar programas (todo en hexadecimal) desde el teclado'.
Debido al gasto de la memoria de solo lectura en ese momento, la serie Apple II arrancó sus sistemas operativos de disco mediante una serie de pasos incrementales muy pequeños, cada uno de los cuales pasaba el control a la siguiente fase del proceso de arranque gradualmente más complejo. (Consulte Apple DOS: cargador de arranque). Debido a que tan poco del sistema operativo de disco dependía de la ROM, el hardware también era extremadamente flexible y admitía una amplia gama de mecanismos de protección de copia de disco personalizados. (Consulte Cracking de software: Historia).
Algunos sistemas operativos, sobre todo los sistemas Macintosh de Apple anteriores a 1995, están tan estrechamente relacionados con su hardware que es imposible iniciar de forma nativa un sistema operativo que no sea el estándar. Este es el extremo opuesto del escenario que usa los interruptores mencionados anteriormente; es muy inflexible pero relativamente a prueba de errores e infalible siempre que todo el hardware funcione normalmente. Una solución común en tales situaciones es diseñar un gestor de arranque que funcione como un programa perteneciente al sistema operativo estándar que secuestra el sistema y carga el sistema operativo alternativo. Esta técnica fue utilizada por Apple para su implementación A/UX Unix y copiada por varios sistemas operativos gratuitos y BeOS Personal Edition 5.
Algunas máquinas, como la microcomputadora Atari ST, eran de "instantáneas", con el sistema operativo ejecutándose desde una ROM. La recuperación del SO desde el almacén secundario o terciario se eliminó así como una de las operaciones características del bootstrapping. Para permitir que las personalizaciones del sistema, los accesorios y otro software de soporte se carguen automáticamente, la unidad de disquete de Atari se leyó en busca de componentes adicionales durante el proceso de arranque. Hubo un retraso en el tiempo de espera que proporcionó tiempo para insertar manualmente un disquete mientras el sistema buscaba los componentes adicionales. Esto podría evitarse insertando un disco en blanco. El hardware de Atari ST también se diseñó para que la ranura del cartucho pudiera proporcionar la ejecución de programas nativos para juegos como un vestigio del legado de Atari en la fabricación de juegos electrónicos; al insertar el cartucho Spectre GCR con la ROM del sistema Macintosh en la ranura del juego y encender el Atari, podría 'arrancar de forma nativa'. el sistema operativo Macintosh en lugar del propio TOS de Atari.
La computadora personal de IBM incluía firmware basado en ROM llamado BIOS; una de las funciones de ese firmware era realizar una autoprueba de encendido cuando la máquina estaba encendida y luego leer el software desde un dispositivo de arranque y ejecutarlo. El firmware compatible con el BIOS en la computadora personal de IBM se utiliza en computadoras compatibles con PC de IBM. El UEFI fue desarrollado por Intel, originalmente para máquinas basadas en Itanium, y luego también se usó como una alternativa al BIOS en máquinas basadas en x86, incluidas las Apple Mac que usan procesadores Intel.
Las estaciones de trabajo Unix originalmente tenían firmware basado en ROM específico del proveedor. Sun Microsystems desarrolló más tarde OpenBoot, más tarde conocido como Open Firmware, que incorporó un intérprete de Forth, con gran parte del firmware escrito en Forth. Fue estandarizado por el IEEE como estándar IEEE 1275-1994; El firmware que implementa ese estándar se usó en Mac basadas en PowerPC y en algunas otras máquinas basadas en PowerPC, así como en las propias computadoras basadas en SPARC de Sun. La especificación Advanced RISC Computing definió otro estándar de firmware, que se implementó en algunas máquinas basadas en MIPS y Alpha y en las estaciones de trabajo basadas en SGI Visual Workstation x86.
Modernos cargadores de arranque
Cuando se apaga una computadora, su software—incluidos los sistemas operativos, el código de la aplicación y los datos—permanece almacenado en la memoria no volátil. Cuando la computadora está encendida, normalmente no tiene un sistema operativo o su cargador en la memoria de acceso aleatorio (RAM). La computadora primero ejecuta un programa relativamente pequeño almacenado en la memoria de solo lectura (ROM, y luego EEPROM, NOR flash) junto con algunos datos necesarios, para inicializar la CPU y la placa base, para inicializar la RAM (especialmente en sistemas x86), para acceder a la memoria no volátil dispositivo (generalmente dispositivo de bloque, por ejemplo, NAND flash) o dispositivos desde los cuales los programas y datos del sistema operativo se pueden cargar en la RAM.
El pequeño programa que inicia esta secuencia se conoce como bootstrap loader, bootstrap o bootloader. A menudo, se utilizan cargadores de arranque de múltiples etapas, durante los cuales varios programas de complejidad creciente se cargan uno tras otro en un proceso de carga en cadena.
Algunos sistemas informáticos anteriores, al recibir una señal de arranque de un operador humano o un dispositivo periférico, podían cargar una cantidad muy pequeña de instrucciones fijas en la memoria en una ubicación específica, inicializar al menos una CPU y luego apuntar la CPU a las instrucciones y comenzar su ejecución. Estas instrucciones normalmente inician una operación de entrada desde algún dispositivo periférico (que el operador puede seleccionar con un interruptor). Otros sistemas pueden enviar comandos de hardware directamente a dispositivos periféricos o controladores de E/S que provocan que se lleve a cabo una operación de entrada extremadamente simple (como "leer el sector cero del dispositivo del sistema en la memoria comenzando en la ubicación 1000")., cargando efectivamente una pequeña cantidad de instrucciones del cargador de arranque en la memoria; entonces se puede usar una señal de finalización del dispositivo de E/S para iniciar la ejecución de las instrucciones por parte de la CPU.
Las computadoras más pequeñas a menudo usan mecanismos de carga de arranque menos flexibles pero más automáticos para garantizar que la computadora se inicie rápidamente y con una configuración de software predeterminada. En muchas computadoras de escritorio, por ejemplo, el proceso de arranque comienza cuando la CPU ejecuta el software contenido en la ROM (por ejemplo, el BIOS de una PC IBM) en una dirección predefinida (algunas CPU, incluida la serie Intel x86, están diseñadas para ejecutar este software). después de reiniciar sin ayuda externa). Este software contiene una funcionalidad rudimentaria para buscar dispositivos aptos para participar en el arranque y cargar un pequeño programa desde una sección especial (por lo general, el sector de arranque) del dispositivo más prometedor, que suele comenzar en un punto de entrada fijo, como el inicio del sector.
Los cargadores de arranque pueden enfrentar restricciones peculiares, especialmente en tamaño; por ejemplo, en la PC IBM y compatibles, el código de inicio debe caber en el Registro de inicio maestro (MBR) y el Registro de inicio de partición (PBR), que a su vez están limitados a un solo sector; en IBM System/360, el tamaño está limitado por el medio de IPL, por ejemplo, el tamaño de la tarjeta, el tamaño de la pista.
En sistemas con esas restricciones, el primer programa cargado en la RAM puede no ser lo suficientemente grande para cargar el sistema operativo y, en su lugar, debe cargar otro programa más grande. El primer programa cargado en la RAM se llama cargador de arranque de primera etapa, y el programa que carga se llama cargador de arranque de segunda etapa.
Cargador de arranque de primera etapa
Los ejemplos de cargadores de arranque de primera etapa (etapa de inicialización de hardware) incluyen BIOS, UEFI, coreboot, Libreboot y Das U-Boot. En la PC de IBM, el cargador de arranque en el Registro de arranque maestro (MBR) y el Registro de arranque de partición (PBR) se codificaron para requerir al menos 32 KB (luego se expandió a 64 KB) de memoria del sistema y solo usar las instrucciones compatibles con el original Procesadores 8088/8086.
Cargador de arranque de segunda etapa
Los cargadores de arranque de segunda etapa (etapa de inicialización del sistema operativo), como GNU GRUB, rEFInd, BOOTMGR, Syslinux, NTLDR o iBoot, no son sistemas operativos en sí mismos, pero pueden cargar un sistema operativo correctamente y transferirle la ejecución; el sistema operativo posteriormente se inicializa y puede cargar controladores de dispositivos adicionales. El cargador de arranque de segunda etapa no necesita controladores para su propio funcionamiento, sino que puede utilizar métodos genéricos de acceso al almacenamiento proporcionados por el firmware del sistema, como BIOS, UEFI o Open Firmware, aunque normalmente con una funcionalidad de hardware restringida y un rendimiento más bajo.
Muchos cargadores de arranque (como GNU GRUB, rEFInd, Windows's BOOTMGR, Syslinux y Windows NT/2000/XP's NTLDR) se pueden configurar para brindarle al usuario múltiples opciones de arranque. Estas opciones pueden incluir diferentes sistemas operativos (para arranque dual o múltiple desde diferentes particiones o unidades), diferentes versiones del mismo sistema operativo (en caso de que una nueva versión tenga problemas inesperados), diferentes opciones de carga del sistema operativo (por ejemplo, arrancar en un modo de rescate o seguro), y algunos programas independientes que pueden funcionar sin un sistema operativo, como probadores de memoria (por ejemplo, memtest86+), un shell básico (como en GNU GRUB) o incluso juegos (consulte la Lista de juegos de PC Booter). Algunos cargadores de arranque también pueden cargar otros cargadores de arranque; por ejemplo, GRUB carga BOOTMGR en lugar de cargar Windows directamente. Por lo general, se preselecciona una opción predeterminada con un retraso de tiempo durante el cual un usuario puede presionar una tecla para cambiar la opción; después de este retraso, la opción predeterminada se ejecuta automáticamente para que pueda realizarse un arranque normal sin interacción.
El proceso de inicio se puede considerar completo cuando la computadora está lista para interactuar con el usuario o el sistema operativo es capaz de ejecutar programas del sistema o programas de aplicación.
Muchos sistemas integrados deben arrancar inmediatamente. Por ejemplo, esperar un minuto a que se encienda un televisor digital o un dispositivo de navegación GPS generalmente es inaceptable. Por lo tanto, dichos dispositivos cuentan con sistemas de software en ROM o memoria flash para que el dispositivo pueda comenzar a funcionar de inmediato; se necesita poca o ninguna carga, porque la carga se puede precalcular y almacenar en la ROM cuando se fabrica el dispositivo.
Los sistemas grandes y complejos pueden tener procedimientos de arranque que se desarrollan en varias fases hasta que finalmente el sistema operativo y otros programas se cargan y están listos para ejecutarse. Debido a que los sistemas operativos están diseñados como si nunca se iniciaran o detuvieran, un cargador de arranque podría cargar el sistema operativo, configurarse como un mero proceso dentro de ese sistema y luego transferir irrevocablemente el control al sistema operativo. El cargador de arranque finaliza normalmente como lo haría cualquier otro proceso.
Arranque de red
La mayoría de las computadoras también pueden iniciarse a través de una red informática. En este escenario, el sistema operativo se almacena en el disco de un servidor y ciertas partes se transfieren al cliente mediante un protocolo simple como el Protocolo trivial de transferencia de archivos (TFTP). Una vez transferidas estas partes, el sistema operativo asume el control del proceso de arranque.
Al igual que con el cargador de arranque de segunda etapa, el arranque de red comienza con métodos genéricos de acceso a la red proporcionados por la ROM de arranque de la interfaz de red, que normalmente contiene una imagen de entorno de ejecución previa al arranque (PXE). No se requieren controladores, pero la funcionalidad del sistema está limitada hasta que el núcleo del sistema operativo y los controladores se transfieran e inicien. Como resultado, una vez que se completa el arranque basado en ROM, es completamente posible arrancar en red en un sistema operativo que no tiene la capacidad de usar la interfaz de red.
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, normalmente una unidad de estado sólido local o una unidad de disco duro a través de 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, ranura para tarjetas SD o multimedia, unidad de disco duro USB, 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 unidades de disquete, unidades Zip y unidades LS-120.
Por lo general, el firmware del sistema (UEFI o BIOS) permitirá al usuario configurar un orden de arranque. Si el orden de inicio se establece en "primero, la unidad de DVD; segundo, la unidad de disco duro", luego el firmware intentará iniciarse desde la unidad de DVD y, si esto falla (por ejemplo, porque no hay DVD en la unidad), intentará iniciarse 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 Live CD de Linux 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 la computadora haya realizado su autocomprobación de encendido (POST). En este ejemplo de arranque dual, el usuario elige insertando o quitando el DVD de la computadora, pero es más común elegir qué sistema operativo arrancar seleccionando desde un menú del administrador de arranque en el dispositivo seleccionado, usando el teclado de la computadora para seleccione desde un menú de inicio 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 el POST.
Hay varios dispositivos disponibles que permiten al usuario realizar un arranque rápido en lo que suele ser una variante de Linux para diversas tareas sencillas, como el acceso a Internet; ejemplos son Splashtop y Latitude ON.
Secuencia de arranque
Al iniciarse, la CPU x86 de una computadora personal compatible con IBM ejecuta en modo real la instrucción ubicada en el vector de reinicio (la dirección de memoria física FFFF0h en 16 -bit x86 y FFFFFFF0h en procesadores x86 de 32 y 64 bits), generalmente apuntando 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 autocomprobación de encendido (POST) para comprobar e inicializar los dispositivos necesarios, como la memoria principal (DRAM), el bus PCI y los dispositivos PCI (incluida la ejecución de ROM opcionales integradas). 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átiles ("secuencia de dispositivos de arranque") hasta que encuentra uno que sea de arranque. Un dispositivo MBR de arranque se define como uno desde el que se puede leer y donde los dos últimos bytes del primer sector contienen la palabra little-endian AA55h, que se encuentra como secuencia de bytes 55h, AAh en el disco (también conocido como la firma de arranque MBR), o donde se establezca 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 (generalmente segment:offset 0000h:7C00h, pero algunas BIOS usan erróneamente 07C0h:0000h) y transfieren ejecución al código de arranque. En el caso de un disco duro, esto se conoce como Master Boot Record (MBR). El código MBR convencional comprueba la tabla de particiones del MBR en busca de una partición establecida como arrancable (la que tiene el indicador activo establecido). Si se encuentra una partición activa, el código MBR carga el código del sector de arranque de esa partición, conocido como Volume Boot Record (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 Registro de inicio maestro para dejar espacio para la tabla de particiones predeterminada de 64 bytes con cuatro entradas de partición y la firma de inicio de dos bytes, que el El BIOS requiere un cargador de arranque adecuado, o incluso menos, cuando las 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), un Advanced Active La partición (18 bytes) o los cargadores especiales de arranque múltiple también deben admitirse en algunos entornos. En registros de arranque de volumen de disquete y superdisquete, se ocupan hasta 59 bytes para el bloque de parámetros de BIOS extendido en volúmenes FAT12 y FAT16 desde DOS 4.0, mientras que 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 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ó compatibilidad con LBA y FAT32, incluso cambiaron a un cargador de arranque que alcanzaba más de 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 ubicar 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 un dispositivo activo. dividir. Luego, el cargador 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, debe emitir una llamada de interrupción de BIOS INT 18h (seguida de una INT 19h en caso de que INT 18h regrese) para devolver el control al BIOS, que luego intentaría arrancar otros dispositivos, intentar una arranque remoto a través de la red.
Muchos sistemas modernos (Mac Intel y PC más nuevos) usan UEFI.
A diferencia del BIOS, UEFI (no el arranque heredado a través de CSM) no depende de los sectores de arranque, el sistema UEFI carga el cargador de arranque (archivo de aplicación EFI en un disco USB o en la partición del sistema EFI) directamente, y el cargador de arranque carga el núcleo del sistema operativo.
Otros tipos de secuencias de arranque
Muchas CPU, SoC y microcontroladores modernos (por ejemplo, TI OMAP) o, a veces, incluso procesadores de señales digitales (DSP) pueden tener una ROM de arranque integrada directamente en su silicio, por lo que dicho procesador puede realizar una secuencia de arranque simple por sí solo y cargar programas de arranque (firmware o software) desde fuentes de arranque como NAND flash o eMMC. Es difícil cablear toda la lógica requerida para manejar dichos dispositivos, por lo que en estos escenarios se usa una ROM de arranque integrada. Además, una ROM de arranque puede cargar un cargador de arranque o un programa de diagnóstico a través de interfaces seriales como UART, SPI, USB, etc. Esta característica se usa a menudo para fines de recuperación del sistema, o también podría usarse para la programación inicial de la memoria no volátil cuando aún no hay software disponible en la memoria no volátil. Muchos microcontroladores modernos (por ejemplo, el controlador de memoria flash en algunas unidades flash USB) tienen una ROM de firmware integrada directamente en su silicio.
Algunos diseños de sistemas integrados también pueden incluir un paso de secuencia de inicio intermedio. Por ejemplo, Das U-Boot se puede dividir en dos etapas: la plataforma cargaría un pequeño SPL (cargador de programas secundario), que es una versión simplificada de U-Boot, y el SPL realizaría una configuración de hardware inicial (p. Inicialización de DRAM utilizando caché de CPU como RAM) y cargue la versión más grande y con todas las funciones de U-Boot.
También es posible tomar el control de un sistema usando una interfaz de depuración de hardware como JTAG. Tal interfaz se puede usar para escribir el programa del cargador de arranque en la memoria no volátil de arranque (por ejemplo, flash) instruyendo al núcleo del procesador para que realice las acciones necesarias para programar la memoria no volátil. Alternativamente, la interfaz de depuración se puede usar para cargar algún código de diagnóstico o de inicio en la RAM y luego iniciar el núcleo del procesador e indicarle que ejecute el código cargado. Esto permite, por ejemplo, la recuperación de sistemas integrados donde no queda software en ningún dispositivo de arranque compatible y donde el procesador no tiene ninguna ROM de arranque integrada. JTAG es una interfaz estándar y popular; muchas CPU, microcontroladores y otros dispositivos se fabrican con interfaces JTAG (a partir de 2009).
Algunos microcontroladores proporcionan interfaces de hardware especiales que no se pueden usar para tomar el control arbitrario de un sistema o ejecutar código directamente, sino que permiten la inserción de código de inicio en una memoria no volátil de inicio (como una memoria flash) a través de protocolos simples. Luego, en la fase de fabricación, dichas interfaces se utilizan para inyectar código de arranque (y posiblemente otro código) en la memoria no volátil. Después del reinicio del sistema, el microcontrolador comienza a ejecutar el código programado en su memoria no volátil, al igual que los procesadores habituales utilizan ROM para arrancar. En particular, esta técnica es utilizada por los microcontroladores Atmel AVR, y también por otros. En muchos casos, dichas interfaces se implementan mediante lógica cableada. En otros casos, dichas interfaces podrían crearse mediante un software que se ejecuta en la ROM de arranque integrada en el chip desde los pines GPIO.
La mayoría de los DSP tienen un arranque en modo serie y un arranque en modo paralelo, como la interfaz del puerto de host (arranque HPI).
En el caso de los DSP, a menudo hay un segundo microprocesador o microcontrolador presente en el diseño del sistema, y este es responsable del comportamiento general del sistema, el manejo de interrupciones, el manejo de eventos externos, la interfaz de usuario, etc. mientras que el DSP está dedicado a la señal. tareas de procesamiento únicamente. En tales sistemas, el DSP podría ser iniciado por otro procesador que a veces se denomina procesador anfitrión (que da nombre a un puerto anfitrión). Dicho procesador también se denomina a veces maestro, ya que generalmente se inicia primero desde sus propias memorias y luego controla el comportamiento general del sistema, incluido el inicio del DSP, y luego controla aún más el DSP. conducta. El DSP a menudo carece de sus propias memorias de arranque y, en su lugar, depende del procesador host para proporcionar el código requerido. Los sistemas más notables con un diseño de este tipo son los teléfonos móviles, los módems, los reproductores de audio y vídeo, etc., en los que coexisten un DSP y una CPU/microcontrolador.
Muchos chips FPGA cargan su configuración desde una EEPROM serial externa ("ROM de configuración") al momento del encendido.
Contenido relacionado
Función recursiva general
Infraestructura de lenguaje común
Ligüística computacional