Después de cerca de una semana trabajando en conceptos básicos sobre dónde se va a ejecutar el Sistema Operativo, llegamos al punto de poder programar ya algunas estructuras básicas. Hoy evitaremos entrar en el kérnel porque hasta llegar a él nos queda un pequeño camino que recorrer.
Por ahora tenemos una máquina donde podremos poner a ejecutar sencillos procesos escritos con el lenguaje que hemos ido diseñado ayer y usando el compilador del que hablamos hace unos días. Pero obviamente, para llegar al objetivo final, que es tener algo lo más presentable posible en 30 días, no vamos a perder el tiempo en chorraditas y juguetes que infravaloren el potencial de lo que hemos hecho. Por eso, no haremos ejemplos de cómo calcular factoriales decimales o clases gato que hereden de la clase animal, aunque eso sería lo que más encajara en este punto con más tiempo por delante.
De todas formas, no vamos a entrar en materia porque, como comenté antes, todavía
no tenemos nada funcional. Como siempre, para afrontar este tipo de retos, y cualquier otro en nuestra vida, tenemos que levantar la cabeza de vez en cuando y
mirar al frente. Ahora mismo, si queremos
ejecutar un
proceso que
compilemos con lo que tenemos, habría que
inyectar el
código objeto generado en la primera dirección del
Espacio de Direcciones para que se comenzara a
ejecutar.
Partiendo de eso, hoy vamos a presentar el problema de tener que iniciar el
Sistema Informático para cargar dinámicamente
código objeto que
compilemos sin tener que recurrir a modificar el
Sistema Informático en sí. Es decir, vamos a hablar de los
componentes de un
Sistema Informático.
Aunque las unidades, de las que hablamos con anterioridad, técnicamente se consideran también componentes de un Sistema Informático, hoy vamos a centrarnos más en los otros dos tipos de componentes que podemos encontrar y usar en un Sistema Informático: los dispositivos y los controladores.
Los
dispositivos se caracterizan por ser
registros contiguos de lectura y/o escritura constante en el
Espacio de Direcciones del
Sistema Informático. El atributo "
constante" que caracteriza a las
funciones de lectura y escritura es lo único que distingue
dispositivos frente a
controladores. Que sean "
constantes" quiere decir que una vez los modifiquemos tras el arranque del
Sistema Informático, van a
mantener ese valor. Los
dispositivos están
mapeados en lugares determinados por el estándar tanto al comienzo de éste (donde aparecen los dispositivos de arranque) como al final (donde está la memoria principal) del
Espacio de Direcciones. El caso más importante de
dispositivo es el que suministra memoria
RAM, aunque más importante es el dispositivo
GAM que permite llevar al
Sistema Informático a una localización conocida tras el arranque.
Los
controladores son
registros contiguos de lectura y/o escritura variable en el
Espacio de Direcciones del
Sistema Informático. En este caso, "
variables" quiere decir que podrán
modificar su valor en tiempo de ejecución sin que nosotros mandemos esa orden. Los
controladores están mapeados generalmente antes de la memoria
RAM, que suele ser el último
componente que aparece en el
Espacio de Direcciones. Como estos
controladores pueden modificar el
valor de sus
registros de forma imprevisible, es necesario que se estandarice su comportamiento. Para eso, tenemos el
controlador universal que veremos más adelante. Entre los controladores más importantes, destacamos el de
pantalla, el de
sonido, el de
red, el de
teclado y el de
ratón, el de
datos...
Retomando el tema del principio, ahora parece que va a ser más claro todo. Nuestro kérnel, junto con los demás procesos que compilemos, estará ubicado en el exterior del Sistema Informático. Mañana abordaremos los pasos, basándonos en las estructuras de nuestro lenguaje, para llegar a cargar el hipotético kérnel en el Espacio de Direcciones y pasarle el testigo.