[SOS] Multi-Tasking - TSS
Thomas Petazzoni
thomas.petazzoni at enix.org
Mer 14 Sep 15:49:20 CEST 2005
Salut,
[ Toujours un soucis avec le Reply-To positionné par GMail, cf
http://linuxfr.org/~pterjan/17376.html pour la solution ]
KAISER Edouard wrote:
> Chaque processus possède sa propre LDT qui contient 4 segments :
> - NULL (je pense que c'est pas obligé pour une LDT...)
Non, ce n'est pas obligatoire dans une LDT, d'après mes souvenirs. À
vérifier dans la doc Intel.
> J'ai utilise le système d'SOS pour inserer des binaires ELF dans mon
> binaire du Kernel.
Pourquoi ? Dans un premier temps, pour faire un thread noyau, une simple
fonction de ton noyau suffirait. Ça simplifierait la chose (il faut
toujours chercher à simplifier au maximum pour trouver la source d'un
problème, afin de résoudre chaque problème séparement sans essayer de
s'attaquer à un machin monstrueusement complexe).
> Et c'est la que je bloque... Voila mon code pour changer de contexte :
> __asm__
> ("movw $0x14,%ax \n \
> movw %ax, %ds \n \
> movw %ax, %es \n \
> movw %ax, %fs \n \
> movw %ax, %gs \n \
> movw $0x1C,%ax \n \
> movw %ax, %ss \n \
> movl $0xFFFFFF,%esp \n \
> nop \n \
> nop \n \
> ljmp $0x30,$0x18");
Je n'ai jamais vraiment utilisé les TSS, mais cette séquence me semble
étrange. Pourquoi as-tu besoin de changer ds, es, fs, gs, alors qu'ils
sont présents dans le TSS, et donc censés être modifiés automagiquement
par le processeur au moment du changement de contexte ?
Je n'ai pas la doc Intel sous les yeux pour vérifier, peut-être ce soir,
ou plus tard.
> Event type: PANIC
> Device: [CPU ]
> Message: task_switch: CS NULL
As-tu regardé dans le source de Bochs de quel CS il s'agissait ? Du CS
courant, du CS du TSS, d'autre chose ?
> Je veux bien vous donner du code, mais y en a pas mal et je doute que
> vous aurais la foi de le regarder et l'assimiler ! :D
Envoie _toujours_ le code ;-) Ou plutôt, place un tarball propre quelque
part, et donne un lien sur la liste. Parce que là, juste avec tes
informations (même si elles sont très détaillées), on ne peut guère que
tenter de faire marcher /dev/bouledecristal, dont les résultats sont
généralement pas exceptionnels.
Bonne journée,
Thomas
--
Thomas Petazzoni
thomas.petazzoni at enix.org
Plus d'informations sur la liste de diffusion Sos