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

POSIX C Discussion :

Utilisation Semaphore & Shared memory


Sujet :

POSIX C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Points : 39
    Points
    39
    Par défaut Utilisation Semaphore & Shared memory
    Bonjour à tous,

    Je travail actuellement avec un prestataire qui me fournit une application développé en C/C++ et qui utilise des Semaphores et de la mémoire partagée.

    En inspectant le comportant sur la plateforme (Linux Suse), nous nous sommes rendus compte que même si un des processus de cette application est arrêté, des semaphores restent ouvertes ainsi que de la mémoire partagée. (vu via la fonction ipcs -m et ipcs -s)

    Est-ce un comportement normal ? Ou est-ce une lacune de gestion des sémaphores et de la mémoire partagée qui devraient être normalement libéré par programmation à l'arrêt du process ?

    Merci de vos retours.

  2. #2
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Salut !!
    Que fait ton processus avant de se terminer ? Essaie-t-il de marquer la mémoire partagée pour destruction ? (shmctl()) ?
    C'est le système qui libère cette ressource allouée, par le processus.
    Même si ta mémoire partagée est marquée pour destruction cela ne sera pas exécutée si d'autres processus sont attachés à cette mémoire ou tente de s'y attacher (voir les man pages).
    Si ton processus ne marque pas pour destruction la mémoire partagée il n'y a aucune raison qu'elle soit détruite. Il en est de même pour les sémaphores (sauf que marquer leur destruction est une opération immédiate).

    Peux-tu ajouter le résultat de ipcs dans le post ?
    Selso.
    Ingénieur/CdP développement systèmes embarqués &

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Ca dépend si tes sémaphores (et shared mem, c'est pareil) sont crées avec une clée, ou avec IPC_PRIVATE.

    S'ils sont crées avec IPC_PRIVATE, alors ils disparaissent quand plus personne ne les utilise.

    S'ils sont crées avec une clée par contre, alors ils restent là indéfiniment, jusqu'a ce que tu reboot ou que quelqu'un les supprime explicitement avec un semctl(IPC_RMID).

    Tout ceci est parfaitement logique : si tu crée une resource avec IPC_PRIVATE, seuls les process fils du process qui a créé la ressource peuvent y avoir accès. Quand tous ont terminé, la ressource n'a plus lieu d'être et l'OS le sait. Donc il fait le ménage.

    Par contre, si tu utilise une clée, alors n'importe quel process peut avoir accès à la ressource à partir du moment où il connait la clée. Même si à un moment donné aucun process n'utilise la ressource, rien ne garenti que plus tard un process indépendant ne va pas utiliser la clée pour accéder à la ressource... Il est donc logique qu'elle reste en place tant qu'elle n'est pas explicitement supprimée.

Discussions similaires

  1. ORA-27101: shared memory realm does not exist
    Par Mella dans le forum Connexions aux bases de données
    Réponses: 21
    Dernier message: 13/01/2013, 15h06
  2. Utilisation de ASMM (Automatic Shared Memory Management)
    Par ducho dans le forum Administration
    Réponses: 5
    Dernier message: 30/12/2008, 16h22
  3. shared memory entre ordi c++
    Par yaronillouz dans le forum C++
    Réponses: 9
    Dernier message: 20/02/2006, 22h02
  4. Réponses: 10
    Dernier message: 07/02/2006, 13h22
  5. Share memory
    Par beLz dans le forum C
    Réponses: 5
    Dernier message: 21/12/2004, 00h50

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