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

C Discussion :

créer section critique


Sujet :

C

  1. #1
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut créer section critique
    Bonsoir,

    je cherche à exécuter un bout de code en section critique.

    Qu'y a-t-il de similaire à un CLI et un STI (asm) ?
    J'obtiens un segfault si je met directement ces instructions en asm.
    D'après différentes docs sur le net, c'est parce qu'on a uniquement le droit en mode kernel et non user.

    J'ai trouvé spinlock ou encore lock_kernel, mais je ne trouve pas les fichiers d'entêtes correspondants.


    Quelqu'un a une idée comment procéder ?
    Merci d'avance pour toute aide ...

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Pourquoi ne pas utiliser les threads?

  3. #3
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Citation Envoyé par Gruik Voir le message
    Salut,

    Pourquoi ne pas utiliser les threads?
    Je veux garantir cette suite d'instruction dans un programme sans threads.
    Dans le cas d'un driver, aucun thread n'est utilisé pour les sections critiques ...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par je®ome Voir le message
    Je veux garantir cette suite d'instruction dans un programme sans threads.
    Dans le cas d'un driver, aucun thread n'est utilisé pour les sections critiques ...
    Je ne comprends pas bien ton problème.

    Pour les section critiques, en général, tu veux garantir un accès exclusif à une ressource (mémoire, fichier, périphérique, code, ...) vis a vis d'un programme/processus/thread concurrent qui pourrait vouloir faire la même chose.

    Dans ton cas, tes concurrents ils sont où ? Est ce que tu peux expliquer un peu plus ton problème ?

    Les instructions STI/CLI sont des instructions assembleurs qui nécessitent des privilèges (ring0) mais surtout qui empêchent les interruptions. A ce propos, je ne suis pas sûr que le fait de masquer les interruptions empêche le scheduler de faire un changement de tâche et donc, ce n'est peut être pas la solution à ton problème.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Les concurrents sont toutes les autres tâches linux qui tournent sur l'os.
    En stoppant les irq, je suis certain de stopper le scheduler, car le scheduler utilise l'interruption timer (irq0).

    Sinon, comment exécuter un programme en mode kernel ? ( sans faire de module driver)

    Merci pour l'intérêt porté à mon problème !!

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Et pourquoi alors ne pas utiliser un sémaphore. C'est un peu prévu pour tout de même. Regarde du côté de semget().

    Et puis stopper le schéduler, c'est probablement pas une bonne idée.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    Par défaut
    Les concurrents sont toutes les autres tâches linux qui tournent sur l'os.
    Attends, quel genre de ressources cherches-tu à exploiter là?

    Sur un OS moderne, très peu de choses sensées ont besoin d'un accès exclusif au processeur...

    Pour ça, je dirais que la méthode la plus simple est d'utiliser nice() pour récupérer la priorité la plus absolue, ainsi tu passeras "devant" les autres processus.
    Mais à mon avis, ça ne te permettra pas de passer devant les drivers, ni complètement devant les autres programmes s'il y a un mécanisme anti-famine comme sous Windows...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Merci pour vos réponses.

    @ram-0000:
    une sémaphore permet de contrôler l'accès d'une zone mémoire partagée entre différents threads et processus. Ce n'est pas ce que je cherche à faire.

    @Médinoc:
    Il faut que je garantisse le temps d'écriture sur le port parallèle,car j'envoi un signal via ce port et que le signal est faussé à cause du switching de tâche.

    Pour ceux que ça intéresse, je n'ai pas continuer à chercher, mais ai écrit un petit module kernel. J'utilise les fonctions lock_kernel et unlock_kernel afin d'éviter le switching de tâche pendant ma section critique. J'atteint ainsi une stabilité de 98% sur mon signal contre 75% avant l'utilisation du module.

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par je®ome Voir le message
    Il faut que je garantisse le temps d'écriture sur le port parallèle,car j'envoi un signal via ce port et que le signal est faussé à cause du switching de tâche.
    Problème de conception. Un PC n'est pas une base de temps. Tu ne pourras jamais avoir un signal vraiment stable sur un port //. Le principe est d'utiliser le PC pour piloter (modifier la période, créer un scénario...) un dispositif externe 'base de temps' dont c'est le travail (un PIC, une liaison série et un peu de code dans le PIC peuvent suffire).

    Ta solution 'kernel' pourrait avoir de graves conséquences sur la stabilité du système ou des autres applications si la section critique est longue...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'include avec une section critique.
    Par radicalrider dans le forum Visual C++
    Réponses: 21
    Dernier message: 12/07/2006, 16h38
  2. [VB.NET] Remplacement de fichier, section critique
    Par leSeb dans le forum Windows Forms
    Réponses: 7
    Dernier message: 10/03/2006, 15h34
  3. section critique "static" ou pas?
    Par giova_fr dans le forum Windows
    Réponses: 2
    Dernier message: 01/01/2006, 14h15
  4. [Delphi 6] Problème de section critique
    Par Desraux dans le forum Langage
    Réponses: 8
    Dernier message: 08/12/2005, 15h13
  5. [Kylix] Section critique
    Par rahimk dans le forum EDI
    Réponses: 5
    Dernier message: 23/11/2005, 13h18

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