¿Cuál es la diferencia entre multiprogramación y multitarea?

10

Me resulta difícil diferenciar claramente entre multiprogramación y multitarea.

Mi fuente principal ha sido Wikipedia , pero el artículo de WP parece estar un poco en desacuerdo con algunas fuentes menos confiables (como mi profesor universitario).

Mientras leo WP, la multiprogramación es una forma rudimentaria de aumentar el rendimiento de la CPU, mediante el cambio de contexto cuando un proceso espera E / S.

La multiprogramación no garantiza que un programa se ejecutará de manera oportuna. De hecho, el primer programa puede funcionar durante horas sin necesidad de acceder a un periférico.

El tiempo compartido cooperativo , sinónimo de multitarea cooperativa , es una mejora en la multiprogramación (con la que no es sinónimo). El contexto de la CPU cambia regularmente para dar la impresión de ejecución simultánea, pero aún se requiere que los procesos rindan, y los programas mal diseñados pueden privar al resto del sistema.

La multitarea preventiva toma un control más agresivo de la programación, dando prioridad a algunos procesos sobre otros, etc.

  1. ¿Es correcto este resumen? Si no, ¿es porque WP es incorrecto o porque leí WP incorrectamente?
  2. ¿Por qué algunas fuentes parecen combinar multiprogramación y multitarea?
jsj
fuente
1
"con algunas fuentes menos respetables (como mi profesor universitario)" - oh querido. Espero que tenga más reputación que Wikipedia, que tiene mucho contenido a medias en CS.
Raphael
La "multiprogramación" parece ser más un enfoque histórico. La multitarea moderna de hecho está relacionada con el bloqueo de E / S, pero es solo uno de los factores utilizados para hacer malabarismos con los procesos. Además, casi toda la multitarea moderna es preventiva con el soporte de la CPU (que no siempre tenía ese soporte hace años y se suponía que los procesos con buen comportamiento llamarían métodos de espera basados ​​en el sistema operativo que apoyaban la cooperación).
vzn
2
@Raphael, puedes hacerle un favor al mundo entero horneándolos a la perfección.
vonbrand
1
@vonbrand Lo intenté, pero desafortunadamente hay suficientes expertos a medias para contrarrestar tales intentos.
Raphael
@Raphael, ¿y esa multitud no aparece aquí también?
vonbrand

Respuestas:

9

Son más o menos sinónimos. La multiprogramación se usa más cuando una CPU está involucrada, que se está cambiando de un proceso a otro, procesos que están resignando en la memoria simultáneamente. Llegaron los hilos, y ya no estaba cambiando entre programas ...

Los procesadores, particularmente la línea de inteligencia, tenían los mecanismos para una verdadera multitarea (interrupción del temporizador, instrucciones privilegiadas) desde al menos el 80286. El M68000 utilizado en la primera Mac era un procesador con capacidades de multitarea completas. Este no es un desarrollo reciente en arquitecturas. Tenga en cuenta que la primera vez que los sistemas compartidos cambiaron los programas del usuario dentro y fuera, y por lo tanto no estaban realmente multiprogramados en el sentido de tener varios programas en la memoria al mismo tiempo.

La idea es tener varios programas que residan en la memoria simultáneamente, de modo que cuando uno rinde la CPU (al terminar o al esperar) haya otros listos para usar la CPU, lo que aumenta la utilización de la CPU (y como puede considerar que cada ráfaga de CPU es prepararse para un uso de E / S, aumentar el uso general). Esto proporciona un mejor rendimiento (importante en los sistemas por lotes).

Junto con el tiempo compartido, varios usuarios interactivos se conectaron a la máquina. La misma idea, mantener sus programas alrededor pero cambiar entre ellos lo suficientemente rápido para que tengan la ilusión de "tener una computadora para ellos mismos". Requiere un temporizador que interrumpa la CPU para evitar la monopolización.

En las máquinas personales no había muchos incentivos para ejecutar varios programas a la vez, al menos inicialmente (un usuario frente a una máquina severamente limitada no esperaba mucho). A medida que las máquinas crecieron, una forma de evitar esto y permitir varios programas a la vez sin cambiar mucho el sistema operativoera "multitarea cooperativa", ya que se supone que cada programa cede periódicamente al sistema operativo para seleccionar otro para ejecutar. Como el programa que hace esto tiene el control total, puede seleccionar hacer esto cuando otros no puedan arruinar nada. Huelga decir que un programa que "olvida" cumplir su deber de rendimiento obtiene un impulso interesante en el rendimiento ... los primeros sistemas Mac funcionaron de esta manera, y por las razones anteriores esto no duró demasiado. En sistemas embebidos sin o con solo un sistema operativo rudimentario y un conjunto de programas estrictamente controlados, esta es ciertamente una opción atractiva.

vonbrand
fuente
El artículo de WP parece implicar que la multiprogramación carece de memoria virtual, a diferencia de la multitarea (sistemas). Históricamente puede ser cierto, pero ¿es la definición ortogonal?
didierc
1
Teníamos un IBM S / 370 multiprogramado aquí en los años 70, y definitivamente no tenía memoria virtual (parece recordar que tenía un disco utilizado solo para el spooling). La memoria virtual le permite tener aún más programas en la RAM limitada (ya que solo tiene a mano las partes "más utilizadas"), incluso una mejor utilización de esa manera. Entonces sí, los consideraría totalmente independientes; pero en la práctica hoy no encontrarás uno sin el otro. Excepto quizás en su enrutador WiFi o teléfono celular ...
vonbrand
Okay. Yo también lo pensaba, de hecho. De hecho, los sistemas embebidos a menudo carecen de la protección de memoria adecuada, lo sabía. Sin embargo, con programas bien comportados no debería ser un problema. Eso, por supuesto, depende de los proveedores del programa.
didierc
@didierc ortogonal? quieres decir mutuamente excluyente ¿verdad?
jsj
2

¿Diferencia entre multitarea y multiprogramación? La multitarea es una extensión lógica de la programación múltiple. Clásicamente, en un entorno de programación múltiple, más de un usuario comparte la CPU y la CPU cambia rápidamente de un usuario a otro, proporcionando una total transparencia entre ellos. En la multitarea, el usuario es sustituido por programas, es decir, más de un programa comparte la CPU y la CPU cambia rápidamente de un programa a otro. En realidad, un software que reside en el disco es un programa. Cuando se lleva a la RAM para la ejecución se conoce como proceso o tarea y cuando está dentro de la CPU y se ejecuta, se conoce como hilo. Entonces, la multiprogramación es básicamente para múltiples usuarios, y la multitarea es para un solo usuario con múltiples programas. Dado que la mayoría de los sistemas operativos modernos admiten ambos, por lo tanto, a menudo se escriben de forma intercambiable.

Rajesh Amarnath
fuente
0

Hay muchas diferencias entre la multitarea y la multiprogramación.

La multitarea está ejecutando más de una tarea a la vez. Por ejemplo, está escuchando una canción, imprimiendo un documento y escribiendo en MS-Word al mismo tiempo.

Durante la multiprogramación, en este tipo de sistema operativo, mejoramos la utilización de la CPU mediante el almacenamiento en búfer y la cola. En la ejecución secuencial, la CPU permanece inactiva después de ejecutar un programa y carga el siguiente programa desde la memoria principal. Durante las operaciones de E / S, la CPU también se encuentra idel, la CPU también permanece inactiva, pero al usar un entorno de multiprogramación, la CPU cambia al siguiente programa y la procesa. Esta es una técnica utilizada con la ayuda de almacenamiento en búfer y spooling.

Vikash Jangra
fuente