PCB del proceso hijo en un fork()

PCB del proceso hijo en un fork()

de Pedro Zunino Severgnini -
Número de respuestas: 4

Buenas,

Me surgió la siguiente duda. En el proceso hijo creado con un fork() entiendo que su PCB en principio es una copia exacta del PCB del padre, excepto por su PID. Ahora, esto quiere decir entonces que sus registros limites van a ser los mismos, ¿esto implica que comparten heap y stack? o debo asumir que estos campos tampoco van a ser una copia y van a corresponder a otro sección de memoria independiente a la del primer proceso.

Esta duda nos surgíó porque en varios parciales se pregunta que comparten los procesos creados a partir del fork(). Desde ya muchas gracias.

Saludos,
Peter

En respuesta a Pedro Zunino Severgnini

Re: PCB del proceso hijo en un fork()

de Santiago Iturriaga -

Hola:

La operación fork de Unix crea un nuevo proceso (el hijo) que es una copia exacta del proceso que ejecutó la operación fork (el padre). Crear una copia exacta implica más que crear una copia del PCB, implica también copiar todos lo segmentos de memoria del proceso padre. Es decir que crea una copia idéntica e independiente del heap y del stack.

Saludos,

Santiago.

En respuesta a Santiago Iturriaga

Re: PCB del proceso hijo en un fork()

de Crhistyan German Silva Perdomo -

Hola Santiago,

Gracias por la pronta respuesta, nos aclara esa parte pero nos queda otra duda, ¿Es correcto decir que la copia es idéntica? porque el caso del PCB del hijo el PID, el registro base, el estado, la CPU asignada y otros campos van a ser distintos ¿o no?.

Y otra duda, que papel cumple el exec() en esto, no es este el system call que "reemplaza los espacios de memoria de un proceso". En un principio entendía que hasta que no se hiciera este system call la memoria para ambos procesos era compartida.

saludos,

Crhistyan

En respuesta a Crhistyan German Silva Perdomo

Re: PCB del proceso hijo en un fork()

de Martin Vidal Perez -

La copia exacta es del heap y el stack.

El nuevo PCB en base al PCB padre pero algunos valores cambian. Osea no es una copia exacta.

En respuesta a Martin Vidal Perez

Re: PCB del proceso hijo en un fork()

de Santiago Iturriaga -

Hola:

El proceso hijo es una copia exacta del contenido del espacio de memoria del proceso padre (esto incluye los segmento de datos, código, heap, stack, etc.). El contenido del PCB de los procesos padre e hijo necesariamente va a ser diferente en algunos aspectos porque ambos procesos son copias idénticas pero son dos procesos diferentes. Eso quiere decir que obligatoriamente el PID será diferente (porque el PID debe identificar de forma única a cada proceso), además dependiendo de como se haga la copia las regiones de memoria física que contiene cada una de las copias también podrá ser diferente, si el proceso padre es multihilado es probable que el proceso hijo no herede todos los hilos, etc.

Con respecto a la otra pregunta. Luego del fork y previo al comando exec, padre e hijo no comparten la memoria. Tienen copias exactas pero son dos copias diferentes. Es posible que se esten confundiendo con la técnica copy-on-write (ver sección 9.3 del Silberschatz).

Saludos,

Santiago.