next up previous contents
Next: Introducción Up: El Sistema Operativo Unix Previous: Objetivos   Índice General

Antecedentes

Entendemos por sistema operativo al programa que sirve de enlace entre el usuario, las aplicaciones y el sistema de archivos, así como entre las aplicaciones y los dispositivos y entre las propias aplicaciones en el caso de sistemas operativos que permiten varias tareas simultáneamente.

En una extensión de la idea anterior están los sistemas operativos multi usuarios, donde además el sistema operativo puede proveer la comunicación entre aplicaciones de usuarios, como en el caso de Unix1.1.

El propósito primordial de un sistema operativo es el de servir de soporte a los programas que el usuario utiliza. Por ejemplo, el editor que se utiliza para elaborar un documento. Este editor no podría correr por sí mismo sin el soporte que el sistema operativo le otorga, como es el caso de recibir e interpretar los carácteres que el usuario pulsa en el teclado y mostrarlos en la pantalla, salvarlos en el disco bajo una cierta estructura que llamaremos sistema de archivos, e incluso controlar el puerto por donde se transmiten esos mismos carácteres a la impresora.

Por otra parte, todos los sistemas operativos incluyen una serie de pequeños programas o utilerías que o bien colaboran con el sistema operativo complementando las tareas, o son utilizados por los usuarios para hacer más eficiente su trabajo.

Los sistemas operativos pueden ser minimalístas (como es el caso de MS-DOS) o grandes y complejos (como OS/2 y VMS). Unix se sitúa en algún punto intermedio de estas dos categorías y es cada vez más difícil discernir su situación exacta. Aunque provee de más recursos y hace más que los primeros sistemas operativos, no alcanza a los sistemas operativos más avanzados. Ejemplos de éstos últimos son incluso antecedentes de Unix, como CTSS y Multics, de los cuales hablaremos más adelante.

El desarrollo de los sistemas operativos va necesariamente ligado al desarrollo del soporte físico, comúnmente llamado hardware. Es así que las primeras computadoras no tuvieron sistema operativo, dado lo primitivo de sus medios de almacenamiento que dependían de la alimentación eléctrica directa.

El primer sistema operativo fue desarrollado en el Centro de Investigación y Desarrollo de la General Motors Company a principio de la década de los cincuenta. Sólo contemplaba la ejecución de una tarea a la vez en un método llamado de bloques o batch.

En la siguiente década comenzaron a aparecer los sistemas operativos multi tareas, que eran capaces de procesar varios trabajos en un tiempo dado a base de repartir los tiempos de proceso. Surgieron a partir de la necesidad de aprovechar al máximo el uso del procesador. Los ingenieros de desarrollo habían observado que buena parte del tiempo empleado en ejecutar un programa, transcurría en ciclos donde el procesador central esperaba a que terminase una acción de lectura o escritura a uno de los dispositivos. Estos tiempos muertos podían ser aprovechados si momentáneamente se le pasaba al procesador otra tarea a ejecutar.

Hasta este punto la visión de uso era la siguiente: las tareas se le asignan al procesador y permanecen con el control de la computadora hasta que son terminadas. Desde el momento que se visualiza el primer sistema operativo multi tarea, el cambio es radical: una aplicación (el sistema operativo), será quien decida como se aprovecha al procesador, de tal manera que conceptualmente es ahora el procesador el que destina el orden en que las tareas serán ejecutadas.

Veamos esto con un ejemplo: en un restaurante tenemos a un sólo cocinero quién va preparando los platillos conforme le van siendo entregados. Cada nueva orden traida por alguno de los meseros se coloca debajo de las anteriores y el cocinero únicamente toma la que está arriba. Obviamente tiene tiempos muertos en los que espera a que, por ejemplo, un faisán se cocine. Este método es bastante torpe, dado que preparar un faisán puede tomar 5 minutos en sazonarse y 30 en cocción más otros 2 en lo que se presenta en el plato. Los 30 minutos de cocción pudieron ser aprovechados para tomar la siguiente orden, comenzar a prepararla y repetir el proceso hasta que se tenga ocupado todo el tiempo del cocinero.

La siguiente generación consolida la optimización del uso de recursos y se introduce el concepto de timesharing que consiste en el acceso en tiempo real de varios usuarios simultáneos. Esto permitió el desarrollo sostenido de aplicaciones cada vez más complejas y en particular de mejores sistemas operativos.

Por otra parte, el desarrollo de sistemas se ve complementado con la intrusión de computadoras en las universidades donde se pone mayor énfasis en la interacción con el usuario. Este último factor se ve beneficiado también por las repetidas caidas en los precios de equipos cada vez más sofisticados.

Con los sistemas operativos que precedieron éste periodo, el tiempo de desarollo de aplicaciones era demasiado grande. Anteriormente, el ciclo que comprendía la edición, compilación y corrección del programa podía tomar incluso días, ya que con frecuencia la computadora se encontraba a gran distancia del usuario. Las tareas eran perforadas en tarjetas, leidas por la computadora y en este paso podía ocurrir que la tarea no pudiese ser llevada a cabo por culpa de una coma fuera de lugar, produciendo un listado con los errores que, probablemente, el usuario no podría ver sino hasta unos dias después.

Al simple hecho de poder tener una respuesta inmediata de la computadora, podemos agradecer gran parte de los adelantos que hemos podido disfrutar en los últimos 30 años.

Mencionamos antes a CTSS y a Multics como precursores de Unix. Ambos fueron desarrollados en el MIT1.2, como parte de programas de investigación y desarrollo de sistemas operativos timesharing, y significaron un gran avance en términos de llevar al extremo las ideas de optimización de recursos computacionales. Ambos fueron escritos en lenguajes de alto nivel, que sería la idea seminal de Unix. La eficacia de esta manera de trabajo quedó demostrada cuando Multics fue escrito utilizando al mismo CTSS como soporte.

En 1965, los Laboratorios de Telefonía Bell (una división de AT&T) trabajaban en conjunto con General Electric y el Proyecto MAC del MIT en el desarrollo de Multics. Por diversas razones, Bell se separó del grupo pero al seguir con la necesidad de un sistema operativo con características similares, Ken Thompson y Dennis Ritchie decidieron diseñar un sistema operativo que llenara los requisitos predispuestos. En 1970, Thompson lo implementó como un ambiente de desarrollo en una PDP-7. A modo de mofa hacia Multics, Brian Kernighan lo llamó UNIX.

Algún tiempo después Ritchie desarrolló el lenguaje C de programación. En 1973 UNIX fué reescrito en C, lo cual, como veremos más adelante, lo impulsó a los niveles de popularidad en que se encuentra hoy. En 1977 UNIX fué portado a otra máquina con una arquitectura diferente a la de PDP, gracias a que, una vez transportado el compilador de C, fue recompilado con tan sólo los cambios necesarios para adecuarlo a la nueva arquitectura. Aquí nace el concepto de sistemas abiertos al que se le da tanta importancia ahora.

Al momento de diseñarlo se le dió preponderancia a un concepto revolucionario: estaría compuesto de pequeños programas de gran generalidad de tal manera que se pudiesen interconectar para realizar tareas mayores.

Su gran portabilidad facilitó que se implementara en computadoras disímiles en universidades y centros de investigación, y que posteriormente fuese utilizado en aplicaciones comerciales.

Existen dos corrientes principales: System V de Unix System Laboratories1.3 y BSD (Berkeley Software Distribution) de la Universidad de Berkeley, California. La versión de USL se encuentra en su cuarta revisión, o SVR4, mientras que la última versión que se hizo de BSD fué la 4.4 debido a diversos problemas que terminaron con una demanda de USL hacia BSD y una contra demanda de BSD a USL y el posterior abandono del grupo de Berkeley al considerar a su Unix un producto terminado y ya no de investigación.

Todos los derivados más populares toman lo mejor de cada uno de ellos. En adelante haremos referencia a particularidades tanto de SVR4 como de BSD por sus siglas.


next up previous contents
Next: Introducción Up: El Sistema Operativo Unix Previous: Objetivos   Índice General
Ismael Olea 2001-04-21