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)
Respuestas:
Históricamente hubo varias formas:
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.
fuente
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
fuente
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.
fuente