[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