Sistemas Operativos: su Historia

La evolución de los sistemas operativos (SO) es paralela a la evolución de las computadoras ya que su principal función siempre fue y es controlar a la computadora.

Inicialmente la principal función de los SO era “controlar eficientemente los recursos del sistema”, sobre todo por el alto costo de esa primeras computadoras y la pérdida que significaba tener equipos tan costosos haciendo su tarea de manera ineficiente.

A ese objetivo inicial, aún vigente, se han incorporando otros que, en algunos casos, han pasado a ser mas importantes en dependencia del propósito del SO. Entre ellos cabe destacar el de “brindar una interfaz cómoda para el uso eficiente de los recursos”, que es un objetivo importante para cualquier SO destinado a computadoras personales usadas, en muchos casos, por personas que no son especialistas en Computación.

Cuando el SO trata de controlar los recursos, surgen conflictos que deberá resolver y por eso “resolver conflictos”, es también una de sus funciones principales.

Seguidamente se hace una apretada síntesis de la evolución de los SO a través del tiempo.

Cronología

Charles Babbage, Matemático. Primero en concebir una auténtica computadora. Diseñó la máquina analítica, muy similar a una computadora moderna, dotada incluso de una memoria.

John von Neumann, Matemático. Realizó contribuciones importantes a la ciencia del siglo XX. Fue uno de los fundadores de la teoría de juegos.

La Z4 de Konrad Suze (1942-1945)

Tubo al vacío

El ENIAC (siglas en inglés de "calculador e integrador numérico electrónico"). Primer ordenador digital totalmente electrónico. Construído en la Universidad de Pensilvania en 1946, siguió funcionando hasta 1955. Contenía 18.000 válvulas de vacío, y para programarlo había que cambiar manualmente el cableado.

Década del 50

La primera computadora digital real fue diseñada por el matemático ingles Charles Babbage ( 1792 - 1871). Aunque Babbage gastó la mayor parte de su vida y de su fortuna intentando construir su " máquina analítica", nunca la hizo funcionar adecuadamente porque era un diseño puramente mecánico y la tecnología de su época no podía producir las ruedas, el engranaje y otras partes mecánicas con la alta precisión que él necesitaba. La máquina analítica no tuvo un sistema operativo.

La Primera Generación (1945 - 1955 ): Tubos de vacío y tableros enchufables

Después de los esfuerzos frustrados de Babbage, se progresó poco en la construcción de computadoras digitales hasta la segunda guerra mundial, alrededor de la mitad de la década de 1940, Howard Aiken en Hardvard, Jon Von Neumann en el Instituto de Estudios Avanzados en Princeton, J. Presper Ecker y William Mauchley en la Universidad de Pennsylvania y Konrad Zuse en Alemania, entre otros, todos obtuvieron resultados óptimos en la construcción de maquinas de cálculo mediante el uso de tubos de vacío.

Toda la programación se realizó en lenguaje de máquina absoluto. Los lenguajes de programación se desconocían (todavía no existía el lenguaje ensamblador). Los primeros sistemas operativos eran extraños. El modo usual de operación consistía en que el programador firmaba para tener acceso a un bloque de tiempo en la hoja de registro situada en la pared, después bajaba al cuarto de máquinas, insertaba su tablero enchufable en la computadora y pasaba las siguientes horas esperando que ninguno de los 20,000 tubos de vació se fundiera durante la ejecución de su programa.

Los trabajos de esta era incipiente de la computación estaban limitados a aplicaciones científicas o militares, corría el tiempo de las grandes computadoras, como la Z4 de Konrad Suze (tubos al vacío o bulbos) que ocupaban salones enormes y la computación estaba muy lejana de convertirse en algo de uso masivo como lo es hoy en día.

Un programa estaba formado por todo el conjunto de instrucciones que la computadora necesitaba para llevar a cabo sus funciones, por ejemplo instruía a la CPU acerca de detalles, tales como: dónde y cuándo almacenar las instrucciones de memoria, qué calcular, dónde encontrar los datos, dónde enviar la salida, etc.

Queda claro que estos especialistas sólo conocían el tipo específico de computadora en la que trabajaban y resultaba muy difícil expandir sus resultados a medios diferentes a esos. Al pasar el tiempo, el hardware y el software se hicieron más estándares y la ejecución de los programas requería menos pasos. Se desarrollaron lenguajes que expresaban, en un código más cercano al lenguaje humano, las instrucciones a ejecutar, surgieron los compiladores y ensambladores para traducir a código binario esos lenguajes de nivel más alto.

Se pensó que era mejor escribir el código para el manejo de cada tipo de equipo y tenerlo listo para ejecutarlo cuando se necesitara manipular algo hacia o desde él, desechando la vieja idea de escribir (una y otra vez) el código para el manejo del equipo en la propia aplicación. Se hicieron bibliotecas de funciones que hicieran esas tareas, surgiendo, de esta forma, los primeros manipuladores de equipos (device drivers). Al final de esta época comenzaron a tomar vida los sistemas operativos más rudimentarios en la forma de creación de macros, subrutinas estándar, programas utilitarios y manejadores de equipos.

La Figura 1 muestra como era el ciclo de programción en esta etapa