# Tiempo compartido (informática)

En computación, el uso del tiempo compartido (calco semántico del inglés time-sharing) se refiere a compartir de forma concurrente un recurso computacional (tiempo de ejecución en la CPU, uso de la memoria, etc.) entre muchos usuarios por medio de las tecnologías de multiprogramación y la inclusión de interrupciones de reloj por parte del sistema operativo, permitiendo a este último acotar el tiempo de respuesta del computador y limitar el uso de la CPU por parte de un proceso dado.
Su introducción en los años 1960, y su asentamiento como modelo típico de la computación en los años 1970, representa un cambio importante en la historia de la computación. Al permitir que un gran número de usuarios interactuara y ejecutara diversos programas de forma simultánea en una sola computadora, el coste del servicio de computación bajó drásticamente, mientras que al mismo tiempo hacía la experiencia computacional mucho más interactiva.

## Historia
### Procesamiento por lotes

Los primeros computadores eran dispositivos extremadamente costosos y muy lentos. Las máquinas fueron típicamente dedicadas a un conjunto particular de tareas y eran operados desde un panel de control, el operador introducía manualmente pequeños programas por medio de interruptores para cargar y ejecutar programas. Estos programas podían llevar horas o incluso semanas para finalizar su tarea. A medida que las computadoras aumentaron su velocidad, los tiempos de ejecución se redujeron, y repentinamente el tiempo tomado para leer y cargar el siguiente programa empezaba a ser relativamente grande en comparación con el tiempo de uso de la CPU. Esta última permanecía demasiado tiempo inactiva mientras se realizaban tareas de entrada/salida, hecho que se convirtió en una importante preocupación. Para mejorar el aprovechamiento de las computadoras, las anteriores metodologías de procesamiento por lotes simples evolucionaron a sistemas de procesamiento por lotes multiprogramados, de modo que mientras un primer programa era ejecutado inmediatamente se empezaba a cargar en los dispositivos de entrada el siguiente programa en la cola, el cual se almacenaba en un búffer y se mantenía en espera, cuando el primer programa dejaba de ejecutarse o realizaba nuevas tareas de entrada/salida el siguiente en la cola ya estaba disponible para su procesamiento. De este modo, se alineaban los programas uno detrás del otro para que tan pronto como uno terminara el siguiente comenzara, reduciendo drásticamente los tiempos muertos de la CPU.
Generalmente los programas introducidos en sistemas de procesamiento por lotes, utilizaban tarjetas perforadas o cintas de papel. Los programadores utilizaban máquinas de escribir baratas para escribir el código de sus programas, una vez hecho esto se perforaban las ya mencionadas tarjetas perforadas. Cuando las tarjetas finalmente estaban preparadas, eran enviadas al equipo de operaciones, quienes le asignarían un horario determinado para su ejecución. Se priorizaban los programas importantes para que su tiempo de espera fuese menor, mientras que los menos importantes debían esperar un tiempo indeterminado. Cuando el programa finalmente era ejecutado, la salida, generalmente impresa, sería retornada al programador. El proceso completo podía tardar días, durante los cuales el programador podía no ver el computador nunca.
La alternativa, permitiendo al usuario operar el computador directamente, era generalmente demasiado costosa para ser considerada. Esto era debido a que el usuario debía esperar largos retardos simplemente sentado allí mientras se introducía y cargaba el código. Esto limitó los desarrollos en la interactividad directa usuario/máquina únicamente a las grandes organizaciones que podían pagar para despilfarrar ciclos computacionales, así como grandes universidades en general. Los programadores en las universidades denigraron los comportamientos inhumanos que el procesamiento por lotes impuso, al punto que los estudiantes de Stanford hicieron un cortometraje humorístico criticándolo. Ellos experimentaron con nuevas maneras de interactuar directamente con el computador, un campo conocido hoy como Interacción Humano Máquina.

### Tiempo compartido

Debido a que los primeros mainframes y minicomputadores eran extremadamente costosos, era rara vez posible permitir a un solo usuario el acceso exclusivo a la máquina para uso interactivo. Pero dado que los computadores que debían realizar tareas de forma interactiva a menudo perdían mucho tiempo mientras esperaban la acción de entrada del usuario, fue sugerido que múltiples usuarios podrían compartir una máquina al asignar el tiempo ocioso de un usuario para servir a otros usuarios.
El tiempo compartido se desarrolló al darse cuenta de que mientras un usuario solo era ineficiente, un grupo grande de usuarios juntos no lo era. Esto era debido al patrón de la interacción; en la mayoría de los casos los usuarios envían explosiones (ráfagas) de información seguidas por una larga pausa o inactividad, pero un grupo de usuarios trabajando al mismo tiempo significaría que las pausas de un usuario en un momento determinado serían consumidas por la actividad de los otros. Una vez hallado el tamaño de grupo óptimo, el proceso total podía ser muy eficiente. Similarmente se podría conceder a otros usuarios, las pequeñas porciones de tiempo gastadas en esperar por el disco, la cinta, o la entrada de la tarjeta de red.
La implementación de un sistema capaz de tomar provecho de esto sería difícil. El procesamiento por lotes era realmente un desarrollo metodológico encima de los primeros sistemas; las computadoras todavía ejecutaban programas simples para usuarios en un momento determinado, hasta ese momento, lo único que el procesamiento por lotes multiprogramados había cambiado era el retardo de tiempo entre un programa y el siguiente. Desarrollar un sistema que soportara múltiples usuarios al mismo tiempo era un concepto totalmente diferente, el "estado" de cada usuario y sus programas tendría que ser mantenidos en la máquina, y luego cambiado entre ellos rápidamente. Esto tomaría ciclos de la computadora, y en las máquinas lentas de la época esto era una preocupación. Sin embargo, a medida que las computadoras rápidamente mejoraban en velocidad y especialmente la capacidad de la memoria de núcleos magnéticos que se podía utilizar para mantener el estado de un programa en un instante determinado (guardándolo hasta su reanudación), estos gastos indirectos en la implementación del tiempo compartido se redujeron continuamente en términos globales.
El concepto primero fue descrito públicamente a principios de 1957 por Bob Bemer como parte de un artículo en Automatic Control Magazine. El primer proyecto para implementar un sistema de tiempo compartido fue iniciado por John McCarthy a finales de 1957, en un IBM 704 modificado, y más adelante en una computadora IBM 7090 adicionalmente modificada. Aunque él se fue para trabajar en el Project MAC y otros proyectos, uno de los resultados del proyecto, conocido como el Compatible Time-Sharing System o CTSS compatible, fue demostrado en noviembre de 1961. El CTSS tiene una buena aclamación de ser el primer sistema de tiempo compartido y permaneció en uso hasta 1973. Otro candidato para el primer sistema de tiempo compartido demostrado fue PLATO II creado por Donald Bitzer en una demostración pública en Robert Allerton Park en la Universidad de Illinois a principios de 1961. Bitzer ha dicho que el proyecto de PLATO habría conseguido la patente sobre el tiempo compartido si la Universidad de Illinois hubiera sabido cómo procesar solicitudes de patente más rápidamente, pero en ese tiempo, las patentes de la universidad eran tan pocas que tardaron un tiempo largo en realizarla. El primer sistema de tiempo compartido comercialmente exitoso fue el Dartmouth Time-Sharing System (DTSS) que fue implementado por primera vez en el Dartmouth College en 1964 y subsecuentemente formó la base de los computer bureau services de General Electric. El DTSS influenció el diseño de otros sistemas de tiempo compartido tempranos desarrollados por Hewlett Packard, Control Data Corporation, UNIVAC y otros, además de introducir el lenguaje de programación BASIC (el Dartmouth BASIC).

### El negocio del tiempo compartido

En los años 1960, varias compañías comenzaron a proporcionar servicios de tiempo compartido como bureau de servicios (se alquilaba tiempo y servicio de computación). Los primeros sistemas usaron el teletipo ASR-33|K/ASR-33s o K/ASR-35s en ambientes ASCII, y una teleimpresora de IBM en ambientes EBCDIC. Se conectaban con la computadora central usando dial-up por medio de módems de acople acústico que operaban a 10-15 caracteres por segundo. Terminales y módems posteriores soportaban 30-120 caracteres por segundo. El sistema de tiempo compartido proporcionaría un ambiente operacional completo, incluyendo editores de texto y entornos de desarrollo integrado para lenguajes de programación, varios paquetes de programas informáticos, almacenamiento de archivos, impresión masiva, y de almacenamiento fuera de línea. A los usuarios se les cargaba un alquiler por el terminal, una carga por horas de tiempo de conexión, una carga por segundos de tiempo de CPU, y una carga por kilobytes mensuales de almacenamiento de disco.
Los sistemas comunes usados para el tiempo compartido incluyeron el SDS 940, el PDP-10, y el IBM 360. Las compañías que proporcionaban este servicio incluyeron Tymshare (fundada en 1966), National CSS (fundada en 1967 y comprada por Dun & Bradstreet en 1979), Dial Data (comprada por Tymshare en 1968), y Bolt, Beranek, and Newman. Por 1968, había 32 de esas oficinas de servicio que servían al NIH solamente.
La edición 1973 de la Guía Auerbach para el tiempo compartido lista 125 diferentes servicios de tiempo compartido usando equipos de Burroughs, CDC, DEC, HP, Honeywell, IBM, RCA, UNIVAC y XDS.

### Evolución

Entre finales de los años 1960 y los años 1970, los terminales de computadora fueron multiplexados sobre grandes computadores mainframes institucionales (sistemas centrales de computación), que en muchas implementaciones consultaban secuencialmente a los terminales (polling) para ver si había algún dato o acción adicionales solicitados por el usuario del computador. La tecnología posterior en interconexiones fue manejada por interrupciones, y alguna de estas usaban tecnologías de transferencia paralela de datos como, por ejemplo, el estándar IEEE 488. Generalmente, los terminales fueron utilizados en propiedades de las universidades en muchos de los mismos lugares donde se encuentran hoy los computadores de escritorio o los computadores personales. De hecho, en los primeros días de los computadores personales, muchos fueron usados particularmente como terminales inteligentes para los sistemas de tiempo compartido.
Con el auge de la microcomputación a principios de los años 1980, el tiempo compartido se desvaneció porque los microprocesadores individuales eran suficientemente baratos para que una sola persona pudiera tener todo el tiempo de CPU dedicado solamente a sus necesidades, incluso cuando estaba ocioso.
Internet ha traído de vuelta nuevamente a la popularidad el concepto general de tiempo compartido. Granjas de servidores costando millones pueden ser anfitriones de miles de clientes, todos compartiendo los mismos recursos comunes. Al igual que los primeros terminales seriales, los sitios Web operan primariamente en ráfagas de actividad seguidas por períodos ocioso. Esta naturaleza en ráfagas permite que el servicio sea usado a la vez por muchos clientes del sitio Web, y ninguno de ellos nota cualquier retardo en las comunicaciones hasta que los servidores comienza a estar muy ocupados.

### Primeros sistemas significativos

    Véase también: Evolución de los sistemas de tiempo compartido
* Allen-Babcock RUSH Time-sharing System
* BBN PDP-1 Time-sharing System -> Massachusetts General Hospital PDP-1D -> MUMPS
* BBN TENEX -> DEC TOPS-20, Foonly FOONEX, MAXC OS at PARC, Stanford LOTS
* Burroughs Time-sharing MCP -> HP 3000 MPE
* UC Berkeley GENIE -> SDS 940 (Tymshare, BBN, SRI, Community Memory) -> BCC 500 -> MAXC at PARC
* UC Berkeley CAL-TSS (ran on CDC 6400)
* UC Berkeley BSD UNIX
* CDC KRONOS
* Dartmouth DTSS -> GE Time-sharing -> GEnie
* DEC PDP-6 Time-sharing Monitor -> TOPS-10 -> TSS-8, RSTS-11, RSX-11 -> VAX/VMS
* HP-2000 Timeshared BASIC
* IBM TSS/360
* IBM CP-67 -> VM/CMS
* Michigan Terminal System
* Michigan State University CDC SCOPE/HUSTLER System
* MIT CTSS -> MULTICS (MIT/GE/Bell Labs) -> UNIX, PRIMOS
* MIT PDP-1 Time-sharing System -> ITS
* National CSS -> VP/CSS (ran on IBM 360 series; originally based on IBM's CP/CMS
* Oregon State University OS-3 (ran on CDC 3000 series)
* RAND JOSS -> JOSS-2 -> JOSS-3
* SDC Q-32 Time-sharing System
* Stanford PDP-1 Time-sharing System -> SAIL -> WAITS
* Time Sharing Ltd. First commercial Time-sharing system in Europe and first dual (fault tolerant) Time-sharing system.
* Tymshare SDS-940 -> Tymcom X -> Tymcom XX
* XDS CP-V -> Honeywell CP-6

## Tiempo compartido actualmente

Con el uso de microcomputadores con configuraciones multiseat se pueden tener varios usuarios trabajando simultáneamente en el mismo computador, cada uno de ellos con su propia pantalla, teclado, ratón y opcionalmente tarjeta de sonido.
Otra manera de usar tiempo compartido en los microcomputadores es por medio de LTSP, que permite la reutilización de microcomputadores de bajos recursos (ya viejos y obsoletos), usándolos como terminales inteligentes o clientes ligeros que se conectan a un microcomputador central donde se ejecutan las aplicaciones y se comparten sus recursos.

## Seguridad

La seguridad no había sido un tema importante para los sistemas centralizados de procesamiento por lotes simples o lotes multiprogramados que eran comunes cuando emergió el paradigma del tiempo compartido. Hasta entonces no se trataba de nada más que la seguridad del nombre de usuario requerida al usuario. Fueron los usuarios comerciales, especialmente los de las categorías financieras y al por menor, quienes exigieron una seguridad mucho más robusta y también plantearon muchas de las cuestiones que se están abordando actualmente a medida que las compañías consideran la subcontratación de servicios. En 1971, la primera conferencia internacional sobre seguridad de computadora, en Londres, fue dirigida sobre todo hacia la industria del tiempo compartido y sus clientes. Los mismos problemas todavía se están abordando actualmente en la Web y con los productos SaaS.

## La utilidad computacional

En los años 1970, mucho de los pensamientos fue dado a los recursos de computadora centralizados que eran ofrecidos como utilidades computacionales (servicios computacionales), iguales que los servicios eléctricos o de teléfono. El repositorio original de hipertexto "Xanadu", de Ted Nelson, fue imaginado como uno de esos servicios. A medida que la industria del computador crecía, se volvió claro que no ocurriría tal consolidación de recursos de computación en sistemas de tiempo compartido. Algunos sostienen que el movimiento a través de la computación cliente-servidor para centralizar granjas de servidores y la virtualización presentan otra vez un mercado para las utilidades computacionales.