OFF (de tényleg off) Re: [BSD] Java sok memóriát zabál?

KOVACS Krisztian hidden at sch.bme.hu
2007. Jan. 19., P, 10:49:51 CET


  Sziasztok,

On Thursday 18 January 2007 22:15, Laszlo Nagy wrote:
> >   Az összes program ilyen, ami használ különféle libeket. A libet nem
> > húzza be az oprendszer, amikor a program azt mondja, hanem csak
> > megjelöli betöltendőként és úgy hivatkozik rá, mint kiswappelt
> > alkotóelem. És csak akkor tölti be, ha tényleg kell. Szinte minden
> > oprendszer így működik.
>
> Én ezt anno úgy tanultam hogy bármely kód betöltésénél szükség van az
> átcímzésre. A shared lib-ek egy adott fizikai címre töltődnek be; és
> konkrétan tudom hogy Windows-ban a virtuális címük is azonos, bármelyik
> processzből nézed. Valószínűleg so-nál is ez a helyzet. Ahhoz hogy ez
> lehetséges legyen, át kell írni a címeket a lib-ben. A betöltő dolga
> nem csak annyi hogy beolvassa a lemezről a byte-okat, kőkemény munkája
> van vele. Később a betöltött kódot swappelheti a lemezre.  Kiswappelt
> kód nem egyenlő a betöltetlen kóddal. Persze ezeket régen tanultam,
> lehet hogy azóta változott a helyzet.

  Modernebb UNIXokon a .so fájlok általában PIC-ként fordított kódot, azaz 
Position Independent Codeot tartalmaznak:  

  http://en.wikipedia.org/wiki/Position-independent_code

  Ez gyakorlatilag annyit jelent, hogy a memóriában tetszőleges helyre 
bemappelve az mindenféle relokáció nélkül futtatható. Ez pedig pontosan 
azért van így, hogy az ugyanazon .so-kat használó processzek fizikailag 
ugyanazokon a lapokon osztozzanak.

  A modernebb Unix(szerű) rendszerek demand paginget használnak, ez 
gyakorlatilag annyit jelent, hogy mondjuk egy .so "betöltése" még nem 
jelenti azt, hogy az illető fájl tartalma bekerül a memóriába. A fájl 
vonatkozó részének memóriába töltésére csak akkor kerül sor, amikor 
referencia történik egy olyan virtuális címre, ami arra hivatkozik.

  http://en.wikipedia.org/wiki/Demand_paging

  Egyébként ha érdekel a téma, tudom ajánlani a 'The Design and 
Implementation of the FreeBSD Operating System' című könyv ötödik 
fejezetét. Szerintem nagyon jó áttekintést ad arról, hogy hogyan működik 
a FreeBSD VM rendszere.

-- 
KOVACS Krisztian



További információk a(z) BSD levelezőlistáról