Annonce

Réduire
Aucune annonce.

function semaphore

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • function semaphore

    expliquez moi ça svp

    initialisation d'un semaphore

    Code:
    function Init(semaphore sem, int val)
    {  
     disable_interrupt;
     sem.K:= val;
     sem.L:= NULL;
     enable_interrupt;
    }
    wait(semaphore)

    Code:
    function P(semaphore sem)
    {
    disable_interrupt;
    sem.K = sem.K-1;
    if (sem.K < 0)
     {
       L.suivant = processus_courant;
       processus_courant.state= bloque;
       reordonnancement = vrai;
     }
     enable_interrupt;
    }
    et le dernier

    signal(semaphore)

    Code:
    function V(semaphore sem)
    {
    disable_interrupt;
    sem.K=sem.K+1;
    if (sem.K <= 0) 
     {
       processus_reveille= L.tete;
       processus_reveille.state = prêt;
       reordonnancement = vrai;
     }
    enable_interrupt;
     }
    You're alive. Do something.

  • #2
    alors??
    You're alive. Do something.

    Commentaire


    • #3
      mais pourquoi personne ne me repond??? en plus c quoi la difference entre mutex et enable(disable)_interrupt
      You're alive. Do something.

      Commentaire


      • #4
        Salut Minen,

        Envoyé par minen
        mais pourquoi personne ne me repond???
        Tu pense pas que c'est peu être normal vu que tu n'est pas dans un forum informatique.
        Y'a des personnes qui savent meme pas de quoi tu parles.
        Sur wikipedia y'a quelques explications.-->
        http://fr.wikipedia.org/wiki/S%C3%A9...8sem.2C_val.29

        Moi j'ai pas encore utilisé les Sémaphores donc je peux pas t'aider dsl !
        Dernière modification par samira12, 16 février 2007, 23h13.
        Samira

        Commentaire


        • #5
          Désolé minen je ne la connais pas :x
          Mais voila un site l'expliquant en détail il est en anglais par contre:
          http://snap.nlc.dcccd.edu/learn/full...12/chap12.html

          Commentaire


          • #6
            merci pour vos reponses
            You're alive. Do something.

            Commentaire


            • #7
              Alors finalement t'as trouvé ?
              Ca à l'air interessent ca sert à quoi ?
              Samira

              Commentaire


              • #8
                Bonjour!
                et bien je penes que je peux aider vu que je suis informaticien, et oui les semaphores je connais!
                alors ton semaphore sem a deux proprieté:
                ***K qui est le nombre de processus max pouvant s'executer en meme temps avant de se bloquer (ex: seul 2voitures peuvent traverser en meme temps)
                a K+1 processu le k+1 est bloqué!
                ***L est la liste des processus

                au debut initialise tu a sem.K reçoit une valeur(selon le probléme), lecteur redacteur si les lecteurs peuvent lire en meme temps c'est N par exemple si il ya une lecture a la fois c'est 1.
                et sem.L est vide... au debut c'est normal.

                pour les instructions :disable_interrupt; et enable_interrupt; et bien ca permet de délimiter ce qu'on appel une section critique je crois bien, ca bloque toute interruption systeme avant la fin!

                la fonction P est appelé quand un processus veux passer, il "demande autorisation" alors dabbord on bloc les interruptions ensuite K=K-1, vu qu'un pss viens d'entrer.
                si K<0 alors le nombre autorisé est atteint donc on empile le processus et on met son etat a bloqué (en attente) le réordonnancement je pense qu'il met le dernier bloqué en bas ca forme une file (first in first out).
                on ferme la section critique.


                la fonction V est appelé quand un pss va finir: on incremente K pour autoriser un autre a entrer, si K<=0 ca veux dire qu'il ya un pss bloqué alors on le libére, pss courant =L.tete (le premier a être entré en mode bloqué)
                son etat (state) deviens prêt, et le reordonnancement je crois que tu l'utilise dans une autre fonction mais pas sure... si ta la suite tu peux la mettre!!
                apres on reactive les interruption....


                je sais pas si c'est clair ou pas tu eux poser tes kestions je vais essayer d'être plus explicite
                Dernière modification par L!nK0r, 16 février 2007, 23h44.

                Commentaire


                • #9
                  Petite question

                  Mais les semaphores on les utilises quand et pourquoi ?

                  Envoyé par L!nK0r
                  ***K qui est le nombre de processus max pouvant s'executer en meme temps avant de se bloquer (ex: seul 2voitures peuvent traverser en meme temps)
                  a K+1 processu le k+1 est bloqué!
                  ***L est la liste des processus
                  Si c'est juste pour faire ca on peut faire un algo nous meme.Pas besoin d'utiliser les semaphores.

                  Merci d'avance.
                  Samira

                  Commentaire


                  • #10
                    samira j'etais en mode edit!
                    tu dis qu'elle est l'utilité des semaphore ???
                    la protection des ressources, eviter l'inter bloquage la famine et pleins d'autres problémes!
                    tu dit un simple algo haaaaaaaa! lamport et ses confréres ont bien refléchis la dessu et les semaphores et moniteurs sont la seule solution, dans la literature tu trouvera pleins d'astuces mais faudrait que je sorte mes cahiers pour être plus précis!
                    Dernière modification par L!nK0r, 17 février 2007, 00h02.

                    Commentaire


                    • #11
                      linkor

                      je crois que c'est tres clair maintenant je te remercie du fond du coeur

                      pour les question j'en ai tjr

                      pourquoi le wait et signal sont executé avec disable(enable)_interrupt (section critique) est-ce pour assurer une exclusion mutuelle entre l'incrementation et la decrementation du semaphore?
                      You're alive. Do something.

                      Commentaire


                      • #12
                        Bonjour, je t'en prie ^^

                        et bien le wait et le signal sont executé avec enable et diable pour proteger toute variable en commun, le K oui comme tu dis mais aussi la Liste, L.tete ou bien L.liste.

                        je pense que vous devez utiliser parbegin et parend (parallel begin; end) pour "simuler" une execution en simultané des pss, donc tout peux arriver au meme instant, c'est pourquoi le enable, disable sont mis autour des variables du semaphore

                        euh pour repondre clairement a ta question je dirais OUI. "c'est ce que je pense"
                        pour assurer l'exclusion mutuelle mais pas seulement entre inrementation et decrementation, entre decrementation ou décremetation aussi ou incr et inr..., il faut voir l'exclusion entre deux ou plusieurs pss, utilisant ces fonctions, non pas entre les fonctions

                        A+
                        Dernière modification par L!nK0r, 17 février 2007, 07h37.

                        Commentaire


                        • #13
                          linkor

                          merci

                          est ce que je peux poser une autre question?
                          You're alive. Do something.

                          Commentaire


                          • #14
                            j'etais en mode edit comme dab lol,
                            oui bien sure va y mais n'oublie pas de lire ma réponse modifiée

                            Commentaire


                            • #15
                              linkor

                              pour le probleme du producteur consommateur

                              Code:
                              producteur                             consommateur
                              
                              repeat                                   repeat       
                              .....                                      .....
                              wait(empty)                           wait(full)
                              wait(mutex)                           wait(mutex)
                              créer un element                      nextC:=buffer[out]
                              signal(mutex)                         signal(mutex)
                              signal(full)                           signal(empty)
                              .....                                   consommer l'element nextC
                              Until false                              Until false
                              mutex: semaphore d'EM init a 1
                              empty: semaphore de comptage initialisé a N
                              full: semaphore de blocage initialisé a 0

                              je ne comprends pas l'utilité du semaphore empty puisque le buffer est utilisé en exclusuion mutuelle?
                              You're alive. Do something.

                              Commentaire

                              Chargement...
                              X