Portál AbcLinuxu, 11. května 2025 10:31

Dotaz: Perl fork exec a velikost programu

18.3.2008 08:24 Xerces
Perl fork exec a velikost programu
Přečteno: 403×
Odpovědět | Admin
Ahoj, mám takový blbý dotaz na fungování fork a exec (konkrétně teda v Perlu, ale asi to bude všude stejný). Funkce fork provede kopipi volajiciho programu a exec ji pak může přeplácnout programem jiným to je všeobecně známé, ale nějak mi není jasné co se děje v případě pokud ten program který spouštím pomocí exec v pamětovém prostoru o velikosti toho prvního programu je větší. Vadí to když je ten program větší, nebo je to jedno a ten exec si tu pamět nějak realokuje? No s tím forkem jsem to ani komplikovat nemusel on se dýá udělat exec přímo do původního procesu.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

michich avatar 18.3.2008 08:47 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
Odpovědět | | Sbalit | Link | Blokovat | Admin
To samozřejmě nevadí, jinak bychom nikdy nemohli spustit nic většího než init :-)
18.3.2008 08:58 Xerces
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
To zní logicky. Ale jak to ten prevít dělá, asi budu muset kouknout do zdrojáků našeho oblíbeného operačního systému. :-) Ok prosím zamkněte toto vlákno. Dík.
michich avatar 18.3.2008 09:27 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
exec ruší starý a vytváří úplně nový paměťový prostor.
18.3.2008 09:53 Xerces
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
V této souvislosti mne napadá ještě jedna zajímavá podotázka, pokud tedy použiju sekvenci fork exec mohl by se teoreticky kód optimalizovat tak, aby nevznikala režie při kopírování procesu (fork), kterou se často argumentuje ve prospěch threadů a rovnou vytvořit paměťový prostor pro nový kód. Hmm, ale jelikož očekáváme od forku většinou nějakou návratovou hodnotu, tak by to asi tak jednoduše nešlo. No nic, radši už nebudu moc přemýšlet a jdu programovat. :-)
michich avatar 18.3.2008 10:05 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
Existuje vfork(2).
18.3.2008 10:16 Xerces
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
Úžasný. To je přesně ono, jaktože jsem to nenašel? A to jsem si myslel že umím googlit.
18.3.2008 18:48 Petr
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
Ta rezije je v praxi minimalni. Pametove stranky kopiruji jednotlive a teprve on-write; man fork:

Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.
18.3.2008 19:41 Xerces
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
Jojo uz jsem se k tomu taky prokousal, ale musel jsem to vzit pres ten vfork :-) Takze kdyz hned udelam exec tak se vlastne nic nekopiruje. Idylka.
9.11.2010 11:54 kokos
Rozbalit Rozbalit vše Re: Perl fork exec a velikost programu
This largely removes the justification for vfork(); indeed, a large proportion of systems now lack the original functionality of vfork() completely. For compatibility, though, there may still be a vfork() call present, that simply calls fork() without attempting to emulate all of the vfork() semantics.

http://www.unixguide.net/unix/programming/1.1.2.shtml

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.