¿Cómo maneja múltiples bifurcaciones la copia en escritura en fork ()?
Según wikipedia (que podría estar equivocado)
Cuando se emite una llamada al sistema fork (), se crea una copia de todas las páginas correspondientes al proceso principal, que el sistema operativo carga en una ubicación de memoria separada para el proceso secundario. Pero esto no es necesario en ciertos casos. Considere el caso cuando un niño ejecuta una llamada al sistema "exec" (que se usa para ejecutar cualquier archivo ejecutable desde un programa C) o sale muy poco después de la bifurcación (). Cuando se necesita el hijo solo para ejecutar un comando para el proceso principal, no es necesario copiar las páginas del proceso principal, ya que exec reemplaza el espacio de direcciones del proceso que lo invocó con el comando que se ejecutará.
En tales casos, se utiliza una técnica llamada copia en escritura (COW). Con esta técnica, cuando se produce una bifurcación, las páginas del proceso principal no se copian para el proceso secundario. En su lugar, las páginas se comparten entre el proceso hijo y el proceso principal. Cada vez que un proceso (principal o secundario) modifica una página, se realiza una copia por separado de esa página en particular para ese proceso (principal o secundario) que realizó la modificación. Este proceso utilizará la página recién copiada en lugar de la compartida en todas las referencias futuras. El otro proceso (el que no modificó la página compartida) continúa utilizando la copia original de la página (que ya no se comparte). Esta técnica se denomina copia en escritura, ya que la página se copia cuando algún proceso se escribe en ella.
Parece que cuando alguno de los procesos intenta escribir en la página. Se asigna una nueva copia de la página y se asigna al proceso que generó el error de página. La página original se marca como escribible después.
Mi pregunta es: ¿qué sucede si se llama a la bifurcación varias veces antes de que cualquiera de los procesos haya intentado escribir en una página compartida?