Si tengo un programa que se ejecuta con hilos y llamo fork()
en un sistema basado en Unix, ¿se copian los hilos? Sé que la memoria virtual para el proceso actual se copia 1: 1 al nuevo proceso generado. Sé que los hilos tienen su propia pila en la memoria virtual de un proceso. Por lo tanto, al menos la pila de hilos también debe copiarse. Sin embargo, no sé si hay algo más en los subprocesos que no reside en la memoria virtual y, por lo tanto, NO se copia. Si no lo hay, ¿los dos procesos comparten los hilos o son copias independientes?
De The Open Group Base Especificaciones Número 7, horquilla de la edición 2018 :
fuente
Originalmente, la "bifurcación" se lograba escribiendo la tarea en el disco y luego, en lugar de leer en un hilo diferente (lo que se haría si se intercambia la tarea por una diferente), modificando el ID de la tarea de la imagen que aún está en la memoria y continuando con su ejecución (como la nueva tarea). Esta fue una modificación muy simple al mecanismo básico de cambio de tareas, donde solo una tarea ocuparía la memoria RAM a la vez.
Por supuesto, a medida que la gestión de la memoria se hizo más elaborada, este esquema se modificó para adaptarse al nuevo entorno.
fuente