[SOS] Soft/Hard Task switching...

Thomas Petazzoni thomas.petazzoni at enix.org
Mar 8 Nov 09:06:05 CET 2005


Salut,

[ Désole de ne pas avoir répondu aux précédents messages sur la liste,
concernant les allocateurs mémoires. Ce n'est pas faute d'intérêt, mais
plutôt faute de temps. J'espère pouvoir y répondre prochainement. Au
pire, j'y réponds la semaine prochaine. ]

Romain LABBE wrote:

> Au lieu que la methode "schedule" appelle directement "switch_context", elle 
> fait un int 0x40 par exemple. Le vecteur 0x40 à été affecté préalablement à 
> "switch_context"... et du coup cela resoud le probleme du iret et des "bouts" 
> qui manquaient. Il y'avait aussi un probleme pour récupérer le pointeur de pile.

Hum, c'est étrange que tu aies besoin de cela. Normalement, directement
à l'intérieur du gestionnaire de l'interruption IRQ0, tu devrais pouvoir
changer de thread. Refaire une autre interruption me paraît un peu
"overkill". Si tu veux, je peux regarder le code qui ne fonctionnait pas
(celui qui n'utilise pas int 0x40) et voir si je trouve quelque chose.

> Suis je obligé d'utiliser le TSS ? enfin en 3 mots comment le situer dans un 
> systeme ?

Oui, dès que tu vas faire des threads utilisateur, tu seras obligé
d'utiliser un TSS. Attention, utiliser le TSS ne veut pas dire faire du
"Hard-Task-Switching".

On est obligé d'utiliser un TSS pour les threads utilisateur, parce que
lors d'une interruption, un thread utilisateur (en niveau de privilège
3) doit passer en mode privilégié (en niveau de privilège 0). Avec ce
changement de privilège, il y a également un changement de pile (de la
pile utilisateur à la pile noyau). Donc il faut que quelque part,
l'adresse de la pile noyau soit indiquée. Et le seul endroit pour ça,
c'est le TSS.

Ce que fait SOS, c'est qu'il utilise un seul et unique TSS. Avant de
scheduler un thread utilisateur, on modifie ce CSS pour que le champ
"adresse de la pile noyau" pointe au bon endroit. Et hop, roulez jeunesse.

Au niveau du code, cet unique TSS est défini là
http://iomeda.dnsalias.com/lxr/http/source/hwcore/cpu_context.c?v=sos-a7#L214.
Et la fonction qui met à jour ce TSS à chaque changement de contexte est
http://iomeda.dnsalias.com/lxr/http/source/hwcore/cpu_context.c?v=sos-a7#L922.


Bonne journée,

Thomas
-- 
Thomas Petazzoni
thomas.petazzoni at enix.org



Plus d'informations sur la liste de diffusion Sos