Memoria compartida c
Estaba viendo una serie de conferencias recientes sobre Sistemas Operativos cuando el conferenciante mencionó shmget como un ejemplo de comunicación entre procesos. Esta pregunta es sobre la “memoria compartida” y está relacionada con shmget.
Una ventaja de usar subprocesos en lugar de hilos es que la memoria de los procesos separados puede ser encapsulada. Esto es bueno para las preocupaciones de privacidad (considere un caso en el que usted está manejando una solicitud web que contiene información privada), y también para las preocupaciones de corrección ya que la memoria de un proceso no puede ser modificada arbitrariamente por otro. Por supuesto, este beneficio no se realiza completamente para la parte de la memoria compartida si se decide utilizarla. Tenga en cuenta que la memoria compartida no es la única forma de comunicación entre procesos.
Memoria compartida de Windows
Un proceso es creado por el SO para ejecutar un programa con unos recursos determinados (por ejemplo, memoria, registros); en general, los distintos procesos no comparten su memoria con otro. Un hilo es un subconjunto de un proceso, y comparte los recursos de su proceso padre, pero tiene su propia pila para llevar la cuenta de las llamadas a funciones. Varios hilos de un proceso tendrán acceso a la misma memoria (pero pueden tener variables locales).
Los ordenadores paralelos de memoria compartida varían, pero tienen la capacidad de que los procesadores accedan a toda la memoria como espacio de direcciones global. Así que no son simplemente hilos los que comparten la memoria. Estos procesadores funcionan de forma independiente, pero comparten la misma memoria.
Por analogía, recordemos el ejemplo de los pintores pintando casas que el Dr. Panoff mencionó el lunes por la noche, pero esto tendrá un giro. Imagina que eres uno de los cuatro pintores artísticos que pintan en un lienzo compartido. Cada uno tiene su propio juego de pinceles, pero comparten una paleta en la que ponen las pinturas y mezclan los colores. Esta paleta compartida de la que sacáis nuevos colores y el lienzo compartido en el que pintáis son análogos a la memoria compartida de la que leeréis y a la que escribiréis. Si alguien mezcla colores en la paleta y hace un nuevo y bonito tono de verde, puedes acceder a ese verde y usarlo para pintar en el lienzo, pero si no te comunicas con los otros pintores, ese verde puede cambiar a algo diferente antes de que termines de usarlo.
Memoria compartida de Linux entre procesos
En el post anterior, vi cómo los accesos a la memoria global por parte de un grupo de hilos pueden unirse en una sola transacción, y cómo la alineación y el stride afectan a la unión para varias generaciones de hardware CUDA. Para las versiones recientes del hardware CUDA, los accesos a datos desalineados no son un gran problema. Sin embargo, el stride a través de la memoria global es problemático independientemente de la generación del hardware CUDA, y parecería ser inevitable en muchos casos, como cuando se accede a los elementos de una matriz multidimensional a lo largo de la segunda y las dimensiones superiores. Sin embargo, es posible cohesionar el acceso a la memoria en estos casos si utilizamos memoria compartida. Antes de mostrarte cómo evitar el acceso a la memoria global en el siguiente post, primero tengo que describir la memoria compartida con cierto detalle.
Al estar en el chip, la memoria compartida es mucho más rápida que la local y la global. De hecho, la latencia de la memoria compartida es aproximadamente 100 veces menor que la latencia de la memoria global sin caché (siempre que no haya conflictos de bancos entre los hilos, lo que examinaremos más adelante en este post). La memoria compartida se asigna por bloque de hilos, por lo que todos los hilos del bloque tienen acceso a la misma memoria compartida. Los hilos pueden acceder a los datos de la memoria compartida cargados desde la memoria global por otros hilos dentro del mismo bloque de hilos. Esta capacidad (combinada con la sincronización de hilos) tiene una serie de usos, como las cachés de datos gestionadas por el usuario, los algoritmos paralelos cooperativos de alto rendimiento (reducciones paralelas, por ejemplo), y para facilitar la coalescencia de la memoria global en casos en los que de otro modo no sería posible.
Memoria compartida de Linux anzeigen
En informática, la memoria compartida es una memoria a la que pueden acceder simultáneamente varios programas con la intención de proporcionar comunicación entre ellos o evitar copias redundantes. La memoria compartida es un medio eficiente de pasar datos entre programas. Dependiendo del contexto, los programas pueden ejecutarse en un único procesador o en varios procesadores separados.
En el hardware informático, la memoria compartida se refiere a un bloque (normalmente grande) de memoria de acceso aleatorio (RAM) al que pueden acceder varias unidades centrales de procesamiento (CPU) diferentes en un sistema informático multiprocesador.
Un sistema de memoria compartida es relativamente fácil de programar, ya que todos los procesadores comparten una única visión de los datos y la comunicación entre procesadores puede ser tan rápida como los accesos a la memoria en una misma ubicación. El problema de los sistemas de memoria compartida es que muchas CPUs necesitan un acceso rápido a la memoria y es probable que almacenen la memoria en caché, lo que tiene dos complicaciones:
En el caso de una arquitectura de sistema heterogéneo (arquitectura de procesador que integra diferentes tipos de procesadores, como CPUs y GPUs, con memoria compartida), la unidad de gestión de memoria (MMU) de la CPU y la unidad de gestión de memoria de entrada-salida (IOMMU) de la GPU tienen que compartir ciertas características, como un espacio de direcciones común.