[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: /proc/<pid>/maps ?



On Sat, Nov 12, 2005 at 12:25:59AM +0100, Clément Plantier wrote:
> Que représente le premier champ en début de ligne dans le fichier maps? 
> 
> Dans le man il est écrit que c'est "l'espace d'adressage du processus". A
> priori ceci ne correspond pas à des adresses réelles en mémoire
> virtuelle : on peut voir des valeurs allant jusqu'à 0xbfb19000 (exemple
> pris pour la pile (stack) du processus), ce qui est bien au délà du giga
> dont je dispose sur ma machine. (1 giga c'est de l'ordre de 0x30000000 il
> me semble). Donc à quoi celà correspond ?

Ben... à des adresses en mémoire _virtuelle_. Chaque
processus a son propre espace d'adressage qui n'a aucun
(mais alors aucun) rapport avec l'adressage physique de
l'ordinateur.

Si tu regarde plus en détail, tu verras que _tous_ les
processus utilisent plus ou moins les même adresses, car ils
marchent tous de la même façon. Donc, chaque
processus a son code en 0x08048000, ses variables ensuite,
et ainsi de suite, et la magie de la vm de Linux replace ça
quelque part dans l'ordinateur (peut-être en RAM, peut-être
sur disque dans le swap), et le processus n'a même pas de
moyen de savoir où se trouvent physiquement ses données.

> Deuxième question : comment peut connaitre l'espace
> d'adressage réel d'un processus (pour la pile par exemple)???

C'est définit au moment du link dans ld. En adresses
virtuelle, ça par de 0xc0000000 et ça va en descendant, en
général suffisament loin (à vue de nez, environ 7Mo sur mon
système, ça peut peut-être se régler, mais je ne pense pas
que qui que ce soit en ai déjà eu besoin :-)

> C'est assez important pour moi, donc si vous avez une semblant d'idée
> n'hésitez pas. Merci ;)

J'ai une question en retour: pourquoi est-ce important? A
priori, ça ne devrait intéresser que ceux qui bidouillent le
compilateur, ou la partie vm du noyau.

Y.



Reply to: