[Kos-dev] synchro en SMP

d2 kos-dev@enix.org
04 Jun 2003 13:18:55 +0200


>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@enix.org> writes:
    Thomas> Ceci dit, cela me semble être un problème général en SMP,
    Thomas> non ?  Actuellement, suite à une interruption timer, on
    Thomas> place le thread courant dans la CPU waitqueue, on en élit
    Thomas> un autre, et hop, switch ;) Si entre le moment où l'ancien
    Thomas> thread est placé dans la CPU waitqueue et le switch en lui
    Thomas> même un autre processeur décide d'élire ce thread -> Bing.

Dans une IT c'est quand meme un peu different puisque le contexte du
thread courant a /deja/ ete sauvegarde (c'est idtasm.S qui s'en est
occupe) quand on en elit un autre. Ceci dit, ca souleve peut-etre un
probleme equivalent (notamment si un autre processeur elit le thread
qui est en train de faire tourner le handler d'IT) ; je n'y ai pas
reflechi encore.

    Thomas> Pendant que outb 0xE8 est en décodage, tu ne sais pas que
    Thomas> c'est outb 0xE8 qui est en décodage, donc il faudra
    Thomas> revenir un peu en arrière dans le temps ;)

Je veux juste dire qu'il faut verifier (en regardant le source) que le
decodage ne s'amuse pas a appeler tick1 ou tickn, c'est ca le plus
important. Si tick1 ou tickn est appele pdt le decodage, alors
decrementer le tick ne suffit pas : car l'effet de tick1 ou tickn a
deja ete pris en compte (un evenement a pu etre simule), donc y'a eu
intrusion, c'est trop tard (mais pas bien grave : on va pas chier une
pendule pour 1 cycle ou 2 qui peuvent effectivement entrainer des
prise en compte d'interruptions : le principal etant que dans la
sequence "non intrusive", aucun tick supplementaire, ne soit simule,
qqs le nbr d'instructions).

-- 
d2