Quizá la utilidad estrella para los archivos proyectados en memoria sea la compartición de datos entre procesos.
Como ya hablamos en su día, la plataforma Win32 pone muy difícil que los datos puedan ser compartidos entre distintos procesos, dado el carácter privado de su espacio de memoria y el nivel de seguridad que se busca a la hora de desarrollar un sistema operativo robusto. Para solucionar esto, la gente de Microsoft recomienda el uso de archivos proyectados, utilizando dos métodos:
- Proyecciones nombradas: se basa en crear la proyección de archivo con un nombre, y abrir esa misma proyección desde otro proceso, referenciándola por su nombre. Este es uno de los sistemas para comunicar dos procesos independientes.
- Herencia de descriptores: los objetos proyección son objetos del núcleo del sistema operativo. Hasta ahora no hemos hablado este tipo de objetos, pero nos bastan con saber que se referencian a través de un descriptor (handle) y que estos descriptores pueden heredarse a los procesos-hijos (o subprocesos) del proceso que los creó. Este es uno de los sistemas para comunicar un proceso-padre con sus procesos-hijos.
Más adelante profundizaremos en estos métodos.
Cuando cualquiera de los dos procesos modifique algún dato, debe notificar al otro proceso (por ejemplo, con un mensaje de ventana) y éste dispondrá de los datos inmediatamente.
Internamente, la compartición de datos se consigue a través de una estructura llamada
"prototype page table entry". A esta
"cosa", que no sé ni cómo traducirla, le llamaremos PPTE.
Esta estructura, es parecida a nuestro amigo el "Page Table", sin embargo, todos los procesos tienen acceso a un único PPTE global, el cual gestiona qué páginas están compartidas entre procesos y cuales son las direcciones virtuales y físicas de cada una de estas páginas. Creo que con esto nos basta.
Además de compartir datos entre procesos, Windows permite desligar estos datos cuando alguno de los procesos hagan modificaciones. Es decir, los datos se comparten inicialmente, y continúan en este estado mientras no hayan sido modificados, cuando alguno de los procesos cambie el contenido de una página, se hará una copia de esta página y las modificaciones se harán sobre la nueva copia. El proceso que modificó el contenido ahora proyectará su memoria sobre la copia de la página, en vez de la página compartida. Este comportamiento se denomina
"Copy on Write" o
"Copia con escritura" y es uno de los métodos más utilizados en distintos sistemas operativos.
Windows proporciona otros métodos para compartir datos entre procesos, como el obsoleto DDE o el mensaje WM_COPYDATA, aunque internamente utiliza una sistema basado en archivos proyectados en memoria.