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