[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] gcc og -PIC



Mark Wrobel <sslug@sslug> writes:

> Men, vil det sige at koden fra biblioteket bliver siddende i
> hukommelsen efter at processen terminere? Således biblioteket er klart
> hvis nu en anden proces senere skulle bruge det?

Implicit, som et side-effekt af hvordan det blev hentet i hukommelsen. 
Når en ELF binær fil (shared object eller et almindeligt program)
åbnes bliver det ikke bare indlæst råt i hukommelsen -- et område
virtuelt hukommelse bliver ved hjælp af mmap() associeret med et
område i filen. Kode-segmentet bliver mmappet med flag som tillader
deling af denne association mellem flere forskellige processer.

Hvis jeg fx kigger på /proc/1264/maps som er listen over de 86 mmaps
som denne xemacs proces har lavet kan jeg se:

08048000-081c7000 r-xp 00000000 03:43 332514     /usr/bin/xemacs-21.4.8-mule

I processens virtuelle adresserum fra 0x08048000 til 0x081c7000
(1568768 bytes) er en del (.text segmentet) af min xemacs binær fil
mappet ind. Det er mappet sådan at området kan læses og eksekveres. 
mmap'en starter på offset 00000000 i den binære fil og kommer fra
inode 332514 på device 03,43 (i hex, det er altså /dev/hdb3).

Hvis en anden proces beder om nogle af de samme sider i den samme fil,
kan de af kernen deles. Siderne ligger i cachen og de bliver ved med
det når programmet afsluttes, så hvis jeg starter og afslutter xemacs
bliver de ikke nødvendigvis fjernet med det samme.

Data fra filen bliver heller ikke hentet med det samme fra disken, men
kun "on-demand". De kan også fjernes fra hukommelsen igen hvis der er
brug for det, de kan jo altid hentes fra disken igen. Det er en
kompliceret sag at finde ud af hvad der er mest effektivt.


> (hvordan tjekker man
> egentlig det på en RH? altså hvad der ligger i hukommelsen)

Jeg er ikke klar over hvordan man kan vise en liste over hvad der
egentlig fysisk er i hukommelsen. Hvis du vil kan du sammenlægge
information fra /proc/*/maps, og jeg lavede engang et script til vores
embedded Linux system hos Eicon som gjorde det, for at finde ud af
hvad det egentlig var vi havde mappet ind i hukommelsen. Men det er
kun de virtuelle mapninger, og du kan ikke se fx hvor meget af de
1568768 ovenover faktisk er i hukommelsen.

Jeg mindes svagt noget om en "rmap" patch som laver en relation mellem
de sider der er i hukommelsen og hvem der ejer dem (der er ellers
normalt kun den anden vej: man kan hvilke sider en proces har mmappet
men ikke hvilke processer har en bestemt side mmappet). Måske giver
den mulighed for en mere nøjagtig eksamination af det forbrugte
hukommelse.

-- 
===============================================================
<sslug@sslug>                           Herlev, Denmark     
<URL:http://www.andreasen.org/>                             <*>   
===============================================================



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:09 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *