Sdileni textu procesu (Re: Apache problem)

David Rohleder davro na ics.muni.cz
Čtvrtek Únor 17 10:06:00 CET 2000


Jan.Korinek na compaq.com (Korinek, Jan) writes:

> > -----Original Message-----
> > From: Vladimír Fux [mailto:fux na infoline.cz]
> > Sent: Thursday, February 17, 2000 7:57 AM
> > To: linux na linux.cz
> > Subject: Re: Apache problem
> > 
> > 
> > > jak to udelat na strane serveru. Nechci cgi, protoze se po zavolani
> > > externiho programu pokazde nahrava znovu do pameti (coz je 
> > dost pomale) a
> > > pri vice pozadavcich najednou (treba 50 uzivatelu) to neni 
> > prilis efektivni
> > > (to nekoukam na pamet, kterou to sezere).
> > 
> > Myslim, ze nemate tak uplne pravdu. Linux neni DOS, a pokud program
> > spustite desetkrat soucasne, v pameti strasi jenom jedna koopie, ale
> > 10 procesu ji vyuziva.
> > 
> > Pokud jde o opakovane nahravani programu z disku, existuji ruzne
> > utilitky, ktere tohle resi. Pro CGI scripty v PERLu, ktere jsou casto
> > volany  pouzivan programek speedy. Jednoduse se vola namisto perlu.
> > Vyzvedne program z disku, prelozi, spusti a po skonceni drzi 
> > prelozenou
> > kopii jeste nejakou dobu (tusim ze se da ta doba nastavit) v pameti.
> 
> Koneckoncu, neni o tomhle sticky bit?
> Podle definice, ma-li program nastaveny sticky bit, zustava dale v pameti i
> po skonceni volajiciho procesu.
> Ale abychom si rozumeli. Kazdy proces ma dve casti, text a data. Text
> obsahuje, zjednodusene receno, kopii binarky a data jsou userspace. Dojde-li
> k daslimu volani toho samho programu, tak (pokud se nepletu), text se sdili
> a vytvari se pouze novy userspace.
> Aby se vyvorila nova kopie textu, je nutne to explicitne rict (zabte me,
> momentalne fakt nevim jak :-)
> Novy proces zabira misto v pameti tedy jenom pro user address space, jehoz
> velikost zalezi na pametove narocnosti programu a propadne i na cistote
> zdrojaku :-)



Tady tato cast mi pripadla vzdycky divna. Je jasne, ze procesy sdileji
svuj text, pokud vznikly forkovanim jednoho procesu.

Ale kdyz spoustim samostatne procesy (jako v pripade perl pro Apache),
tak se snad zadny text nesdili, nebo ano? Samozrejme se sdili knihovny,
ale samotny proces tam ma svou vlastni kopii programu.

Nebo je snad v jadre ve volani exec neco jako:

if (program uz je spusteny v pameti) { 
        if (program nebyl od posledniho spusteni modifikovan) {
                vytvor_pouze_zaznam_pro_novy_proces_text_nekopiruj;
        }
} else {
        natahni_program_do_pameti;
}



-- 
-------------------------------------------------------------------------
David Rohleder						davro na ics.muni.cz
Institute of Computer Science, Masaryk University
Brno, Czech Republic
-------------------------------------------------------------------------


Další informace o konferenci Linux