Historia y evolución de los sistemas operativos
Un sistema operativo no tiene sentido sin una máquina a la cual proveer los servicios
correspondientes. Como vimos en la clase pasada, un sistema operativo es un conjunto de
programas que trabajan para cumplir una serie de funciones, en esencia dos: a) proporcionar
una interfaz más sencilla a los usuarios (programas o humanos); b) administrar los recursos del
Hardware, ya sea en el tiempo como en el espacio.
Debido a esto es que su historia y su evolución están íntimamente ligadas a la historia y
evolución del hardware que soportan, y es por eso que debemos insistir en conocer esa historia.
Además, cualquier hito importante en la historia de los Sistemas Operativos, repercutirá en la
evolución posterior, es decir, una vez que se ha realizado un descubrimiento que mejora
sustancialmente el funcionamiento (por ejemplo: un algoritmo de reemplazo de página), los
programadores posteriores podrán aprovechar ese descubrimiento en sus futuros desarrollos.
Antes de las Computadoras Digitales
El primer ordenador digital verdadero fue diseñado por el matemático inglés 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 logró que funcionara adecuadamente debido a que era
una máquina puramente mecánica, y la tecnología de su época no era capaz de producir las
ruedas, engranajes y levas necesarias con la suficiente precisión que se necesitaba.
La máquina analítica carecía por completo de un sistema operativo. Babbage se dio cuenta de
que necesitaría software para su máquina, por lo que contrató a una joven mujer llamada Ada
Lovelace, hija del famoso poeta inglés Lord Byron, como la primera programadora de la historia.
El lenguaje de programación Ada® se llama así en su honor.
Tras los infructuosos esfuerzos de Babbage, hubo pocos avances en la construcción de
computadoras digitales hasta la Segunda Guerra Mundial.
En torno a mediados de la década de 1940, Howard Aiken en Harvard; y Konrad Zuse en
Alemania, entre otros, tuvieron todos éxito en la construcción de máquinas de calcular.
Howard Aiken – Harvard Mark I: El IBM Automatic Sequence Controlled Calculator (ASCC), más conocido como Harvard Mark I o Mark I, fue el primer ordenador electromecánico, construido en IBM y enviado a Harvard en 1944. Tenía 760.000 ruedas y 800 kilómetros de cable y se basaba en la máquina analítica de Charles Babbage. El computador empleaba señales electromagnéticas para mover las partes mecánicas. Esta máquina era lenta (tomaba de 3 a 5 segundos por cálculo) e inflexible (la secuencia de cálculos no se podía cambiar); pero ejecutaba operaciones matemáticas básicas y cálculos complejos de ecuaciones sobre el movimiento parabólico. Funcionaba con relés, se programaba con interruptores y leía los datos de cintas de papel perforado. La Mark I se programaba recibiendo sus secuencias de instrucciones a través de una cinta de papel, en la cual iban perforadas las instrucciones y números que se transferían de un registro a otro por medio de señales eléctricas. El tiempo mínimo de transferencia de un número de un registro a otro y en realizar cada una de sus operaciones básicas (resta, suma,
multiplicación y división) era de 0,3 segundos. Aunque la división y la multiplicación eran más lentas. La capacidad de modificación de la secuencia de instrucciones con base en los resultados producidos durante el proceso de cálculo era pequeño. La máquina podía escoger de varios algoritmos para la ejecución de cierto cálculo. Sin embargo, para cambiar de una secuencia de instrucciones a otra era costoso, ya que la máquina se tenía que detener y que los operarios cambiaran la cinta de control. Por tanto, se considera que la Mark I no tiene realmente saltos condicionales.
Konrad Zuse - Z3: La computadora Z3 fue la primera máquina programable y completamente automática, características usadas para definir a un computador. De tecnología electromecánica, estaba construido con 2300 relés, tenía una frecuencia de reloj de ~5 Hz, y una longitud de palabra de 22 bits. Los cálculos eran realizados con aritmética de punto flotante puramente binaria. La máquina fue completada en 1941.
Estas primeras computadoras utilizaban relés mecánicos por lo que eran muy lentas, con
tiempos de ciclo medidos en términos de segundos.
La Primera Generación de computadoras (1945-1955): Tubos de Vacío y Tableros de
Conexiones
La generación 0 de Sistemas Operativos
John P. Eckert y John W. Mauchly construyeron en 1946, en la Universidad de Pennsylvania, el
ENIAC, primer computador electrónico, compuesto de 17.468 válvulas o tubos de vidrio al vacío
(más resistencias, condensadores, etc.), con 32 toneladas de peso, 2,40 de ancho y 30 metros de
largo. El calor de las válvulas elevaba la temperatura del local hasta los 50º. Para efectuar
diferentes operaciones, debían cambiarse las conexiones (cables) como en las viejas centrales
telefónicas, lo cual era un trabajo que podía tomar varios días. Era capaz de calcular con gran
velocidad la trayectorias de proyectiles, principal objetivo inicial de su construcción.
A fines de los 40´s el uso de computadores estaba restringido a aquellas empresas o
instituciones que podían pagar su alto precio, y no existían los sistemas operativos.
El programador debía tener un conocimiento y contacto profundo con el hardware, y en el
infortunado caso de que su programa fallara, debía examinar los valores de los registros y
paneles de luces indicadores del estado de la computadora para determinar la causa del daño y
poder corregir su programa, además de enfrentarse nuevamente a los procedimientos de
apartar tiempo del sistema y poner a punto los compiladores, etc.; para volver a correr su
programa, es decir, enfrentaba el problema del procesamiento serial (serial processing).
La segunda Generación de Computadoras
Generación I de Sistemas Operativos – Años 50
La introducción del transistor a mediados de la década de 1950 cambió radicalmente el
panorama. Los computadores se volvieron lo bastante fiables como para fabricarse y venderse a
clientes dispuestos a pagar por ellos con la confianza de que les seguirían funcionando el tiempo
suficiente como para completar algún trabajo útil. Por primera vez hubo una separación clara
entre diseñadores, constructores, operadores, programadores y personal de mantenimiento.
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: Según fue avanzando la complejidad de los programas, fue necesario
implementar soluciones que automatizaran la organización de tareas sin necesidad de un
operador. Debido a ello se crearon los monitores residentes: programas que residían en
memoria y que gestionaban la ejecución de una cola de trabajos. Un monitor residente estaba
compuesto por un cargador, un Intérprete de comandos y un Controlador (drivers) para el
manejo de entrada/salida.
Procesamiento por Lotes: Los sistemas operativos por lotes requieren que la información esté
reunida en bloque o "lote" (el programa, los datos, y las instrucciones). Los trabajos son
procesados en el orden de admisión, según el modelo de "primero en llegar primero en ser
atendido". En estos sistemas la memoria se divide en dos zonas. Una de ellas es ocupada por el
sistema operativo, y la otra se usa para cargar programas transitorios para su ejecución. Cuando
termina la ejecución de un programa se carga un nuevo programa en la misma zona de
memoria.
La idea consistía en llenar completamente una bandeja de trabajos procedentes del cuarto de
entrada para luego pasarlos a una cinta magnética, empleando un computador pequeño y
(relativamente) barato, como el IBM 1401, el cual era muy bueno para leer tarjetas, copiar
cintas e imprimir salidas, pero realmente penoso para realizar cálculos numéricos.
Otras máquinas mucho más caras, como el IBM 7094, realizaban los cálculos propiamente
dichos
Lo primero era una tarjeta $JOB, que especificaba el tiempo de ejecución máximo expresado en
minutos, el número de cuenta al cual cargar el coste del procesamiento y el nombre del
programador. Luego venía una tarjeta $FORTRAN, que indicaba al sistema operativo que debía
cargar el compilador de FORTRAN de la cinta del sistema. Después venía el programa a compilar
y luego una tarjeta $LOAD, que indicaba al sistema operativo que debía cargar en memoria el
programa objeto recién compilado. A continuación venía la tarjeta $RUN, que indicaba al
sistema operativo que debía ejecutar el programa con los datos que venían a continuación de
esa tarjeta. Por último, la tarjeta END marcaba el final del trabajo. Estas primitivas tarjetas de
control fueron las precursoras de los lenguajes de control de trabajos e intérpretes de comandos
modernos.
Almacenamiento Temporal: Se avanza en el hardware, creando el soporte de interrupciones.
Luego se lleva a cabo un intento de solución más avanzado: solapar la E/S de un trabajo con sus
propios cálculos. Por ello se crea el sistema de buffers con el siguiente funcionamiento:
Un programa escribe su salida en un área de memoria (buffer 1).
El monitor residente inicia la salida desde el buffer y el programa de aplicación calcula
depositando la salida en el buffer 2.
La salida desde el buffer 1 termina y el nuevo cálculo también.
Se inicia la salida desde el buffer 2 y otro nuevo cálculo dirige su salida al buffer 1.
El proceso se puede repetir de nuevo.
Los problemas surgen si hay muchas más operaciones de cálculo que de E/S (limitado por la
CPU) o si por el contrario hay muchas más operaciones de E/S que cálculo (limitado por la E/S).
Multiprocesador: Permite trabajar con máquinas que poseen más de un microprocesador. Se
denomina multiprocesador a un computador que cuenta con dos o más microprocesadores
(CPUs). Gracias a esto, el multiprocesador puede ejecutar simultáneamente varios hilos
pertenecientes a un mismo proceso o bien a procesos diferentes. Los multiprocesadores
presentan problemas de diseño que no se encuentran en computadoras monoprocesador. Estos
problemas derivan del hecho de que dos programas pueden ejecutarse simultáneamente y,
potencialmente, pueden interferirse entre sí. Concretamente, en lo que se refiere a las lecturas y
escrituras en memoria. Existen dos arquitecturas que resuelven estos problemas:
La arquitectura NUMA, donde cada procesador tiene acceso y control exclusivo a una parte de la
memoria.
La arquitectura SMP, donde todos los procesadores comparten toda la memoria. Esta última
debe lidiar con el problema de la coherencia de caché. Cada microprocesador cuenta con su
propia memoria cache local. De manera que cuando un microprocesador escribe en una
dirección de memoria, lo hace únicamente sobre su copia local en caché. Si otro
microprocesador tiene almacenada la misma dirección de memoria en su caché, resultará que
trabaja con una copia obsoleta del dato almacenado.
Para que un multiprocesador opere correctamente necesita un sistema operativo especialmente
diseñado para ello. La mayoría de los sistemas operativos actuales poseen esta capacidad.
Spoolers: Hace aparición el disco magnético con lo que surgen nuevas soluciones a los
problemas de rendimiento. Se eliminan las cintas magnéticas para el volcado previo de los datos
de dispositivos lentos y se sustituyen por discos (un disco puede simular varias cintas). Debido al
solapamiento del cálculo de un trabajo con la E/S de otro trabajo se crean tablas en el disco para
diferentes tareas, lo que se conoce como Spool (Simultaneous Peripherial Operation On-Line)
Años 60
En los años 60 se produjeron cambios notorios en varios campos de la informática, con la
aparición del circuito integrado 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 lentos 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 computador. 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
telecomunicaciones. Ej: Centrales Telefónicas Digitales
Sistemas operativos de esta época: Además del Atlas Supervisor y el OS/360 (que uniformiza
todos los modelos IBM), los sesenta marcaron el inicio de UNIX, a mediados de los 60 aparece
Multics, sistema operativo multiusuario - multitarea desarrollado por los laboratorios Bell de
AT&T y programado en PL/1 uno de los pocos SO desarrollados en un lenguaje de alto nivel en
aquel tiempo, luego del fracaso del proyecto, UNIX comienza a desarrollarse a partir de este a
finales de la década.
Años 70
Debido al avance de la electrónica, pudo 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 producir 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 70
cuando se produce el boom de los mini computadores 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 se creó específicamente para reescribir por completo el código del sistema
operativo Unix, convirtiéndolo en uno de los pocos SO escritos 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 costos muy por encima del presupuesto y mucho después de lo que se marcaba como fecha
de finalizació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.
Sistemas operativos desarrollados en esta época:
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 archivos y los procesos en
memoria, y uno de los primeros sistemas multiprocesador.
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 portátil, permitiendo que diferentes programas interactuasen con el hardware
de una manera estandarizada. Estaba compuesto de tres subsistemas:
CCP Procesador Control de Comandos. BDOS Sistema Operativo Básico en Disco. BIOS Sistema de Entrada y Salida Básico, (dependiente de la máquina)
CCP era un Intérprete de comandos que permitía introducir mandatos y sus parámetros separados por espacios. Unos pocos de estos mandatos eran internos al propio Sistema Operativo. Pero si el mandato no era reconocido, se buscaba un programa con el mismo nombre en el directorio actual del disco. Permitiendo traducir los mandatos del usuario en un conjunto de instrucciones de alto nivel destinadas al sistema básico en disco. Así mismo, los programas podían comunicarse con BDOS para realizar tareas abstractas tales como "abrir fichero", luego, el BDOS traducía dichas instrucciones en llamadas a la BIOS de la computadora.
Años 80
Con la creación de los circuitos LSI -integración a gran escala-, chips que contenían miles de
transistores en un centímetro cuadrado de silicio, empezó el auge de los ordenadores
personales. En éstos se dejó un poco de lado el rendimiento y se buscó más que el sistema
operativo fuera amigable, surgiendo menúes, e interfaces gráficas. Esto reducía la rapidez de las
aplicaciones, pero se volvían más prácticos y simples para los usuarios.
En esta época, siguieron utilizándose lenguajes ya existentes, como Smalltalk o C, y nacieron
otros nuevos, de los cuales se podrían destacar: C++ y Eiffel dentro del paradigma de la
orientación a objetos. Un avance importante que se estableció a mediados de la década de 1980
fue el desarrollo de redes de computadoras personales que corrían sistemas operativos en red y
sistemas operativos distribuidos. En esta escena, dos sistemas operativos eran los mayoritarios:
MS-DOS, escrito por Microsoft para IBM PC y otras computadoras que utilizaban la CPU Intel
8088 y sus sucesores, y UNIX, que dominaba en los ordenadores personales que hacían uso del
Motorola 68000.
MS DOS: En 1975, en Harvard, Bill Gates y Paul Allen programaban un lenguaje de
programación (BASIC) para el primer micro ordenador: el Altair. Fue entonces cuando
decidieron abandonar los estudios y crear su propia empresa: Microsoft. En 1980 la IBM decidió
ingresar al mercado de las computadoras personales, y fue tal su prisa que primero desarrolló su
arquitectura de hardware, para después buscar el sistema operativo. Pensaron en primer lugar
en Gary Kildall, fundador de la Digital Research Inc. y autor CP/M. Con criterio especulativo,
Kildall viajó a Florida en compañía de su esposa y se dedicó a divertirse, realizar vuelos en
avioneta, etc. y no atendía las desesperadas llamadas telefónicas de IBM. Enterado de esta
situación Bill Gates acudió a una empresa llamada Seattle Computer Products, para la cual
trabajaba el Ing. Tim Paterson, quien había “clonado” CP/M, el cual evidentemente había sido
desensamblado y alterado, al que denominó Quick and Dirty D.O.S o QDOS. En 1981 Microsoft,
adquirió los "derechos de autor" de este sistema operativo, por US $ 50,000 y contrató a Tim
Paterson, para que trabajase 4 días a la semana, con el objeto de que realizara "algunos
cambios", para poder "transformar" al sistema. Este mismo producto "mejorado" por Microsoft,
fue vendido a la IBM, bajo el nombre de PC-DOS y Microsoft se reservó el derecho de poder
comercializarlo bajo el nombre de MS-DOS. Microsoft vendió el sistema a IBM quien permitió a
Bill no incluir en esa venta la exclusividad de su uso. IBM tenía su IBM-DOS, pero Microsoft
también lo tenía con el nombre de MS-DOS.
Apple Macintosh: El lanzamiento oficial se produjo en enero de 1984, al precio de 2.495 dólares.
Muchos usuarios, al ver que estaba completamente diseñado para funcionar a través de una GUI
(Graphic User Interface), acostumbrados a la línea de comandos, lo tacharon de juguete. A pesar
de todo, el Mac se situó a la cabeza en el mundo de la edición a nivel gráfico. A Steve Jobs
Fortune Magazine lo ha denominado el businessman más poderoso del medio dentro de su
Top25. Después de una tormentosa historia de Steve como Fundador de Apple Computer
y después de una inminente quiebra, Steve vuelve con el gadget mas deseado por todos: el iPod
ese aparatito que hizo que Apple renaciera como un Fenix. Con el mercado en sus manos Steve
lanzo iTunes Music Store que fue la puerta a la grandeza y riqueza. Con el mundo a sus pies
Steve mostró al mundo que aun faltan cosas por conocer. Claro que mas el Gadget del año el
iPhone.
Años 90
GNU/Linux: Linux nació gracias a la idea de Linus Torvalds de crear un sistema basado en Unix
para máquinas i386. En más de una ocasión, Linus Torvalds ha afirmado que si hubiera sabido
de la existencia de los sistemas BSD que ya cumplían lo que hacía Linux, no se habría molestado
en modificar Minix. MINIX fue creado por Andrew Tanenbaum cuando AT&T registra UNIX y no
autoriza su distribución gratuita ni siquiera para fines educativos. La historia de Linux está
fuertemente vinculada a la del proyecto GNU. El proyecto GNU, iniciado en 1983, tiene como
objetivo el desarrollo de un sistema Unix completo compuesto enteramente de software libre.
Hacia 1991, cuando la primera versión del núcleo Linux fue liberada, el proyecto GNU había
producido varios de los componentes del sistema operativo, incluyendo un intérprete de
comandos, una biblioteca C y un compilador, pero aún no contaba con el núcleo que permitiera
completar el sistema operativo. Entonces, el núcleo creado por Linus Torvalds, quien se
encontraba por entonces estudiando en la Universidad de Helsinki, llenó el hueco final que el
sistema operativo GNU exigía. Subsecuentemente, miles de programadores voluntarios
alrededor del mundo han participado en el proyecto, mejorándolo continuamente. Torvalds y
otros desarrolladores de los primeros días de Linux adaptaron los componentes de GNU y de
BSD, así como de otros muchos proyectos como Perl, Apache, Python, etc. para trabajar con el
núcleo Linux, creando un sistema operativo completamente funcional procedente de muchísimas
fuentes diferentes, la mayoría libres.
Un estudio sobre la distribución Red Hat 7.1 reveló que ésta en particular posee más de 30
millones de líneas de código real. Utilizando el modelo de cálculo de costos COCOMO, puede
estimarse que esta distribución requeriría 8.000 programadores por año para su desarrollo. De
haber sido desarrollado por medios convencionales de código cerrado, hubiera costado más de
mil millones de dólares en los Estados Unidos
Linus Torvald: Se puede decir que creció hacker porque en su adolescencia se entretenía
programando en lenguaje ensamblador, en una computadora Commodore. En pocos años que
llegço a estudiar en la Universidad Tecnológica de Helsinki. En la primavera de 1989, mientras
estaba en la universidad, empezó a trabajar en el desarrollo de un kernel basado en el sistema
operativo propietario UNIX para computadoras con procesadores Intel. Una vez creado, lo puso
a disposición del público a través de un servidor FTP de la universidad finlandesa. Linux era el
nick (apodo) de Linus en la universidad, para evitar que lo acusaran de egocéntrico, quiso llamar
a su cración Freax (free+freak+x) pero el webmaster decidió que le gustaba más Linux.
Top Related