[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