Breve historia

Anuncio
Historia de los sistemas Operativos
La evolución de los sistemas operativos (SO) es paralela a la evolución de
las computadoras debido a que una de sus funciones principales es controlar
los recursos (de software y hardware) asociados a ella.
Las primeras computadoras eran muy costosas de ahí que la principal
función de los SO de esa época era “controlar eficientemente los recursos
del sistema”. Resulta comprensible que tener equipos tan costosos inactivos
o usados de forma ineficiente representaba un costo económico demasiado
alto.
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 que en muchos
casos la usan 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.
Década del 40
Los primeros sistemas de cómputo no tenían SO, las computadoras se
controlaban actuando directamente con el hardware, de ahí que su
explotación estuviera asignada a personas muy especializadas. En realidad
el programador era el propio operador por lo que tenía que dominar los
detalles del hardware y la forma de explotarlo.
Figura 1. Tubo al vacío
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 de tubos al vacío (bulbos) que ocupaban salones enormes y la
computación estaba muy lejos 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.
Los 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 2, muestra una computadora de esa época, la Z4 diseñada por el
científico alemán Konrad Suze.
Figura 2. La Z4 de Konrad Suze (1942-1945)
Década del 50
En esta época las computadoras seguían siendo muy caras y por esa razón
se sentía la necesidad de hacer que trabajaran lo más eficientemente
posible. Una forma para vencer la barrera de los costos era tratar de
mantener la computadora ocupada el mayor tiempo posible.
La solución tomó dos caminos principales, el primero se reflejó en dos
trabajos distintos:
•
uno con relación a la eficiencia de la persona que trabajaba con la
computadora
hizo
surgir
el
nuevo
trabajo
de
“operador
de
computadora” el cual tenía la responsabilidad de mantenerla ocupada
todo el tiempo, disminuyendo los tiempos en que debían permanecer
sus componentes inactivos (principalmente la CPU),
•
el segundo con respecto a la tarea de programar hizo más específica
la labor de este especialista que, a partir de ese momento y por mucho
tiempo, no tendría que interactuar más con la máquina.
El segundo camino hizo surgir el concepto de lote de tareas que consiste en
agrupar un conjunto de tareas con requisitos afines, en una sola tarea. El
operador sometía la tarea (como un todo) al equipo de cómputo y las salidas
se clasificaban para enviarla al destino apropiado. Un ejemplo típico de un
lote de trabajo consiste en la compilación de varios programas con el mismo
compilador (Fortran, por ejemplo).
Esta solución no resolvía el problema totalmente, por ejemplo si un trabajo se
detenía el operador debía darse cuenta de eso (observando la consola)
determinar si la terminación era normal o anormal, hacer un vaciado de
memoria (si era necesario) para después cargar el lector con el próximo
trabajo y restaurar la computadora. Durante todo ese tiempo, la CPU estaba
inactiva y ese era un tiempo muy grande para el costo de las computadoras
de esa época.
Para paliar la situación anterior se introdujo el concepto de secuencia
automática de trabajo y en ese instante surgió, realmente, el primer SO
rudimentario. La solución consistía en tener cargado un pequeño programa
llamado monitor residente (porque siempre estaba en memoria) que se
encargara de transferir el control de un trabajo a otro en forma automática.
Este SO rudimentario tomaba el control cuando la computadora se encendía
y se lo transfería a un programa, el cual debía devolver el control al SO al
terminar para que de nuevo el SO le transfiriera el control a otro programa y
así hasta terminar.
Para hacer esas tareas surgió un lenguaje de control de tareas o JCB por
sus siglas en inglés (Job Control Language) que permitía establecer la
secuencia de trabajos que debía seguir el SO. La secuencia era el conjunto
de órdenes al SO que se daban a través de tarjetas perforadas que se
ponían antes de las tarjetas que contenían el programa.
El problema que debían resolver los SO de tratamientos por lotes está
relacionado con el logro de una mejor eficiencia reduciendo al máximo el
tiempo de espera que provoca el cambio manual de tareas, para lo cual se
instrumentó el monitor residente. Aún así quedaba un problema que se
relaciona con la reducida velocidad de los equipos periféricos con relación a
la CPU, para lo cual se buscó una alternativa que pudiera disminuir el tiempo
que debía esperar la CPU cada vez que tenía la necesidad de hacer una
entrada o salida.
Figura 3.UNIVAC (UNIVersal Automatic Computer) 1951
La figura 3 muestra la computadora UNIVAC, obsérvese (en primer plano) la
consola del operador y en segundo plano las torres de banda magnética.
La UNIVAC fue la primera computadora que se construyó con un propósito
no militar, su costo estaba entre el millón o millón y medio de dólares (el dólar
de aquellos tiempos tenía más valor), pesaba 7257 kg, estaba compuesta por
5000 tubos de vacío y podía ejecutar unos 1000 cálculos por segundo. Fue la
primera computadora comercial de EE.UU.
La UNIVAC se utilizó para predecir los resultados de las elecciones
presidenciales entre
Eisenhower y Stevenson y acertó pero la prensa lo
atribuyó a que formaba parte de la campaña política, la máquina original está
en el museo Smithsonian (se hicieron alrededor de 46 similares a ella).
Inicio de la década del 60
Operación fuera de línea
Aunque los periféricos incrementaron su velocidad (y aún hoy la siguen
incrementando) nunca lograron alcanzar (ni parece razonable que la
alcancen) la velocidad de la CPU que también se fue incrementando con el
tiempo.
Una solución fue la de sustituir los lentos equipos de entrada salida por otros
equipos más rápidos, por ejemplo los lectores de tarjetas dejaron de
conectarse directamente a la CPU y su lugar fue tomado por lectores de
banda magnética (considerablemente más rápidos). La idea principal
consistía en llenar la cinta en otro equipo (fuera de línea) y llevarla al equipo
conectado a la computadora una vez llenada (el operador hacía esa función).
Esta solución tuvo dos alternativas:
•
La primera fue la de especializar equipos de entrada y salida para
conectarse directamente con los equipos de bandas magnéticas para
el llenado de las cintas.
•
La segunda fue especializar pequeñas computadoras satélites (no
conectadas a la computadora principal) para que cumplieran la misión
del llenado de las cintas. Cabe señalar que este es el antecedente
más remoto de la multicomputadora.
Esta idea permite que una tarea corra sin tomar en cuenta si la entrada o la
salida se origina o envía a un equipo u otro, el programador no necesita decir
hacia donde va a escribir o desde donde va a leer para lo cual debe haber
algún agente (una parte del SO) que se encargue de manejar el problema.
Esta concepción de programar usando equipos lógicos (no físicos o reales)
se conoce como independencia del equipo.
Spooling
La operación fuera de línea no duró mucho tiempo, los sistemas con discos
se hicieron dueños del panorama rápidamente, la velocidad de estos
periféricos con relación a todos sus antecesores era muy grande, por otra
parte los discos eliminaban el principal defecto de la cinta que consistía en la
forma secuencial de acceder a los datos y permitía que varios juegos de
tarjetas (de trabajos diferentes) fueron almacenados en áreas distintas del
disco que podían accederse en el momento deseado con solo mover el
cabezal de lectura/escritura.
En estos sistemas las tarjetas se leían directamente desde el lector de
entrada y se almacenaban en áreas diferentes del disco, manteniendo una
cierta tabla que describía los lugares donde las imágenes de entrada
residían. Esta forma de trabajo recibió el nombre de SPOOL (simultaneous
peripherical operating on line) por el significado de sus siglas en inglés, y la
idea principal es que las entradas (o salidas) de un trabajo vayan a parar a
un lugar del disco desde el que son tomadas o hacia el cual son escritas
cuando se necesitan. Queda claro que en este esquema se logra que un
equipo físico se transforme en varios equipos virtuales. Los sistemas spool
forman parte de la mayoría de los SO modernos ya que sus ideas
(modernizadas) aún son válidas y seguramente los lectores han podido ver
esa tarea reportada por el administrador de tareas de los SO de la familia
Windows.
La figura 4, muestra una idea esquematizada de los sistemas de spool.
Disco
E-
Entrada
Salida
CPU
Figura 4. Idea esquematizada de un sistema de spool
Mediados del 60
A mediados de los años 60 surgieron las computadoras de tercera
generación que eran muy veloces al compararlas con sus antecesores y
provocaban problemas cuando interactuaban con dispositivos relativamente
lentos, la solución a este problema hizo surgir la multiprogramación que no
es más que cargar varios trabajos en memoria y compartir el uso de la CPU.
El SO escoge uno de los trabajos que están listos y comienza a ejecutarlo,
puede que dicho trabajo tenga que esperar por algún evento externo (una
entrada, una salida, etc.), el sistema operativo, en lugar de quedarse inactivo
mientras espera que se satisfaga la demanda del trabajo, se cambia hacia
otro trabajo y lo ejecuta.
El principal problema de esta concepción es que si un trabajo está acotado a
CPU (usa más CPU que entrada salida, por ejemplo los programas de
cálculo científico), no da oportunidad para que otros se ejecuten. Por ese
motivo surgieron los sistemas de tiempo compartido (no es más que una
variante de la multiprogramación) en los cuales el procesador no se
abandona en forma voluntaria, en lugar de eso el SO asigna espacios de
tiempo conocidos como quantum para cada proceso y una vez vencidos los
quantum asignados, le quita el procesador y lo transfiere a otro trabajo.
La figura 5 presenta una computadora de la familia IBM, muy popular en la
época, que se fabricó por primera vez en 1964 y se comercializó entre ese
año y 1978.
Para explotar estas computadoras se desarrolló el sistema operativo
Operating System/360 (OS/360) que podía trabajar sobre las grandes
computadoras de la IBM y también se desarrolló el Basic Operating
System/360 (BOS/360) para las máquinas medianas.
Figura 5. IBM 360 1964
Década de los 70
A fines de los 70 las computadoras tenían CPU más rápidas y se hizo mayor
el distanciamiento entre éstas y los equipos de entrada/salida, los esquemas
de multiprogramación estaban limitados por el tamaño de la memoria que no
permitía cargar más trabajos. Surgió la idea de la memoria virtual, la cual
consiste, en esencia, en usar la memoria secundaria o externa (de forma
transparente a los usuarios) como una expansión de la memoria principal, los
trabajos se dividen en unidades lógicas que solo se cargan cuando se
necesitan lo que permite trabajar con más tareas “a la vez”.
En esta época se le prestó mayor atención a la conservación de los recursos
de datos, el software de administración de bases de datos se convirtió en una
herramienta popular. Los programas se distanciaron más y más de las
especificaciones de hardware o de software de “bajo nivel” y se convirtieron
en juegos de palabras más cercanos a los lenguajes humanos o naturales.
En el año 1971 Intel introduce el primer microprocesador (el Intel 4004) lo
que daría comienzo posteriormente a la época de las microcomputadoras y a
la expansión de estos importantes equipos a todas las esferas incluido los
hogares. Existe mucha discusión acerca de cuál fue la primera computadora
personal, incluso, algunos autores se remiten a épocas tan remotas como la
década del 50 para lo cual se basan en varios aspectos (entre ellos el costo),
sin embargo no hay duda alguna de que el surgimiento del microprocesador
fue el que denotó la explosión que dio inicio a la proliferación de estas
máquinas.
Década de los 80
Se mejoró, notablemente, la relación costo/rendimiento de las computadoras,
el hardware se hizo más flexible con tarjetas de fácil reemplazo que
incorporaban funciones lógicas, más y más funciones del SO pasaron del
software al hardware, lo que acuñó el nuevo término de firmware.
La industria pasó al multiprocesamiento (uso de más de un procesador) y se
elaboraron lenguajes que permitieran el manejo de los distintos procesadores
que formaban parte de las máquinas. Por supuesto que los sistemas
operativos de esta época, debieron asimilar estos avances del hardware.
Las computadoras personales y las comunicaciones de alta velocidad
llevaron al procesamiento distribuido y a las redes de computadoras.
Década de los 90
A mediados de los 90 la demanda generalizada de capacidades de Internet
originó la proliferación de la redes, hoy la accesibilidad a Web y el
intercambio de correo electrónico son características comunes a los sistemas
operativos.
Durante esta década se incrementaron las aplicaciones multimedias que
demandaron del SO potencia y flexibilidad para manejar diferentes equipos.
Con estas nuevas técnicas se hace mas necesario administrar muy
eficientemente la memoria que ha crecido enormemente, pero que a la vez
se hace más escasa ya que las aplicaciones son más gastadoras de
recursos.
Actualidad
Cada día que pasa el ser humano descubre más y más cosas, la
computadora se ha convertido en su medio auxiliar inseparable para la cual
mira cada vez que necesita resolver un problema. La solución de ese
problema, a menudo, hace que se fabriquen nuevos medios que se pueden
conectar a la máquina o que pueden incorporarse dentro de ella, cada nuevo
componente necesita ser manipulado de una forma cómoda (como hacemos
con el ratón o mouse) aislando al usuario (en el sentido amplio, persona u
otro software) de sus interioridades. En todas esas nuevas soluciones deberá
estar el SO como intermediario ideal y la tendencia es que esos nuevos
medios se instalen de manera automática lo que se ha denominado
tecnología plug and play.
Descargar