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

Thomas Petazzoni kos-dev@enix.org
Tue, 27 May 2003 00:27:53 +0200


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

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

Oui, bien sûr, scheduler est celui en charge de la cpu_waitqueue, et
propose des fonctions permettant d'ajouter et de retirer des threads de
cette cpu_waitqueue.

> 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).

Non, wakeup_unsafe n'a pas besoin de prendre un spinlock : elle
réveille, donc elle n'est pas bloquante. Pas besoin de relacher le lock.
Celle qui est bloquante c'est waitqueue_add, et donc juste avant de
bloquer le thread (mais *après* l'avoir mis dans la waitqueue), doit
relacher le lock. Cf les diverses discussions qu'on a eu avant.

Or, pour relacher le lock, on utilise des macros spin_unlock qui
prennent 2 arguments : le lock, et les flags. Et les flags, il faut pas
qu'on les sortes de n'importe ou, donc faut que le mec nous les passe en
argument.

>     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.

Zut, ça nous fait encore changer plein de trucs tout ça. Saleté de
synchro ;(

Bonne nuit,

Thomas
- --
PETAZZONI Thomas - thomas.petazzoni@enix.org - UIN : 34937744
http://www.enix.org/~thomas/
KOS: http://kos.enix.org/ - Lolut: http://lolut.utbm.info
Fingerprint : 0BE1 4CF3 CEA4 AC9D CC6E  1624 F653 CB30 98D3 F7A7
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)
Comment: Using GnuPG with Debian - http://enigmail.mozdev.org

iD8DBQE+0pTp9lPLMJjT96cRAsWzAJ44ihtxhQ35QrNwQdtC48xPTEt4twCgnTY/
skozFZ8KofZt9cKI1h5L9/k=
=gDHH
-----END PGP SIGNATURE-----