dos procesos pueden compartir el mismo segmento de memoria compartida?
Sí y no. Normalmente, con los sistemas operativos modernos, cuando otro proceso es forked desde el primero, comparten el mismo espacio de memoria con un conjunto de "copy-on-write" en todas las páginas. Cualquier actualización realizada en cualquiera de las páginas de memoria de lectura/escritura hace que se realice una copia para la página, por lo que habrá dos copias y la página de memoria ya no se compartirá entre el proceso principal y el secundario. Esto significa que solo se compartirán las páginas o páginas de solo lectura que no se hayan escrito.
Si un proceso tiene no sido bifurcado de otro, entonces no comparten ninguna memoria. Una excepción es si está ejecutando dos instancias del mismo programa, entonces pueden compartir code and maybe even static data segments pero no se compartirán otras páginas.
También hay specific memory-map calls para compartir el mismo segmento de memoria. La llamada designa si el mapa es de solo lectura o de lectura-escritura. Cómo hacer esto depende mucho del sistema operativo.
dos hilos pueden compartir la misma memoria compartida?
Ciertamente. Normalmente, todos los subprocesos comparten "todas las memorias dentro de un proceso de subprocesos múltiples". Esa es generalmente la definición de subprocesos en el sentido de que todos se ejecutan dentro del mismo espacio de memoria.
Los subprocesos también tienen la complejidad adicional de tener cached memory segments en la memoria de alta velocidad vinculada al procesador/núcleo. Esta memoria en caché es no compartida y las actualizaciones de las páginas de memoria se descargan en el almacenamiento central dependiendo de las operaciones de sincronización.
Re "Esta memoria en caché no se comparte y las actualizaciones de las páginas de memoria se descargan en el almacenamiento central dependiendo de las operaciones de sincronización": ¿algo bueno o malo? – Pacerier
Re "Los subprocesos también tienen la complejidad adicional de tener segmentos de memoria en caché en la memoria de alta velocidad vinculada al procesador/núcleo": ¿esto es incluso algo del kernel del sistema operativo ?, ¿o simplemente una función de biblioteca de lenguaje de software? – Pacerier
Es algo muy bueno @Pacerier. La memoria caché de la memoria local de la CPU es lo que proporciona la mayor parte del rendimiento que se ve en los programas multiproceso. Esto es compatible con _hardware_, no con el sistema operativo ni el software. El software necesita tener en cuenta los cachés de memoria en términos de barreras de memoria que controlan el enjuague y la actualización, pero suceden automágicamente debido al diseño de la CPU. – Gray