¿Cómo lograron las computadoras realizar múltiples tareas hace 20 años?

Tu suposición está bastante cerca. Las primeras computadoras no hicieron tareas múltiples. Fueron alimentados con hjobs (mediante cinta o tarjetas), ejecutaron ese trabajo y pasaron al siguiente. La computadora permaneció inactiva durante un gran porcentaje del tiempo (calculando eso como tiempo de CPU dedicado al trabajo / tiempo de CPU disponible).

Las primeras computadoras multitarea funcionaron por interrupción. Cada trabajo funcionó durante un período de tiempo específico (una interrupción de tiempo, generalmente muy breve) o hasta que solicitó una acción que resultaría en que la CPU esté inactiva. Estas acciones (entrada / salida más típicamente) ocurrieron a velocidades miles de veces más lentas que la CPU. El trabajo que solicita la acción se suspendería hasta que se complete la acción, momento en el que se produciría una interrupción de E / S.

El sistema operativo era responsable de manejar las interrupciones y cambiar entre trabajos.

Incluso con las GPU y las computadoras multinúcleo, la multitarea todavía ocurre.

De la entrada de Wikipedia:

En informática, la multitarea es un concepto de realizar múltiples tareas (también conocidas como procesos) durante un cierto período de tiempo ejecutándolas simultáneamente. Las nuevas tareas comienzan e interrumpen las ya iniciadas antes de que se hayan completado, en lugar de ejecutar las tareas secuencialmente, por lo que cada tarea iniciada debe llegar a su fin antes de que se inicie una nueva. Como resultado, una computadora ejecuta segmentos de múltiples tareas de forma intercalada, mientras que las tareas comparten recursos de procesamiento comunes, como las unidades de procesamiento central (CPU) y la memoria principal.

La multitarea no significa necesariamente que múltiples tareas se estén ejecutando exactamente al mismo tiempo (simultáneamente). En otras palabras, la multitarea no implica una ejecución paralela, pero sí significa que más de una tarea puede estar a medio camino a través de la ejecución al mismo tiempo, y que más de una tarea avanza en un período de tiempo determinado.

[1]

Incluso en computadoras multiprocesador o multinúcleo, que tienen múltiples CPU / núcleos para que se pueda ejecutar más de una tarea a la vez (físicamente, una por CPU o núcleo), la multitarea permite ejecutar muchas más tareas que las CPU.

Hace 20 años era 1997. Mis computadoras de escritorio Linux en el trabajo y en el hogar realizaban múltiples tareas exactamente como lo hacen hoy en día. Hay un reloj en tiempo real que interrumpe la CPU a intervalos regulares. Cuando un programa quiere hacer algo como leer datos de un archivo u obtener información de un usuario o mostrar algo en la pantalla, le pregunta al sistema operativo: pasa el control al SO que inició el programa en primer lugar. Luego, el sistema operativo decide, según los algoritmos de programación, cuál es el mejor uso del hardware. Tal vez permita que otro programa se ejecute por un momento mientras espera millones de microsegundos para que el usuario presione una tecla. Si un programa simplemente se queda allí calculando pi o algo, el sistema operativo seguirá recuperando el control debido a la interrupción del reloj. Para eso es un sistema operativo: el usuario renuncia a la capacidad de hablar directamente con el hardware, pero obtiene controladores multitarea, de seguridad y modulares para que no sea necesario que cada programa de juego sepa cómo usar cada modelo de gráficos. tarjeta.

En la década de 1990 todavía existían algunos sistemas de tareas únicas, como DOS y Windows (construidos sobre DOS). Parte del hardware no tenía un reloj de grano fino; se interrumpiría lentamente, si es que lo hacía. Entonces, algunos programas simplemente se quedarían allí en un bucle, ejecutando instrucciones de no hacer nada, esperando que algo suceda o contando milisegundos. La PC original de IBM tenía una velocidad de reloj de 4MHz, por lo que cuando las computadoras se vuelven más rápidas, algunos programas se ejecutan demasiado rápido, los juegos se vuelven imposibles de reproducir. Por un tiempo, los fabricantes agregaron un botón “turbo”; si presionó eso, tiene un reloj de 4MHz para jugar juegos antiguos, luego reinícielo para obtener 12MHz o lo que sea para las hojas de cálculo. Los programas pudieron emular una especie de multitarea al conectarse a la rutina de detección de pulsación de teclas: si el usuario pulsa una tecla especial como Alt-A, activaría uno de estos programas TSR que espera en segundo plano. Dado que un usuario puede cargar varios programas TSR a la vez, y no hay un sistema operativo real que los controle, puede ser complicado: uno puede desenganchar el anterior o usar la misma clave de activación.

Hace veinte años era 1997, y la mayoría de las computadoras realizaban múltiples tareas como lo hacen hoy. La tarea actual se ejecuta en la CPU actual durante un período de tiempo determinado, y luego el sistema operativo decide cuál de las tareas que están listas para ejecutarse obtiene el siguiente segmento de tiempo.

Hace veinte años, muchas computadoras solo tenían una CPU, por lo que el trabajo era más simple, no más difícil.

Hoy, al cambiar de tarea, un sistema operativo debe tener cuidado de no programar la misma tarea para que se ejecute en más de una CPU a la vez. Para obtener la máxima eficacia, debe intentar programar una tarea para que se ejecute en la misma CPU que ejecutó la última vez, y para que las tareas relacionadas se ejecuten en las CPU cercanas en la jerarquía de caché, pero no en las mismas CPU para evitar conflictos. Tiene que entender cómo Hyper Threading no es exactamente como tener CPU extra.

Tendrá que retroceder otros 10 a 15 años antes de llegar a la era en que las computadoras domésticas no realizaban múltiples tareas o tendían a ser multitarea cooperativas, pero incluso entonces las computadoras más grandes ya realizaban múltiples tareas (UNIX lo ha estado haciendo cantar aprox. 1969, y seguramente no lo inventaron allí, tal vez algún sistema de IBM en 1953 fue el primero …)

Todas las computadoras con Windows 3.1 y 95 (y 98 y Me también) solo tenían un núcleo de CPU. Ninguno de esos sistemas operativos tenía soporte para SMP (multiprocesamiento simétrico, es decir, más de una CPU). Si tenía más de una CPU instalada, tenía que usar Windows NT o a * nix. Ninguna versión anterior de Windows para el consumidor podía hacerlo, porque todos eran entornos operativos que se ejecutaban sobre DOS. El primer consumidor de SMP con Windows fue XP, que salió en 2001.

Podrías realizar múltiples tareas en Windows 95/98 / Me, porque tenía una multitarea preventiva; cada aplicación tenía su propio espacio de memoria para operar, independientemente de las demás. El sistema cambió entre aplicaciones emitiendo una interrupción. También era capaz de ejecutar tareas en segundo plano en una aplicación mientras trabajaba en otra, aunque dependería del planificador en el sistema operativo determinar qué programa tenía prioridad. Sin embargo, debido a la naturaleza híbrida de 16/32 bits de Windows 9x, no obtuvo una estabilidad perfecta: esta era la era en la que la infame “Pantalla azul de la muerte” era un lugar común. Muchos usuarios, incluido yo mismo, cambiaron a Windows 2000 poco después de que estuvo disponible; Esta versión basada en NT no tenía compatibilidad total con las API de Windows 9x y, por lo tanto, no se comercializó a los consumidores, pero a menudo era lo suficientemente buena. Win2K fue la base de XP, y en realidad lo usé como mi sistema operativo principal en la era de XP.

Las personas que usaban computadoras Apple Macintosh en esa época tuvieron un momento más difícil. El MacOS clásico nunca pudo hacer multitareas preventivas. En MacOS, el sistema operativo, las extensiones (llamadas INIT) y todas las aplicaciones que ejecutó compartieron el mismo espacio de memoria. Era cómicamente fácil para un programa mal escrito o INIT comportarse mal, y derribaría todo el sistema con un mensaje críptico como este:

Esta fue una de las razones por las que la popularidad de las computadoras Apple disminuyó a principios y mediados de la década de 1990, y por qué compraron NeXT y su sistema operativo el 7 de febrero de 1997 como base para Mac OS X. La situación de inestabilidad mejoró mucho con los clásicos MacOS 8 y 9, pero todavía estaba atascado con la misma multitarea cooperativa en el nivel de Windows 3.1.

Las CPU multinúcleo aún no existían, pero era posible comprar una placa base y ejecutar más de una CPU. Un truco popular unos años más tarde involucró a personas que compraron CPU Intel Celeron de hasta 566 MHz y las instalaron en placas base de doble CPU. Aunque SMP no era compatible con estas CPU de presupuesto y ciertamente no estaban certificadas para la operación de SMP, Intel no se había molestado en desactivarlo. Podrías comprar un par de chips Celeron 566 baratos, ejecutarlos a una velocidad de bus frontal de 100 MHz en lugar de su stock 66, y tener un sistema con procesadores duales de 850 MHz, una máquina potente en 2000, siempre que te hayas quedado con SMP- consciente de Windows 2000 o un sistema operativo * nix.

En cuanto a las GPU, ese es solo un término de marketing que Nvidia inventó unos años más tarde. Las computadoras que usan CPU x86 han tenido adaptadores de pantalla con controladores de gráficos dedicados desde el primer día: la PC original de IBM se entregó con el Adaptador de pantalla monocromo en 1981. En 1997, incluso teníamos hardware de gráficos 3D dedicado. Los gráficos 3dfx Voodoo salieron a fines de 1996 y tomaron por asalto a la comunidad de jugadores en el ’97.

Los primeros sistemas utilizaban la multitarea cooperativa. Ver, por ejemplo, wikipedia aquí:

Multitarea cooperativa – Wikipedia

Básicamente, todos los programas debían escribirse para permitir que el control volviera al sistema operativo. Si un programa no cumple con las reglas, colgaría todo el sistema.

Creo que Windows 95 ya tenía multitarea preventiva. Es decir, quitaría el control de los procesos con fuerza (podría tener el control, por ejemplo, a través de una interrupción de hardware en el reloj, que no necesita múltiples CPU).

¿Qué quieres decir, hace 20 años? ¿Qué hay de hace 50 años y más?

Básicamente, todo lo que necesita es un reloj interno y una interrupción para obligar a la computadora a cambiar de lo que está ejecutando a otra cosa.

El resto es todo software.

La primera computadora en la que trabajé, en los años sesenta, ya tenía multitarea impulsada por prioridad asistida por interrupción asistida por hardware.

Las GPU y los núcleos múltiples son un desarrollo reciente (en términos informáticos).

1 – Las computadoras han sido multitarea desde finales de los años 60 (mainframes y mini computadoras).

2: Windows 3.1 utilizaba la multitarea cooperativa, dependía de las aplicaciones que producían la CPU con frecuencia para permitir que otras aplicaciones se ejecutaran al mismo tiempo

3 – La verdadera multitarea en las CPU Intel todavía estaba disponible a fines de los 80 con sistemas similares a Unix. Se requieren 286 CPU. Luego, las versiones de 32 bits estuvieron disponibles para 386 CPU.

Si necesita un núcleo de CPU para la tarea, no es una multitarea real. Incluso con las antiguas CPU 386, era posible ejecutar cientos de aplicaciones al mismo tiempo en sistemas operativos eficientes como Xenix.

La multitarea preventiva significa que la CPU funciona durante un tiempo limitado y luego cambia a otra tarea. Si la aplicación llama a alguna función del sistema operativo, especialmente aquellas que bloquean la E / S, el sistema operativo ejecuta otra tarea tan pronto como se realiza el trabajo preparatorio para esa E / S.

Este no es un tema que pueda explicarse bien en una quora respuesta. Busque en Google multitarea preventiva x86 y lea los artículos.

Si. la multitarea se realiza cambiando de un hilo o tarea a otro según sea necesario. Los sistemas que utilizan múltiples procesadores, ya sean iguales (como en múltiples núcleos) o diferentes (como en GPU), generalmente se denominan multiprocesamiento en lugar de multitarea.

Se llamaba “Tiempo compartido” en esos días. Este artículo lo describe mejor y más completamente de lo que posiblemente podría:

Tiempo compartido – Wikipedia

Bingo, respondiste tu propia pregunta.

El procesador simplemente cambia de un proceso a otro, especialmente cuando un proceso deja de ejecutarse para solicitar datos de la memoria RAM o de la HD.