Un viaje submarino a bordo de Heritage/1

Asomarse a un tema desde el ángulo de implementación da al conocimiento un sabor de intimidad rayano en el erotismo. Cuando pienso en portar un sistema operativo como Minix o netBSD a un hardware propietario como el de Heritage/1 me veo obligado a fijarme en todos los por menores sin el lujo de comprenderlos a medias, ya que en tal caso el sistema no funcionaría.




Armando Acosta  (02-01-2010)

Por cinco años, laboré como programador de aplicaciones contables en una compañía productora de Software y, antes de eso, fui un gran curioso del tema en los tiempos de MS-DOS, Quick-C y Turbo Pascal, no sin antes haber jugado con los microprocesadores PMOS de los 80s ¡qué tiempos aquellos!

Toda esa experiencia puedo sentirla ahora como la de un navegante agradecido del océano cuyas aguas profundas mantienen a flote el aparatoso andamiaje de su buque. Lo digo porque, cuando se programa a nivel de aplicación, la curiosidad tiene por límite una frontera bien delimitada que es la interfase del Sistema Operativo ó API.

Más allá de esa frontera, están las profundidades del océano y, en ese sentido, Heritage/1 me ha servido de batiscafo para sumergirme en ellas; el viaje... apenas comienza.

Seis meses —hace ya— me propuse diseñar y construir una computadora tan "simple" (Heritage/1) que se pudiera entender a cabalidad, cable por cable, tuerca por tuerca. En estos momentos el diseño está casi terminado, los primeros circuitos han comenzado a construirse y el objetivo parece haberse cumplido con creces. Es esta pues la hora de esbozar las primera ideas sobre Software de Sistema y es de esa experiencia que quiero hablar en estas notas.

Asumiendo que el lector es un gran curioso del tema —como lo soy yo—, me atrevería a preguntarle qué siente cuando compila un programa escrito en lenguaje C, algo "intrincado" como una aplicación de redes usando sockets, por ejemplo. El compilador termina su trabajo en pocos segundos y el programa resultante puede ser cargado en memoria con tan solo entrar un simple comando ¿no es así?

¿Y cómo supo el compilador (aparte del análisis sintáctico, etc.) generar un código de máquina entendible por su microprocesador en el contexto de su sistema operativo? ¿Cómo supo el Linker enlazar su programa con la biblioteca de funciones de C? ¿Cómo pudieron coordinarse las referencias a diferentes direcciones de memoria entre su programa y aquellos que conforman dicha biblioteca?

Suponiendo —o más bien, ¡estando seguros!— que todo lo anterior salió bien de modo que el fichero ejecutable es perfecto... ¿cómo se las arregla el Sistema Operativo para cargar dicho programa mientras otros muchos aún permanecen en memoria y, lo que es peor, están funcionando todos "a la vez"? ¿Qué hay —una vez más— con las referencias a memorias utilizadas por su programa en pugna con las mismas direcciones siendo disputadas por otros programas?

Las respuestas a estas preguntas son bien conocidas dentro de la Programación de Sistema y mi propósito no es darles respuestas sino llamar la atención sobre la existencia de estos temas. Yo, personalmente, apenas comienzo a asomarme a ellos y no solo por curiosidad sino porque pretendo implementarlos en Heritage/1.

Y he aquí el punto.

¿Que cual punto? ¿no lo vio, al final de la línea anterior? Asomarse a un tema desde el ángulo de implementación da al conocimiento un sabor de intimidad que raya en el erotismo. Cuando pienso en portar un sistema operativo como Minix o netBSD a un hardware propietario como Heritage/1 me veo obligado a fijarme en todos los por menores sin el lujo de comprenderlos a medias, ya que en tal caso el sistema no funcionaría.

Y el "sistema" comienza justamente con las herramientas de desarrollo: Ensamblador, Compilador, Linker, Bibliotecario, etc. Antes de poder portar un sistema operativo (desde su código fuente escrito en C) tendré que conseguir dichas herramientas y adaptarlas para que generen el código propietario (único) de Heritage/1.

Solo eso constituye, de por sí, un proyecto al que apenas comienzo a asomarme. Por suerte no estoy inventando el agua tibia sino incursionando en una disciplina bien establecida sobre la cual hay mucha información disponible y herramientas bien probadas.

Es una aventura en aguas profundas, un mundo donde la luz no abunda y el paisaje es muy diferente al que conocía cuando era programador de aplicaciones. Un mundo apasionante, sin dudas, del cual comienzo a volverme adicto.

Antes de terminar, quiero dejarles con alguien cuyo trabajo me ha servido de gran inspiración y guía: un colega que diseñó su propia minicomputadora y portó para ella una versión adaptada de Minix 2:

Bill Buzbee / Magic-1

Disfrútenlo y deséenme suerte en mi viaje porque no quiero terminar ahogado en un mar demasiado profundo para mi ignorancia.


                                                

Miami / USAmail@armandoacosta.comInicio