Fork a sdílené stránky

nic mě nenapadá

Fork a sdílené stránky
« kdy: 28. 04. 2012, 18:17:00 »
Zdravím,
unix na desktopu by měl podporovat copy on write, takže když vytvořím childa přes fork, tak sdílí stejnou
fyzickou paměť, dokud se nepokusím z childa někam zapisovat a pak se zkopíruje příslušná stránka. Alespoň takhle to
momentálně já chápu.
Takže pokud v rodičovském procesu mám nějakou strukturu a chci ji sdílet napříč všemi childy a zároveň ale chci, aby každý child tam měl své pid, tak by mělo stačit, abych po forku ve větvi pro childa akorát nastavil patřičné id a mělo by dojít ke zkopírování a měl by vlastní kopii té struktury, akorát se svým pid, ne? Btw. a nepište pls, abych volal getpid, jde o tu problematiku jako takovou. Díky.
« Poslední změna: 02. 05. 2012, 10:43:42 od Petr Krčmář »


Re:Fork a sdílené stránky.
« Odpověď #1 kdy: 28. 04. 2012, 18:53:02 »
Nevím moc, co má být vlastně cílovým problémem, ale
Takže pokud v rodičovském procesu mám nějakou strukturu a chci ji sdílet napříč všemi childy a zároveň ale chci, aby každý child tam měl své pid, tak by mělo stačit, abych po forku ve větvi pro childa akorát nastavil patřičné id a mělo by dojít ke zkopírování a měl by vlastní kopii té struktury, akorát se svým pid, ne?

Nebude mít vlastní kopii celé té struktury, ale jen té jedné stránky, ve které se nachází ten přepsaný kus. Což tedy může být celá struktura (když je malá), ale také nemusí.

Obecně ale nemusíš chtít, aby měl vlastní kopii paměti - z pohledu programátora už ji vlastně má hned po forku, protože to copy-on-write je zcela transparentní a není žádná výhoda v tom, pokud to jsou opravdu dva různé kusy paměti.

Pokud bys chtěl vyloženě sdílenou paměť (např. aby rodič četl změny dítěte, anebo děti mezi sebou), v rodiči zavolej třeba anonymní mmap() - ten se potom sdílí (akorát pozor na synchronizaci).