[Kos-dev] Double Fault & Co

Christophe Avoinne (Club-Internet) kos-dev@yoda.isnpro.com
Tue, 20 Feb 2001 21:14:44 +0100


Ah oui... il y a un truc à savoir : une histoire qui veut que l'on ne fasse
pas ltr du même sélecteur qui se trouve déjà dans TR. Pourquoi ? Dans le
GDTR ou le LDTR, le sélecteur correspondant à celui de TR a le bit TI à 1
pour indiquer que c'est le sélecteur courrant dans TR. C'est un truc que
j'ai trouvé dans la doc. Conclusion si vous faîtes un "jmp TSSSEL:0", alors
que TSSSEL est déjà dans TR, bang ! exception #13 je crois.  Que de
souvenirs qui remontent à la surface.

Je vous souligne que - pour la gestion du double fault et des tâches - j'ai
dejà écrit ce code qui fonctionne. Donc, retrouvez le tarball que je vous
avais envoyé et examinez la démarche à suivre. Ca vous évitera de chercher
des bugs trop longuement, alors que c'est déjà traqué. J'ai noté, il n'y a
pas longtemps, qu'OSKIT gère également ce doublefault.

----- Original Message -----
From: "Thomas Petazzoni" <thomas.petazzoni@ifrance.com>
To: <kos-dev@enix.org>
Sent: Tuesday, February 20, 2001 12:59 PM
Subject: [Kos-dev] Double Fault & Co


> salut,
>
> resumons : pour gerer le double fault on a besoin de :
>
> - une task gate dans l'IDT, qui pointe sur le TSS appelle
> double_fault_tss
> - deux descripteurs de segments dans la GDT, un pour le system_tss et
> un pour le double_fault_tss
> - un system_tss qui permettra de sauvegarder le contexte courant lors
> d'un double fault (gere par la task gate decrite plus haut), et qui
> permettra certainement aux threads CPL3 de trouver l'adresse de leur
> pile CPL0 lors d'un syscall ou d'une autre interruption.
> - un double_fault_tss qui permet d'executer un code qui allouera une
> nouvelle page physique pour la pile du thread courant.
>
> toutes ces structures sont actuellement mises en place, mais evidemment
> ca ne fonctionne pas.
>
> j'ai bien realiser un LTR pour charger le system_tss (et dire que c'est
> le TSS courant). David, cette instruction (dixit doc intel) ne lance pas
> la tache pointee par le TSS, donc pas besoin de se faire chier.
>
> le truc qui faisait foirer le LTR est simple : pour dire c'est tel
> segment de la GDT, il faut pas uniquement dire c'est tel segment parce
> qu'un descripteur de segment contient 3 choses : sur 2 bits, le RPL, sur
> 1 bit le choix GDT/LDT et sur 13 bits le numero de segment dans la table
> choisie.
>
> le LTR fonctionne donc. et lorsque plex86 plante, il me donne bien des
> bonnes valeurs pourle registre TR. donc de ce cote la ca a l'air
> d'aller.
>
> maintenant, j'ai contacte christophe au sujet du bug de Bochs. il m'a
> confirme son existence, mais ne retrouve plus le patch qu'il avait
> realise. il va regarder ca dans les jours qui viennent. d'autre part, il
> ne sait pas si le bug est present dans plex86.
> ce bug ferait foirer notre truc (generation de trois pages fault, au
> lieu d'un suivi d'un double fault).
>
> voila voila.
>
> amicalement,
>
> thomas
> --
> PETAZZONI Thomas
> thomas.petazzoni@meridon.com     UIN : 34937744
> Projet KOS : http://kos.enix.org
>
> _______________________________________________
> Kos-dev mailing list
> Kos-dev@yoda.isnpro.com
> http://the-doors.enix.org/cgi-bin/mailman/listinfo/kos-dev
>