IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

chargement memoire des librairies partagées


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 100
    Par défaut chargement memoire des librairies partagées
    Bonjour

    j'ai quelques questions sur les libraries partagées ( shared lib)

    1) si une librairie partagee est utilises par un process => chargement en memoire de cette lib dans l'espace memoire de ce process
    si un deuxieme process utilise cette lib => est-ce que la librairie est de nouveau chargee en memoire ?

    2) quels sont les contraintes d'implementation d'une librairie partagée
    Est-ce qu'une librairie partagée peut utiliser des variables globales
    ou bien elle doit etre completement réentrante


    3) Comment génerer une librairie partagée?

    Tous les commentaires sont les bienvenus

  2. #2
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Citation Envoyé par Mokhtar BEN MESSAOUD Voir le message
    Bonjour
    2) quels sont les contraintes d'implementation d'une librairie partagée
    Est-ce qu'une librairie partagée peut utiliser des variables globales
    ou bien elle doit etre completement réentrante
    Si tu veux dire que, entre deux process, les variables globales de la libraire seront partagées, c'est non. Donc :
    - le fait que ce soit réentrant sera utile pour une application multi-threadée
    - tu peux utiliser des variables globales (elles seront globales au processus)

    Ensuite, il me semble que la librairie est chargée en mémoire pour chaque process. L'intérêt du gain de place en la partageant n'étant que statique.

    Pour faire des recherches sur le sujet et vérifier ce que je t'ai dit (qui n'est peut-être pas totalement juste), tu peux faire des recherches sur le critère "DSO" ou "Dynamic shared object".

    Fait nous partager ton retour !

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par valefor Voir le message
    Ensuite, il me semble que la librairie est chargée en mémoire pour chaque process. L'intérêt du gain de place en la partageant n'étant que statique.
    Non, les bibliothèques partagées ne sont chargées qu'une seule fois en mémoire, quel que soit le nombre de processus les utilisant.

    --
    Jedaï

  4. #4
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Donc tu penses que si j'implémente une variable statique dans une fonction de ma bibliothèque, elle sera partagée ?

    On peut au moins dire que les data de la bibliothèque sont instanciées pour chaque process, non ?

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par valefor Voir le message
    On peut au moins dire que les data de la bibliothèque sont instanciées pour chaque process, non ?
    Oui, chaque processus recoit une copie du segment de donnees. Par contre, le segment de texte (le code) est partage par tous les processus qui l'utilisent, et n'est donc present qu'une seule fois en memoire.

  6. #6
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par valefor Voir le message
    Donc tu penses que si j'implémente une variable statique dans une fonction de ma bibliothèque, elle sera partagée ?

    On peut au moins dire que les data de la bibliothèque sont instanciées pour chaque process, non ?
    Je ne contestais qu'une partie précise de ton post, les variables globales sont effectivement spécifique au processus, comme l'explique très bien DaZumba.

    --
    Jedaï

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 100
    Par défaut
    Bonjour

    j'ai fait un cat sur les fichiers /proc/xxx/maps du process dash
    08048000-0805c000 r-xp 00000000 08:0a 663897 /bin/dash
    0805c000-0805d000 rw-p 00013000 08:0a 663897 /bin/dash
    0805d000-08080000 rw-p 0805d000 00:00 0 [heap]
    b7de3000-b7de4000 rw-p b7de3000 00:00 0
    b7de4000-b7f28000 r-xp 00000000 08:0a 665148 /lib/tls/i686/cmov/libc-2.6.1.so
    b7f28000-b7f29000 r--p 00143000 08:0a 665148 /lib/tls/i686/cmov/libc-2.6.1.so
    b7f29000-b7f2b000 rw-p 00144000 08:0a 665148 /lib/tls/i686/cmov/libc-2.6.1.so
    b7f2b000-b7f2e000 rw-p b7f2b000 00:00 0
    b7f3f000-b7f41000 rw-p b7f3f000 00:00 0
    b7f41000-b7f5b000 r-xp 00000000 08:0a 631508 /lib/ld-2.6.1.so
    b7f5b000-b7f5d000 rw-p 00019000 08:0a 631508 /lib/ld-2.6.1.so
    bfe88000-bfe9e000 rw-p bfe88000 00:00 0 [stack]
    ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
    et sur celui de du process /sbin/getty

    08048000-0804c000 r-xp 00000000 08:0a 485804 /sbin/getty
    0804c000-0804d000 rwxp 00003000 08:0a 485804 /sbin/getty
    0804d000-08070000 rwxp 0804d000 00:00 0 [heap]
    b7e25000-b7e26000 rwxp b7e25000 00:00 0
    b7e26000-b7f6a000 r-xp 00000000 08:0a 665148 /lib/tls/i686/cmov/libc-2.6.1.so
    b7f6a000-b7f6b000 r-xp00143000 08:0a 665148 /lib/tls/i686/cmov/libc-2.6.1.so
    b7f6b000-b7f6d000 rwxp 00144000 08:0a 665148 /lib/tls/i686/cmov/libc-2.6.1.so
    b7f6d000-b7f70000 rwxp b7f6d000 00:00 0
    b7f7f000-b7f80000 rwxp b7f7f000 00:00 0
    b7f81000-b7f83000 rwxp b7f81000 00:00 0
    b7f83000-b7f9d000 r-xp 00000000 08:0a 631508 /lib/ld-2.6.1.so
    b7f9d000-b7f9f000 rwxp 00019000 08:0a 631508 /lib/ld-2.6.1.so
    bf950000-bf966000 rw-p bf950000 00:00 0 [stack]
    ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
    Apparement les libraries ls-2.6.1.so et libc-2.6.1.so ne sont pas mappes aux memes endroit

    Comment verifier que ces librairies sont charges une seule fois en memoire?

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2009, 10h47
  2. Ordre de chargement des librairies
    Par Duc Lebowski dans le forum Weblogic
    Réponses: 1
    Dernier message: 15/01/2008, 16h31
  3. Gestion des librairies partagées
    Par Gumpy dans le forum Websphere
    Réponses: 2
    Dernier message: 17/07/2007, 10h20
  4. Réponses: 1
    Dernier message: 28/05/2007, 00h22
  5. [UNIX Forte 6.1 G++] pbl chargement de librairie partagée
    Par claudio.matzke dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 09/10/2003, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo