Saltar la navegación

6.4.- Memoria compartida.

Una forma natural de comunicación entre procesos es la posibilidad de disponer de zonas de memoria compartidas (variables, buffers o estructuras). Además, los mecanismos de sincronización en programación concurrente que hemos visto: regiones críticas, semáforos y monitores; tienen su razón de ser en la existencia de recursos compartidos; incluida la memoria compartida.

Cuando se crea un proceso, el sistema operativo le asigna los recursos iniciales que necesita, siendo el principal recurso: la zona de memoria en la que se guardarán sus instrucciones, datos y pila de ejecución. Pero como ya hemos comentado anteriormente, los sistemas operativos modernos, implementan mecanismos que permiten proteger la zona de memoria de cada proceso siendo ésta privada para cada proceso, de forma que otros no podrán acceder a ella. Con esto, podemos pensar que no hay posibilidad de tener comunicación entre procesos por medio de memoria compartida. Pues, no es así. En la actualidad, la programación multihilo (que abordaremos en la siguiente unidad y, se refiere, a tener varios flujos de ejecución dentro de un mismo proceso, compartiendo entre ellos la memoria asignada al proceso), nos permitirá examinar al máximo esta funcionalidad.

Pensemos ahora en un problemas que pueden resultar complicados si los resolvemos con un sólo procesador, por ejemplo: la ordenación de los elementos de una matriz. Ordenar una matriz pequeña, no supone mucho problema; pero si la matriz se hace muy muy grande... Si disponemos de varios procesadores y somos capaces de partir la matriz en trozos (convertir un problema grande en varios más pequeños) de forma que cada procesador se encargue de ordenar cada parte de la matriz. Conseguiremos resolver el problema en menos tiempo; eso sí, teniendo en cuenta la complejidad de dividir el problema y asignar a cada procesador el conjunto de datos (o zona de memoria) que tiene que manejar y la tarea o proceso a realizar (y finalizar con la tarea de combinar todos los resultados para obtener la solución final). En este caso, tenemos sistemas multiprocesador como los actuales microprocesadores de varios núcleos, o los supercomputadores formados por múltiples ordenadores completos (e idénticos) trabajando como un único sistema. En ambos casos, contaremos con ayuda de sistemas específicos (sistemas operativos o entornos de programación), preparados para soportar la carga de computación en múltiples núcleos y/o equipos.

Dos roedores compartiendo un mismo gusanito.
Un grupo de dados de distintos colores puestos en grupos según su color, los dados del mismo color están unos encima de otros, y los distintos grupos de dados puestos en fila unos al lado de otros. La mayor altura es de 3 dados y hay 7 grupos distintos.

Para saber más

Aunque en próximos apartados haremos una introducción a la programación paralela, es interesante conocer la existencia de OpenMP en este apartado. Es, una API para la programación multiproceso de memoria compartida en múltiples plataformas. Es un estándar disponible en muchas arquitecturas, incluidas las plataformas de Unix y de Microsoft Windows. Se compone de un conjunto de directivas de compilador, rutinas de biblioteca, y variables de entorno que influencian el comportamiento en tiempo de ejecución. OpenMP es un modelo de programación portable y escalable que proporciona a los programadores una interfaz simple y flexible para el desarrollo de aplicaciones paralelas para las plataformas que van desde las computadoras de escritorio hasta las supercomputadoras. También existe una implementación de OpenMP en Java.

Ampliar información sobre OpenMP.

Reflexiona

Hay problemas complejos cuya solución se está haciendo más asequible gracias a la evolución de la tecnología y la programación concurrente. Piensa, en las distintas variantes que hay que evaluar en una predicción meteorológica: temperatura, humedad, vectores de desplazamiento de las masas de aire (y a nivel mundial),... Gracias a los supercomputadores, las predicciones meteorológica son cada día más fiables.

Modelo numérico de predicción meteorológica.

Autoevaluación

Pregunta

En los sistemas actuales, no hay ninguna posibilidad de compartir zonas de memoria entre distintos procesos.

Respuestas

Cierto.

Falso.

Retroalimentación