jueves, 10 de mayo de 2007

Historia y evolucion de los Sistemas Operativos

Los sistemas operativos han venido evolucionando a través de los años. Ya que los sistemas operativos se han apegado íntimamente a la arquitectura de las computadoras en las cuales se ejecutan.
La primera computadora digital real fue diseñada por el matemático ingles Charles Babbage (1792 - 1871). Aunque Babbage gasto la mayor parte de su vida y de su fortuna intentando construir su “ maquina 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, levas y otras partes mecánicas con la alta precisión que el necesitaba. Sin tener que decirlo, la maquina analítica no tuvo un sistema operativo.

La primera generación (1945 - 1955 ) : Tubos de vació y tableros enchufablesDespués de los esfuerzos frustrados de Babbage, se progreso 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 Pensilvania y Konrad Zuse en Alemania, entre otros, todos obtuvieron resultados óptimos en la construcción de maquinas de calculo mediante el uso de tubos de vació.
En estos primeros días, un grupo singular de personas diseño, construyo, programo, opero y dio mantenimiento a cada maquina. Toda la programación se realizo en lenguaje de maquina 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 maquinas, insertaba su tablero enchufadle 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.
Al inicio de la década de 1950, la rutina había mejorado un poco con la introducción de la tarjetas perforadas. Ahora era posible escribir en tarjetas y leerlos, en vez de utilizar tableros enchufables; de lo contrario el procedimiento era el mismo.

La segunda generación (1955 - 1965): Transistores y sistemas de lote

La introducción del transistor a mediados de la década de 1950 cambio la imagen radicalmente. Las computadoras se volvieron lo suficientemente confiables, en un principio hubo una clara separación entre los diseñadores, armadores, operadores, programadores y personal de mantenimiento.
Estas maquinas se instalaban en cuartos de computadoras especialmente acondicionados con aire, con cuerpo de operadores profesionales para accionarlas. Un programador primeramente escribiría el programa en papel (en FORTRAN o en lenguaje Ensamblador) y después lo perforaba en tarjetas. Después llevaría la pila de tarjetas al cuarto de introducción al sistema y la entregaría a uno de los operadores el cual iniciaba el proceso en la computadora, este proceso desperdiciaba mucho tiempo.
Dado el alto costo del equipo, no es sorprendente que las personas buscaran rápidamente maneras de reducir el tiempo perdido. La solución que generalmente se adoptaba era el sistema de lote. La idea implícita en este sistema era la de conjuntar un cajón lleno de trabajos en el cuarto de introducción al sistema y después de leerlos en una cinta magnética mediante el uso de una computadora (relativamente) pequeña y poco costosa, como la IBM 1401.
Después de casi una hora de recolectar un lote de trabajos, la cinta se volvía a enrollar y se llevaba al cuarto de maquinas. Después el operador cargaba un programa especial ( el ancestro del sistema operativo de hoy en día ) , el cual leía el primer trabajo y lo ejecutaba, la salida se escribía en una segunda cinta, en vez de imprimirse. Después de terminar cada trabajo, el sistema operativo leía automáticamente el siguiente trabajo de la cinta, y comenzaba a ejecutarlo.

La estructura de un trabajo de entrada común arrancaba con una tarjeta $JOB, que especifica el tiempo máximo de ejecución en minutos, el numero de cuenta que se cargara y el nombre del programador. Después venia una tarjeta $FORTRAN, que indicaba al sistema operativo que debía cargar el compilador de FORTRAN. Venia seguido de un programa que debía compilarse y después de una tarjeta $LOAD, que ordenaba al sistema operativo cargar el programa objeto recién compilado, después venia la tarjeta $RUN, que indicaba al sistema operativo que debía ejecutar el programa con los datos que le seguían. Por ultimo, la tarjeta $END marcaba el final del trabajo. Los sistemas operativos comunes eran FMS (el sistema monitor del FORTRAN) e IBSYS, sistema operativo de IBM de la 7094.

La tercera generación (1965-1980): Circuitos integrados (CI) y multiprogramación

Al inicio de la década de 1960 muchos fabricantes de computadoras tenían dos líneas de trabajo distintas y totalmente incompatibles. Por un lado existían las computadoras científicas de grande escala orientadas a las palabras, como la 7094, que se utilizaban para realizar cálculos numéricos de ciencias e ingeniería. Por el otro lado estaban las computadoras comerciales orientadas a los caracteres, como 1401, que se utilizaban para el ordenamiento de cintas e impresión por parte de bancos y compañías de seguros.
El desarrollo y mantenimiento de dos líneas de productos diferentes era una proposición costosa para los fabricantes. Además, muchos nuevos compradores de computadoras necesitaban una maquina pequeña, pero después se expandían y querían una maquina de mayor tamaño que ejecutara todos sus programas antiguos, pero con mayor velocidad.
IBM intento resolver estos dos problemas de un solo golpe introduciendo en el mercado el Sistema/360. El 360 era una serie de maquinas compatibles con el software que variaban del tamaño de la 1401 a una mucho mas poderosa que la 7094, el 360 estaba diseñado para realizar cálculos tanto científicos como comerciales. Por lo tanto una sola familia de maquinas podía satisfacer las necesidades de todos los clientes.
El sistema 360 fue la primera línea importante de computadoras que utilizo circuitos integrados (CI), con lo cual ofreció una mayor ventaja de precio/rendimiento sobre las maquinas de la segunda generación.
La intención era que todo el software, como el sistema operativo, tenía que funcionar en todos los modelos. Tenia que correr en sistemas pequeños, y en sistemas muy grandes. Tenia que funcionar adecuadamente en sistemas con algunos periféricos y en sistemas con muchos periféricos.
No había manera de que IBM escribiera una pieza de software que cumpliera todos esos requisitos conflictivos. El resultado fue un sistema operativo enorme y extraordinariamente complejo. Constaba de millones de líneas de lenguaje ensamblador escritas por miles de programadores, y contenía miles y miles de errores ocultos.
A pesar de tamaño y problemas enormes, OS/360 y los sistemas operativos similares de la tercera generación satisfacían a muchos de sus clientes razonablemente bien, También popularizaron varias técnicas importantes ausentes en los sistemas operativos de la segunda generación. La más importante de estas fue la multiprogramación. Cuando el trabajo corriente se detenía para esperara a que se completara una operación en cinta u otra operación de E/S, la unidad central de procesamiento (CPU) simplemente permanecía ociosa hasta que terminara la operación de E/S . La solución que evoluciono consistía en partir la memoria en varias partes, con trabajo diferente en cada partición. Mientras que un trabajo esperaba a que se completara la E/S, otro trabajo podía estar utilizando la CPU. Si se podían mantener suficientes trabajos en la memoria central al mismo tiempo, la CPU podía mantenerse ocupada casi el 100% del tiempo.
Otra característica de importancia en los sistemas operativos de la tercera generación era la capacidad de leer trabajos de tarjetas contenidas en el disco tan pronto como se llevaban al cuarto de computación. Siempre que se terminaba un trabajo, el sistema operativo podía cargar uno nuevo del disco en la partición no vacía y ejecutarlo, esta técnica se denomina manejo por cola de impresión.
Los sistemas operativos de la tercera generación seguían siendo básicamente sistemas de lote. Con los sistemas operativos de la tercera generación, el tiempo entre la entrega de un trabajo y la devolución de la salida comprendía a menudo varias horas.
El deseo de obtener un tiempo de respuesta corto marco el camino para el tiempo compartido, variante de la multiprogramación, en la cual cada usuario tiene una terminal en línea. En un sistema de tiempo compartido si hay 20 usuarios dentro del sistema y 17 de ellos están pensando o platicando o bien tomando café, la CPU puede distribuirse en turno para los tres trabajos que necesitan servicio.
Aunque el primer sistema de tiempo compartido (CTSS) serio fue creado en MIT en una unidad 7094 especialmente modificada, no se volvió popular sino hasta que el hardware de protección necesario se disemino durante la tercera generación.
Después del éxito del sistema CTSS, MIT, Bell laboratorios y General electric decidieron embarcarse en el desarrollo de la “computadora de servicio publico .Conocido como MULTICS (Multiplexed information and computing service, información multicanalizada y servicio de computación). Para resumir una larga historia, MULTICS introdujo muchas ideas originales en la literatura de computación, pero su construcción era más difícil de lo que nadie había sospechado. MULTICS tuvo enorme influencia sobre otros sistemas subsiguientes.
Otro avance durante la tercera generación fue el crecimiento de las mini computadoras, comenzando con DEC PDP-1 en 1961. Uno de los científicos que había trabajado en el proyecto MULTICS, Ken Thompson, hallo después una pequeña PDP-7 y empezó a escribir después una versión desguarnecida de MULTICS para un usuario. Este sistema se llamo “UNICS” (Uniplexed information and computing service, información unicanalizada y servicio de computación), pero su ortografía cambio mas tarde por UNIX. UNIX se ha desplazado a más computadoras que ningún otro sistema operativo de la historia y su uso sigue aumentando rápidamente.

La cuarta generación (1980 - 1990): Computadoras personales

Con la creación de los circuitos integrados LSI (integración a grande escala), chips que contiene miles de transistores en un centímetro cuadrado de silicón, la era de computadora personal vio sus inicios.
Dos sistemas operativos han dominado la escena de la computadora personal: MS-DOS, escrito por Microsoft, Inc., para la IBM PC y otras computadoras que utilizan la CPU Intel 8088 y sus sucesores. Y UNIX, que domina en las computadoras personales mayores que hacen uso de CPU Motorola 68000.
Aunque la versión inicial de MS-DOS era relativamente primitiva, versiones subsiguientes han incluido más y más características de UNIX, lo que no es totalmente sorprendente dado que Microsoft es un proveedor importante de UNIX, que usa el nombre comercial de XENIX.
Un avance importante que empezó a tomar su sitio a mediados de la década de 1980 es el desarrollo de redes de computadoras personales que corren sistemas operativos en red y sistemas operativos distribuidos. En un sistema operativo en red, los usuarios tienen conocimiento de la existencia de múltiples computadoras y pueden ingresar en maquinas remotas y reproducir archivos de una maquina a la otra. Cada maquina ejecuta su sistema operativo local y tiene un usuario propio (o usuarios).
Un sistema distribuido, es aquel que se presenta ante sus usuarios como un sistema uní procesador tradicional, aunque en realidad este compuesto de múltiples procesadores. En un sistema distribuido real, los usuarios no tienen conocimiento de donde se están ejecutando sus programas o de donde están ubicados sus archivos; todo esto se debe manejar en forma automática y eficiente por medio del sistema operativo.
Los sistemas operativos en red no son fundamentalmente diferentes de los sistemas operativos uní procesadores. Sin duda necesitan un controlador de interfaz en red y algún software de bajo nivel para impulsarlo, así como programas para lograr un ingreso remoto al sistema y un acceso remoto del archivo.
Los sistemas operativos distribuidos reales requieren mas que simplemente agregar un poco de código a un sistema operativo uní procesador, ya que los sistemas operativos distribuidos y centralizados difieren de manera decisiva.

Años 40

A finales de los años 1940, con la aparición de la primera generación de computadoras, se realizaba lo que se llama el proceso en serie. Por aquel entonces no existían los sistemas operativos, y los programadores debían interactuar con el hardware del computador sin ayuda externa. Esto hacía que el tiempo de preparación para realizar una tarea fuera excesivo. Además para poder utilizar la computadora debía hacerse por turnos. Para ello se rellenaba un formulario de reserva en el que se indicaba el tiempo que el programador necesitaba para realizar su trabajo. En aquel entonces las computadoras eran máquinas muy costosas lo que hacía que estuvieran muy solicitadas y que sólo pudieran utilizarse en periodos breves de tiempo.

Años 50

En los años 1950 con el objeto de facilitar la interacción entre persona y computador, los sistemas operativos hacen una aparición discreta y bastante simple, con conceptos tales como el monitor residente, el proceso por lotes y el almacenamiento temporal.

Monitor residente

Su funcionamiento era bastante simple, se limitaba a cargar los programas a memoria, leyéndolos de una cinta o de tarjetas perforadas, y ejecutarlos. El principal problema de estos sistemas era encontrar una forma de optimizar el tiempo entre la retirada de un trabajo y el montaje del siguiente.

Procesamiento por lotes

Como solución para optimizar el tiempo de montaje surgió la idea de agrupar los trabajos en lotes, en una misma cinta o conjunto de tarjetas, de forma que se ejecutaran uno a continuación de otro sin perder apenas tiempo en la transición.Para realizar esto se utilizó una técnica de on-lining. La idea era dedicar un ordenador periférico, de menor coste y potencia, a convertir las tarjetas o la cinta perforada en información sobre cinta magnética, y la salida sobre cinta magnética en salida sobre impresora o cinta perforada. Una vez que se
Procesaban varios trabajos a cinta, ésta se desmontaba del ordenador periférico, y se llevaba a mano para su procesamiento por el ordenador principal. Cuando el ordenador principal llenaba una cinta de salida, ésta se llevaba al ordenador periférico para su paso a impresora o cinta perforada.

Almacenamiento temporal

Su objetivo era disminuir el tiempo de carga de los programas, simultaneando la carga del programa o la salida de datos con la ejecución de la siguiente tarea. Para ello se utilizaban dos técnicas, el buffering y el spooling.

Sistemas operativos desarrollados

En esta etapa estarían incluidos:

GM OS: Desarrollado por General Motors para el IBM 701.

Input Output System: Desarrollado por General Motors y la Fuerza Aérea de los Estados Unidos para el IBM 704.

FORTRAN Monitor system: Desarrollado por la aviación norteamericana para el IBM 709.

SAGE (Semi-Automatic Ground Environment): Primer sistema de control en tiempo real, desarrollado para el IBM AN/FSQ7.

SOS: Desarrollado por el IBM SHARE Users Group para el IBM 709.

Años 60

En este años 1960 se produjeron cambios notorios en varios campos de la informática, la mayoría orientados a seguir incrementando el potencial de los computadores. Para ello se utilizaban técnicas de lo más diversas:
Multiprogramación

En un sistema multiprogramado la memoria principal alberga a más de un programa de usuario. La CPU ejecuta instrucciones de un programa, cuando el que se encuentra en ejecución realiza una operación de E/S; en lugar de esperar a que termine la operación de E/S, se pasa a ejecutar otro programa. Si éste realiza, a su vez, otra operación de E/S, se mandan las órdenes oportunas al controlador, y pasa a ejecutarse otro. De esta forma es posible, teniendo almacenado un conjunto adecuado de tareas en cada momento, utilizar de manera óptima los recursos disponibles.

Tiempo compartido

En este punto tenemos un sistema que hace buen uso de la electrónica disponible, pero adolece de falta de interactividad; para conseguirla debe convertirse en un sistema multiusuario, en el cual existen varios usuarios con un terminal en línea, utilizando el modo de operación de tiempo compartido. En estos sistemas los programas de los distintos usuarios residen en memoria. Al realizar una operación de E/S los programas ceden la CPU a otro programa, al igual que en la multiprogramación. Pero, a diferencia de ésta, cuando un programa lleva cierto tiempo ejecutándose el sistema operativo lo detiene para que se ejecute otro aplicación. Con esto se consigue repartir la CPU por igual entre los programas de los distintos usuarios, y los programas de los usuarios no se sienten demasiado ralentizados por el hecho de que los recursos sean compartidos y aparentemente se ejecutan de manera concurrente.

Tiempo real

Estos sistemas se usan en entornos donde se deben aceptar y procesar en tiempos muy breves un gran número de sucesos, en su mayoría externos al ordenador. Si el sistema no respeta las restricciones de tiempo en las que las operaciones deben entregar su resultado se dice que ha fallado. El tiempo de respuesta a su vez debe servir para resolver el problema o hecho planteado. El procesamiento de archivos se hace de
Una forma continua, pues se procesa el archivo antes de que entre el siguiente, sus primeros usos fueron y siguen siendo en telecomunica
ciones


Multiprocesador

Permite trabajar con máquinas que poseen más de un procesador. En un multiprocesador los procesadores comparten memoria y reloj.

Sistemas operativos desarrollados

Además del Atlas Supervisor y el OS/360, utilizados en máquinas concretas, lo más destacable de la década es el nacimiento de Unix, que hoy en día es una de las plataformas más extendidas en el mundo de la informática.

Años 70

Debido al avance de la electrónica, pudieron empezar a crearse circuitos con miles de transistores en un centímetro cuadrado de silicio, lo que llevaría, pocos años después, a producirse los primeros sistemas integrados. Ésta década se podría definir como la de los sistemas de propósito general y en ella se desarrollan tecnologías que se siguen utilizando en la actualidad. Es en los años 1970 cuando se produce el boom de los miniordenadores y la informática se acerca al nivel de usuario. En lo relativo a lenguajes de programación, es de señalar la aparición de Pascal y C, el último de los cuales sería reutilizado para reescribir por completo el código del sistema operativo Unix, convirtiéndolo en el primero implementado en un lenguaje de alto nivel. En el campo de la programación lógica se dio a luz la primera implementación de Prolog, y en la revolucionaria orientación a objetos, Smalltalk.

Inconvenientes de los sistemas existentes

Se trataba de sistemas grandes y costosos, pues antes no se había construido nada similar y muchos de los proyectos desarrollados terminaron con costes muy por encima del presupuesto y mucho después de lo que se marcaba como fecha de analización. Además, aunque formaban una capa entre el hardware y el usuario, éste debía conocer un complejo lenguaje de control para realizar sus trabajos. Otro de los inconvenientes es el gran consumo de recursos que ocasionaban, debido a los grandes espacios de memoria principal y secundaria ocupados, así como el tiempo de procesador consumido. Es por esto que se intentó hacer hincapié en mejorar las técnicas ya existentes de multiprogramación y tiempo compartido.

Características de los nuevos sistemas

Para solventar los problemas antes comentados, se realizó un costosísimo trabajo para interponer una amplia capa de software entre el usuario y la máquina, de forma que el primero no tuviese que conocer ningún detalle de la circuitería.
Sistemas operativos desarrollados

MULTICS (Multiplexed Information and Computing Service): Originalmente era un proyecto cooperativo liderado por Fernando Corbató del MIT, con General Electric y los laboratorios Bell, que comenzó en los 60, pero los laboratorios Bell abandonaron en 1969 para comenzar a crear el sistema UNIX. Se desarrolló inicialmente para el mainframe GE-645, un sistema de 36 bits; después fue soportado por la serie de máquinas Honeywell 6180.
Fue uno de los primeros sistemas operativos de tiempo compartido, que implementó un solo nivel de almacenamiento para el acceso a los datos, desechando la clara distinción entre los ficheros y los procesos en memoria, y uno de los primeros sistemas multiprocesador.

MVS (Múltiple Virtual Storage): Fue el sistema operativo más usado en los modelos de mainframes -ordenadores grandes, potentes y caros usados principalmente por grandes compañías para el procesamiento de grandes cantidades de datos- System/370 y System/390 de IBM, desarrollado también por IBM y lanzado al mercado por primera vez en 1974. Como características destacables, permitía la ejecución de múltiples tareas, además de que introdujo el concepto de memoria virtual y finalmente añadió la capacidad de que cada programa tuviera su propio espacio de direccionamiento de memoria, de ahí su nombre.

CP/M (Control Program/Monitor): Desarrollado por Gary Kildall para el microprocesador 8080/85 de Intel y el Zilog Z80, salió al mercado en 1976, distribuyéndose en disquetes de ocho pulgadas. Fue el SO más usado en las computadoras personales de esta década. Su éxito se debió a que era portable, permitiendo que diferentes programas interactuasen con el hardware de una manera estandarizada. Estaba compuesto de dos subsistemas:

CCP (Comand Control Processor): Intérprete de comandos que permitía introducir los mandatos con sus parámetros separados por espacios. Además, los traducía a instrucciones de alto nivel destinadas a BDOS.

BDOS (Basic Disk Operating System): Traductor de las instrucciones en llamadas a la BIOS.

El hecho de que, años después, IBM eligiera para sus PCS a MS-DOS supuso su mayor fracaso, por lo que acabó desapareciendo