Evolución de los Sistemas Operativos
Los sistemas operativos han ido evolucionando a lo largo del tiempo junto con el hardware, debido a que mantienen una estrecha relación con él. Este apartado realiza un breve recorrido a través de su historia, relacionándola con las generaciones de hardware. A lo largo de la exposición, se irán presentando algunos de los conceptos básicos de los sistemas operativos.
1.3.1. Primera Generación (1945-1955)
Los primeros equipos de computación aparecen a finales de la Segunda Guerra Mundial. Fundamentalmente fueron grupos de trabajo dirigidos por H. Aiken, J. Von Neumann, J. Presper Eckert, W. Mauchley y K. Zuse los que construyeron los primitivos ordenadores. Estos eran máquinas enormes, compuestas por tubos de vacío. La misma persona o equipo diseñaba, construía, programaba y mantenía el ordenador. En esta etapa no se puede hablar de sistema operativo. La programación se realizaba físicamente, modificando el cableado cada vez que se deseaba realizar una operación diferente, que en general consistía en cálculos matemáticos iterativos. A principios de los 50 aparecieron las tarjetas perforadas, que permitían que el usuario escribiera los programas en las tarjetas, en lugar de tener que modificar las conexiones de la máquina.
1.3.2. Segunda Generación (1955-1965)
La aparición del transistor a mediados de los 50 provoca una enorme transformación de los ordenadores. Las computadoras se volvieron más pequeñas, menos costosas y más fiables, con lo cual ya se pudieron construir con fines comerciales. Sin embargo, su precio tan elevado hace que solamente las empresas públicas más importantes o las universidades pudieran adquirir los equipos. En esta generación de computadores aparece el FORTRAN, primer lenguaje de programación. El mecanismo de ejecución de un programa era largo y costoso, y aparece el concepto de sistema de procesamiento por lotes. La secuencia de acciones necesaria para llevar a cabo una tarea es la siguiente:
- El programador escribe su programa en papel, generalmente se trata de un programa en ensamblador o FORTRAN. Una vez escrito, perfora las tarjetas necesarias para representarlo.
- Una vez perforadas las tarjetas, se llevan a un lector de tarjetas conectado a un equipo de pequeña capacidad y coste. Este equipo pasa el programa a una cinta magnética.
- Cuando esta cinta ha sido completada, conteniendo los trabajos de varios usuarios, es llevada a la máquina más potente, que es la que ejecutará el programa. Con esto se evita que este equipo, de coste muy elevado, pierda tiempo realizando tareas poco productivas, como la lectura de tarjetas perforadas.
- La salida de la ejecución del programa se almacena en una segunda cinta. Cuando esta segunda cinta se completa, se pasa de nuevo a un equipo pequeño, que imprime los resultados trabajando fuera de línea.
1.3.3. Tercera Generación (1965-1980)
La tercera generación se inicia con la aparición de los circuitos integrados. A principios de la década de los setenta, la mayoría de empresas que construían ordenadores mantenían dos líneas de producción independientes e incompatibles entre sí: una dedicada a computación científica a gran escala, y otra dedicada a computación comercial. IBM trató de resolver este problema creando la familia de ordenadores Sistema/360, que constaba de equipos de un amplísimo rango de funcionalidad. El problema ahora era crear software que fuera compatible para una familia de máquinas diferentes, con diferentes objetivos, configuraciones y capacidades. El resultado fue un sistema operativo enormemente complejo, que constaba de millones de líneas de código y era mantenido por cientos de programadores. Este sistema contenía miles y miles de errores, que requerían un flujo constante de actualizaciones, que a su vez introducían nuevos errores. El sistema se llamó OS/360. A pesar de todo, el OS/360 y otros sistemas similares producidos por otros fabricantes, ofrecieron una solución para muchos problemas de gestión de los equipos de forma razonable. Además, con estos sistemas se introdujeron algunos de los conceptos básicos de los sistemas operativos modernos. Entre estos conceptos, los más importantes son:
Multiprogramación
En los primitivos sistemas de cálculo científico, si un trabajo en ejecución se detenía en espera de una operación de entrada/salida (E/S), la CPU se detenía hasta que la E/S se completaba. En operaciones de cálculo, muy intensivas en tiempo de ejecución en el procesador, la pérdida de ciclos de CPU debida a esta espera es apenas significativa. Sin embargo, en los sistemas de procesamiento de datos comerciales la E/S supone la mayor parte del tiempo empleado por un programa, con lo cual la pérdida de tiempo es muy considerable.
Spooling
Otra de las características principales de los nuevos sistemas era la capacidad de leer trabajos de las tarjetas y almacenarlos en el disco inmediatamente después de llegar. De esta forma, siempre que un trabajo concluía, se podía tomar uno nuevo para cargarlo en la partición que había quedado vacía. Esta técnica se denominó spooling (simultaneous peripheral operation on line). El mismo método se utilizó para las salidas.
Tiempo Compartido
A pesar de los avances obtenidos con la multiprogramación, los sistemas seguían siendo en esencia sistemas de procesamiento por lotes. Esto hacía el trabajo del programador enormemente difícil. Para depurar un programa era necesario escribirlo, perforar las tarjetas necesarias y esperar al resultado de la ejecución, a veces varias horas después. Si se había cometido cualquier error, por ejemplo, una coma mal situada en el código del programa, la espera había resultado totalmente infructuosa. Por ello se introdujo el concepto de tiempo compartido (timesharing). En este tipo de sistemas, cada usuario tiene una terminal en línea. Dado que un usuario invierte la mayor parte del tiempo en tareas que no necesitan mucho tiempo de CPU, como modificar el programa o buscar los errores, el sistema puede repartir el servicio entre todos los usuarios, dando la impresión a cada uno de ellos de un sistema casi interactivo. El primer sistema que incorporó este concepto fue construido en el MIT, y se denominó CTSS.
1.3.4. Cuarta Generación (1980-1996)
Los computadores personales aparecieron con la tecnología LSI (large scale integration) y VLSI (very large scale integration). Esta tecnología no modifica los ordenadores en cuanto a arquitectura, básicamente es igual, sino en cuanto a una disminución brutal del precio, que hace accesibles las computadoras al ámbito personal. Esta disponibilidad personal produjo sistemas operativos más preocupados en proporcionar un entorno de fácil manejo y aprendizaje, orientado a usuarios no expertos. Dentro del campo de las innovaciones aparecen dos ideas nuevas: los sistemas operativos de red y los sistemas operativos distribuidos. En los primeros, los usuarios son conscientes de la existencia de una red de ordenadores interconectados, pueden conectarse a máquinas remotas y mover información entre las máquinas. Cada equipo ejecuta su propio sistema operativo y tiene su propio grupo de usuarios. Un sistema operativo distribuido es mucho más complejo. En él, un usuario ve el sistema como un sistema tradicional monoprocesador, sin preocuparse de la estructura subyacente, ni de la situación de la información en la red. Mientras que un sistema en red no difiere radicalmente de un sistema tradicional, basta añadir algo de software para el control de la red, un sistema distribuido es mucho más complejo. En este último la información se encuentra distribuida en la red, con lo que es necesario el control de las redundancias y las actualizaciones, en la ejecución es necesario determinar la carga de los procesadores, e incluso ejecutar la misma tarea en paralelo sobre varias máquinas.