PDA

Visualizza la versione completa : [C] fork()


namelessg
11-06-2014, 11:07
ciao
qualcuno mi sa rispondere a questa domanda?
se A crea B con fork
a B viene allocato il codice in memoria? oppure no perchè perchè il codice di A è condiviso in sola lettura e quindi B alloca solo dati e pila??
Grazie

minomic
11-06-2014, 12:36
Ciao,
prima di postare una domanda (soprattutto una di teoria come questa) conviene sempre fare una ricerca sul web. Ad esempio su Wikipedia dice testualmente


Quando un processo effettua la chiamata fork() verrà creato un nuovo spazio di indirizzamento. Comunque, con tecniche di copy-on-write (http://it.wikipedia.org/wiki/Copy-on-write) non verrà occupata memoria fisica fino al momento in cui uno dei due processi non effettuerà una scrittura. Il processo figlio avrà una copia esatta di tutti i segmenti di memoria del processo padre. Sia il processo padre che il figlio possono proseguire la loro esecuzione indipendentemente l'uno dall'altro.

:ciauz:

paolino_delta_t
11-06-2014, 12:57
Vorrei integrare quanto scritto su wikipedia, perchè non si capisce bene che fine faccia il segmento code.

Ovviamente è condiviso tra i due processi, ovvero è fisicamente allocato in memoria una sola volta, ma è mappato ovviamente in entrambi gli spazi d'indirizzamento. Il copy on write chiaramente non interverrà mai su tale segmento, in quanto ( essendo in sola lettura ) non verrà mai modificato.

Tutti gli altri segmenti sono invece soggetti alle politiche di copy on write.

namelessg
10-08-2014, 18:07
eh infatti percio avevo dei dubbi, non mi era chiaro se il codice veniva allocato piu volte

Loading