[linux] Re: pmap
Daniel C. von Asmuth
asmuth op bakunin.xs4all.nl
Wo Jun 28 21:25:06 CEST 2006
Aldus schreef Martijn van Oosterhout op Wed, Jun 28, 2006 at 11:36:37AM +0200:
> On Wed, Jun 28, 2006 at 11:06:52AM +0200, Cecil Westerhof wrote:
> > Om te controleren of pmap kan worden gebruikt om het geheugen gebruik
> > van een proces te controleren (er waren mensen die dachten dat pmap
> > gealloceerd geheugen niet toont) gebruik ik het volgende programma:
> <snip>
>
> > Als ik 'pmap -d <PID>' bij de verschillende stappen gebruik, krijg ik
> > voor writeable/private de volgende waardes:
> > 1 104
> > 2 236
> > 3 236
> > 4 236
> > 5 236
> > 6 1020
> > 7 236
>
> Ik weet niet precies wat pmap aan het meten is, maar "gebruikte"
> geheugen is onzttend lastig om te meten.
>
> Programmas die geheugen willen krijgen dat meestal van de "heap". Dit
> is een block geheugen die kan groeien of kleiner worden. Een vaak
> voorkomend probleem is als je een hoop geheugen vraagt, dan een klein
> beetje voor iets anders en dan die groote block vrijgeeft. Ook al is
> dat groote stuk "vrij" kan het niet terug gegeven worden aan het
> systeem. Je hebt een gat.
Wat ik gehoord heb, is dat de heap wordt beheerd door de C library,
die stukjes uitdeelt aan funkties die malloc() aanroepen totdat de
applicatie ze retourneert door free() aan te roepen. Als er veel malloc()
wordt aangeroepen dan raakt de heap natuurlijk op, maar de library doet
dan een sbrk() system call om het besturingssysteem om meer memory te
vragen. De heap zal echter gefragmenteerd raken door onvoorspelbare free()
aanroepen, zodat de heap nooit krimpt. Utilities als 'ps' geven ruwweg
aan hoeveel geheugen aan een proces is toegewezen. Uiteraard kan een
moderne kernel een stuk geheugen aan meerdere programma's tegelijk
toewijzen (bijv. voor shared libraries).
Met vriendelijke groet,
Daniel von Asmuth
--
_----_
/ >
< intel/
\ Lag behind
\____/
More information about the Linux
mailing list