Forum Linux.embarqué Désactivation Scheduler

Posté par .
Tags : aucun
0
16
mai
2007
Bonjour à tous,

Pour une application embarquée j'aurai besoin de pouvoir désactiver le Scheduler pendant un court instant, en mode User.

Est-ce possible de désactiver le Scheduler sous Linux ?
Si oui, quelle est la fonction qui me permettrai de le faire ?

Je vous remercie d'avance pour votre aide.

Sébastien.
  • # Préemptif

    Posté par (page perso) . Évalué à 3.

    Linux est un système multitache préemptif. Le scheduler est un élément indispensable à son fonctionnement, il ne peut pas être désactive.

    Ce que tu veux c'est probablement des fonctions temps réel au noyau. Elle ne sont aps disponible dans le noyau de base, mais probablement dans des patchs temps réel.
  • # Désactiver ?

    Posté par . Évalué à 2.

    Que veux tu dire par désactiver ?

    Il éxiste sous linux des appels sys pour influer sur le scheduler dont setsched (jme rapelle que celui là, jai pas de lin sous la main :( ). Et des outils en ligne de commande tel schedutil et schedtool
  • # C'est pour quoi faire ?

    Posté par . Évalué à 2.

    Il n'est pas prévue pour linux de fonctionner comme ca.
    Quel est la raison de vouloir couper le scheduler ?
    Si c'est pour absorber un pic de charge en temps de traitement et ameliorer un temps de reponse en desactivant les autres taches:
    -Tu peut jouer avec la priorité d'execution de ta tache (le scheduleur te donneras plus la main que les autres taches)
    -Tu peut envoyer un signal a tes taches pour quelle passe en sleep (si tu en as les sources) puis un autre pour les relancer
    -(solutions beurk) Tu peut descendre la partie traitement (longue) dans un module kernel car dans l'espace kernel tu n'est pre-empté que par les [interruptions et thread kernel] mais par aucune tache user.
    • [^] # Re: C'est pour quoi faire ?

      Posté par . Évalué à 1.

      Merci à tous pour vos réponse (et si j'ai bien compris je suis un peu dans la m....)

      En fait le but est de porter un vieu code Assembleur sous Linux, ce code désactivait le scheduler pour le traitment de ressources critiques.
      A savoir, il n'y aurra normalement qu'un seul Processus successible d'acceder à ces données, mais plusieurs Threads dans ce processus qui pourraient éventuellement y acceder, et peut-être simultanément....
      Donc si j'ai bien suivi, pour éviter d'être interrompu par un autre Thread quand je veux acceder à ma ressource, je devrai passer par le mode Kernel lorsque j'accede à ces ressources ?
      Ainsi je ne serais pas interrompu par un autre Thread qui désire acceder à la même ressource au même moment....

      Ca tiens la route ?

      • [^] # Re: C'est pour quoi faire ?

        Posté par . Évalué à 2.

        As tu regarder du coté des sémaphores ? Cela permet de creer des lock() sur des ressources, ce qui semble correspondre à ton besoin.
      • [^] # Re: C'est pour quoi faire ?

        Posté par . Évalué à 1.

        Non, tu as simplement besoin de synchroniser tes threads et ta ressource critique.
        Regarde les sémaphores ou mutex.
        Tu peux parfaitement gérer ça en mode user sans un quelconque recourt au mode Kernel.
        • [^] # Re: C'est pour quoi faire ?

          Posté par . Évalué à 1.

          J'avais également pensé à cette solution qui me simplifierai bien les choses, c'est sur.
          Merci à tous.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.