¿Los gestores de arranque como GRUB y LILO son específicos del hardware?

Sí.

Más concretamente, deben implementarse (o compilarse) en el código de máquina de Computer Architecture (que necesariamente incluye la Instruction Set Architecture (ISA)).

Hay algo de historia aquí que podría ser instructiva.


La primera computadora que aprendí a usar fue una minicomputadora Data General NOVA de 16 bits a principios de la década de 1970. Aquí hay una imagen del panel frontal de la computadora (los dispositivos de E / S (disco, cinta, terminales, impresoras) están en otra parte):

Para iniciarlo después del encendido, uno configura los interruptores del panel frontal al código de dispositivo de E / S de 6 bits del dispositivo de almacenamiento desde el que desea iniciar (por ejemplo, un disco duro o un controlador de cinta magnética, o un lector de tarjetas perforadas), y luego presione, en orden, los interruptores: STOP, RESET y START. Eso provocó que la CPU leyera el primer registro del dispositivo de E / S (por ejemplo, el sector cero (512 bytes) de la primera unidad de disco conectada al controlador de disco especificado) en la RAM comenzando en la dirección cero, y luego configura el contador de programa de la CPU ( PC) a cero, comenzando así la ejecución de cualquier código de máquina que se haya cargado desde el dispositivo de E / S.

Necesariamente, los datos cargados desde el dispositivo de E / S tenían que ser instrucciones de código de máquina y datos para el modelo particular de NOVA que se estaba iniciando, y el código total para el programa de arranque primario (primera etapa) tenía que encajar dentro de ese primer E / S O registro (para un disco, 512 bytes (256 palabras de 16 bits de instrucciones y datos); los arrancadores de cinta magnética podrían ser más grandes ya que los registros de cinta eran variables en función de cada cinta y podrían ser mucho más largos; podría cargar una cinta completa basado en SO de una vez).

Además, el dispositivo de E / S tenía que estar listo para funcionar (paquete de disco extraíble montado y girado, o cinta magnética montada, colocada y colocada en línea (sí, los dispositivos de E / S generalmente tenían un interruptor o botón para conectarse) o desconecte el dispositivo de la CPU, a menudo con una luz indicadora que indica si el dispositivo estaba “en línea” o “fuera de línea”) para ese primer comando de “lectura” de la CPU cuando presiona el interruptor de INICIO.

Cuando las estaciones de trabajo basadas en mc68000 de Sun Microsystems aparecieron a mediados de la década de 1980, la Ley de Moore había proporcionado chips EPROM lo suficientemente grandes y baratos como para que una computadora pudiera tener un firmware integrado bastante sofisticado para la inicialización del sistema, el diagnóstico y el arranque en la placa base; De ahí la elección de Sun de Forth para un intérprete de idiomas (que, sin embargo, era bastante eficiente en RAM) que eventualmente evolucionó a Open Firmware (IEEE 1275), pero que todavía se usaba para cargar un programa de arranque desde un medio de almacenamiento (disco, cinta, Ethernet (sí, arranque de red)) para luego cargar el Kernel del sistema operativo (en el caso de Unix de Sun). También era una práctica en este momento que el firmware de la computadora proporcionara información sobre los dispositivos de E / S conectados y otra información de configuración del sistema, para que el kernel no tuviera que buscar exhaustivamente en el espacio de E / S mapeado en memoria para dispositivos (también , el registro aleatorio de dispositivos podría provocar que un dispositivo de E / S reaccionara mal); Este tipo de cosas eventualmente se convirtió en ACPI.

Sun utilizó este sistema de arranque independiente de la arquitectura del conjunto de instrucciones para facilitar sus transiciones de una CPU ISA a otra; desde la familia de procesadores Motorola mc68000 hasta su propia arquitectura SPARC a fines de la década de 1980. El Apple PowerMac también usó Open Firmware para arrancar. El problema es que el intérprete Forth se implementó en un código de máquina específico para la CPU / placa base en la que se instaló, por ejemplo, en un sistema de CPU mc68000 como el Sun-3, el firmware estaba en el código de máquina mc68000 y para un Sun-4 Sistema basado en SPARC, el firmware del intérprete Forth estaba en códigos de máquina de SPARC ISA. Todo lo demás (p. Ej., Controladores de nivel de arranque para tarjetas de expansión adicionales como controladores de disco, memorias intermedias de cuadros gráficos con aceleradores (que eventualmente evolucionaron en unidades de procesamiento de gráficos)) podría estar en Forth FCode independiente de la máquina.

Consulte también Levantarse por las botas.

Bueno, hay una respuesta que comienza a explicar qué es una CPU …

bueno, sí, la versión del código fuente de GRUB y LILO es específica de los conjuntos de instrucciones y la BIOS (por ejemplo, IBM PC BIOS o el reemplazo más reciente). Y eso significa que ni siquiera puede ejecutarlo en un sistema diferente, por ejemplo, mover un disco duro de una PC con Windows a SPARC o VAX. Necesita instalar el software Linux SPARC en un SPARC.

Si bien el esquema de partición del disco duro es básicamente artificial (una creación de Microsoft), las principales marcas de estilo de marco utilizan diferentes esquemas.

pero tal vez la pregunta es, ¿los cambios simples de hardware en la computadora, por ejemplo, el intercambio de una tarjeta de video causan problemas?

No, excepto por cualquier cosa que tenga que ver con el sistema de disco duro.

Los cambios en el sistema de disco duro pueden hacer que la configuración almacenada deje de funcionar.

Si bien Grub puede encontrar la partición raíz en función de las firmas, es un sistema que no puede funcionar en todas las situaciones, y donde funciona, puede generar confusiones. Es demasiado complicado enumerar esas situaciones aquí.

El código de arranque moderno tiene un menú donde puede elegir qué disco duro arrancar,

pero la asignación de las identidades de las unidades (representadas como / dev / sda, / dev / sdb, / dev / sdc, etc., que significa unidad 1, 2, 3 … etc.) se realiza en el hardware, no en la BIOS. Por lo tanto, grub o lilo pueden ejecutarse por sí mismos, pero luego no pueden iniciar correctamente un sistema operativo real.