[Kos-dev] Implémentation des sémaphores dans FreeBSD

d2 kos-dev@enix.org
26 May 2003 23:16:12 +0200


>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@enix.org> writes:
    Thomas> En fait ce que j'aurai aimé, c'est que le module scheduler
    Thomas> ne s'occupe *que* d'élire le prochain thread : c'est la
    Thomas> politique d'élection que j'aimerais voir externalisée dans
    Thomas> un module séparé. Faudrait voir dans quelle mesure c'est
    Thomas> possible, je ne sais pas.

Alors dans ce cas : scheduler gere la cpu_waitqueue. Les autres
(em/mutex/...) sont dans kitc.

    Thomas> Ces fonctions ne prennent aucun lock (surtout pas un
    Thomas> kwaitqueue_global_lock), sauf un lock permettant de
    Thomas> protéger la cpu_waitqueue (pour l'instant protégé par le
    Thomas> kwaitqueue_global_lock).

On est d'accord. Tu peux detailler quand meme le add_unsafe et ton
histoire de lock/flags ? A priori la seule de ces *_unsafe qui a
besoin de prendre un spinlock, c'est la wakeup_unsafe, puisqu'elle
doit manipuler la cpu_waitqueue pour y ajouter le/les thread(s)
reveille(s). Et le reschedule evidemment, qui prend le lock de l'autre
cote (pour en retirer 1 et le mettre sur CPU).

    Thomas> Ensuite, on pourra proposer une implémentation des
    Thomas> waitqueues, des sémaphores et des mutexes qui repose
    Thomas> directement sur ces fonctions *_unsafe.

Pareil pour moi.

-- 
d2