Skip to content

2 Computación Concurrente

Computación concurrente y multitarea

Como sabemos, en nuestro sistema operativo, se están ejecutando al mismo tiempo muchos procesos. Por ejemplo, podemos estar escuchando música con nuestro reproductor multimedia favorito, y al mismo tiempo tener abierto el navegador web, o cualquier otra aplicación. De igual manera, se estarán ejecutando también procesos del propio sistema operativo.

Computación concurrente

Llamamos computación concurrente al hecho de que varios procesos se estén ejecutando concurrentemente en el sistema operativo.

Se dice que dos procesos son concurrentes cuando la primera instrucción de uno de ellos se ejecuta después de la primera instrucción del otro y antes de la última. Es decir, cuando existe un solapamiento en la ejecución de sus instrucciones, no siendo estrictamente necesario que se estén ejecutando a la vez en un instante dado.

Multitarea

Desde el punto de vista del usuario, la computación concurrente es conocida como multitarea, ya que permite al usuario estar realizando varias tareas de manera concurrente.

Todos los sistema operativos actuales, como Windows, MacOS o Linux, son multitarea.

Paralelismo y multiprogramación

Para entender la computación concurrente lo primero que debemos hacer es comprender la diferencia entre paralelismo y multiprogramación.

Paralelismo

Para que exista paralelismo es necesario que el sistema disponga de al menos dos núcleos de procesamiento, ya sean dentro de un único procesador, o en varios procesadores, que ejecuten de manera simultánea (paralela) ese mismo número de instrucciones, una en cada núcleo.

Pero entonces, ¿cómo podemos lograr la computación concurrente si sólo disponemos de un único núcleo de procesamiento? Mediante la técnica conocida como multiprogramación.

Multiprogramación

La multiprogramación consiste en asignar por turnos el núcleo de procesamiento durante un corto periodo de tiempo (milisegundos) a cada uno de los procesos en ejecución, siguiendo un determinado método de planificación.

En cada cambio de turno el sistema lleva a cabo el denominado cambio de contexto, que consiste en guardar la información del proceso saliente (su contador, su imagen y el estado de los registro del procesador) y recuperar la información correspondiente del proceso entrante.

Debemos tener en cuenta que la técnica de multiprogramación no mejora el tiempo de ejecución global de los procesos, sino que lo empeora, ya que hay que tener en cuenta el tiempo necesario para llevar a cabo los múltiples cambios de contexto. Como contrapartida, la multiprogramación consigue la percepción para el usuario de que los programas se están ejecutando simultáneamente.

Cuando varios procesos se ejecutan concurrentemente puede haber procesos que colaboren para un determinado fin mientras que otros compitan por los recursos del sistema. Incluso aquellos procesos que colaboran deberán competir a la hora de obtener tiempo de procesador. Para llevar a cabo las tareas de colaboración y competencia por los recursos se hace necesaria la introducción de mecanismos de comunicación y sincronización entre procesos.

Multiprocesamiento y procesamiento distribuido

Dentro de los sistemas con paralelismo, es decir con varios núcleos de procesamiento, tenemos dos tipos:

Multiprocesamiento

En los sistemas con varios núcleos de procesamiento hablaremos de multiprocesamiento cuando éstos compartan memoria.

Los sistemas de multiprocesamiento se caracterizan porque los procesos que se estén ejecutando en los diferentes núcleos pueden comunicarse entre así a través de la memoria común.

Procesamiento distribuido

En los sistemas con varios núcleos de procesamiento que NO compartan memoria hablaremos de procesamiento distribuido.

En los sistemas de procesamiento distribuido la comunicación entre las procesos en ejecución NO se podrá llevar a cabo a través de la memoria, ya que no poseen una memoria común, por lo que será necesario usar obligatoriamente otros mecanismos de comunicación más complejos. Un ejemplo típico de este tipo de sistema es la cooperación de varios ordenadores distribuidos en red en la ejecución de una serie de tareas. Cada uno de estos ordenadores posee su propio procesador y su propia memoria.