- Multiprogramación: la multiprogramación se conoce como mantener varios programas en la memoria principal al mismo tiempo, listos para su ejecución.
- Multiprocesamiento: una computadora que usa más de una CPU a la vez.
- Multitarea: la multitarea no es más que multiprogramación con un algoritmo de programación Round-robin.
- Multithreading es una extensión de la multitarea.
1. Programación múltiple –
En un sistema informático moderno, normalmente hay varios procesos de aplicación simultáneos que se quieren ejecutar. Ahora es responsabilidad del Sistema Operativo gestionar todos los procesos de forma eficaz y eficiente. Uno de los aspectos más importantes de un Sistema Operativo es la multiprogramación. En un sistema informático existen múltiples procesos esperando a ser ejecutados, es decir, están esperando a que se les asigne la CPU y comiencen su ejecución. Estos procesos también se conocen como trabajos. Ahora la memoria principal es demasiado pequeña para acomodar todos estos procesos o trabajos en ella. Así, estos procesos se mantienen inicialmente en un área denominada bolsa de trabajo. Este grupo de trabajo consta de todos aquellos procesos que esperan la asignación de memoria principal y CPU. La CPU selecciona un trabajo de todos estos trabajos en espera, lo trae del grupo de trabajos a la memoria principal y comienza a ejecutarlo. El procesador ejecuta un trabajo hasta que es interrumpido por algún factor externo o se dirige a una tarea de E/S.Funcionamiento del sistema no multiprogramado –
- En un sistema no multiprogramado, tan pronto como un trabajo deja la CPU y se dirige a otra tarea (por ejemplo, E/S), la CPU queda inactiva. La CPU sigue esperando y esperando hasta que este trabajo (que se estaba ejecutando antes) regresa y reanuda su ejecución con la CPU. Entonces, la CPU permanece libre durante todo este tiempo.
- Ahora tiene el inconveniente de que la CPU permanece inactiva durante un período de tiempo muy largo. Además, es posible que otros trabajos que están a la espera de ser ejecutados no tengan la oportunidad de ejecutarse porque la CPU todavía está asignada al trabajo anterior. Esto plantea un problema muy grave que, aunque otros trabajos están listos para ejecutarse, la CPU no se les asigna, ya que la CPU se asigna a un trabajo que ni siquiera lo está utilizando (ya que está ocupado en tareas de E/S).
- No puede suceder que un trabajo esté usando la CPU durante, digamos, 1 hora mientras que los otros han estado esperando en la cola durante 5 horas. Para evitar situaciones como esta y lograr una utilización eficiente de la CPU, surgió el concepto de programación múltiple.
La idea principal de la programación múltiple es maximizar el tiempo de CPU. Funcionamiento del sistema multiprogramado –
- En un sistema multiprogramado, tan pronto como un trabajo se dirige a una tarea de E/S, el sistema operativo interrumpe ese trabajo, elige otro trabajo del grupo de trabajos (cola de espera), le da CPU a este nuevo trabajo y comienza su ejecución. El trabajo anterior continúa realizando su operación de E/S mientras que este nuevo trabajo realiza tareas vinculadas a la CPU. Ahora supongamos que el segundo trabajo también va para una tarea de E/S, la CPU elige un tercer trabajo y comienza a ejecutarlo. Tan pronto como un trabajo completa su operación de E/S y regresa para las tareas de la CPU, se le asigna la CPU.
- De esta forma, el sistema no desperdicia tiempo de CPU esperando que se complete la tarea de E/S. Por lo tanto, el objetivo final de la programación múltiple es mantener la CPU ocupada mientras haya procesos listos para ejecutar. De esta manera, se pueden ejecutar múltiples programas en un solo procesador ejecutando una parte de un programa a la vez, una parte de otro programa después de esto, luego una parte de otro programa y así sucesivamente, por lo tanto, ejecutando múltiples programas. Por lo tanto, la CPU nunca permanece inactiva.
En la imagen a continuación, el programa A se ejecuta durante un tiempo y luego pasa al estado de espera. Mientras tanto, el programa B comienza su ejecución. Entonces, la CPU no desperdicia sus recursos y le da al programa B la oportunidad de ejecutarse.
2. Multiprocesamiento –
En un sistema de un solo procesador, solo se ejecuta un proceso a la vez. El multiprocesamiento es el uso de dos o más CPU (procesadores) dentro de un solo sistema informático. El término también se refiere a la capacidad de un sistema para admitir más de un procesador dentro de un solo sistema informático. Ahora que hay múltiples procesadores disponibles, se pueden ejecutar múltiples procesos a la vez. Estos multiprocesadores comparten el bus de la computadora, a veces también el reloj, la memoria y los dispositivos periféricos. Funcionamiento del sistema de procesamiento múltiple:
- Con la ayuda del multiprocesamiento, muchos procesos pueden ejecutarse simultáneamente. Digamos que los procesos P1, P2, P3 y P4 están esperando su ejecución. Ahora, en un sistema de un solo procesador, primero se ejecutará un proceso, luego el otro, luego el otro y así sucesivamente.
- Pero con el multiprocesamiento, cada proceso puede asignarse a un procesador diferente para su ejecución. Si es un procesador de doble núcleo (2 procesadores), se pueden ejecutar dos procesos simultáneamente y, por lo tanto, serán dos veces más rápidos, de manera similar, un procesador de cuatro núcleos será cuatro veces más rápido que un solo procesador.
¿Por qué usar procesamiento múltiple?
- La principal ventaja del sistema multiprocesador es realizar más trabajo en un período de tiempo más corto. Este tipo de sistemas se utilizan cuando se requiere una velocidad muy alta para procesar un gran volumen de datos. Los sistemas de procesamiento múltiple pueden ahorrar dinero en comparación con los sistemas de un solo procesador porque los procesadores pueden compartir periféricos y fuentes de alimentación.
- También proporciona mayor confiabilidad en el sentido de que si un procesador falla, el trabajo no se detiene, solo se ralentiza. por ejemplo, si tenemos 10 procesadores y 1 falla, entonces el trabajo no se detiene, sino que los 9 procesadores restantes pueden compartir el trabajo del décimo procesador. Por lo tanto, todo el sistema funciona solo un 10 por ciento más lento, en lugar de fallar por completo.
El multiprocesamiento se refiere al hardware (es decir, las unidades de CPU) en lugar del software (es decir, los procesos en ejecución). Si el hardware subyacente proporciona más de un procesador, eso es multiprocesamiento. Es la capacidad del sistema para aprovechar la potencia informática de múltiples procesadores. Diferencia entre programación múltiple y procesamiento múltiple:
- Un sistema puede ser multiprogramado al tener múltiples programas ejecutándose al mismo tiempo y multiprocesamiento al tener más de un procesador físico. La diferencia entre multiprocesamiento y multiprogramación es que el multiprocesamiento básicamente ejecuta múltiples procesos al mismo tiempo en múltiples procesadores, mientras que la multiprogramación mantiene varios programas en la memoria principal y los ejecuta simultáneamente usando una sola CPU.
- El multiprocesamiento ocurre por medio del procesamiento paralelo, mientras que la programación múltiple ocurre al cambiar de un proceso a otro (fenómeno llamado cambio de contexto).
3. Multitarea –
Como sugiere el propio nombre, la multitarea se refiere a la ejecución de múltiples tareas (por ejemplo, procesos, programas, subprocesos, etc.) a la vez. En los sistemas operativos modernos, podemos reproducir música MP3, editar documentos en Microsoft Word, navegar en Google Chrome, todo simultáneamente, esto se logra mediante la multitarea. La multitarea es una extensión lógica de la programación múltiple. La forma principal en que la multitarea difiere de la programación múltiple es que la programación múltiple funciona únicamente en el concepto de cambio de contexto, mientras que la multitarea se basa en compartir el tiempo junto con el concepto de cambio de contexto. Funcionamiento del sistema multitarea:
- En un sistema de tiempo compartido, a cada proceso se le asigna una cantidad específica de tiempo durante el cual debe ejecutarse un proceso. Digamos que hay 4 procesos P1, P2, P3, P4 listos para ejecutar. Así que a cada uno de ellos se le asigna un cuanto de tiempo para el cual ejecutarán, por ejemplo, un cuanto de tiempo de 5 nanosegundos (5 ns). Cuando un proceso comienza a ejecutarse (por ejemplo, P2), se ejecuta durante esa cantidad de tiempo (5 ns). Después de 5 ns, la CPU inicia la ejecución del otro proceso (por ejemplo, P3) durante la cantidad de tiempo especificada.
- Por lo tanto, la CPU hace que los procesos compartan intervalos de tiempo entre ellos y se ejecuten en consecuencia. Tan pronto como expira el cuanto de tiempo de un proceso, otro proceso comienza su ejecución.
- Aquí también, básicamente, se está produciendo un cambio de contexto, pero ocurre tan rápido que el usuario puede interactuar con cada programa por separado mientras se está ejecutando. De esta forma, el usuario tiene la ilusión de que múltiples procesos/tareas se ejecutan simultáneamente. Pero en realidad solo se está ejecutando un proceso/tarea en un instante de tiempo particular. En la multitarea, el tiempo compartido se manifiesta mejor porque cada proceso en ejecución requiere solo una buena parte del tiempo de la CPU.
En un sentido más general, la multitarea se refiere a tener múltiples programas, procesos, tareas, subprocesos ejecutándose al mismo tiempo. Este término se utiliza en los sistemas operativos modernos cuando varias tareas comparten un recurso de procesamiento común (p. ej., CPU y memoria).
- Como se muestra en la imagen de arriba, en cualquier momento, la CPU ejecuta solo una tarea mientras otras tareas esperan su turno. La ilusión de paralelismo se logra cuando la CPU se reasigna a otra tarea. es decir, las tres tareas A, B y C parecen ocurrir simultáneamente debido al tiempo compartido.
- Entonces, para que tenga lugar la multitarea, en primer lugar debe haber multiprogramación, es decir, la presencia de múltiples programas listos para su ejecución. Y en segundo lugar el concepto de tiempo compartido.
4. Múltiples subprocesos –
Un subproceso es una unidad básica de utilización de la CPU. El subprocesamiento múltiple es un modelo de ejecución que permite que un solo proceso tenga múltiples segmentos de código (es decir, subprocesos) que se ejecutan simultáneamente dentro del «contexto» de ese proceso. por ejemplo, el reproductor multimedia VLC, donde se usa un hilo para abrir el reproductor multimedia VLC, un hilo para reproducir una canción en particular y otro hilo para agregar nuevas canciones a la lista de reproducción. El subproceso múltiple es la capacidad de un proceso para administrar su uso por más de un usuario a la vez y para administrar múltiples requests del mismo usuario sin tener que tener varias copias del programa. Funcionamiento del sistema multihilo – Ejemplo 1 –
- Digamos que hay un servidor web que procesa las requests de los clientes. Ahora bien, si se ejecuta como un proceso de subproceso único, entonces no podrá procesar varias requests a la vez. En primer lugar, un cliente realizará su solicitud y finalizará su ejecución y solo entonces, el servidor podrá procesar la solicitud de otro cliente. Esta es una tarea realmente costosa, lenta y agotadora. Para evitar esto, se pueden utilizar subprocesos múltiples.
- Ahora, cada vez que ingresa una nueva solicitud de cliente, el servidor web simplemente crea un nuevo hilo para procesar esta solicitud y reanuda su ejecución para escuchar más requests de clientes. Entonces, el servidor web tiene la tarea de escuchar las nuevas requests de los clientes y crear hilos para cada solicitud individual. Cada subproceso recién creado procesa una solicitud de cliente, lo que reduce la carga en el servidor web.
Ejemplo 2 –
- Podemos pensar en los subprocesos como procesos secundarios que comparten los recursos del proceso principal pero se ejecutan de forma independiente. Ahora tomemos el caso de una GUI. Digamos que estamos realizando un cálculo en la GUI (que está tardando mucho en terminar). Ahora no podemos interactuar con el resto de la GUI hasta que este comando termine su ejecución. Para poder interactuar con el resto de la GUI, este comando de cálculo debe asignarse a un hilo separado. Entonces, en este momento, se ejecutarán 2 subprocesos, es decir, uno para el cálculo y otro para el resto de la GUI. Por lo tanto, aquí en un solo proceso, usamos múltiples subprocesos para múltiples funcionalidades.
La siguiente imagen describe completamente el ejemplo del reproductor VLC:
Ventajas del multihilo:
- Los beneficios de Multi-threading incluyen una mayor capacidad de respuesta. Dado que hay varios subprocesos en un programa, si un subproceso tarda demasiado en ejecutarse o si se bloquea, el resto de los subprocesos siguen ejecutándose sin ningún problema. Por lo tanto, todo el programa sigue respondiendo al usuario por medio de los subprocesos restantes.
- Otra ventaja de los subprocesos múltiples es que es menos costoso. La creación de nuevos procesos y la asignación de recursos es una tarea que requiere mucho tiempo, pero dado que los subprocesos comparten recursos del proceso principal, crear subprocesos y cambiar entre ellos es comparativamente fácil. Por lo tanto, los subprocesos múltiples son la necesidad de los sistemas operativos modernos.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA