En informática , el arranque es el proceso de poner en marcha una computadora a través de hardware , como un botón en la computadora, o mediante un comando de software . Después de encenderla, la unidad central de procesamiento (CPU) de una computadora no tiene software en su memoria principal , por lo que algún proceso debe cargar software en la memoria antes de poder ejecutarse. Esto puede hacerse mediante hardware o firmware en la CPU, o mediante un procesador independiente en el sistema informático.
El reinicio de una computadora también se denomina reinicio , que puede ser "duro", por ejemplo, después de que la energía eléctrica de la CPU pasa de estar apagada a estar encendida, o "suave", donde la energía no se corta. En algunos sistemas, un arranque suave puede, opcionalmente, borrar la RAM a cero. Tanto el arranque duro como el suave pueden iniciarse por hardware, como al presionar un botón, o por un comando de software. El arranque se completa cuando se alcanza el sistema operativo en tiempo de ejecución , generalmente el sistema operativo y algunas aplicaciones, [nb 1] .
El proceso de recuperación de un ordenador desde un estado de suspensión no implica el arranque; sin embargo, la recuperación desde un estado de hibernación sí lo implica. Como mínimo, algunos sistemas integrados no requieren una secuencia de arranque notable para empezar a funcionar y, cuando se encienden, pueden simplemente ejecutar programas operativos que están almacenados en la ROM. Todos los sistemas informáticos son máquinas de estados 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 arranque también puede cargar un programa de volcado de almacenamiento para diagnosticar problemas en un sistema operativo.
Boot es la abreviatura de bootstrap [1] [2] o bootstrap load y deriva de la frase " pull oneself up by one's bootstraps" (salir adelante por sí mismo con las propias fuerzas) . [3] [4] El uso llama la atención sobre el requisito de que, si la mayor parte 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. [5] 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 en la capacidad de la ROM ha permitido que se implementen procedimientos de inicio cada vez más elaborados.
Existen muchos métodos diferentes para cargar un programa inicial breve en una computadora. Estos métodos van desde la entrada física simple hasta medios extraíbles que pueden contener programas más complejos.
Las primeras computadoras de los años 1940 y 1950 eran proyectos de ingeniería únicos que podían llevar semanas de programación y la carga de programas era uno de los muchos problemas que había que resolver. Una de las primeras computadoras, la ENIAC , no tenía programas almacenados en la memoria, sino que estaba configurada para cada problema mediante una configuración de cables de interconexión. El arranque no se aplicaba a la ENIAC, cuya configuración de hardware estaba lista para resolver problemas tan pronto como se aplicaba la energía.
El sistema EDSAC , el segundo ordenador con programa almacenado que se construyó, utilizaba interruptores de paso para transferir un programa fijo a la memoria cuando se pulsaba su botón de inicio. El programa almacenado en este dispositivo, que David Wheeler completó a finales de 1948, cargaba más instrucciones desde una cinta perforada y luego las ejecutaba. [6] [7]
Los primeros ordenadores programables para su venta comercial, como el UNIVAC I y el IBM 701 [8], incluían características para simplificar su funcionamiento. Normalmente incluían instrucciones que realizaban una operación completa de entrada o salida. La misma lógica de hardware podía utilizarse 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 único botón. Este concepto de arranque recibió diversos nombres para los ordenadores IBM de los años 1950 y principios de los 1960, pero IBM utilizó el término "Carga inicial del programa" con el IBM 7030 Stretch [9] y más tarde lo utilizó para sus líneas de mainframe, empezando por el System/360 en 1964.
El ordenador IBM 701 (1952-1956) tenía un botón de "Cargar" que iniciaba 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, dependiendo de la posición del interruptor de selección de carga. La media palabra de 18 bits de la izquierda se ejecutaba entonces como una instrucción, que normalmente leía palabras adicionales en la memoria. [10] [11] 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. El IBM 704 , [12] IBM 7090 , [13] e IBM 7094 [14] tenían mecanismos similares, pero con diferentes botones de carga para diferentes dispositivos. El término "arranque" se ha utilizado en este sentido desde al menos 1958. [15]
Otras computadoras IBM de esa época tenían características similares. Por ejemplo, el sistema IBM 1401 (c. 1958) utilizaba 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 posiciones de memoria 001 a 080, luego la computadora se dirigía a la posición de memoria 001 para leer su primera instrucción almacenada. Esta instrucción era siempre la misma: mover la información en estas primeras 80 posiciones de memoria a un área de ensamblaje donde la información en las tarjetas perforadas 2, 3, 4, etc., se podía combinar para formar el programa almacenado. Una vez que esta información se movía al área de ensamblaje, la máquina se dirigía a una instrucción en la posició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. Así, al poner los interruptores en 7004000400 y presionar el botón apropiado, se leí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. [16] Los 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 esa transferencia termina, la CPU salta a la dirección 00101. [17]
Los competidores de IBM también ofrecían cargar programas con un solo botón.
Una notable variación de esto se encuentra en el Burroughs B1700 , donde no hay una ROM de arranque ni una operación de IPL cableada. En cambio, después de que el sistema se reinicia, lee y ejecuta microinstrucciones secuencialmente desde una unidad de cinta de casete montada en el panel frontal; esto configura un cargador de arranque en RAM que luego se ejecuta. [21] Sin embargo, dado que esto hace pocas suposiciones sobre el sistema, también se puede utilizar 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. [21]
En IBM System/360 y sus sucesores, incluidas las máquinas z/Architecture actuales , el proceso de arranque se conoce como Carga inicial del programa (IPL).
IBM acuñó este término para el 7030 (Stretch) , [9] lo revivió para el diseño del System/360 y continúa usándolo en esos entornos hoy en día. [22] 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 [nb 2] ) seguido de presionar el botón LOAD . En los modelos System/360 de gama alta , la mayoría [nb 3] System/370 y algunos sistemas posteriores, las funciones de los interruptores y el botón LOAD se simulan utilizando áreas seleccionables en la pantalla de una consola gráfica, a menudo [nb 4] un dispositivo similar al IBM 2250 o al IBM 3270 . Por ejemplo, en el System/370 Modelo 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 ingresó en el área de entrada. Las CPU Amdahl 470V/6 y 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 admitiría más de 16 canales.
La función IPL en el System/360 y sus sucesores anteriores a IBM Z , y sus compatibles como el de Amdahl, lee 24 bytes desde un dispositivo especificado por el operador en el almacenamiento principal comenzando en 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 primera CCW siempre es simulada por la CPU y consiste en un comando Read IPL, 02h , con encadenamiento de comandos y supresión de 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 esa PSW. [22] El dispositivo IPL es normalmente una unidad de disco, de ahí la especial importancia del comando de tipo lectura 02h , pero también se utiliza exactamente el mismo procedimiento para IPL desde otros dispositivos de tipo entrada, como unidades de cinta o incluso lectores de tarjetas, de una 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 , cabezal 0000h , simulando un comando Seek de cilindro y cabezal, 07h , y que busque el registro 01h , simulando un comando Search ID Equal, 31h ; las búsquedas no son simuladas por los controladores de cinta y tarjeta, ya que para estas clases de dispositivos un comando Read IPL es simplemente un comando de lectura secuencial.
El disco, la cinta o la unidad de tarjetas debe 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, el "Texto IPL" se coloca en el disco mediante el programa DASDI (Inicialización de dispositivo de almacenamiento de acceso directo) independiente o un programa equivalente que se ejecuta en un sistema operativo, por ejemplo, ICKDSF, pero las cintas y unidades de tarjetas compatibles con IPL generalmente se distribuyen con este "Texto 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 añadiendo un nuevo tipo de IPL para z/Architecture.
Las minicomputadoras , comenzando con las PDP-5 y PDP-8 (1965) de Digital Equipment Corporation (DEC), simplificaron el diseño al utilizar 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 generalmente tenían alguna forma de alternar en programas cortos manipulando una matriz 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 causaba un bucle que sobrescribía toda la memoria.
Otras minicomputadoras con una forma tan simple de arranque incluyen la serie HP 2100 de Hewlett-Packard (mediados de la década de 1960), la Data General Nova original (1969) y las PDP-4 (1962) y PDP-11 (1970) de DEC.
Como las operaciones de E/S necesarias para provocar una operación de lectura en un dispositivo de E/S de minicomputadora normalmente eran diferentes para los distintos controladores de dispositivos, se necesitaban distintos programas de arranque para los distintos dispositivos.
Más tarde, en 1971, DEC añadió una memoria opcional de sólo lectura con matriz de diodos 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 matriz de 32 por 16 diodos semiconductores. Con los 512 diodos en su lugar, la memoria contenía todos los bits "uno"; la tarjeta se programaba cortando cada diodo cuyo bit iba a ser "cero". DEC también vendió versiones de la tarjeta, la serie BM792-Yx, preprogramadas para muchos dispositivos de entrada estándar simplemente omitiendo los diodos innecesarios. [23] [24]
Siguiendo el enfoque anterior, el PDP-1 anterior tiene un cargador de hardware, de modo que un operador solo necesita presionar el interruptor de "carga" para indicarle al lector de cinta de papel que cargue un programa directamente en la memoria central. Los sucesores del PDP-4 , PDP- 7 [25] PDP-9 [26] y PDP -15 [27], tienen un botón Read-In agregado para leer un programa desde la cinta de papel y saltar a él. El Data General Supernova usó interruptores del panel frontal para hacer que la computadora cargara automáticamente instrucciones en la memoria desde un dispositivo especificado por los interruptores de datos del panel frontal y luego saltara al código cargado. [28]
En una minicomputadora con un lector de cinta 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 podía leer cinta de papel con suma de comprobación o el sistema operativo desde un medio de almacenamiento externo. El pseudocódigo para el cargador de arranque podría ser tan simple como las siguientes ocho instrucciones:
Un ejemplo relacionado se basa en un cargador para una minicomputadora Nicolet Instrument Corporation de la década de 1970, que utiliza la unidad de perforación y lectura de cinta de papel de un teleimpresor Teletype Model 33 ASR . Los bytes de su cargador de segunda etapa se leen de la cinta de papel en orden inverso.
La longitud del cargador de segunda etapa es tal que el byte final sobrescribe la posición 7. Después de que se ejecuta la instrucción en la posición 6, la posición 7 inicia la ejecución del cargador de segunda etapa. El cargador de segunda etapa espera entonces 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 detectar errores de lectura de la cinta de papel, una ocurrencia frecuente con hardware de "trabajo a tiempo parcial" de costo relativamente bajo, como el Teletype Model 33 ASR. (Las máquinas de flexografía Friden eran mucho más confiables, pero también comparativamente costosas).
Los primeros microordenadores, como el Altair 8800 (lanzado 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. [29] Cuando se encendía, la CPU veía memoria que contenía datos aleatorios. Los paneles frontales de estas máquinas llevaban interruptores de palanca para introducir direcciones y datos, un interruptor por bit de la palabra de memoria de la computadora y bus de direcciones. Sencillas adiciones al hardware permitían cargar una ubicación de memoria a la vez desde esos interruptores para almacenar el código de arranque. Mientras tanto, se impedía que la CPU intentara ejecutar el contenido de la memoria. Una vez cargado correctamente, la CPU podía ejecutar el código de arranque. Este proceso, similar al utilizado para varios miniordenadores anteriores, era tedioso y tenía que estar libre de errores. [30]
La introducción de la memoria de solo lectura (ROM) de circuitos integrados, con sus numerosas variantes, incluidas las ROM programadas por 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 la ROM. Esto permitió que los programas de arranque de firmware se incluyeran como parte de la computadora.
Los modelos 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. [28] Digital Equipment Corporation introdujo las memorias ROM basadas en circuitos integrados BM873 (1974), [31] M9301 (1977), [32] M9312 (1978), [33] REV11-A y REV11-C, [34] MRV11-C, [35] y MRV11-D [36] , todas utilizables como ROM de arranque. Los modelos PDP-11/34 (1976), [37] PDP-11/60 (1977), [38] PDP-11/24 (1979), [39] y la mayoría de los modelos posteriores incluyen módulos ROM de arranque.
Un ordenador de conmutación telefónica italiano, llamado "Gruppi Speciali", patentado en 1975 por Alberto Ciaramella , un investigador del CSELT , [40] incluía una ROM (externa). Gruppi Speciali fue, a partir de 1975, una máquina que arrancaba el sistema operativo con un solo botón desde una memoria ROM compuesta de semiconductores, no de núcleos de ferrita. Aunque el dispositivo ROM no estaba integrado de forma nativa en el ordenador de Gruppi Speciali, debido al diseño de la máquina, también permitía el arranque con un solo botón de ROM en máquinas no diseñadas para eso (por lo tanto, este "dispositivo de arranque" era independiente de la arquitectura), por ejemplo, el PDP-11. También se almacenaba el estado de la máquina después del apagado, lo que era otra característica crítica en la competición de conmutación telefónica. [41]
Algunas minicomputadoras y superminicomputadoras incluyen un procesador de consola independiente que arranca el procesador principal. La PDP-11/44 tenía un Intel 8085 como procesador de consola; [42] la VAX-11/780 , el primer miembro de la línea VAX de superminicomputadoras de 32 bits de Digital, tenía un procesador de consola basado en LSI-11 , [43] y la VAX-11/730 tenía un procesador de consola basado en 8085. [44] Estos procesadores de consola podían arrancar 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 el microcódigo de la CPU. [45]
Por lo general, un microprocesador, después de una condición de reinicio o encendido, realizará un proceso de inicio que generalmente toma la forma de "iniciar la ejecución del código que se encuentra comenzando en una dirección específica" o "buscar un código multibyte en una dirección específica y saltar a la ubicación indicada para comenzar la ejecución". Un sistema construido utilizando ese microprocesador tendrá la ROM permanente ocupando estas ubicaciones especiales de modo que el sistema siempre comience a funcionar sin asistencia del operador. Por ejemplo, los procesadores Intel x86 siempre comienzan ejecutando las instrucciones que comienzan en F000:FFF0, [46] [47] 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. [48]
El primer ordenador de Apple Computer , el Apple 1 , presentado en 1976, incorporaba chips PROM que eliminaban la necesidad de un panel frontal para el proceso de arranque (como era el caso del Altair 8800) en un ordenador comercial. Según el anuncio de Apple que lo anunciaba, "No más interruptores, no más luces... el firmware en PROMS permite introducir, visualizar y depurar programas (todo en hexadecimal) desde el teclado". [49]
Debido al costo de la memoria de solo lectura en ese momento, el Apple II iniciaba sus sistemas operativos de disco utilizando 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. (Ver 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 personalizados de protección contra copias de disco. (Ver Cracking de software: Historia ).
Algunos sistemas operativos, en particular los sistemas Macintosh de Apple anteriores a 1995 , están tan estrechamente entrelazados con su hardware que es imposible arrancar de forma nativa un sistema operativo distinto del estándar. Este es el extremo opuesto del escenario que utiliza los conmutadores mencionados anteriormente; es muy inflexible pero relativamente a prueba de errores y a prueba de errores siempre que todo el hardware funcione con normalidad. Una solución habitual en estas situaciones es diseñar un cargador 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 de Unix A/UX y copiada por varios sistemas operativos freeware y BeOS Personal Edition 5 .
Algunas máquinas, como la microcomputadora Atari ST , eran de "encendido instantáneo", con el sistema operativo ejecutándose desde una ROM . De esta manera, la recuperación del sistema operativo desde una memoria secundaria o terciaria fue eliminada como una de las operaciones características del arranque. Para permitir que las personalizaciones del sistema, los accesorios y otro software de soporte se cargaran automáticamente, la unidad de disquete de Atari se leía en busca de componentes adicionales durante el proceso de arranque. Había un retraso de tiempo de espera que proporcionaba tiempo para insertar manualmente un disquete mientras el sistema buscaba los componentes adicionales. Esto se podía evitar insertando un disco en blanco. El hardware de Atari ST también fue diseñado para que la ranura del cartucho pudiera proporcionar la ejecución nativa del programa para fines de juego como un remanente del legado de Atari de hacer juegos electrónicos; al insertar el cartucho Spectre GCR con la ROM del sistema Macintosh en la ranura del juego y encender el Atari, podía "arrancar de forma nativa" el sistema operativo Macintosh en lugar del propio TOS de Atari .
La IBM Personal Computer incluía un firmware basado en ROM llamado BIOS ; una de las funciones de ese firmware era realizar una prueba automática de encendido cuando se encendía la máquina y luego leer el software de un dispositivo de arranque y ejecutarlo. El firmware compatible con el BIOS en la IBM Personal Computer se utiliza en computadoras compatibles con IBM PC . La UEFI fue desarrollada 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 Macs que usan procesadores Intel .
Las estaciones de trabajo Unix originalmente tenían un firmware basado en ROM específico del proveedor. Sun Microsystems desarrolló posteriormente OpenBoot , más tarde conocido como Open Firmware, que incorporaba un intérprete Forth , y gran parte del firmware se escribía en Forth. Fue estandarizado por el IEEE como estándar IEEE 1275-1994; el firmware que implementa ese estándar se utilizó en Macs basados en PowerPC y 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 x86 de SGI Visual Workstation .
Cuando se apaga una computadora, su software, incluidos los sistemas operativos, el código de aplicación y los datos, permanece almacenado en la memoria no volátil . Cuando se enciende la computadora, normalmente no tiene un sistema operativo ni 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 más tarde EEPROM , flash NOR ) que admite la ejecución en el lugar , para inicializar la CPU y la placa base, para inicializar la DRAM (especialmente en sistemas x86), para acceder al dispositivo no volátil (generalmente un dispositivo direccionado por bloques, por ejemplo, flash NAND, SSD) o dispositivos desde los cuales los programas y datos del sistema operativo se pueden cargar en la RAM; además, este programa puede inicializar dispositivos de visualización (como GPU ), dispositivos de entrada de texto (como el teclado ) y dispositivos de entrada de puntero (como el mouse ).
El pequeño programa que inicia esta secuencia se conoce como cargador de arranque , bootstrap o gestor de arranque . A menudo se utilizan cargadores de arranque de varias etapas, durante los cuales se cargan varios programas de complejidad creciente 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, pueden 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 indicarle a la CPU las instrucciones e iniciar su ejecución. Estas instrucciones generalmente inician una operación de entrada desde algún dispositivo periférico (que puede ser seleccionable por el operador mediante un interruptor). Otros sistemas pueden enviar comandos de hardware directamente a dispositivos periféricos o controladores de E/S que hacen que se realice 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; luego, 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.
Los ordenadores más pequeños suelen utilizar mecanismos de arranque menos flexibles pero más automáticos para garantizar que el ordenador se inicie rápidamente y con una configuración de software predeterminada. En muchos ordenadores de sobremesa, por ejemplo, el proceso de arranque comienza con la CPU ejecutando el software contenido en la ROM (por ejemplo, la BIOS de un IBM PC ) en una dirección predefinida (algunas CPU, incluidas las de la serie Intel x86 , están diseñadas para ejecutar este software tras el reinicio 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 (más habitualmente el sector de arranque ) del dispositivo más prometedor, normalmente empezando 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 IBM PC y compatibles, el código de arranque debe caber en el Registro de arranque maestro (MBR) y el Registro de arranque 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 IPL, por ejemplo, tamaño de la tarjeta , tamaño de la pista.
En sistemas con esas restricciones, el primer programa cargado en la RAM puede no ser lo suficientemente grande como para cargar el sistema operativo y, en su lugar, debe cargar otro programa más grande. El primer programa cargado en la RAM se denomina cargador de arranque de primera etapa, y el programa que carga se denomina cargador de arranque de segunda etapa. En muchas CPU integradas, la ROM de arranque integrada de la CPU , a veces denominada cargador de arranque de etapa cero, [50] puede encontrar y cargar cargadores de arranque de primera etapa.
Entre los ejemplos de cargadores de arranque de primera etapa (etapa de inicialización de hardware) se incluyen BIOS , UEFI , coreboot , Libreboot y Das U-Boot . En la IBM PC, el cargador de arranque en el Master Boot Record (MBR) y el Partition Boot Record (PBR) se codificó para requerir al menos 32 KB [51] [52] ( posteriormente ampliado a 64 KB [53] ) de memoria del sistema y solo usar instrucciones compatibles con los procesadores 8088/8086 originales .
Los cargadores de arranque de segunda etapa (etapa de inicialización del SO), como shim, [54] GNU GRUB , rEFInd , BOOTMGR , Syslinux , NTLDR y iBoot , no son en sí mismos sistemas operativos, pero pueden cargar un sistema operativo correctamente y transferirle la ejecución; el sistema operativo posteriormente se inicializa a sí mismo y puede cargar controladores de dispositivos adicionales . El cargador de arranque de segunda etapa no necesita controladores para su propio funcionamiento, pero puede utilizar en su lugar métodos de acceso de almacenamiento genéricos proporcionados por el firmware del sistema, como el BIOS, UEFI u Open Firmware , aunque normalmente con funcionalidad de hardware restringida y menor rendimiento. [55]
Muchos cargadores de arranque (como GNU GRUB, rEFInd, BOOTMGR de Windows, Syslinux y NTLDR de Windows NT/2000/XP) pueden configurarse para ofrecer 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 modo de rescate o seguro ) y algunos programas independientes que pueden funcionar sin un sistema operativo, como comprobadores de memoria (por ejemplo, memtest86+ ), un shell básico (como en GNU GRUB) o incluso juegos (consulte Lista de juegos de PC Booter ). [56] Algunos cargadores de arranque también pueden cargar otros cargadores de arranque; por ejemplo, GRUB carga BOOTMGR en lugar de cargar Windows directamente. Normalmente se preselecciona una opción predeterminada con un retraso de tiempo durante el cual el usuario puede pulsar una tecla para cambiar la opción; después de este retraso, la opción predeterminada se ejecuta automáticamente para que el arranque normal pueda ocurrir sin interacción.
El proceso de arranque puede considerarse 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 para que se inicie un televisor digital o un dispositivo de navegación GPS es generalmente inaceptable. Por lo tanto, estos dispositivos tienen sistemas de software en la memoria ROM o flash para que el dispositivo pueda comenzar a funcionar inmediatamente; se necesita poca o ninguna carga, porque la carga se puede calcular previamente y almacenar en la ROM cuando se fabrica el dispositivo. [ cita requerida ]
Los sistemas grandes y complejos pueden tener procedimientos de arranque que se llevan a cabo 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 ni se detuvieran, un cargador de arranque puede 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 luego finaliza normalmente como lo haría cualquier otro proceso.
La mayoría de las computadoras también pueden arrancar 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 del mismo se transfieren al cliente mediante un protocolo simple como el Protocolo trivial de transferencia de archivos (TFTP). Una vez que se han transferido 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 en red comienza utilizando métodos de acceso a red genéricos proporcionados por la ROM de arranque de la interfaz de red, que normalmente contiene una imagen de entorno de ejecución de prearranque (PXE). No se requieren controladores, pero la funcionalidad del sistema está limitada hasta que se transfieran e inicien el núcleo y los controladores del sistema operativo. Como resultado, una vez que se ha completado el arranque basado en ROM, es totalmente posible arrancar en red un sistema operativo que no tiene la capacidad de utilizar la interfaz de red.
El dispositivo de arranque es el dispositivo de almacenamiento 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 del 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 USB , lector de tarjetas de memoria , unidad de disco duro USB, unidad de disco óptico USB, unidad de estado sólido 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 arranque está configurado como "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 ningún 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 configurar el orden de arranque al indicado 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 autoprueba 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 iniciar seleccionándolo desde un menú de administrador de arranque en el dispositivo seleccionado, usando el teclado de la computadora para seleccionar desde un menú de arranque BIOS o UEFI , o ambos; el menú de arranque generalmente se ingresa presionando las teclas o durante la POST; la configuración de la BIOS generalmente se ingresa presionando las teclas o durante la POST. [57] [58]F8F12F2DEL
Hay varios dispositivos disponibles que permiten al usuario iniciar rápidamente lo que suele ser una variante de Linux para diversas tareas simples, como el acceso a Internet; algunos ejemplos son Splashtop y Latitude ON . [59] [60] [61]
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 procesadores x86 de 16 bits [62] y FFFFFFF0h en procesadores x86 de 32 bits y 64 bits [63] [64] ), generalmente apuntando al punto de entrada del firmware ( UEFI o BIOS ) dentro de la ROM. Esta ubicación de memoria generalmente 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 verificar e inicializar los dispositivos requeridos, como la memoria principal ( DRAM ), el bus PCI y los dispositivos PCI (incluidas las ROM opcionales integradas en ejecución ). Uno de los pasos más complejos es configurar la 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 ) recorre una lista preconfigurada de dispositivos de almacenamiento no volátiles ("secuencia de dispositivos de arranque") hasta que encuentra uno que sea arrancable.
Una vez que el BIOS ha encontrado un dispositivo de arranque, carga el sector de arranque en la dirección lineal 7C00h (normalmente segmento : desplazamiento 0000h : 7C00h , [51] [53] : 29, pero algunos BIOS utilizan erróneamente 07C0h : 0000h [ cita requerida ] ) y transfiere la ejecución al código de arranque. En el caso de un disco duro, esto se conoce como Registro de arranque maestro (MBR). El código MBR convencional comprueba la tabla de particiones del MBR en busca de una partición configurada como de arranque [nb 5] (la que tiene activa la bandera). 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 Registro de arranque de volumen (VBR), y lo ejecuta. El código de arranque MBR suele ser específico del sistema operativo.
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 , [nb 6] que se encuentra como secuencia de bytes 55h , AAh en el disco (también conocida como la firma de arranque MBR ), o donde se establece de otra manera que el código dentro del sector es ejecutable en PC x86.
El código del 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 arranque maestro para dejar espacio para la tabla de particiones predeterminada de 64 bytes con cuatro entradas de partición y la firma de arranque de dos bytes , que el BIOS requiere para un cargador de arranque adecuado, o incluso menos, cuando también se deben admitir 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 cargadores de arranque múltiples especiales en algunos entornos. En los registros de arranque de volumen de disquetes y superdisquetes , hasta 59 bytes están ocupados para el bloque de parámetros BIOS extendidos en volúmenes FAT12 y FAT16 desde DOS 4.0, mientras que el EBPB FAT32 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 estar ubicado en una posición fija en el directorio raíz del sistema de archivos y almacenado como sectores consecutivos, [65] [66] condiciones atendidas por el comando y ligeramente relajadas en versiones posteriores de DOS. [66] [nb 7] El cargador de arranque pudo entonces cargar los primeros tres sectores del archivo en la memoria, que contenía otro cargador de arranque integrado capaz de cargar el resto del archivo en la memoria. [66] Cuando Microsoft añadió soporte para LBA y FAT32, incluso cambiaron a un cargador de arranque que alcanzaba más de dos sectores físicos y usaba 386 instrucciones por razones de tamaño. Al mismo tiempo, otros proveedores lograron comprimir mucha más funcionalidad en un solo sector de arranque sin relajar las restricciones originales sobre la memoria mínima disponible (32 KB) y el soporte del procesador (8088/8086). [nb 8] Por ejemplo, los sectores de arranque 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. [67] [51] [68] [69] [70] [nb 9] [nb 8]SYS
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 cargador de arranque carga el núcleo del sistema operativo desde el dispositivo de almacenamiento.
Si no hay ninguna partición activa, o el sector de arranque de la partición activa no es válido, el MBR puede cargar un cargador de arranque secundario que seleccionará una partición (a menudo a través de la entrada del usuario) y cargará su sector de arranque, que normalmente carga el núcleo 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 del BIOS INT 18h [53] [51] (seguida de una INT 19h en caso de que INT 18h regrese) para devolver el control al BIOS, que luego intentará arrancar desde otros dispositivos e intentará un arranque remoto a través de la red. [51]
Muchos sistemas modernos ( Mac Intel y PC más nuevos ) utilizan UEFI . [71] [72]
A diferencia del BIOS, UEFI (no el arranque heredado a través de CSM) no depende de sectores de arranque, el sistema UEFI carga el cargador de arranque ( archivo de aplicación EFI en el disco USB o en la partición del sistema EFI ) directamente, [73] y el kernel del sistema operativo es cargado por el cargador de arranque.
Muchas CPU, SoC y microcontroladores modernos (por ejemplo, TI OMAP ) o, a veces, incluso procesadores de señales digitales (DSP) pueden tener ROM de arranque integrada directamente en su silicio, por lo que un procesador de este tipo 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 necesaria para manejar tales dispositivos, por lo que en tales escenarios se utiliza 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 en serie como UART , SPI , USB , etc. Esta característica se utiliza a menudo para fines de recuperación del sistema, o también podría usarse para la programación inicial de 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 unidades flash USB ) tienen ROM de firmware integrada directamente en su silicio.
Algunos diseños de sistemas integrados también pueden incluir un paso de secuencia de arranque intermedio. Por ejemplo, Das U-Boot puede dividirse en dos etapas: la plataforma cargaría un pequeño SPL (Secondary Program Loader), que es una versión simplificada de U-Boot, y el SPL realizaría una configuración inicial del hardware (por ejemplo, inicialización de DRAM utilizando la caché de la CPU como RAM) y cargaría la versión más grande y con todas las funciones de U-Boot. [74] Algunas CPU y SoC pueden no utilizar la caché de la CPU como RAM en el proceso de arranque, sino que utilizan un procesador de arranque integrado para realizar una parte de la configuración del hardware, para reducir los costos. [75]
También es posible tomar el control de un sistema mediante una interfaz de depuración de hardware como JTAG . Dicha interfaz se puede utilizar para escribir el programa de cargador de arranque en una 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 utilizar para cargar algún código de diagnóstico o de arranque en la RAM y luego iniciar el núcleo del procesador y darle instrucciones para 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 [actualizar]). [ cita requerida ]
Algunos microcontroladores proporcionan interfaces de hardware especiales que no se pueden utilizar para tomar el control arbitrario de un sistema o ejecutar código directamente, sino que permiten la inserción de código de arranque en una memoria no volátil de arranque (como la 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 de reiniciar el sistema, el microcontrolador comienza a ejecutar código programado en su memoria no volátil, al igual que los procesadores habituales utilizan ROM para el arranque. Esta técnica es utilizada en particular por los microcontroladores Atmel AVR y por otros también. En muchos casos, dichas interfaces se implementan mediante lógica cableada. En otros casos, dichas interfaces podrían crearse mediante 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 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 se dedica únicamente a tareas de procesamiento de señales. En tales sistemas, el DSP podría ser iniciado por otro procesador, que a veces se denomina procesador host (que da nombre a un puerto host). A este procesador también se lo denomina a veces maestro , ya que generalmente se inicia primero desde sus propias memorias y luego controla el comportamiento general del sistema, incluido el arranque del DSP y luego controla aún más el comportamiento del DSP. El DSP a menudo carece de sus propias memorias de arranque y depende del procesador host para proporcionar el código requerido. Los sistemas más notables con este diseño son los teléfonos celulares, los módems, los reproductores de audio y video, etc., donde coexisten un DSP y una CPU/microcontrolador.
Muchos chips FPGA cargan su configuración desde una EEPROM serial externa ("ROM de configuración") al encenderse.
Se han implementado varias medidas que mejoran la seguridad del proceso de arranque. Algunas de ellas son obligatorias, mientras que otras pueden ser deshabilitadas o habilitadas por el usuario final . Tradicionalmente, el arranque no implicaba el uso de criptografía . La seguridad se puede eludir desbloqueando el cargador de arranque , que puede o no estar aprobado por el fabricante. Los cargadores de arranque modernos utilizan concurrencia, lo que significa que pueden ejecutar varios núcleos de procesador y subprocesos al mismo tiempo, lo que agrega capas adicionales de complejidad para asegurar el arranque.
Matthew Garrett argumentó que el arranque seguro persigue un objetivo legítimo pero al hacerlo elige valores predeterminados que son hostiles para los usuarios. [76]
Al depurar un sistema de sistemas concurrente y distribuido , un bucle de arranque (también llamado bucle de arranque o bucle de arranque ) es una condición de diagnóstico de un estado erróneo que ocurre en los dispositivos informáticos; cuando esos dispositivos fallan repetidamente en completar el proceso de arranque y se reinician antes de que finalice una secuencia de arranque, un reinicio podría impedir que un usuario acceda a la interfaz normal.
A medida que aumenta la complejidad de los productos actuales, los proyectos individuales, los departamentos individuales o incluso las empresas individuales ya no pueden desarrollar productos totales, lo que provoca un desarrollo simultáneo y distribuido. Hoy y en todo el mundo, las industrias se enfrentan al desarrollo complejo de productos y a su amplia gama de problemas asociados, relacionados con la organización del proyecto, el control del proyecto y la calidad del producto. Muchos procesos también se distribuirán. El proceso de detección de defectos, tan importante para medir y, en última instancia, lograr la calidad del producto, suele ser uno de los primeros en experimentar problemas causados por la naturaleza distribuida del proyecto. La distribución de las actividades de detección de defectos entre varias partes introduce riesgos como la revisión inadecuada de los productos de trabajo, la aparición de "puntos ciegos" con respecto a la cobertura de pruebas o el exceso de pruebas de los componentes. Por lo tanto, se necesita una coordinación de la detección de defectos a lo largo de todo el ciclo de vida para garantizar la eficacia y la eficiencia de las actividades de detección de defectos. —JJM Trienekens; RJ Kusters. (2004) [78]
El sistema podría exhibir su estado erróneo, digamos en un bucle de arranque explícito o una pantalla azul de la muerte , antes de que se indique la recuperación. [79] La detección de un estado erróneo puede requerir un almacén de eventos distribuido y una plataforma de procesamiento de flujo para la operación en tiempo real de un sistema distribuido.
Un estado erróneo puede provocar bucles de arranque; este estado puede ser causado por una configuración incorrecta de operaciones anteriores que se sabía que eran correctas. [a] Los intentos de recuperación desde ese estado erróneo luego ingresan a un reinicio, en un intento de volver a un estado que se sabía que era correcto. En las operaciones del sistema operativo Windows, por ejemplo, el procedimiento de recuperación consistía en reiniciar tres veces, los reinicios necesarios para volver a un menú utilizable. [80] [81] [79]
La recuperación se puede especificar a través del lenguaje de marcado de confirmación de seguridad (SAML), que también puede implementar el inicio de sesión único (SSO) para algunas aplicaciones; en el modelo de seguridad de confianza cero , la identificación, la autorización y la autenticación son cuestiones separables en una sesión SSO. Cuando se indica la recuperación de un sitio (por ejemplo, se muestra una pantalla azul de la muerte en la pantalla de una terminal de aeropuerto), [a] pueden ser necesarias visitas personales al sitio para remediar la situación. [78]
+1FEh
de los sectores de arranque es 55h AAh
, es decir, 55h
en el desplazamiento +1FEh
y AAh
en el desplazamiento +1FFh
. Dado que se debe asumir la representación little-endian en el contexto de las máquinas compatibles con IBM PC , esto se puede escribir como una palabra de 16 bits AA55h
en programas para procesadores x86 (observe el orden intercambiado), mientras que tendría que escribirse como 55AAh
en programas para otras arquitecturas de CPU que utilizan una representación big-endian . Dado que esto se ha mezclado numerosas veces en libros e incluso en documentos de referencia originales de Microsoft, este artículo utiliza la representación en disco byte a byte basada en desplazamiento para evitar cualquier posible interpretación errónea.Dado que el registro CS contiene F000 (especificando así un segmento de código que comienza en la dirección física F0000) y el puntero de instrucción contiene FFF0, el procesador ejecutará su primera instrucción en la dirección física FFFF0H.
Después de RESET, las líneas de dirección A31–20 se activan automáticamente para la obtención de instrucciones. Este hecho, junto con los valores iniciales de CS:IP, hace que la ejecución de la instrucción comience en la dirección física FFFFFFF0H.
La primera instrucción que se obtiene y ejecuta después de un reinicio de hardware se encuentra en la dirección física FFFFFFF0h. Esta dirección está 16 bytes por debajo de la dirección física superior del procesador. La EPROM que contiene el código de inicialización del software debe estar ubicada en esta dirección.
[…]
SYS
ha sido mejorado en
DR DOS 5.0,
por lo que no tiene que preocuparse por dejar el primer clúster libre en un disco que desea convertir en arrancable. Los archivos del sistema DR DOS se pueden ubicar en cualquier parte del disco, por lo que cualquier disco con suficiente espacio libre puede configurarse para arrancar su sistema. […](NB. La fuente atribuye esto a la utilidad SYS mientras que, de hecho, se trata de una característica del cargador de arranque avanzado en el sector de arranque. SYS simplemente coloca este sector en el disco).
[…] El sector de arranque de
DR-DOS
[…] busca el archivo
IBMBIO.COM
(
DRBIOS.SYS
) y luego carga el archivo *completo* en la memoria antes de pasarle el control. […]
[…] El sector de arranque
de DR-DOS
carga todo el archivo
IBMBIO.COM
en la memoria antes de ejecutarlo. No le importa en absoluto el archivo
IBMDOS.COM
, que es cargado por IBMBIO.COM. […] El sector de arranque de DR-DOS […] encontrará los […] archivos del núcleo siempre que estén almacenados lógicamente en el directorio raíz. Su ubicación física en el disco, y si están fragmentados o no, no le importa al sector de arranque de DR-DOS. Por lo tanto, puede simplemente copiar los archivos del núcleo al disco (incluso con un simple
COPY
), y tan pronto como el sector de arranque sea un sector de DR-DOS, los encontrará y los cargará. Por supuesto, es difícil poner todo esto en sólo 512 bytes, el tamaño de un solo sector, pero esto es una mejora importante en cuanto a conveniencia si tiene que configurar un sistema DR-DOS, y también es la clave para que
funcione la utilidad DR-DOS multi-OS
LOADER . Los archivos del núcleo
MS-DOS
deben residir en ubicaciones específicas, pero los archivos DR-DOS pueden estar en cualquier lugar, por lo que no tiene que intercambiarlos físicamente cada vez que inicia el otro sistema operativo. Además, permite actualizar un sistema DR-DOS simplemente copiando los archivos del núcleo sobre los antiguos, sin necesidad de
SYS
, sin procedimientos de configuración difíciles como los requeridos para MS-DOS/
PC DOS
. Incluso puede tener múltiples archivos del núcleo DR-DOS con diferentes nombres de archivo almacenados en la misma unidad, y LOADER cambiará entre ellos de acuerdo con los nombres de archivo enumerados en el archivo
BOOT.LST
. […]
[…] el
DR-DOS
FDISK
no solo particiona un disco, sino que también puede formatear los volúmenes recién creados e inicializar sus sectores de arranque de una sola vez, por lo que no hay riesgo de estropear accidentalmente el volumen equivocado y no hay necesidad de
FORMAT
/S o
SYS
. Después, puede simplemente copiar los archivos DR-DOS restantes, incluidos los archivos del sistema. Es importante saber que, a diferencia de
MS-DOS
/
PC DOS
, DR-DOS tiene sectores de arranque "inteligentes" que realmente "montarán" el sistema de archivos para buscar y cargar los archivos del sistema en el directorio raíz en lugar de esperar que se coloquen en una ubicación determinada. Físicamente, los archivos del sistema pueden ubicarse en cualquier lugar y también pueden fragmentarse. […]