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