Escribir un gestor de arranque sin gestor de arranque

8

Tengo una pregunta que realmente no puedo encontrar una respuesta directa. Permítanme comenzar diciendo que no estoy pidiendo un tutorial paso a paso, o incluso planean hacer algo. Tengo curiosidad.

He estado leyendo todo el día sobre el desarrollo de sistemas operativos y cómo se crean desde cero. Tengo un control bastante firme sobre la teoría de la misma. Sin embargo, hay un paso para el que parece que no puedo encontrar una respuesta.

Antes de la existencia de un sistema operativo completo y lleno de herramientas, ¿cómo se podría escribir un cargador de arranque simple para una computadora que no tiene un cargador de arranque, o algo así, en su sector de arranque? ¿Cuál sería el primer paso después de adquirir una computadora con lo mínimo? (Es decir, pantalla, teclado, procesador, ram, disco duro, disquete)

Mella
fuente

Respuestas:

9

Históricamente hubo varias formas:

  • No hay sistema operativo en absoluto. El archivo ejecutable se cargó desde la primera tarjeta, archivo de cinta o lo que sea.
  • Os codificado en memoria de núcleo magnético. Los núcleos eran imanes permanentes en lugar de ferrita simple, dependiendo de la orientación N / S del imán, era uno o cero. Las computadoras en la nave espacial Gemini y Apollo tenían todos sus programas "tejidos" de esta manera.
  • Primer sector del disco. Esto era bastante estándar en computadoras "mini" como el PDP-11, la computadora estaba programada para leer la primera pista del primer disco y ejecutar el código cuando golpeaba un marcador EOF.
  • Dispositivo de arranque personalizado. Los mainframes IBM de segunda generación tenían un disquete dedicado de 12 pulgadas para cargar en un sistema operativo "microcódigo". Que luego buscó el sistema operativo real en el disco en alguna parte. También he visto micros con unidades de cinta de cassette dedicadas para cargar el sistema operativo. Los operadores debían rebobinar o "voltear" la cinta.

  • BIOS Se almacena un sistema operativo mínimo en la ROM y el procesador está cableado para ejecutar el código ROM en el "encendido". La ROM luego obtiene el sistema operativo real de donde sea. Esto es más o menos cómo funcionan todas las computadoras modernas. Lo que la ROM realmente hace varía de procesador a procesador. Las cajas Itel generalmente tienen un programa BIOS muy sofisticado dedicado a cada "generación" de procesador. Los cuadros tipo Unix generalmente tienen un BIOS mucho más simple, los cuadros Sun / Oracle cargan un intérprete "FORTH" que luego ejecuta un script simple para cargar Solaris.

James Anderson
fuente
2
¡No olvide los interruptores de palanca! Muchos de los primeros ordenadores tenían una fila de interruptores de palanca de manera que se podía cargar manualmente un pre-cargador de arranque para leer desde un disquete o cinta para cargar el gestor de arranque actual y OS
Earlz
@ Earlz: se olvidó de eso. En un pdp-11, puede establecer la dirección binaria del dispositivo de arranque utilizando los interruptores de palanca del panel.
James Anderson
@Earlz Hay una historia famosa sobre cómo Paul Allen (cofundador de Microsoft) escribió un gestor de arranque para su intérprete BASIC y el de Bill Gates para el Altair en el avión y luego lo activó a mano. (Ver en.wikipedia.org/wiki/Altair_BASIC , que no da los detalles, pero cuenta la historia.)
Ryan Reich
4

En los días realmente antiguos (como el IBM 650 o PDP1) era necesario ingresar valores en la memoria usando los interruptores del panel frontal. Al mirar imágenes de computadoras muy antiguas, viste dos filas de luces: Dirección y Datos. En una computadora de 16 bits había 16 de estos cruzados, generalmente codificados por colores en grupos de tres o cuatro para octal o hexagonal, respectivamente.

El botón 'Restablecer' establecería el contador 'Dirección' en cero. Entonces se podrían configurar los interruptores en el bus de datos al valor deseado, y alternar el botón de 'escritura de datos'. Esto escribiría la configuración del interruptor en la memoria en la dirección 0. Había interruptores de alternancia hacia arriba y hacia abajo para permitirle pasar a la dirección siguiente o anterior. También puede configurar los interruptores para la dirección y hacer clic en 'escribir dirección'. Lo que estaba en esa nueva dirección se mostraría en las 16 luces de datos.

Por lo general, se activaría, utilizando esta técnica, un ciclo de lectura para leer valores de un lector de tarjetas o cinta de papel. Esto sería suficiente para cargar un bloque de código más grande para continuar con el SO o la carga de la aplicación. En ese momento, tales computadoras tenían palabras de 4K a 16K (u 8K a 32K bytes), por lo que estos cargadores eran pequeños para los estándares modernos. Un ciclo de lectura solo puede ser de tres o cinco palabras de 16 bits.

Ilustración del panel frontal

Meredith Pobre
fuente
3

Necesita alguna forma de crear un chip ROM o EEPROM que pueda instalarse en la placa base y que contenga el gestor de arranque. Realmente hay una serie de pasos de arranque, comenzando con las comprobaciones internas de los diversos chips (CPU, tarjeta de video, etc.) seguidos de la activación y descubrimiento del bus (el controlador de bus PCI-e localiza todo lo que está conectado y asigna ID, etc.). Luego, la placa base busca una ROM de arranque y ejecuta ese código, que a su vez encuentra el orden de arranque del BIOS y busca un dispositivo que coincida, luego carga el arranque desde ese. Que a su vez carga un sistema operativo.

La cadena de arranque original estaba moviendo los interruptores que formaban la ROM, luego usando interruptores para programar la RAM, y así hasta los cargadores de arranque modernos de múltiples etapas.

Más
fuente