Capítulo 6

Capítulo 6

Sistemas Operativos Multiprogramados (1960-1970)

A medida que el hardware de la computadora aumentó en potencia y complejidad en la década de 1960, la necesidad de un software de sistema más sofisticado para administrar los recursos de la máquina y simplificar la ejecución del programa se hizo cada vez más evidente. Los sistemas sencillos de procesamiento por lotes, a pesar de haber representado un primer paso hacia la automatización, mostraron sus límites en términos de eficiencia e interactividad. Este período vio el surgimiento de sistemas operativos multiprogramados y de tiempo compartido , que revolucionarían la forma en que los usuarios interactuaban con las computadoras y sentarían las bases de los sistemas operativos modernos.

6.1 Las limitaciones del procesamiento por lotes:
Ejecución secuencial e ineficiente

Como se analizó en el Capítulo 3, el procesamiento por lotes implicaba la ejecución secuencial de un conjunto de trabajos, con intervención limitada del operador. Aunque este enfoque mejoró el uso de la computadora en comparación con la ejecución manual de cada instrucción individual, tenía varias limitaciones importantes:

  • Baja utilización de la CPU: Durante las operaciones de entrada/salida (E/S), la CPU a menudo permanecía inactiva esperando que el dispositivo externo completara su tarea. Esto llevó a una subutilización del costoso recurso de la CPU.
  • Larga espera para obtener resultados: Los usuarios tuvieron que esperar a que se completara todo el lote para obtener los resultados de su trabajo, aunque esto tomó solo una fracción del tiempo total de ejecución.
  • Falta de interactividad: No fue posible interactuar con el programa durante su ejecución, lo que dificultaba la depuración y ejecución de aplicaciones que requerían retroalimentación inmediata.
  • Prioridades limitadas: Todos los trabajos del lote generalmente se ejecutaron con la misma prioridad, sin posibilidad de favorecer trabajos más urgentes o importantes.

Estas limitaciones empujaron a los investigadores y desarrolladores a explorar nuevas formas de administrar los recursos informáticos que podrían superar las ineficiencias del procesamiento por lotes.

6.2 El surgimiento de la multiprogramación:
Compartir la CPU para maximizar la utilización

la multiprogramación es una técnica que permite que múltiples programas (o procesos) residan simultáneamente en la memoria principal y compartan la CPU. La idea fundamental es que cuando un programa debe esperar a que se complete una operación lenta (como una operación de E/S), la CPU puede pasar a ejecutar otro programa que esté listo para ejecutarse. De esta forma intentamos mantener la CPU lo más ocupada posible, mejorando la eficiencia general del sistema.

Para implementar la multiprogramación, se necesitaban varios mecanismos:

  • Administración de memoria: El sistema operativo necesitaba poder asignar y administrar espacio de memoria para acomodar múltiples programas al mismo tiempo, asegurando que un programa no interfiriera con la memoria de otro.
  • Programación de CPU: El sistema operativo tuvo que implementar algoritmos para decidir cuál de los programas listos para ejecutar debería tener acceso a la CPU y durante cuánto tiempo.
  • Protección: Era fundamental que el sistema operativo proporcionara mecanismos de protección para evitar que un programa accediera o modificara la memoria o los recursos de otro programa de manera no autorizada.

La multiprogramación permitió aumentar significativamente la productividad de los sistemas informáticos, ya que se podían completar múltiples trabajos en la misma cantidad de tiempo.

6.3 Los primeros sistemas operativos multiprogramados:
Pioneros en la gestión de recursos

Algunos de los primeros sistemas operativos en implementar la multiprogramación incluyen:

  • Atlas Supervisor: Desarrollado para la computadora Atlas en la Universidad de Manchester a principios de la década de 1960, este sistema operativo fue uno de los primeros en introducir conceptos como memoria virtual y multiprogramación, demostrando la viabilidad de estas técnicas.
  • IBM OS/360: Introducido en 1964, OS/360 fue uno de los primeros sistemas operativos a gran escala diseñado para soportar la multiprogramación en una familia de computadoras IBM System/360 con diferentes capacidades de hardware.
  • OS/360 era un sistema operativo extremadamente complejo para su época y representó un hito en el desarrollo de los sistemas operativos, introduciendo conceptos como lenguajes de control de trabajos (JCL) para la gestión de trabajos y mecanismos sofisticados de gestión de memoria. Sin embargo, su complejidad también dificultaba su implementación y gestión.
  • Otros sistemas operativos, como el Master Control Program (MCP) desarrollado para las computadoras Burroughs, también implementaron formas de multiprogramación.

6.4 La introducción del tiempo compartido:
La ilusión de una computadora personal para muchos usuarios

el tiempo compartido es una extensión de la multiprogramación que permite que varios usuarios interactúen con la computadora al mismo tiempo. La idea es dividir el tiempo de la CPU en pequeños intervalos (porciones de tiempo o cuantos de tiempo) y asignar cada intervalo a un usuario diferente. La CPU cambia rápidamente de un usuario a otro, creando la ilusión de que cada usuario tiene una computadora personal dedicada.

El tiempo compartido fue motivado por el deseo de proporcionar una experiencia informática interactiva a múltiples usuarios simultáneamente, superando las limitaciones del procesamiento por lotes. Esto era especialmente importante en contextos como la investigación científica y la educación, donde muchos usuarios pueden necesitar acceso a la computadora para ejecutar pequeños programas, editar archivos o interactuar con el sistema en tiempo real.

Para implementar el tiempo compartido, se necesitaban técnicas como:

  • División de tiempo: La CPU se asigna a cada proceso durante un corto período de tiempo.
  • Intercambio: Si un proceso no utiliza la CPU durante un período prolongado (por ejemplo, esperando la entrada del usuario), su espacio de memoria se puede mover temporalmente al disco (intercambiarse) para dejar espacio para otros procesos activos. Cuando el proceso está listo para ejecutarse nuevamente, se devuelve a la memoria (se intercambia).
  • Gestión de usuarios y terminales: El sistema operativo necesitaba poder gestionar el acceso de múltiples usuarios a través de terminales remotos.

6.5 Sistemas operativos pioneros de tiempo compartido:
Hacia la interactividad

Algunos de los primeros y más influyentes sistemas operativos de tiempo compartido incluyen:

  • CTSS (Sistema de tiempo compartido compatible): Desarrollado en el MIT (Instituto de Tecnología de Massachusetts) a principios de la década de 1960, CTSS fue uno de los primeros sistemas exitosos de tiempo compartido. Permitió que múltiples usuarios accedieran interactivamente a una computadora central a través de terminales, abriendo nuevas posibilidades para la investigación y la educación. CTSS influyó profundamente en el desarrollo de sistemas operativos posteriores.
  • Multics (Servicio de Computación e Información Multiplexada): Un proyecto ambicioso que comenzó en 1965 como una colaboración entre el MIT, General Electric y Bell Labs. El objetivo era crear un sistema operativo de tiempo compartido potente, fiable y seguro, con funciones avanzadas como un sistema de archivos jerárquico. Aunque el proyecto Multics no logró un éxito comercial inmediato, muchas de sus ideas y conceptos influyeron profundamente en el desarrollo de futuros sistemas operativos.
  • Unix: Nacido como un proyecto "espurio" dentro de Bell Labs en la década de 1960, principalmente por Ken Thompson y Dennis Ritchie, Unix se inspiró inicialmente en algunas de las ideas de Multics, pero con un enfoque más simple y modular. Una de las características distintivas de Unix fue su portabilidad, posible gracias a su implementación en lenguaje C (también desarrollado en Bell Labs por Ritchie). Las primeras versiones de Unix admitían el tiempo compartido e introducían conceptos fundamentales como el sistema de archivos jerárquico y la interfaz de línea de comandos (shell), que tendrían un impacto duradero en el mundo de la informática.

6.6 Conceptos fundamentales de los sistemas operativos modernos introducidos en este período

La década 1960-1970 fue crucial para la definición de muchos de los conceptos fundamentales que todavía forman la base de los sistemas operativos modernos en la actualidad:

    ​​​​
  • Gestión de la memoria: Se desarrollaron las primeras técnicas para asignar memoria (por ejemplo, particiones fijas y variables) y para proteger la memoria entre diferentes procesos. La introducción de la memoria virtual en sistemas como Atlas y OS/360 representó un avance significativo, permitiendo a los programas utilizar más memoria de la que estaba físicamente disponible.
  • Programación de CPU: Los primeros algoritmos de programación se introdujeron para decidir qué proceso debería ejecutar la CPU en un entorno multiprogramado de tiempo compartido. Se comenzaron a estudiar e implementar algoritmos como el round robin (utilizado en muchos sistemas de tiempo compartido) y los algoritmos basados ​​en prioridades.
  • Administración de dispositivos: Los sistemas operativos comenzaron a incluir mecanismos para administrar y controlar los diversos dispositivos de entrada/salida conectados a la computadora, proporcionando una interfaz uniforme para los programas de aplicación.
  • Sistemas de archivos: Los sistemas operativos como Multics y Unix introdujeron el concepto de un sistema de archivos jerárquico, que permitía organizar los datos en directorios y subdirectorios, simplificando la gestión y el acceso a los archivos.
  • Interfaz de usuario: Si bien el procesamiento por lotes a menudo no implicaba la interacción directa del usuario durante la ejecución, los sistemas de tiempo compartido introdujeron la interfaz de línea de comandos (CLI) como el medio principal de interactuar con el sistema operativo.

6.7 Retos e innovaciones en el desarrollo de sistemas operativos

El desarrollo de sistemas operativos multiprogramados y de tiempo compartido en la década de 1960 fue una tarea extremadamente compleja. Los programadores de sistemas operativos enfrentaron desafíos como la gestión simultánea de múltiples procesos, la sincronización y comunicación entre procesos, la protección de los recursos del sistema y el manejo de errores.

Este período también vio el surgimiento de importantes innovaciones en técnicas de desarrollo de software y diseño de sistemas. La modularidad, la estructuración del código y la introducción de lenguajes de programación de alto nivel como C para el desarrollo de sistemas operativos (como en el caso de Unix) ayudaron a gestionar la creciente complejidad del software del sistema.

La evolución de los sistemas operativos en la década de 1960, con el paso del procesamiento por lotes a la multiprogramación y el tiempo compartido, representó un cambio fundamental en la forma en que los usuarios interactuaban con las computadoras y en la eficiencia con la que se utilizaban los recursos de hardware. La introducción de conceptos clave como administración de memoria, programación de CPU, administración de dispositivos y sistemas de archivos sentó las bases de los sistemas operativos modernos que utilizamos hoy. Los sistemas pioneros como OS/360, CTSS, Multics y Unix tuvieron un impacto duradero en el campo de la informática, influyendo profundamente en el desarrollo del software de sistemas durante las próximas décadas.