Para tratar de comprender los requisitos de un Sistema Operativo y el significado de las principales características de un Sistema Operativo contemporáneo, es útil considerar cómo han ido evolucionando estos con el tiempo.

A finales de los años 40 el uso de ordenadores estaba restringido a aquellas empresas o instituciones que podían pagar su alto precio, y no existían los sistemas operativos. En su lugar, 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 indicadoras del estado del ordenador para determinar la causa del fallo y poder corregir su programa, además de enfrentarse nuevamente a los procedimientos del sistema y poner a punto los compiladores, ligadores, etc, para volver a correr su programa.

La importancia de los sistemas operativos nace históricamente desde los años 50, cuando se hizo evidente que el operar un ordenador por medio de tableros enchufables en la primera generación y luego por medio del trabajo en lote en la segunda generación se podía mejorar notoriamente, pues el operador realizaba siempre una secuencia de pasos repetitivos, lo cual es una de las características contempladas en la definición de lo que es un programa. Es decir, se comenzó a ver que las tareas mismas del operador podían plasmarse en un programa, el cual a través del tiempo y por su enorme complejidad se le llamó "Sistema Operativo". Así, tenemos entre los primeros sistemas operativos al Fortran Monitor System (FMS) y el IBSYS.

Posteriormente, en la tercera generación de ordenadores nace uno de los primeros sistemas operativos con la filosofía de administrar una familia de ordenadores: el OS/360 de IBM. Fue este un proyecto tan novedoso y ambicioso que enfrentó por primera vez una serie de problemas conflictivos debido a que anteriormente los ordenadores eran creados para dos propósitos en general: el comercial y el científico. Así, al tratar de crear un solo sistema operativo para ordenadores que podían dedicarse a un propósito, al otro, o a ambos, puso en evidencia la problemática del trabajo en equipos de análisis, diseño e implantación de sistemas grandes. El resultado fue un sistema del cual uno de sus mismos diseñadores patentizó su opinión en la portada de un libro: una horda de bestias prehistóricas atascadas en un foso de brea.

Surge también en la tercera generación de ordenadores el concepto de la multiprogramación, porque debido al alto costo de los ordenadores era necesario idear un esquema de trabajo que mantuviese a la unidad central de proceso más tiempo ocupada, así como el encolado (spooling ) de trabajos para su lectura hacia los lugares libres de memoria o la escritura de resultados. Sin embargo, se puede afirmar que los sistemas durante la tercera generación siguieron siendo básicamente sistemas de lote.

En la cuarta generación, la electrónica avanza hacia la integración a gran escala, pudiendo crear circuitos con miles de transistores en un centímetro cuadrado de silicio y ya es posible hablar de los ordenadores personales y las estaciones de trabajo. Surgen los conceptos de interfaces amigables intentando así atraer al público en general al uso de los ordenadores como herramientas cotidianas. Se hacen populares el MS-DOS y el UNIX en estas máquinas. También es común encontrar clones de ordenadores personales y una multitud de empresas pequeñas ensamblándolas por todo el mundo.

A mediados de los años 80, comienza el auge de las redes de ordenadores y la necesidad de sistemas operativos en red y sistemas operativos distribuidos.

La red mundial Internet se va haciendo accesible a toda clase de instituciones y se comienzan a dar muchas soluciones (y problemas) al querer hacer convivir recursos residentes en ordenadores con sistemas operativos diferentes. En los años 90 el paradigma de la programación orientada a objetos cobra auge, así como el manejo de objetos desde los sistemas operativos. Las aplicaciones intentan crearse para ser ejecutadas en una plataforma específica y poder ver sus resultados en la pantalla o monitor de otra diferente (por ejemplo, ejecutar una simulación en una máquina con UNIX y ver los resultados en otra con DOS ). Los niveles de interacción se van haciendo cada vez más profundos.

¿Qué es un Sistema Operativo?

Un Sistema Operativo es un programa que actúa como intermediario entre el usuario y el hardware de un ordenador, y su propósito es proporcionar un entorno en el cual el usuario pueda ejecutar programas. El objetivo principal de un Sistema Operativo es lograr que el Sistema de computación se use de manera cómoda, y el objetivo secundario es que el hardware del ordenador se emplee de manera eficiente.

Un Sistema Operativo es una parte importante de cualquier sistema de computación. Un sistema de computación puede dividirse en cuatro componentes: el hardware, el Sistema Operativo, los programas de aplicación y los usuarios. El hardware (Unidad Central de Proceso(UCP), memoria y dispositivos de entrada/salida (E/S)) proporciona los recursos de computación básicos. Los programas de aplicación (compiladores, sistemas de bases de datos, vídeo y programas para negocios) definen la forma en que estos recursos se emplean para resolver los problemas de computación de los usuarios.

Característica de un Sistema Operativo

En general, se puede decir que un Sistema Operativo tiene las siguientes características:

Conveniencia. Un Sistema Operativo hace más conveniente el uso de un ordenador.
Eficiencia. Un Sistema Operativo permite que los recursos del ordenador se usen de la manera más eficiente posible.
Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.
Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de una mejor manera los recursos del ordenador en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos.
Relacionar dispositivos (gestionar a través del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos periféricos, cuando el usuario así lo requiera.
Organizar datos para acceso rápido y seguro.
Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar con alta facilidad todo lo referente a la instalación y uso de las redes de ordenadores.
Procesamiento por bytes de flujo a través del bus de datos.
Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fácil al usuario el acceso y manejo de los dispositivos de Entrada/Salida del ordenador.
Técnicas de recuperación de errores.
Evita que otros usuarios interfieran. El Sistema Operativo evita que los usuarios se bloqueen entre ellos, informándoles si esa aplicación esta siendo ocupada por otro usuario.
Generación de estadísticas.
Permite que se puedan compartir el hardware y los datos entre los usuarios.
El software de aplicación son programas que se utilizan para diseñar, tal como el procesador de textos, lenguajes de programación, hojas de cálculo, etc.
El software de base sirve para interactuar el usuario con la máquina. Está compuesto por : cargadores, compiladores, ensambladores y macros.

Tipos de Sistemas Operativos

Actualmente los sistemas operativos se clasifican en tres tipos: sistemas operativos por su estructura (visión interna), sistemas operativos por los servicios que ofrecen y sistemas operativos por la forma en que ofrecen sus servicios (visión externa).

Sistemas Operativos por Servicios(Visión Externa)

Por Número de Usuarios:
Sistema Operativo Monousuario.
Los sistemas operativos monousuarios son aquéllos que soportan a un usuario a la vez, sin importar el número de procesadores que tenga el ordenador o el número de procesos o tareas que el usuario pueda ejecutar en un mismo instante de tiempo. Los ordenadores personales típicamente se han clasificado en este renglón. En otras palabras, los sistemas monousuarios son aquellos que nada más pueden atender a un solo usuario, gracias a las limitaciones creadas por el hardware, los programas o el tipo de aplicación que se este ejecutando.

Sistema Operativo Multiusuario.
Los sistemas operativos multiusuarios son capaces de dar servicio a más de un usuario a la vez, ya sea por medio de varias terminales conectadas al ordenador o por medio de sesiones remotas en una red de comunicaciones. No importa el número de procesadores en la máquina ni el número de procesos que cada usuario puede ejecutar simultáneamente.
En esta categoría se encuentran todos los sistemas que cumplen simultáneamente las necesidades de dos o más usuarios, que comparten los mismos recursos. Este tipo de sistemas se emplean especialmente en redes. En otras palabras consiste en el fraccionamiento del tiempo (timesharing).

Por el Número de Tareas:
Sistema Operativo Monotarea.
Los sistemas monotarea son aquellos que sólo permiten una tarea a la vez por usuario. Puede darse el caso de un sistema multiusuario y monotarea, en el cual se admiten varios usuarios al mismo tiempo pero cada uno de ellos puede estar haciendo solo una tarea a la vez.
Los sistemas operativos monotareas son más primitivos y, solo pueden manejar un proceso en cada momento o que solo puede ejecutar las tareas de una en una.

Sistema Operativo Multitarea.
Un sistema operativo multitarea es aquél que le permite al usuario estar realizando varias labores al mismo tiempo.

Es el modo de funcionamiento disponible en algunos sistemas operativos, mediante el cual un ordenador procesa varias tareas al mismo tiempo. Existen varios tipos de multitareas. La conmutación de contextos (context Switching) es un tipo muy simple de multitarea en el que dos o más aplicaciones se cargan al mismo tiempo, pero en el que solo se esta procesando la aplicación que se encuentra en primer plano (la que ve el usuario). En la multitarea cooperativa, la que se utiliza en el sistema operativo Macintosh, las tareas en segundo plano reciben tiempo de procesado durante los tiempos muertos de la tarea que se encuentra en primer plano (por ejemplo, cuando esta aplicación esta esperando información del usuario), y siempre que esta aplicación lo permita. En los sistemas multitarea de tiempo compartido, como OS/2, cada tarea recibe la atención del microprocesador durante una fracción de segundo.

Un sistema operativo multitarea puede estar editando el código fuente de un programa durante su depuración mientras compila otro programa, a la vez que está recibiendo correo electrónico en un proceso en background. Es común encontrar en ellos interfaces gráficas orientadas al uso de menús y el ratón, lo cual permite un rápido intercambio entre las tareas para el usuario, mejorando su productividad.
Un sistema operativo multitarea se distingue por su capacidad para soportar la ejecución concurrente de dos o más procesos activos. La multitarea se implementa generalmente manteniendo el código y los datos de varios procesos simultáneamente en memoria y multiplexando el procesador y los dispositivos de E/S entre ellos.

La multitarea suele asociarse con soporte hardware y software para protección de memoria con el fin de evitar que procesos corrompan el espacio de direcciones y el comportamiento de otros procesos residentes.

Por el Número de Procesadores:
Sistema Operativo de Uniproceso.
Un sistema operativo uniproceso es aquél que es capaz de manejar solamente un procesador del ordenador, de manera que si el ordenador tuviese más de uno le sería inútil. El ejemplo más típico de este tipo de sistemas es el DOS y el MacOS.

Sistema Operativo de Multiproceso.
Un sistema operativo multiproceso se refiere al número de procesadores del sistema, que es más de uno y éste es capaz de usarlos todos para distribuir su carga de trabajo. Generalmente estos sistemas trabajan de dos formas: simétrica o asimétricamente. Asimétrica: cuando se trabaja de manera asimétrica, el sistema operativo selecciona a uno de los procesadores el cual jugará el papel de procesador maestro y servirá como pivote para distribuir la carga a los demás procesadores, que reciben el nombre de esclavos.

Simétrica: cuando se trabaja de manera simétrica, los procesos o partes de ellos (threads) son enviados indistintamente a cual quiera de los procesadores disponibles, teniendo, teóricamente, una mejor distribución y equilibrio en la carga de trabajo bajo este esquema.

Un aspecto importante a considerar en estos sistemas es la forma de crear aplicaciones para aprovechar los varios procesadores. Existen aplicaciones que fueron hechas para correr en sistemas monoproceso que no toman ninguna ventaja a menos que el sistema operativo o el compilador detecte secciones de código paralelizable, los cuales son ejecutados al mismo tiempo en procesadores diferentes. Por otro lado, el programador puede modificar sus algoritmos y aprovechar por sí mismo esta facilidad, pero esta última opción las más de las veces es costosa en horas y muy tediosa, obligando al programador a ocupar tanto o más tiempo a la paralelización que a elaborar el algoritmo inicial.

Sistemas Operativos por su Estructura (Visión Interna)

Se deben observar dos tipos de requisitos cuando se construye un sistema operativo:
Requisitos de usuario: Sistema fácil de usar y de aprender, seguro, rápido y adecuado al uso al que se le quiere destinar.
Requisitos del software: Donde se engloban aspectos como el mantenimiento, forma de operación, restricciones de uso, eficiencia, tolerancia frente a los errores y flexibilidad.
A continuación se describen las distintas estructuras que presentan los actuales sistemas operativos para satisfacer las necesidades que de ellos se quieren obtener.

Estructura Monolítica.
Es la estructura de los primeros sistemas operativos constituidos fundamentalmente por un solo programa compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una puede llamar a cualquier otra. Las características fundamentales de este tipo de estructura son:

Generalmente están hechos a medida, por lo que son eficientes y rápidos en su ejecución y gestión, pero por lo mismo carecen de flexibilidad para soportar diferentes ambientes de trabajo o tipos de aplicaciones.

Estructura Jerárquica.
A medida que fueron creciendo las necesidades de los usuarios y se perfeccionaron los sistemas, se hizo necesaria una mayor organización del software, del sistema operativo, donde una parte del sistema contenía subpartes y esto organizado en forma de niveles.
Se dividió el sistema operativo en pequeñas partes, de tal forma que cada una de ellas estuviera perfectamente definida y con un claro interface con el resto de elementos.
Se constituyó una estructura jerárquica o de niveles en los sistemas operativos, el primero de los cuales fue denominado THE (Technische Hogeschool, Eindhoven), de Dijkstra, que se utilizó con fines didácticos. Se puede pensar también en estos sistemas como si fueran `multicapa'. Multics y Unix están en esa categoría.

En la estructura anterior se basan prácticamente la mayoría de los sistemas operativos actuales. Otra forma de ver este tipo de sistema es la denominada de anillos concéntricos o "rings". En el sistema de anillos, cada uno tiene una apertura, conocida como puerta o trampa (trap), por donde pueden entrar las llamadas de las capas inferiores. De esta forma, las zonas más internas del sistema operativo o núcleo del sistema estarán más protegidas de accesos indeseados desde las capas más externas. Las capas más internas serán, por tanto, más privilegiadas que las externas.

Máquina Virtual.
Se trata de un tipo de sistemas operativos que presentan una interface a cada proceso, mostrando una máquina que parece idéntica a la máquina real subyacente. Estos sistemas operativos separan dos conceptos que suelen estar unidos en el resto de sistemas: la multiprogramación y la máquina extendida. El objetivo de los sistemas operativos de máquina virtual es el de integrar distintos sistemas operativos dando la sensación de ser varias máquinas diferentes.
El núcleo de estos sistemas operativos se denomina monitor virtual y tiene como misión llevar a cabo la multiprogramación, presentando a los niveles superiores tantas máquinas virtuales como se soliciten. Estas máquinas virtuales no son máquinas extendidas, sino una réplica de la máquina real, de manera que en cada una de ellas se pueda ejecutar un sistema operativo diferente, que será el que ofrezca la máquina extendida al usuario

Cliente-Servidor(Microkernel).
El tipo más reciente de sistemas operativos es el denominado Cliente-servidor, que puede ser ejecutado en la mayoría de las computadoras, ya sean grandes o pequeñas. Este sistema sirve para toda clase de aplicaciones; por tanto, es de propósito general y cumple con las mismas actividades que los sistemas operativos convencionales.

El núcleo tiene como misión establecer la comunicación entre los clientes y los servidores. Los procesos pueden ser tanto servidores como clientes. Por ejemplo, un programa de aplicación normal es un cliente que llama al servidor correspondiente para acceder a un archivo o realizar una operación de entrada/salida sobre un dispositivo concreto. A su vez, un proceso cliente puede actuar como servidor para otro. Este paradigma ofrece gran flexibilidad en cuanto a los servicios posibles en el sistema final, ya que el núcleo provee solamente funciones muy básicas de memoria, entrada/salida, archivos y procesos, dejando a los servidores proveer la mayoría que el usuario final o programador puede usar. Estos servidores deben tener mecanismos de seguridad y protección que, a su vez, serán filtrados por el núcleo que controla el hardware. Actualmente se está trabajando en una versión de UNIX que contempla en su diseño este paradigma.

Sistemas Operativos por la Forma de Ofrecer sus Servicios

Esta clasificación también se refiere a una visión externa, que en este caso se refiere a la del usuario, el cómo accesa a los servicios. Bajo esta clasificación se pueden detectar dos tipos principales: sistemas operativos de red y sistemas operativos distribuidos.

Sistema Operativo de Red.
Los sistemas operativos de red se definen como aquellos que tiene la capacidad de interactuar con sistemas operativos en otros ordenadores a través de un medio de transmisión con el objeto de intercambiar información, transferir archivos, ejecutar comandos remotos y un sin fin de otras actividades. El punto crucial de estos sistemas es que el usuario debe saber la sintaxis de un conjunto de comandos o llamadas al sistema para ejecutar estas operaciones, además de la ubicación de los recursos que desee añadir. Por ejemplo, si un usuario en el ordenador "hidalgo" necesita el archivo "matriz.pas" que se localiza en el directorio /software/codigo en el ordenador "morelos" bajo el sistema operativo UNIX, dicho usuario podría copiarlo a través de la red con los comandos siguientes: hidalgo% hidalgo% rcp morelos:/software/codigo/matriz.pas . hidalgo%. En este caso, el comando rcp que significa "remote copy" trae el archivo indicado del ordenador "morelos" y lo coloca en el directorio donde se ejecutó el mencionado comando. Lo importante es hacer ver que el usuario puede accesar y compartir muchos recursos.

El primer Sistema Operativo de red estaba enfocado a equipos con un procesador Motorola 68000, pasando posteriormente a procesadores Intel como Novell Netware. Los Sistemas Operativos de red mas ampliamente usados son: Novell Netware, Personal Netware, LAN Manager, Windows NT Server, UNIX, LANtastic.

Sistemas Operativos Distribuidos.
Los sistemas operativos distribuidos abarcan los servicios de los de red, logrando integrar recursos ( impresoras, unidades de respaldo, memoria, procesos, unidades centrales de proceso ) en una sola máquina virtual que el usuario accesa en forma transparente. Es decir, ahora el usuario ya no necesita saber la ubicación de los recursos, sino que los conoce por nombre y simplemente los usa como si todos ellos fuesen locales a su lugar de trabajo habitual. Todo lo anterior es el marco teórico de lo que se desearía tener como sistema operativo distribuido, pero en la realidad no se ha conseguido crear uno del todo, por la complejidad que suponen: distribuir los procesos en las varias unidades de procesamiento, reintegrar sub-resultados, resolver problemas de concurrencia y paralelismo, recuperarse de fallos de algunos recursos distribuidos y consolidar la protección y seguridad entre los diferentes componentes del sistema y los usuarios.

Los avances tecnológicos en las redes de área local y la creación de microprocesadores de 32 y 64 bits lograron que ordenadores más o menos baratos tuvieran el suficiente poder en forma autónoma para desafiar en cierto grado a los mainframes, y a la vez se dio la posibilidad de intercomunicarlos, sugiriendo la oportunidad de partir procesos muy pesados en cálculo en unidades más pequeñas y distribuirlas en los varios microprocesadores para luego reunir los sub-resultados, creando así una máquina virtual en la red que exceda en poder a un mainframe. El sistema integrador de los microprocesadores que hacen ver a las varias memorias, procesadores, y todos los demás recursos como una sola entidad en forma transparente, se le llama sistema operativo distribuído. Las razones para crear o adoptar sistemas distribuidos se dan por dos razones principales: por necesidad (debido a que los problemas a resolver son inherentemente distribuidos) o porque se desea tener más seguridad y disponibilidad de recursos.

En el primer caso tenemos, por ejemplo, el control de los cajeros automáticos. Ahí no es posible ni eficiente mantener un control centralizado, es más, no existe capacidad de cómputo y de entrada/salida para dar servicio a los millones de operaciones por minuto. En el segundo caso, supóngase que se tienen en una gran empresa varios grupos de trabajo; cada uno necesita almacenar grandes cantidades de información en el disco duro con una alta seguridad y disponibilidad. La solución puede ser que para cada grupo de trabajo se asigne una partición del disco duro en servidores diferentes, de manera que si uno de los servidores falla, no se deje dar el servicio a todos, sino sólo a unos cuantos y, más aún, se podría tener un sistema con discos en espejo (mirror) a través de la red, de manera que si un servidor se cae, el servidor en espejo continúa trabajando y el usuario no se da cuenta de estos fallos, es decir, obtiene acceso a recursos en forma transparente.

Los sistemas distribuidos deben de ser muy seguros, ya que si un componente del sistema falla, otro componente debe de ser capaz de reemplazarlo. Entre los diferentes Sistemas Operativos distribuidos que existen tenemos los siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc.

Proceso

Uno de los conceptos mas importantes que gira entorno a un sistema operativo es el de proceso. Un proceso es un programa en ejecución junto con el entorno asociado (registros, variables ,etc.).
El corazón de un sistema operativo es el núcleo, un programa de control que reacciona ante cualquier interrupción de eventos externos y que da servicio a los procesos, creándolos, terminándolos y respondiendo a cualquier petición de servicio por parte de los mismos.

Planificación del Procesador.
La planificación del procesador se refiere a la manera o técnicas que se usan para decidir cuánto tiempo de ejecución y cuándo se le asignan a cada proceso del sistema. Obviamente, si el sistema es monousuario y monotarea no hay mucho que decidir, pero en el resto de los sistemas esto es crucial para el buen funcionamiento del sistema.

Caracteristicas a considerar de los Procesos.
No todos los equipos de cómputo procesan el mismo tipo de trabajos, y un algoritmo de planificación que en un sistema funciona bien puede dar un rendimiento pésimo en otro cuyos procesos tienen características diferentes. Estas características pueden ser:

Un proceso es una actividad que se apoya en datos, recursos, un estado en cada momento y un programa.
El Bloque de Control de Procesos (PCB).
Un proceso se representa desde el punto de vista del sistema operativo, por un conjunto de datos donde se incluyen el estado en cada momento, recursos utilizados, registros, etc., denominado Bloque de Control de Procesos (PCB).
Los objetivos del bloque de control de procesos son los siguientes:
Localización de la información sobre el proceso por parte del sistema operativo.
Mantener registrados los datos del proceso en caso de tener que suspender temporalmente su ejecución o reanudarla.
La información contenida en el bloque de control es la siguiente:
Estado del proceso. Información relativa al contenido del controlador del programa (Program Counter, PC), estado de procesador en cuanto a prioridad del proceso, modo de ejecución, etc., y por ultimo el estado de los registros internos de la computadora.
Estadísticas de tiempo y ocupación de recursos para la gestión de la planificación del procesador.
Ocupación de memoria interna y externa para el intercambio (swapping).
Recursos en uso (normalmente unidades de entrada/salida).
Archivos en uso.
Privilegios.
Estas informaciones se encuentran en memoria principal en disco y se accede a ellas en los momentos en que se hace necesaria su actualización o consulta. Los datos relativos al estado del proceso siempre se encuentran en memoria principal.
Existe un Bloque de Control de Sistema (SCB) con objetivos similares al anterior y entre los que se encuentra el enlazado de los bloques de control de procesos existentes en el sistema.
El cambio de contexto se producirá en caso de ejecución de una instrucción privilegiada, una llamada al sistema operativo o una interrupción, es decir, siempre que se requiera la atención de algún servicio del sistema operativo.

Estado de los Procesos.
Los bloques de control de los procesos se almacenan en colas, cada una de las cuales representa un estado particular de los procesos, existiendo en cada bloque, entre otras informaciones. Los estados de los procesos son internos del sistema operativo y transparentes al usuario.
Los estados de los procesos se pueden dividir en dos tipos: activos e inactivos.
1.- Estados activos: Son aquellos que compiten con el procesador o están en condiciones de hacerlo. Se dividen en:
Ejecución. Estado en el que se encuentra un proceso cuando tiene el control del procesador. En un sistema monoprocesador este estado sólo lo puede tener un proceso.
Preparado. Aquellos procesos que están dispuestos para ser ejecutados, pero no están en ejecución por alguna causa (Interrupción, haber entrado en cola estando otro proceso en ejecución, etc.).
Bloqueado. Son los procesos que no pueden ejecutarse de momento por necesitar algún recurso no disponible (generalmente recursos de entrada/salida).
2.- Estados inactivos: Son aquellos que no pueden competir por el procesador, pero que pueden volver a hacerlo por medio de ciertas operaciones. En estos estados se mantiene el bloque de control de proceso aparcado hasta que vuelva a ser activado. Se trata de procesos que no han terminado su trabajo que lo han impedido y que pueden volver a activarse desde el punto en que se quedaron sin que tengan que volver a ejecutarse desde el principio.
Son de dos tipos:

Operaciones sobre procesos.
Los sistemas operativos actuales poseen una serie de funciones cuyo objetivo es el de la manipulación de los procesos. Las operaciones que se pueden hacer sobre un proceso son las siguientes:
Crear el proceso. Se produce con la orden de ejecución del programa y suele necesitar varios argumentos, como el nombre y la prioridad del proceso. Aparece en este momento el PCB, que será insertado en la cola de procesos preparados.

La creación de un proceso puede ser de dos tipos:
Jerárquica. En ella, cada proceso que se crea es hijo del proceso creador y hereda el entorno de ejecución de su padre. El primer proceso que ejecuta un usuario será hijo del intérprete de comandos con el que interactúa.
No jerárquica. Cada proceso creado por otro proceso se ejecuta independientemente de su creador con un entorno diferente. Es un tipo de creación que no suele darse en los sistemas operativos actuales.
Destruir un proceso. Se trata de la orden de eliminación del proceso con la cual el sistema operativo destruye su PCB.
Suspender un proceso. Es un proceso de alta prioridad que paraliza un proceso que puede ser reanudado posteriormente. Suele utilizarse en ocasiones de mal funcionamiento o sobrecarga del sistema.
Reanudar un proceso. Trata de activar un proceso que a sido previamente suspendido.
Cambiar la prioridad de un proceso.
Temporizar la ejecución de un proceso. Hace que un determinado proceso se ejecute cada cierto tiempo (segundos, minutos, horas...) por etapas de una sola vez, pero transcurrido un periodo de tiempo fijo.
Despertar un proceso. Es una forma de desbloquear un proceso que habrá sido bloqueado previamente por temporización o cualquier otra causa.

Prioridades
Todo proceso por sus características e importancia lleva aparejadas unas determinadas necesidades de ejecución en cuanto a urgencia y asignación de recursos.
Las prioridades según los sistemas operativos se pueden clasificar del siguiente modo:
Asignadas por el sistema operativo. Se trata de prioridades que son asignadas a un proceso en el momento de comenzar su ejecución y dependen fundamentalmente de los privilegios de su propietario y del modo de ejecución.

El Núcleo del Sistema Operativo

Todas las operaciones en las que participan procesos son controladas por la parte del sistema operativo denominada núcleo (nucleus, core o kernel, en inglés). El núcleo normalmente representa sólo una pequeña parte de lo que por lo general se piensa que es todo el sistema operativo, pero es tal vez el código que más se utiliza. Por esta razón, el núcleo reside por lo regular en la memoria principal, mientras que otras partes del sistema operativo son cargadas en la memoria principal sólo cuando se necesitan.
Los núcleos se diseñan para realizar "el mínimo" posible de procesamiento en cada interrupción y dejar que el resto lo realice el proceso apropiado del sistema, que puede operar mientras el núcleo se habilita para atender otras interrupciones.
El núcleo de un sistema operativo normalmente contiene el código necesario para realizar las siguientes funciones:

Manejo de interrupciones.
Creación y destrucción de procesos.
Cambio de estado de los procesos.
Despacho.
Suspensión y reanudación de procesos.
Sincronización de procesos.
Comunicación entre procesos.
Manipulación de los bloques de control de procesos.
Apoyo para las actividades de entrada/salida.
Apoyo para asignación y liberación de memoria.
Apoyo para el sistema de archivos.
Apoyo para el mecanismo de llamada y retorno de un procedimiento.
Apoyo para ciertas funciones de contabilidad del sistema.

Núcleo o Kernel y niveles de un Sistema Operativo.

El Kernel consiste en la parte principal del código del sistema operativo, el cual se encargan de controlar y administrar los servicios y peticiones de recursos y de hardware con respecto a uno o varios procesos. Se divide en 5 capas:
Nivel 1. Gestión de Memoria: que proporciona las facilidades de bajo nivel para la gestión de memoria secundaria necesaria para la ejecución de procesos.
Nivel 2. Procesador: Se encarga de activar los espacios de tiempo para cada uno de los procesos, creando interrupciones de hardware cuando no son respetadas.
Nivel 3. Entrada/Salida: Proporciona las facilidades para poder utilizar los dispositivos de E/S requeridos por procesos.
Nivel 4. Información o Aplicación o Interprete de Lenguajes: Facilita la comunicación con los lenguajes y el sistema operativo para aceptar las órdenes en cada una de las aplicaciones. Cuando se solicitan ejecutando un programa, el software de este nivel crea el ambiente de trabajo e invoca a los procesos correspondientes.
Nivel 5. Control de Archivos: Proporciona la facilidad para el almacenamiento a largo plazo y manipulación de archivos con nombre, va asignando espacio y acceso de datos en memoria.

El núcleo (Kernel) de un sistema operativo es un conjunto de rutinas cuya misión es la de gestionar el procesador, la memoria, la entrada/salida y el resto de procesos disponibles en la instalación.

Dispositivos de Entrada y Salida

El código destinado a manejar la entrada y salida de los diferentes periféricos en un sistema operativo es de una extensión considerable y sumamente complejo. Resuelve la necesidades de sincronizar, atrapar interrupciones y ofrecer llamadas al sistema para los programadores.
Los dispositivos de entrada salida se dividen, en general, en dos tipos: dispositivos orientados a bloques y dispositivos orientados a caracteres.

Orientados a Bloques.
Los dispositivos orientados a bloques tienen la propiedad de que se pueden direccionar, esto es, el programador puede escribir o leer cualquier bloque del dispositivo realizando primero una operación de posicionamiento sobre el dispositivo. Los dispositivos más comunes orientados a bloques son los discos duros, la memoria, discos compactos y, posiblemente, las unidades de cinta.

Orientados a Caracteres.
Los dispositivos orientados a caracteres son aquellos que trabajan con secuencias de bytes sin importar su longitud ni ninguna agrupación en especial. No son dispositivos direccionables. Ejemplos de estos dispositivos son el teclado, la pantalla o display y las impresoras.
La clasificación anterior no es perfecta, porque existen varios dispositivos que generan entrada o salida que no pueden englobarse en esas categorías. Por ejemplo, un reloj que genera pulsos. Sin embargo, aunque existan algunos periféricos que no se puedan catalogar, todos están administrados por el sistema operativo por medio de una parte electrónica - mecánica y una parte de software.

Principios del Software de Entrada y Salida

Los principios de software en la entrada - salida se resumen en cuatro puntos: el software debe ofrecer manejadores de interrupciones, manejadores de dispositivos, software que sea independiente de los dispositivos y software para usuarios.

Manejadores de Interrupciones.
El primer objetivo referente a los manejadores de interrupciones consiste en que el programador o el usuario no debe darse cuenta de los manejos de bajo nivel para los casos en que el dispositivo está ocupado y se debe suspender el proceso o sincronizar algunas tareas. Desde el punto de vista del proceso o usuario, el sistema simplemente tardó más o menos en responder a su petición.

Manejadores de Dispositivos.
El sistema debe proveer los manejadores de dispositivos necesarios para los periféricos, así como ocultar las peculiaridades del manejo interno de cada uno de ellos, tales como el formato de la información, los medios mecánicos, los niveles de voltaje y otros. Por ejemplo, si el sistema tiene varios tipos diferentes de discos duros, para el usuario o programador las diferencias técnicas entre ellos no le deben importar, y los manejadores le deben ofrecer el mismo conjunto de rutinas para leer y escribir datos.

Software que sea independiente de los dispositivos.
Este es un nivel superior de independencia que el ofrecido por los manejadores de dispositivos. Aquí el sistema operativo debe ser capaz de ofrecer un conjunto de utilidades para accesar periféricos o programarlos de una manera consistente. Por ejemplo, que para todos los dispositivos orientados a bloques se tenga una llamada para decidir si se desea usar 'buffers' o no, o para posicionarse en ellos.

Software para Usuarios.
La mayoría de las rutinas de entrada - salida trabajan en modo privilegiado, o son llamadas al sistema que se ligan a los programas del usuario formando parte de sus aplicaciones y que no le dejan ninguna flexibilidad al usuario en cuanto a la apariencia de los datos. Existen otras librerías en donde el usuario sí tiene poder de decisión (por ejemplo la llamada a "printf" en el lenguaje "C"). Otra facilidad ofrecida son las áreas de trabajos encolados (spooling areas), tales como las de impresión y correo electrónico.

Manejo de los Dispositivos de E/S

En el manejo de los dispositivos de E/S es necesario, introducir dos nuevos términos:

Buffering (uso de memoria intermedia).
El buffering trata de mantener ocupados tanto la CPU como los dispositivos de E/S. La idea es sencilla, los datos se leen y se almacenan en un buffer. Una vez que los datos se han leído y la CPU va a iniciar inmediatamente la operación con ellos, el dispositivo de entrada es instruido para iniciar inmediatamente la siguiente lectura. La CPU y el dispositivo de entrada permanecen ocupados. Cuando la CPU esté libre para el siguiente grupo de datos, el dispositivo de entrada habrá terminado de leerlos. La CPU podrá empezar el proceso de los últimos datos leídos, mientras el dispositivo de entrada iniciará la lectura de los datos siguientes.

Para la salida, el proceso es análogo. En este caso los datos de salida se descargan en otro buffer hasta que el dispositivo de salida pueda procesarlos. Este sistema soluciona en forma parcial el problema de mantener ocupados todo el tiempo la CPU y los dispositivos de E/S, ya que todo depende del tamaño del buffer y de la velocidad de procesamiento tanto de la CPU como de los dispositivos de E/S.

El manejo de buffer es complicado. Uno de los principales problemas reside en determinar tan pronto como sea posible que un dispositivo de E/S ha finalizado una operación. Este problema se resuelve mediante las interrupciones. Tan pronto como un dispositivo de E/S acaba con una operación interrumpe a la CPU; en ese momento la CPU detiene lo que está haciendo e inmediatamente transfiere el control a una posición determinada. Normalmente las instrucciones que existen en esta posición corresponden a una rutina de servicio de interrupciones. La rutina de servicio de interrupción comprueba si el buffer no está lleno o no está vacío y entonces inicia la siguiente petición de E/S. La CPU puede continuar entonces el proceso interrumpido.

Cada diseño de ordenador tiene su propio mecanismo de interrupción, pero hay varias funciones comunes que todos contemplan.
El buffering puede ser de gran ayuda pero pocas veces es suficiente. En un sistema de discos, las tarjetas se leen directamente desde la lectora sobre el disco. La posición de las imágenes de las tarjetas se registran en una tabla mantenida por el sistema operativo. En la tabla se anota cada trabajo una vez leído. Cuando se ejecuta un trabajo, sus peticiones de entrada desde la tarjeta se satisfacen leyendo el disco. Cuando el trabajo solicita la salida, ésta se copia en el buffer del sistema y se escribe en el disco. Cuando la tarea se ha completado se escribe en la salida realmente.

Esta forma de procesamiento se denomina spooling: utiliza el disco como un buffer muy grande para leer por delante como sea posible de los dispositivos de entrada y para almacenar los ficheros hasta que los dispositivos de salida sean capaces de aceptarlos.

La ventaja sobre el buffering es que el spooling solapa la E/S de un trabajo con la computación de otro. Es una característica utilizada en la mayoría de los sistemas operativos. Afecta directamente a las prestaciones. La CPU puede simultanear la computación de un trabajo con la E/S de otros. De esta manera, puede mantener tanto a la CPU como a los dispositivos de E/S trabajando con un rendimiento mucho mayor. Además mantiene una estructura de datos llama "job spooling", que hace que los trabajos ya leídos permanezcan en el disco y el sistema operativo puede seleccionar cuál ejecutar; por lo tanto se hace posible la planificación de trabajos.

Administración de Archivos

Un archivo es un conjunto de información que se encuentra almacenada o guardada en la memoria principal del ordenador, en el disco duro, en el disquete flexible o en los discos compactos (Cd-Rom).
Antes de que un archivo pueda leerse o escribirse en él, debe abrirse, momento en el cual se verifican los permisos. Estos archivos se abren especificando en el ordenador la ruta de acceso al archivo desde el directorio raíz, que es la unidad principal del disco del ordenador; este puede ser un disco duro o disco flexible. Entonces el sistema operativo visualiza el entorno al abrir un archivo.

Uno de los problemas más frecuentes en el manejo de archivos son los "deadlock". Un deadlock es una situación no deseada de espera indefinida y se da cuando en un grupo de procesos, dos o más procesos de ese grupo esperan para llevar a cabo una tarea que será ejecutada por otro proceso del mismo grupo: entonces se produce el bloqueo. Los bloqueos se dan tanto en los sistemas operativos tradicionales como en los distribuidos, solo que en estos últimos es más difícil de prevenirlos, evitarlos e incluso detectarlos, y si se los logra detectar es muy complicado solucionarlos ya que la información se encuentra dispersa por todo el sistema.

Una vez que un deadlock se detecta, es obvio que el sistema tiene problemas y lo único que resta por hacer es una de estas dos cosas: tener algún mecanismo de suspensión o reanudación que permita copiar todo el contexto de un proceso incluyendo valores de memoria y aspecto de los periféricos que esté usando para reanudarlo otro día, o simplemente eliminar un proceso o arrebatarle el recurso, causando para ese proceso la pérdida de datos y tiempo.

Seguridad de un Sistema Operativo.
En los sistemas operativos se requiere tener una buena seguridad informática, tanto del hardware, programas y datos, previamente haciendo un balance de los requerimientos y mecanismos necesarios, con el fin de asegurar la integridad de la información contenida.

Dependiendo de los mecanismos utilizados y de su grado de efectividad, se puede hablar de sistemas seguros e inseguros. En primer lugar, deben imponerse ciertas características en el entorno donde se encuentra la instalación de los equipos, con el fin de impedir el acceso a personas no autorizadas, mantener un buen estado y uso del material y equipos, así como eliminar los riesgos de causas de fuerza mayor, que puedan destruir la instalación y la información contenida.

En la actualidad son muchas las violaciones que se producen en los sistemas informáticos, en general por acceso de personas no autorizadas que obtienen información confidencial pudiendo incluso manipularla. En ocasiones este tipo de incidencias resulta grave por la naturaleza de los datos; por ejemplo si se trata de datos bancarios, datos oficiales que puedan afectar a la seguridad de los estados, etc.

El software mal intencionado se produce por diversas causas; son pequeños programas que poseen gran facilidad para reproducirse y ejecutarse y cuyos efectos son destructivos: nos estamos refiriendo a los virus informáticos. Las cuestiones de seguridad que se analizan lo son desde dos perspectivas diferentes: la seguridad externa y la seguridad interna.

Todos los mecanismos dirigidos a asegurar el sistema informático sin que el propio sistema intervenga en el mismo se engloban en lo que podemos denominar seguridad externa. La seguridad externa puede dividirse en dos grandes grupos:
Seguridad física. Engloba aquellos mecanismos que impiden a los agentes físicos la destrucción de la información existente en el sistema; entre ellos podemos citar el fuego, el humo, inundaciones descargas eléctricas, campos magnéticos, acceso físico de personas con no muy buena intención, entre otros.
Seguridad de administración. Engloba los mecanismos más usuales para impedir el acceso lógico de personas físicas al sistema. Todos los mecanismos dirigidos a asegurar el sistema informático, siendo el propio sistema el que controla dichos mecanismos, se engloban en lo que podemos denominar seguridad interna.

La historia de la informática no puede ser escrita si no son mencionados los programas o softwares que como un torrente en líneas de código e instrucciones le dan vida al cuerpo o hardware de cualquier dispositivo electrónico en nuestros días. Escribir, además, sobre los sistemas operativos, la llamada alma del ordenador, es por otra parte, muy difícil. Porque, en realidad, ¿qué son los sistemas operativos?
Los sistemas operativos o SO, como se les conoce, no son más que programas que luego de ser cargados en un ordenador por el conjunto de códigos de carga, (una rutina conocida como BOOT), administran todos los demás programas (aplicaciones) que corren en la máquina. Las aplicaciones a su vez interactúan con el SO mediante llamadas de servicios definidas bajo el nombre de API (aplication program interface). A su vez el propio usuario interactúa directamente con el SO mediante la interfaz de usuario, ya sea ésta por comandos o gráfica (GUI).

Entre las tareas que realiza un SO tenemos:
- Si es un sistema multitarea: asignar y controlar los recursos del sistema, definir qué aplicación y en qué orden deben ser ejecutadas.
- Manejar la memoria del sistema que comparten las múltiples aplicaciones.
- Maneja los sistemas de entrada y salida, incluidos discos duros, impresoras y todo tipo de puertos.
- Envío de mensajes de estado a las aplicaciones, al administrador de sistema o al propio usuario, sobre cualquier error o información necesaria para el trabajo estable y uniforme del sistema.
- Asume tareas delegadas de las propias aplicaciones, como impresión en background y procesamiento por lotes, con el fin de que éstas ganen en eficiencia y tiempo.
- Administra, de existir, el procesamiento en paralelo.
El lector observador se percatará de que el diseño de un SO está estrechamente vinculado al hardware donde reside y a su vez determinará la forma en que se programen las aplicaciones para dicho hardware. En la historia de la computación han existido muchos SO. Al principio, todos atados a cada máquina en la que corrían: la marca tal lleva el programa tal, la marca cual, el programa cual. Posteriormente fueron asociados a cada plataforma y finalmente se hicieron multiplataformas. Registrando en Internet un poco de aquí y otro de allá, rescatamos para esta edición la historia de tres de los Sistemas Operativos más conocidos.

Historia del UNIX

"...el número de instalaciones de UNIX ha crecido a 10, con tendencia al aumento..."
Dennis Rictchie y Ken Thompson, junio de 1972
"...el resultado fue un sistema llamado UNICS (Uniplexed Information and Computing Service)...nadie recuerda de quien fue la idea de cambiar las siglas a UNIX..."
Tomado de "A brief look at the eraly History"

Después de tres décadas de haber escapado de los laboratorios Bell, el UNIX sigue siendo uno de los SO más potentes, versátiles y flexibles en el mundo de la computación. Su popularidad se debe a muchos factores, incluidas su portabilidad y habilidad de correr eficientemente en una inmensa variedad de máquinas computadoras. Descrito frecuentemente como un sistema "simple, potente y elegante" el UNIX es hoy el corazón que late en el seno de millones de aplicaciones de telefonía fija y móvil, de millones de servidores en universidades, centros académicos, grandes, medianas y pequeñas empresas, el SO cuyo desarrollo viene de la mano del de Internet y que alberga a millones de servidores y aplicaciones de la red de redes. Sin UNIX, no cabe duda, el mundo de la informática hubiera sido otro.

Del MULTICS al UNICS

El origen del UNIX se remonta a los finales del año 1969, al renacer de las cenizas de un fracasado intento en los Laboratorios Bell de producir un SO multitarea. En esos tiempos remotos los sistemas eran desarrollados para computadoras específicas, por lo que eran necesarios, incluso, intérpretes en una misma compañía para trabajar programas iguales de una computadora a otra. MULTICS fue el resultado del esfuerzo conjunto de un grupo de investigadores de los Laboratorios Bell y la General Electrics, que si bien fue funcional, económicamente era inviable. "A pesar de que MULTICS no podía manejar muchos usuarios simultáneos, al menos nos era de utilidad a nosotros, aunque a costes exorbitantes", explicaría luego Dennis Ritchie, uno de sus fundadores.

La frustración se llenó de esperanza cuando un grupo escindido del proyecto MULTICS no se dio por vencido. En ese mismo año, el grupo formado por Ken Thompson, Dennis Ritchie, Doug McIlroy y J.F Osanna continuó en la búsqueda del santo grial. Los primeros intentos fueron de nuevo un fracaso: propuestas excesivamente complicadas, soluciones muy caras y sin una línea coherente de trabajo, hicieron que los directivos de Bell rechazaran una y otra vez los trabajos presentados por el grupo. Anótese adicionalmente que el costo de un ordenador para la época era no menor de 60 000 dólares.

Como todo mito que rodea a un producto genial, el UNIX tiene el suyo propio. En la primavera de 1969, Thompson, Ritchie y Rudd Canaday, cofundador de Sun-Microsystems, intercambiaban y filosofaban sobre cómo debiera ser un SO de un ordenador. Después de una larga tormenta de ideas, Canaday tomó el teléfono y llamó a la Bell para dictar las notas que había tomado. Acrónimos como "inode"y "eyen" entre sus notas, fueron la base del UNIX y el primer documento de trabajo, a decir de Thompsom, para desarrollar el sistema.

Un Sistema Operativo para una PDP-7

Thompson, en su tiempo, libre desarrolló un pequeño juego llamado "Viaje Espacial", el cual simulaba el movimiento de los planetas en el sistema solar y de una nave manejada en ese escenario intergaláctico por comandos de consola. El juego fue escrito para MULTICS y luego pasado por FORTRAN todo ello corriendo sobre una computadora GE 635. "El coste, el tiempo empleado y la mala calidad de la consola, hicieron que Thompson buscara llevar el juego a una poco usada PDP-7 (Programmed Data Processor) de DEC con un terminal excelente. El juego, escrito en ensamblador, era portado usando cinta de papel de la GE 635 a la PDP-7.

Este mecanismo preparó el escenario para que la PDP-7 sirviera de anfitrión al sistema de ficheros cuyas notas habían sido escritas en aquella primavera del 69. En el verano de ese mismo año, Thompson y Ritchie empezaron a implementar el sistema operativo, llamado "sistema de tiza" ya que éste tomaba forma luego de numerosas sesiones de pizarra entre ambos investigadores. "Destiné una semana de trabajo para cada módulo: el sistema operativo, el editor, el shell y el ensamblador", diría Thompsom. Primero los requerimientos del sistema, en particular los procesos, luego un pequeño grupo de herramientas del sistema para copiar, imprimir, borrar, etc. Trabajado sobre GECOS el sistema de la GE635 y luego transportado a la PDP7, el nuevo SO estaba casi listo. Una vez completado el ensamblador, el sistema podía soportarse a sí mismo. Había nacido el UNIX.

Las primeras aplicaciones para UNIX

Pronto se hizo evidente que la PDP-7 no ofrecía poder de cómputo suficiente y quedaría obsoleta en breve. El grupo propuso a los Laboratorios adquirir una PDP-11. Con una idea más clara y un embrión por desarrollar, así como el apoyo de Doug McIlroy y Lee MacMahom, jefes de departamentos en Bell, esta vez los directivos aceptaron. Durante la espera dela llegada del nuevo equipo, el trabajo sobre la PDP-7 no se detuvo, demostrando con creces la utilidad del nuevo UNIX. Después de largas y trabajosas sesiones, el resultado fue milagroso: no sólo el Departamento de Patentes adoptó el UNIX, sino que la credibilidad del grupo creció y se hizo notable el apoyo e interés del Laboratorio en traer la PDP-11.

Esta primera versión estaba escrita en ensamblador: la siguiente tarea de Thompson fue escribirla en un lenguaje de alto nivel. En 1971 intenta trabajar con FORTRAN en la vieja PDP-7, pero se rindió el primer día. Después escribió un lenguaje muy sencillo que llamó B, que aunque funcional tendría que enfrentar algunos problemas de concepción. Ritchie transformó el B para la PDP-11, al introducirle algunas mejoras, lo denominó NB e hizo un compilador para él. Así surgió el lenguaje C, que si bien es cierto pertenece a otra historia, constituyó el lenguaje de alto nivel en el que se reescribió el UNIX por primera vez en el año 1972.

Concatenando procesos

El otro paso importante, y que más que una solución puntual constituyó toda una filosofía en el diseño del software, fue llevar al nuevo SO el concepto de la concatenación de procesos, el llamado "pipes concept". La habilidad de encadenar en una misma línea de comandos varios procesos fue una innovación que tiene su origen en una idea de McIlroy, cuyas conferencias sobre el uso de macros y flujos de datos para producir un determinado resultado ya eran conocidas.

Mientras Thompson y Ritchie pasaban horas de su tiempo frente a una pizarra diseñando el sistema de ficheros, McIlroy llevaba otro tanto tratando de interconectar entre sí los procesos y construir una sintaxis en el lenguaje para ello. "...es muy fácil decir who into cat into grep, pero está todo el asunto este de los parámetros laterales que estos comandos tienen..." acota McIlroy. Aunque sin concretarla, la idea estuvo presente a lo largo del período del 70 al 72. Una noche, después de presentarle propuesta tras propuesta a Thompson, éste se llevó un prototipo a casa y al día siguiente estaba listo. "Ken puso la concatenación de comandos en el UNIX, las notaciones en el shell del usuario, todo ello en una sola noche", diría luego McIlroy maravillado.

Saltando los muros de Bell Labs

No fue hasta tiempo después que el UNIX saltaría los muros de la Bell para insertarse en el mundo. Durante un semestre sabático para Ken Thompson entre 1976 y 1977, fue como profesor invitado en el Departamento de Ciencias de la Computación de la Universidad californiana de Berkeley. Lo que por supuesto impartió fue precisamente el sistema UNIX, cuya versión 6 desarrolló durante ese tiempo. Enseguida fue recibido con mucho éxito y se fue propagando por toda la comunidad académica. Una vez de vuelta a los Laboratorios, la versión 6 ya había sido enriquecida en la propia universidad, lo que dio origen a lo que luego se conoció como Berkeley Software Distribution (BSD) versión 4.2, comprada por muchas otras universidades. La universidad de Berkeley jugó un papel importante en el desarrollo y extensión del UNIX, cuyas licencias a importantes instituciones académicas, de negocios y militares como el DARPA, propiciaron un acelerado trabajo en protocolos como el TCP/IP y el nacimiento de Internet.

La entrada al mundo comercial no fue más que una evolución lógica, después del paso de los primeros licenciados del mundo universitario criados bajo el manto del UNIX, al sector empresarial. Lo que hizo del SO un programa popular fue su habilidad de multitarea, señoreando por aquel entonces el mundo de los mini y los mainframes, su portabilidad por medio de los distintos fabricantes de ordenadores y su capacidad de correo electrónico. Una vez llegado a este punto todo estaba listo para la aparición de las innumerables versiones del sistema, las batallas legales para las licencias, la producción de estaciones de trabajo para UNIX por parte de IBM, Sun, NCR y HP y con ellas nuevas versiones comerciales, y así sucesivamente en espiral ascendente.

Mucho del progreso de la computación en el último cuarto del siglo pasado está íntimamente ligado a la influencia que el UNIX tuvo en la industria de la computación. Estaba embebido de ideas visionarias, toda una llamada a la abertura y generalidad entre sistemas, toda una fuerza, que aún mueve el desarrollo de la informática moderna. Como diría uno de sus creadores, " ...a 30 años de su nacimiento, el UNIX sigue siendo un gran fenómeno".

Linux, la otra cara

"…Yo realmente no sigo mucho lo que hacen los otros sistemas operativos. Yo no compito, sólo me preocupo con hacer de Linux un producto cada vez mejor que sí mismo, no respecto a otros. Y honestamente no veo nada interesante desde el punto de vista técnico, tampoco (en FreeBSD 5.0 y Windows XP)"
Linus Torvalds, 10 de octubre del 2001, OSNews.

La fascinación de los medios por Linux viene dada, entre otras cosas, por ser un proyecto de ingeniería de software distribuido a escala global, esfuerzo mancomunado de más de 3 000 desarrolladores y un sin número de colaboradores distribuidos en más de 90 países. El rango de participantes en la programación del Linux se ha estimado desde unos cuantos cientos hasta más de 40 000, ya sea ofreciendo código, sugiriendo mejoras, facilitando comentarios o describiendo y enriqueciendo manuales. De hecho, se cuenta que el mayor soporte técnico jamás diseñado de manera espontánea y gratuita pertenece a este SO.

Escribir la historia de UNIX sin mencionar a Linux es pecado: realmente merece todo un capítulo propio. Salido de una raíz común, hoy el Linux comparte un tanto por ciento no despreciable del mercado de los SO, con un crecimiento que ha llegado a preocupar al gigante Microsoft.

Su versión 1.0, salida en marzo de 1994 ofreció básicamente las mismas facilidades que el UNIX,
incluyendo soporte multitarea, tratamiento de memoria virtual y soporte TCP/IP. Estaba constituido por unas 175 000 líneas de código. Ya su versión 2.0, de junio de 1996, ofrecía procesamiento de 64 bits, multiprocesamiento en paralelo y soporte avanzado de redes. El número de líneas de código se había triplicado: 780 000, y en la versión de julio de 1998 la cifra sobrepasaba el millón y medio, 17% específicos de la arquitectura del SO, 54% en manipuladores y el 29% el núcleo del kernel y el sistema de ficheros. Ello ha sido posible por el simple hecho de que Linux es más que un SO: es una fuente inagotable en permanente evolución por miles de programadores a escala mundial.

¿Cómo surgió? ¿A qué se debe el fenómeno de la espontaneidad en su creación y desarrollo? Adentrémonos brevemente en su historia.

En octubre de 1991 un estudiante graduado de Ciencias de la Computación en la Universidad de Helsinki, llamado Linus Torvalds, anuncia en Internet que había escrito una versión libre de un sistema MINIX (una variante de UNÍX) para un ordenador con procesador Intel 386 y lo dejaba disponible para todo aquel que estuviera interesado. ¿La causa? El MINIX fue una versión simplificada de UNIX escrito y mantenido durante mucho tiempo como herramienta de estudio en una escuela europea por un profesor de Ciencias de la Computación llamado Andrew Tanenbaum. El MINIX era ampliamente utilizado como recurso en clases de Computación, aun a costo de su licencia (79 dólares) que limitaba su redistribución. Luego de interesar a los estudiantes con el software, éstos se llenaban de deseos de realizar mejoras y extensiones, nunca aprobadas por Tanenbaum.

Torvalds, uno de estos alumnos frustrados, decidió realizar su propia versión de MINIX y dejar libre su código fuente para ser copiado por cualquiera y así saciar la sed de desarrollo de aquellos que se veían impedidos de hacerlo.

"¿Se lamenta de los días del MINIX-1.1, cuando los programadores escribían sus propios manipuladores de dispositivos? ¿Está usted sin un proyecto interesante y muriéndose de deseos por un SO que pueda modificar a su antojo? ¿Se siente frustrado cuando encuentra que todo trabaja bien en su MINIX?… Entonces este mensaje puede ser para usted :-)", escribiría en un foro de discusión por Internet. Adicionalmente, el mensaje estimulaba a todo aquel que se sintiera capaz de adicionar nuevas funciones, mejoras, sugerencias y manuales de ayuda, con la única condición de que el resultado fuera a su vez distribuido libremente. La piedra había echado a rodar montaña abajo. En los siguientes 30 meses se desarrollarían hasta 90 versiones del nuevo SO, finalizando en 1994 con la definitiva, llamándola Linux versión 1.0.

Varias condiciones adicionales propiciaron la buena acogida que tuvo la decisión de Torvalds, pero dos de ellas de especial impacto: el status legal y social del llamado código abierto, open source, una vía para intercambiar software de manera libre, e Internet. El intercambio de códigos fue una práctica bastante común en los albores de la computación en el sector académico. Laboratorios como el MIT Artificial Intelligence Laboratory, universidades como Standford y Carnegie Mellon solían practicar una política de código abierto. Debido a que las máquinas computadoras eran muy limitadas en aquel entonces, las personas solían dejar en éstas el software desarrollado para que otros pudieran admirar el trabajo y sugerir mejoras.

El propio UNIX de Thompson y Ritchie, que legalmente pertenecía a AT&T, pero que por restricciones de la ley anti trust de ese momento, le impedía comercializar, fue distribuido a la comunidad académica por una tarifa nominal, sin soporte oficial al programa. Ello acostumbró a los programadores y usuarios del sistema a intercambiar los errores y soluciones, así como las mejoras. La llegada del protocolo UUCP (Unix to Unix Copy) permitió la transferencia de ficheros y datos con el uso de una línea telefónica e introdujo el soporte de transmisión como mecanismo natural para intercambiar información entre los usuarios del sistema. Se crearon los primeros foros y apareció Usenet. Las innovaciones de diseño y características propias del UNIX como sistema, a su vez, propiciaron la cultura del intercambio.

A medida que el UNIX tomaba fuerza y seguía atado a las nuevas computadoras de diferentes fabricantes, la cultura del libre intercambio se vio amenazada entre su comunidad. Surge así, por idea de Richard Sallman, el proyecto GNU en 1984 para crear sistemas operativos libres que hicieran posible la distribución y trabajo de colaboración entre diferentes desarrolladores. Para evitar que el mecanismo fuese deformado se instituyó lo que Sallman llamó "Copyleft": usted puede distribuir, copiar, modificar el software, obligando a su vez a las derivaciones de éste a cumplir con los mismos requisitos. El marco legal y social para la distribución y copia gratuita estaba instituido. Huelga mencionar las facilidades que aportó Internet cuando Torvalds decidió hacer su anuncio: ya no era sólo un grupo privilegiado con acceso a máquinas computadoras grandes en laboratorios estratégicos o grandes universidades los que podían colaborar con un código de programa. Internet elevó el intercambio a un marco global.

Si bien Torvalds nunca persiguió encabezar un proyecto de programación distributiva a escala mundial, sus habilidades como líder de proyecto y excelente programador fueron determinantes en el éxito de Linux. Más allá de sus cualidades como programador, su mayor contribución fueron sus habilidades en el diseño de una arquitectura modular y portable para el kernel. Por tanto, al disponer de un código base único para todo tipo de plataforma, desde Intel hasta Motorola, que permitía soportar de manera simultánea varias ramas según el tipo de arquitectura de ordenador que se tratase, incrementó considerablemente la portabilidad del Linux. Por otro lado, la modularidad del sistema minimizaba la comunicación entre las distintas componentes del kernel y por ende hacía posible el trabajo en paralelo, al disminuir la necesidad de un trabajo coordinado entre sus diseñadores.

Otra decisión brillante de Torvalds fue establecer una nomenclatura paralela para cada tipo de versión del SO. Para ello se separaron en versiones pares o impares según la estabilidad y seguridad de la misma o la inclusión de código experimental o alguna nueva rutina en fase de estudio. Ello hacía posible disponer de dos tipos de colaboradores: los que buscaban una versión estable del programa o los que preferían probar con nuevas estructuras, innovar y llevar sus sistemas hasta el extremo. Ello enriqueció al Linux extraordinariamente.

Es interesante conocer, además, que los programadores suelen escribir código para Linux en aras de resolver sus propios problemas. El mismo Torvalds buscaba un SO para su 386 y su anunció explícitamente invitaba a "modificarlo según sus necesidades ". Así, cuando la comunidad de programadores aceptó el reto de Torvalds, cada cual escribió sus propios manipuladores de dispositivos. Por ejemplo, un programador alemán diseñó el driver para teclado en su idioma y éste fue incluido en la versión de diciembre del 91. Hasta nuestros días se mantiene la misma filosofía: cada cual trabaja en las áreas que le interesa.

He aquí la historia. Hoy Linux es una alternativa para muchos e indispensable para otros. Su importancia no puede ser relegada: los RED HAT, los SUSE, los Mandrake pueblan miles de servidores por todo el planeta. ¿Lo mejor? Pues que Linus Torvalds sigue enviando mensajes a su lista, del tipo: "...mi prioridad personal no es este tipo de comportamiento, por tanto sería bueno que alguien implementara esta opción...".

Historia de Microsoft Windows

"...Microsoft siempre ha sido una compañía optimista, que cree que el software puede crear herramientas que realmente no tengan ninguna atadura en términos de lo que es posible..."
Bill Gates, Future Forum, septiembre del 2001


De todos los sistemas operativos que se han hecho famosos a lo largo del desarrollo de la informática en el ocaso del siglo pasado, sin duda, ningún otro posee la peculiaridad del Windows de Microsoft.
Rodeado por todo tipo de mitos acerca de su emprendedor y ambicioso creador, solidificado sobre la base de un sistema DOS, cuya irrupción en el primer PC tenía más de suerte que de propósito, amparado por disfrutar de un férreo y despiadado control de mercado, es, hoy por hoy, odiado o amado, el sistema operativo más extendido del planeta.

Al buscar su historia en la red, no encontramos anécdotas de noches en vela, de errores que se convirtieron en éxitos, de genios convertidos en héroes de la noche a la mañana. En cambio, sí conocimos de oportunidades, visión de futuro, monopolios y juicios. La historia de Windows tiene mezclado un poco de Bill Gates, de MSDOS y de la propia compañía Microsoft.

Fundación

La Compañía fue fundada en 1975 por William H. Gates III y Paul Allen. Ambos se habían conocido durante su época de estudiantes por su afición común a programar con una computadora PDP-10 de Digital Equipment Corporation. Eran años en que la revista Popular Electronics dedicaba su portada a la Altair 8800, para muchos el primer ordenador personal (PC). El artículo de dicha revista animó a Gates y Allen a desarrollar la primera versión del lenguaje de programación BASIC para el equipo Altair. Con un ojo para los negocios fuera de lo común, el dúo le compró la licencia de este software a Micro Instrumentation and Telemetry Systems (MITS), la empresa fabricante del Altair, y fundaron Microsoft (originalmente Micro-soft) en Albuquerque, Nuevo México. Su idea: desarrollar versiones de BASIC para otras compañías del sector. Apple Computer, fabricante del equipo Apple II; Commodore, fabricante del PET, y Tandy Corporation, fabricante del equipo Radio Shack TRS-80, todas compañías creadas por aquel entonces, fueron los primeros clientes de Microsoft. En 1977 Microsoft lanzó al mercado su segundo producto: Microsoft FORTRAN, otro lenguaje de programación, y pronto sacó versiones del lenguaje BASIC para los microprocesadores 8080 y 8086.

MS-DOS

En 1979, Gates y Allen trasladaron la compañía a Bellevue, Washington, muy cerca de Seattle, la ciudad donde ambos nacieron (el traslado a Redmond, su sede de hoy, no se produciría hasta 1986). En 1980, IBM contrató a Microsoft para escribir el sistema operativo del IBM PC que saldría al mercado al año siguiente. Presionada por el poco tiempo disponible, Microsoft compró QDOS (Quick and Dirty Operating System, como se le solía llamar entonces) a Tim Paterson, un programador de Seattle, por 50 000 dólares, cambiándole el nombre a MS-DOS. El contrato firmado con IBM permitía a Microsoft vender este SO a otras compañías. La mesa estaba servida. La arquitectura abierta del primer PC y los artilugios legales permitieron la extensión de la arquitectura X86 de Intel y con ella del PC fuera del marco de IBM. Fue la época del florecimiento de los clónicos y el surgimiento de algunas compañías que luego serían todo un estandarte, como la fusionada Compaq. En 1984, Microsoft había otorgado licencias de MS-DOS a 200 fabricantes de equipos informáticos y así este SO se convirtió en el más utilizado para PCs, lo que permitió a Microsoft crecer vertiginosamente en la década de 1980.

¿Por qué el MS-DOS quedó estigmatizado con las sucesivas generaciones de PCs hasta no hace mucho?
La respuesta a esta pregunta tiene un poco que ver con la esencia misma del origen de los ordenadores personales. Cuando IBM fabricó el PC hizo que el usuario antes de cargar algún SO, realizara lo que se llamó el POST (Power On Self Test), que determinaba los dispositivos disponibles (teclado, vídeo, discos, etc.) y luego buscaba un disco de arranque. Estas funciones eran realizadas por un conjunto de instrucciones incorporadas en la máquina mediante una ROM. Luego quedó escrito que siempre hubiera algún tipo de software en el sistema aún sin ser cargado el SO. Entre las rutinas del POST tenemos las de revisión del sistema, inicialización y prueba de teclado, habilitación de vídeo, chequeo de la memoria y la rutina de inicialización que preparaba a la máquina para ejecutar DOS. Después que las pruebas de arranque han sido ejecutadas y el sistema está cargado, la ROM aún sigue siendo importante debido a que contiene el soporte básico de entrada y salida (BIOS). La BIOS provee un conjunto de rutinas que el SO o los programas de aplicación pueden llamar para manipular el monitor, teclado, discos duros, discos flexibles, puertos COM o impresoras.

El trato de IBM con Microsoft tenía entre otras condiciones una particularidad interesante: la administración directa de las tarjetas adaptadoras podría ser manejada sólo por programas que IBM proveía con la ROM del ordenador. DOS sería escrito para utilizar estos servicios. De esta manera, si IBM decidía cambiar el hardware, éste podía embarcar nuevos modelos de chips con cambios en la BIOS y no requería que Microsoft cambiara el SO. Ello posibilitó, junto con la clonación de la arquitectura de IBM incluido el BIOS, que el DOS se extendiera por el universo, aun cuando el Gigante Azul rompiera su alianza con Microsoft, en 1991, para producir su propio SO. Microsoft había hecho un trabajo estratégico brillante e IBM había perdido la supremacía de los ordenadores para siempre.

Realmente, el núcleo del DOS estaba contenido en un par de archivos ocultos llamados IO.SYS y MSDOS.SYS en las versiones de DOS realizadas por Microsoft, e IBMBIO.SYS e IBMDOS.SYS, para las versiones de DOS hechas por IBM bajo licencia Microsoft. Los servicios de DOS eran solicitados cuando una aplicación llamaba a la interrupción 21 (INT 21) reservada para estos fines. Esta buscaba un punto de entrada del administrador de servicios de DOS en una tabla y saltaba a la rutina en el módulo MSDOS.SYS. En otros SO, la aplicación debía realizar una llamada al sistema (system call) para requerir servicios, como, por ejemplo, en UNIX.

Otro rasgo distintivo del MS-DOS fue la forma en el manejo de la estructura de ficheros: la FAT (File Allocation Table) o Tabla de Asignación de Archivos, que dividía al disco en subdirectorios y archivos. Criticados por muchos como un sistema poco seguro y no eficiente, la herencia sobrevivió por mucho tiempo y no fue hasta época reciente que Microsoft decidió reemplazarlo por un sistema más robusto, el NTFS que destinó a la gama alta de sus SO: el Windows NT.

La historia del MS-DOS comienza en 1981, con la compra por parte de Microsoft, de un sistema operativo llamado QDOS, que tras realizar unas pocas modificaciones, se convierte en la primera versión del sistema operativo de Microsoft MS-DOS 1.0 (MicroSoft Disk Operating System)

A partir de aquí, se suceden una serie de modificaciones del sistema operativo, hasta llegar a la versión 7.1, a partir de la cual MS-DOS deja de existir como tal y se convierte en una parte integrada del sistema operativo Windows.

Ahora explicaremos y comentaremos la cronología de MS-DOS en todas sus versiones:

En 1982, aparece la versión 1.25, con la que se añade soporte para disquetes de doble cara.

El año siguiente, 1983, el sistema comienza a tener más funcionalidad, con su versión 2.0, que añade soporte a discos duros IBM de 10 MB, y la posibilidad de lectura-escritura de disquetes de 5.25" con capacidad de 360Kb. En la versión 2.11 del mismo año, se añaden nuevos caracteres de teclado.

En 1984, Microsoft lanzaría su versión 3.0 de MS-DOS, y es entonces cuando se añade soporte para discos de alta densidad de 1,2MB y posibilidad de instalar un disco duro con un máximo de 32MB. En ese mismo año, se añadiría en la versión 3.1 el soporte para redes Microsoft.

Tres años más tarde, en 1987, se lanza la versión 3.3 con soporte para los conocidos y actuales disquetes de 3,5", y se permite utilizar discos duros mayores de 32 MB.

Es en 1988 cuando Microsoft saca al mercado su versión 4.0 y con ella el soporte para memoria XMS y la posibilidad de incluir discos duros de hasta 2GB; cabe destacar que esta versión fue la mayor catástrofe realizada por la empresa, ya que estaba llena de bugs, fallos, etc... esto se arregló en 1989 con el lanzamiento de la versión 4.01 que arreglaba todos estos problemas y fallos.

Uno de los avances más relevantes de la historia de MS-DOS, es el paso en 1991 de la versión 4.01 a la versión 5.0, en la que DOS es capaz ya de cargar programas en la parte de la memoria alta del sistema utilizando la memoria superior (de los 640Kb a los 1024Kb). En la versión 5.0 se añade el programador BASIC y el famoso editor EDIT. También se añadieron las utilidades UNDELETE (Recuperación de ficheros borrados), FDISK (Administración de particiones) y una utilidad para hacer funcionar los programas diseñados para versiones anteriores de MS-DOS, llamada SETVER. Es a finales de 1992 cuando se resuelven unos problemas con UNDELETE y CHKDSK en la versión 5.0a.

En 1993, aparece MS-DOS 6.0 con muchas novedades, entre ellas la utilidad Doublespace que se encargaba de comprimir el disco y así tener más espacio disponible; también se incluyó un antivirus básico (MSAV), un defragmentador (DEFRAG), un administrador de memoria (MEMMAKER) y se suprimieron ciertas utilidades antiguas, ya que haciendo un mal uso de ellas podían destruir datos: estas utilidades eran JOIN y RECOVER entre otras.

En el mismo año sale la versión 6.2 que añade seguridad a la perdida de datos de Doublespace, y añade un nuevo escáner de discos, SCANDISK, y soluciona problemas con DISKCOPY y SmartDrive. En la versión 6.21 aparecida en el mismo año 1993, Microsoft suprime Doublespace y busca una nueva alternativa para esta utilidad.

Un año más tarde, en 1994, aparece la solución al problema de Doublespace; es la utilidad de la compañía Stac Electronics, Drivespace, la elegida para incluirse en la versión 6.22

En el año 1995 aparece Microsoft Windows 95, que supone apartar a MS-DOS a un segundo plano.

El sistema MS-DOS, no obstante, sigue estando presente con una nueva versión, la 7.0, con la que se corrigen multitud de utilidades y proporciona soporte para nombres largos. Las utilidades borradas del anterior sistema operativo las podemos encontrar en el directorio del cd de windows 95 \other\oldmsdos.

En 1997 aparece Windows 95 OSR2, y con él una revisión exhaustiva del sistema DOS, añadiendo el soporte para particiones FAT32.

En la actualidad, la utilización de MS-DOS sigue siendo muy importante cuando Windows no es capaz de realizar la tarea que estamos haciendo o cuando Windows falla. Muchos técnicos en el área de la informática utilizan MS-DOS para realizar mantenimientos del PC, instalaciones, formateo y particionamiento de discos duros y escaneos de los mismos.

Hay que dejar constancia de que MS-DOS ha sido el sistema operativo utilizado por prácticamente todos los usuarios de PC desde 1981 hasta la actualidad, utilizando programas famosos para trabajar como el legendario WordPerfect 5.1, Works 2.0, Comandante Norton, Autocad, Ability 2000 entre otros...

Windows

Paralelamente, Microsoft hizo su primera incursión en lo que luego se llamaría Microsoft Windows en el año 1981 con el llamado Interface Manager, en tiempos en que las interfaces gráficas de usuario, GUI, eran una quimera de lujo para muchos, en tanto la computación estaba suscrita al área geográfica de los centros académicos, grandes instituciones y empresas. Más que un SO, se trataba en realidad de una interfaz montada sobre su estrenado DOS. Aunque los primeros prototipos usaban una interfaz similar a una de las aplicaciones estrellas de la Compañía en aquel entonces, el Multiplan, luego ésta fue cambiada por menúes pulldown y cajas de diálogo, similares a las usadas en el programa Xerox Star del mencionado fabricante. Al sentir la presión de programas similares en aquel entonces (recordemos que más que un SO, Windows nació como una interfaz gráfica entre éste y el usuario), Microsoft anuncia oficialmente Windows a finales del año 1983.

En ese momento, muchas compañías trabajan la línea de las interfaces gráficas, entre ellas Apple, reconocida casi por todos como la primera, DESQ de Quraterdeck, Amiga Workbech, NEXTstep, etc. Windows prometía una interfaz GUI de fácil uso, soporte multitarea y gráfico. Siguiendo el rito de los anuncio-aplazamientos de Microsoft, Windows 1.0 no llegó a los estantes de las tiendas hasta noviembre de 1985, disponiendo de un soporte de aplicaciones pobres y un nivel de ventas pírrico. El paquete inicial de Windows 1.0 incluía: MS-DOS Ejecutivo, Calendario, Tarjetero (¿alguien realmente usó esto alguna vez?), el Notepad, Terminal, Calculadora, Reloj, Panel de Control, el editor PIF (Program Information File), un spooler de impresión, el Clipboard, así como el Windows Write y Windows Paint.

En los años siguientes, si bien el ordenador personal como concepto ya se había establecido y servía de alternativa válida a las mini, sobre todo en el entorno institucional y empresarial, aún el poder de cómputo limitado y la gran variedad de fabricantes limitaron la explosión de Windows como SO, debido al despliegue universal que con el MS-DOS la Compañía había logrado establecer. Windows /286 y Windows/386, renombrados como Windows 2.0 terminan la saga en el otoño de 1987, al ofrecer algunas mejoras de uso, adicionar iconos y permitir la superposición de ventanas, lo que propició un marco mucho más apropiado para la co-ubicación de aplicaciones de mayor nivel como el Excel, Word, Corel Draw, Ami y PageMakers, etc. Una notoriedad del Windows /386 lo constituyó el hecho de poder correr aplicaciones en modo extendido y múltiples programas DOS de manera simultánea.

El Windows 3.0, que aparece en mayo de 1990, constituyó un cambio radical del ambiente Windows hasta entonces. Su habilidad de direccionar espacios de memorias por encima de los 640 k y una interfaz de usuario mucho más potente propiciaron que los productores se estimularan con la producción de aplicaciones para el nuevo programa. Ello, unido a la fortaleza dominante del MS-DOS, hizo que el Windows 3.0 se vislumbrara como el primer SO gráfico (siempre con el MS-DOS bajo su estructura) marcado para dominar el mercado de las PCs en el futuro inmediato. Windows 3.0 fue un buen producto, desde el punto de vista de las ventas: diez millones de copias. Todo un récord.

Dos años después llegaría la saga del Windows 3.1 y 3.11, así como su variante para trabajo en grupo. Con éste se hizo patente el traslado de la mayoría de los usuarios del ambiente de texto que ofrecía el MS-DOS hacia el ambiente gráfico de la nueva propuesta, olvidándonos todos paulatinamente del Copy A:\ *.* para sustituirlo por el COPY AND PASTE. Las primeras aplicaciones "adquiridas y/o desplazadas" por Microsoft ofrecidas como un todo único, el ambiente de RED peer to peer, los sistemas de upgrade de una versión a otra y el tratamiento diferenciado para los revendedores y los fabricantes OEM, caracterizaron los movimientos de Microsoft para afianzar el mercado de su SO insignia. En el caso de la versión para trabajo en grupo, Microsoft integró por primera vez su SO con un paquete de tratamiento para redes, lo que permitió, sobre un protocolo propio, el compartir ficheros entre PCs (incluso corriendo DOS), compartir impresoras, sistema de correo electrónico y un planificador para trabajo en grupo. Sin embargo, lo realmente llamativo consistió en su plena integración con el ambiente Windows y con ello garantizar, independiente de la calidad del producto final, un seguro predominio.

Mientras tanto, IBM y Microsoft trabajaban para desarrollar un nuevo programa especialmente diseñado para el procesador de Intel 80286. De esa forma, la versión 1.0 de OS/2 es lanzada en 1988, época en que ya el 386 se hacía popular. Se hizo claro que el hardware estaba cambiando muy rápido con relación al desarrollo del software. De manera que ambas compañías decidieron que la OS/2 versión 2 sería un refinamiento evolutivo de sistemas previos, actualizado para las nuevas características de hardware del 386. Sin embargo, para la versión 3 se procedió a trabajar desde cero, basado todo sobre Nueva Tecnología. En un principio sería un SO para procesadores de Intel, pero portable a otros, como los ALPHA, de Digital, por aquel entonces muy famosos. Después de la ruptura con IBM, Microsoft le llamaría al SO Windows NT. El OS/2, tras una existencia caótica bajo el pulso de IBM, quedó en el olvido. Microsoft se percató que si bien tenía bajo control el mercado de los SO para las masas, se sentía desplazado por la comunidad UNIX al nivel de las grandes instituciones y empresas. El NT comenzó a tomar fuerza en sus planes.

Volviendo al Windows tradicional, el año 95 significó un nuevo vuelco en la línea de los SO de Microsoft. En agosto sale al mercado el controvertido Windows 95, un entorno multitarea con interfaz simplificada y con otras funciones mejoradas. A sólo siete semanas de su lanzamiento ya se habían vendido siete millones de copias. Es la época del despegue de Internet y el WWW, y su visualizador dominante: el Navigator de Netscape. Microsoft, en un error poco común de su timonel, no se había dado cuenta que el futuro de los ordenadores estaba precisamente en la red y que Internet significaría toda una revolución. El lanzamiento de Windows 95 estuvo acompañado de una serie de pasos que el Gigante dio en aras de remediar su equivocación y enderezar el rumbo. Además de "empotrar" su navegador y obligar a los fabricantes de PCs a tenerlo en cuenta, ese mismo año se crea The Microsoft Network y mediante su incursión acelerada en los medios masivos de comunicación, surge MSNBC, un año después. En ese momento, Microsoft pagó 425 millones de dólares por la adquisición de WebTV Networks, un fabricante de dispositivos de bajo costo para conectar televisiones a Internet e invirtió mil millones de dólares en Comcast Corporation, un operador estadounidense de televisión por cable, como parte de su política de extender la disponibilidad de conexiones de alta velocidad a Internet. Por último, para introducirse en el mercado de los asistentes personales y los ordenadores de bolsillo, handheld devices, crea una nueva línea de su SO, el Windows CE, una especie de Windows en miniatura que ya en su versión 3.0 ha logrado una integración asombrosa con la plataforma e Internet.

Pero, ¿qué significó realmente Windows 95? En esencia, cuando Microsoft lo anunció lo describió como un SO de 32 bits. En realidad, Windows 95 era un híbrido que mezclaba códigos de 16 y 32 bits. Poseía capacidad de multitarea y multihilo, un sofisticado sistema de ficheros y pleno soporte de red. Su lanzamiento se pregonaba con la desaparición del MS-DOS, aunque en verdad la crítica no lo perdonó, pues traía de fondo el viejo sistema DOS en su versión 7.0. Así Windows 95 tomaba el control inmediatamente después de la secuencia de arranque, para dar lugar a una interfaz totalmente mejorada y una filosofía de trabajo diferente.

Añádale la famosa promesa del "plug and play" y tendremos un timo de marketing bien montado. Claro, en realidad la solución si bien novedosa y prometedora, era una meta muy alta para Microsoft y los fabricantes de entonces. No sólo habría que garantizar la compatibilidad de un legado de dispositivos de una variedad incontable, en plena explosión y desarrollo de los periféricos en los PCs, sino que además habría que lidiar con todo un arco iris de fabricantes y sistemas, que poco a poco se organizarían e integrarían para sobrevivir sólo los más fuertes. Aún años después, el término plug and play sigue mostrando sorpresas con algunas configuraciones o dispositivos, pero aquellos primeros intentos felizmente quedaron atrás.

Una de las notas más contradictorias del nuevo SO fue la inclusión de un navegador para Internet, el Internet Explorer, como una utililidad más del sistema. Esto no era más que el resultado de una estrategia de mercado que Microsoft había aplicado desde sus inicios: comprar las licencias de lo mejor de la competencia para integrarla a su SO o desarrollar su propia versión y ofrecerla gratis como parte de su paquete completo, para desplazar al que no quisiera vender. Comenzó la guerra de los browsers, que finalmente ganaría el Explorer debido a la abismal ventaja que le ofrecía llegar de manera natural al ordenador con cada nueva instalación de Windows.

Como resultado, a finales de 1997 el Departamento de Justicia acusó a Microsoft de violar un acuerdo fechado en 1994 al obligar a los fabricantes de ordenadores que instalaban Windows 95 a la inclusión de Internet Explorer. El Gobierno sostuvo que la Compañía se aprovechaba de la posición en el mercado de sus sistemas operativos para obtener el control de los exploradores de Internet. Microsoft afirmó que debía disponer del derecho de mejorar la funcionalidad de Windows, integrando en el SO funciones relacionadas con Internet. En plena guerra de los browsers, otro gigante del software, la Sun Microsystems, demanda a Microsoft ese mismo año, alegando que había incumplido el contrato por el que se le permitía utilizar el lenguaje de programación universal JAVA, propiedad de Sun, al introducir mejoras sólo compatibles en Windows. La batalla legal de Microsoft en varias direcciones, con victorias y derrotas para demandados y demandantes, será algo que caracterizará a la Compañía desde entonces.

Windows 95, a pesar de su "obligado" éxito no estuvo exento de problemas prácticos. Con él, Microsoft nos ató para siempre a su tradicional política de los paquetes de servicio o service packs para enmendar errores, huecos de seguridad o adicionar mejoras, que las premuras del mercado no habían permitido disponer a tiempo. Con él se estrenaron las famosas "pantallas azules", muy comunes entonces, ocasionadas en muchos casos por un deficiente tratamiento de los manipuladores de dispositivos o drivers. Con él, finalmente, se le dio bienvenida a la desenfrenada carrera de poder de cómputo y memoria, que provocó la obsolescencia de muchos sistemas que habían sobrevivido durante años.

La llegada de Windows 98 no marcó mucha diferencia visual de su predecesor. Sin embargo, en el fondo fue todo un mensaje de lo que Microsoft haría para penetrar en el mercado de Internet y barrer con los que habían dominado en este tema hasta entonces. La indisoluble integración del WEB con el escritorio, el llamado active desktop, la interfaz a lo "HTML", los canales (que pocos visitaron) y la persistente presencia del Explorer 4.0, para situarse por vez primera a la cabeza de los visualizadores de Internet, fueron rasgos distintivos de esta versión.

El 98 incluyó utilidades para el tratamiento de FAT16 y su conversión a FAT32, mejor manejo de los discos duros, manipulación múltiple de varios monitores, una lista extendida de soporte plug and play (¡extendida, sí, pero lejos de ser perfecta!), soporte DVD, AGP, etc. A su vez la promesa de una mejora sustancial en el tratamiento de los drivers de dispositivos y en la disminución de los pantallazos azules, que realmente cumplió y mejoró con la versión SR1 (service release 1), tiempo después.

El Windows 98 se ha mantenido hasta nuestros días y debe ser la última versión del SO que quede vinculada a lo que fue la línea MS-DOS-Windows (salvando la variante Millenium o Windows Me que no ha convencido a nadie) hasta su total sustitución por Windows 2000 y el XP, en una serie de zigzagueantes cambios que deja a todos adivinando si debe cambiar o no para la próxima versión. Pero tras este errático rumbo, Microsoft persigue sólo una cosa: conservar la supremacía de los SO de por vida.

La saga NT

La misión del equipo de desarrolladores que trabajó el NT estaba bien definida: construir un SO que supliera las necesidades de este tipo de programa para cualquier plataforma presente o futura. Con esa idea, el equipo encabezado por un antiguo programador de SO para máquinas grandes, se trazó los siguientes objetivos: portabilidad en otras arquitecturas de 32 bits, escalabilidad y multiprocesamiento, procesamiento distribuido, soporte API y disponer de mecanismos de seguridad clase 2 (C2), según parámetros definidos por el Gobierno estadounidense.

La robustez del sistema, fue un requisito a toda costa: el NT debía protegerse a sí mismo de cualquier mal funcionamiento interno o daño externo, accidental o deliberado, respondiendo de manera activa a los errores de hardware o software. Debía ser desarrollado orientado al futuro, prever las necesidades de desarrollo de los fabricantes de equipos de cómputo, su adaptación tecnológica no sólo al hardware, sino al propio software. Todo ello sin sacrificar el desempeño y eficiencia del sistema. En cuanto al certificado de seguridad, C2, debiera cumplir con los estándares establecidos por éste como la auditoría, la detección de acceso, protección de recursos, etc. Así nació el Windows NT 3.5 allá por el año 1994 y se introdujo poco a poco en un mercado hasta ese momento desterrado para Microsoft.

El NT 4.0 de nombre código Cairo, sale a luz en 1996. Por ahí leíamos que el nuevo sistema operativo cumplía una fórmula muy sencilla: tomar un NT 3.51, sumarle los service packs 1, 2 y 3 y mezclarlo con una interfaz a lo Windows 95 (incluido su recycle bin, algo realmente útil para un sistema montado sobre NTFS). Un pasó más en la integración del SO con Internet lo dio el NT 4.0 al incluir Internet Information Server, servidor de Microsoft para soporte WEB, FTP, etc. como una utilidad más dentro del paquete y que como la lógica indicaba engranaba con éste a las mil maravillas al desplazar en eficiencia y velocidad cualquier producto externo. La cara "Windows 95" se sobrepuso a un inicio incierto, ya que tuvo que vencer la desconfianza que pudo haber generado. Téngase en cuenta que la familia NT estaba orientada a un cliente en el que la estabilidad y seguridad del sistema eran el requisito número uno y ello contrastaba con la experiencia que había tenido el 95. Sin embargo, el golpe fue genial.

Por primera vez, Microsoft mezcló la solidez con el fácil uso y desterró para siempre el concepto impuesto hasta entonces de que para las grandes compañías y las grandes empresas los servidores debían ser cosa de científicos de bata blanca. El crecimiento de los usuarios NT se multiplicó desde ese momento. EL 4.0 se comercializaba en tres versiones: Workstation, Server y Advanced Server para tres variantes de clientes tipo, el profesional de las ingenierías, incluido la informática, la pequeña y mediana empresas y la gran empresa.

La convergencia

El cierre de los noventa y el inicio de siglo sorprendió a Microsoft con serios problemas legales, promesas de lanzamiento varias veces aplazadas y un nuevo cambio de estrategia. Cuando se esperaba el 5.0 como el sucesor de gama alta, éste es renombrado como Windows 2000 y la plataforma unificada en una sola. El 14 de septiembre de 2000 sale el Millenium, no como un sucesor del 98, sino como un producto orientado al usuario doméstico (interfaz de colores, mucha música y vídeo, soporte para redes LAN inalámbricas, cortafuegos personales), nada del otro mundo, con poca perspectiva de supervivencia, aunque esto siempre es una incógnita. En cambio, Windows 2000 es la alternativa actual para la mayoría, en la fase justa de emigrar de un 95 ó 98. Se ofrece en 4 clasificaciones: Windows 2000 Professional, Windows 2000 Server (anteriormente NT Server), Windows 2000 Advanced Server (anteriormente NT Advanced Server) y Windows 2000 Datacenter Server, un producto nuevo, poderoso y muy específico con posibilidad de manejo de hasta 16 procesadores simétricos y 64 Gb de memoria física.

Pensamos que lo destacable de este paso estriba en haber llevado la robustez, la seguridad y la portabilidad que daba el NT al mercado masivo de los PCs. Este ofrece una plataforma impresionante para el trabajo en Internet, Intranet, manejo de aplicaciones, todo muy bien integrado. La posibilidad de soporte completo de redes, incluido redes privadas virtuales, encriptación a nivel de disco o de red y riguroso control de acceso son otras de sus bondades.

La historia terminaría aquí... si hubiese sido escrita el año pasado. No obstante, un nuevo producto, de nombre código Whistler fue inaugurado en Nueva York bajo las cuerdas de Sting, el 21 de octubre de 2003, el Windows XP. Bajo su manto, un kernel de 32 bits y la herencia natural de los manipuladores que el NT y el 2000 han legado. Sin embargo incorpora toda una gama nueva de herramientas y otra filosofía de trabajo, siempre, claro está, con la red de redes en su mira. Se dice que el XP es un upgrade discreto del Windows 2000 y una piedra más en el camino de Microsoft hacia su próximo gran SO, de nombre código Blackcomb.

Hay dos cuestiones a destacar en el XP: primero que parece ser la integración lógica y perfecta a su plataforma de desarrollo para la red, eNET, promesa paradisíaca para programadores y desarrolladores de aplicaciones, que como nos comentaba un profesor estudioso del tema, constituye el primer gran esfuerzo de la compañía de Redmond en el cual no ha intervenido la compra de una licencia a un tercero. Segundo, la clave de habilitación en línea para la activación del producto, que con la justificación de evitar su copia ilegal pretende mantener localizado y controlado a cada usuario del sistema.

El predominio de Microsoft en la arena de los sistemas operativos a escala masiva es incuestionable. La visión de sus fundadores, sus prácticas poco ortodoxas, así como los azares en su largo camino, han hecho de Microsoft y su Windows, en cualquiera de sus modalidades, un seguro ganador en el presente y el futuro inmediato. Esperemos que al hablar de la historia de la computación, dentro de varios años, no tengamos más alternativa que contar la de un único sistema operativo. Eso sería imperdonable.


                         
                                                                       © 2004 Javier de Lucas