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

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 100
    Points : 49
    Points
    49
    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 éclairé 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
    Points : 790
    Points
    790
    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 éminent
    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
    Points : 8 586
    Points
    8 586
    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 éclairé 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
    Points : 790
    Points
    790
    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 expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    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 éminent
    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
    Points : 8 586
    Points
    8 586
    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 du Club
    Inscrit en
    Janvier 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 100
    Points : 49
    Points
    49
    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?

  8. #8
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut /usr/src/linux/mm/
    Citation Envoyé par Mokhtar BEN MESSAOUD Voir le message
    Comment verifier que ces librairies sont charges une seule fois en memoire?
    Lire le source de linux? C'est toujours instructif!

    Ceci dit, la gestion la mémoire (répertoire mm) n'est probablement pas la partie la plus évidente.

    Je ne sais si il a de bons guides (abordables et à jour) pour le source de linux.

  9. #9
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par corrector Voir le message
    Je ne sais si il a de bons guides (abordables et à jour) pour le source de linux.
    Mes préférés :
    -Understanding the Linux Kernel (il existe une traduction en français : le noyau linux)
    -Linux Kernel Development (aucune traduction à ce jour)

    Les 2 ouvrages sont à jour (noyau 2.6) excepté les toutes dernières fonctionnalités genre le nouvel ordonnanceur, mais l'étude de l'ancien se révèle très instructive.
    Ajouté à cela, linux magazine qui propose une rubrique "Kernel Corner" qui permet justement de se tenir à jour sur les dernières nouveautés.

    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

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