La memoria como mecanismo de comunicación
Memoria compartidaEn informática, la memoria compartida es
aquel tipo de memoria que puede ser accedida por múltiples programas, ya
sea para comunicarse entre ellos o para evitar copias redundantes. La memoria
compartida es un modo eficaz de pasar datos entre aplicaciones. Dependiendo del
contexto, los programas pueden ejecutarse en un mismo procesador o en procesadores separados. La
memoria usada entre dos hilos de ejecución dentro de un mismo programa se conoce
también como memoria compartida.Además de C/C++ hay otros lenguajes con soporte nativo para memoria
compartida. Por ejemplo PHP provee un API para crear memoria compartida similar
a las funciones POSIX.5 SoftwareEn el software, memoria
compartida puede referirse a:Un método de comunicación
entre procesos, por ejemplo: el intercambio de datos entre dos
programas ejecutándose al mismo tiempo. Uno de los procesos creará un área en RAM a la que el otro pueda acceder, oUn método para conservar
espacio en la memoria, usando mapeos virtuales o bien soporte explícito del
programa en cuestión, dirigiendo los accesos a una sola instancia de datos que
normalmente serían duplicados. Comúnmente destinado para bibliotecas
de enlace dinámico dinámicas
y el espacio de usuario (XIP, "execute in place”).Dado que ambos procesos pueden
acceder al área de memoria compartida como memoria de trabajo regular, esta es
una forma de comunicación veloz (al contrario de otros mecanismos de
comunicación entre procesos como tuberías nombradas, socket de dominio UNIX o CORBA.
En cambio, este sistema es menos potente, si, por ejemplo, los procesos que se
comunican deben ejecutarse en la misma máquina (en cuanto a otros métodos de
comunicación entre procesos, solo los sockets del Internet Domain (no los
sockets de UNIX), pueden usar una red de computadoras). Esto se debe a que se
requiere mayor atención y cuidado si los procesos que comparten memoria corren
en CPUs separadas y la arquitectura subyacente no soporta coherencia de caché.La comunicación entre procesos
por memoria compartida se usa en UNIX,
para transferir imágenes entre una aplicación y un XServer, o en la biblioteca COM de Windows dentro
del objeto IStream devuelto por la funciónCoMarshalInterThreadInterfaceInStream.
Las bibliotecas
de enlace dinámico se
copian una sola vez en la memoria y son "mapeadas" para múltiples
procesos. Sólo las páginas que estén personalizadas se duplican, normalmente
con un mecanismo conocido como copy-on-write que de manera transparente copia la
página cuando se intenta escribir en ésta, y después permite que la escritura
se realice en la copia privada.HardwareSe refiere a la situación dónde
cada nodo (computadora) comparte sus tablas de páginas,
su memoria virtual y todo lo que habita en la memoria RAM con
otros nodos en la misma red de interconexión. Una ejemplo de memoria compartida
esDSM.En otras palabras, una
computadora convencional tiene una memoria RAM y un CPU (entre otras partes de hardware), las cuales están comunicadas de
manera local. Cuando se habla de multicomputadoras es necesario entenderlas como un
conjunto de máquinas convencionales trabajando coordinadamente con el objetivo
de compartir recursos de software yhardware para
tareas muy específicas, como por ejemplo la investigación. El hecho de que cada
CPU sólo pueda acceder a la RAM local no beneficia mucho y agrega complejidad a
los programadores de multicomputadoras, con la compartición de memoria se
mitiga esta complejidad ya que todas las CPUs pueden acceder a la misma RAM.Soporte en
Otras PlataformasEn Windows se
puede usar la función
CreateSharedMemory
para crear memoria compartida1 o CreateFileMapping
yMapViewOfFile
como alternativa.2 Algunas
bibliotecas para C++ proporcionan
acceso portable y orientado a objetos de la memoria compartida. Por ejemplo, Boost incluye Boost.Interprocess
3 y Qt proporciona QSharedMemory
.4
No hay comentarios.:
Publicar un comentario