1er Parcial 2014 - Problema 1.5

1er Parcial 2014 - Problema 1.5

de Diego Rey Despaux -
Número de respuestas: 6

Hola en este ejercicio no me queda claro si cuando se hace un fork() el proceso hijo comparte o no el heap.

Saludos 

En respuesta a Diego Rey Despaux

Re: 1er Parcial 2014 - Problema 1.5

de Jorge Merlino -
El proceso hijo es completamente independiente del padre, no comparten nada.
En respuesta a Jorge Merlino

Re: 1er Parcial 2014 - Problema 1.5

de Diego Rey Despaux -
El código y los datos del padre tampoco los comparten?

Yo tenia la idea de que eran totalmente independientes si luego del fork() se hacia un exec(). Sino, si no se hace el exec(), la idea que tengo es que al hacer el fork(), se crea un proceso hijo donde comparten código y datos. El stack obviamente no porque la ejecuciones son independientes y no tenia claro lo del heap porque al ser memoria dinámica quizás algo compartían...

  

En respuesta a Diego Rey Despaux

Re: 1er Parcial 2014 - Problema 1.5

de Jorge Merlino -

Cuando se crea un hijo se le da un espacio de memoria nuevo que está inicializado con los mismos datos que el padre. O sea que si bien la memoria que ven es la misma son dos copias distintas y si uno la cambia el otro no se entera.

Hilando más fino, si el padre tiene código cargado como bibliotecas dinámicas (no lo vimos todavía en el teórico) estas si se comparten, y lo mismo sucede con la memoria del kernel a la que apunta cada proceso. Por ejemplo, si tiene archivos abiertos antes del fork se copian los punteros a los file descriptors del kernel por lo que si un proceso hace seek() en un archivo el otro proceso se entera (por eso no se pasan por arriba el texto en la salida estándar si escriben los dos por ejemplo). Esto no pasa con los archivos que abren después del fork (o si se cierran y se vuelven a abrir).

De todas maneras la respuesta de que no comparten nada era la esperada para esta pregunta.


En respuesta a Jorge Merlino

Re: 1er Parcial 2014 - Problema 1.5

de Juan Angel Bonhomme Carrion -

Si el fork entonces hace una copia de text, data, heap, registros y stack del proceso padre, no entiendo que funcion cumple el exec.

Podrian aclararme esta duda?