Page principale   Modules   Liste des composants   Liste des fichiers   Composants   Déclarations  

Gestion de contexte pour Linux IA32 par setjmp/longjmp
[Interface de gestion de contexte]


Définitions des types

typedef jmp_buf LinuxIA32FredContext
 Contexte de sauvegarde : un jmp_buf de linux.


Fonctions

void LinuxIA32FredContextRestore (LinuxIA32FredContext ctx)
 Restaurer un contexte processeur. Le contexte courant est perdu.

void LinuxIA32FredContextSwitch (LinuxIA32FredContext old, LinuxIA32FredContext ctx)
 Restaurer un contexte processeur. Le contexte courant est sauvé.

void LinuxIA32FredContextInit (LinuxIA32FredContext ctx, char *sp, void(*entry)())
 Initialiser un contexte processeur.


Documentation de la fonction

void LinuxIA32FredContextInit LinuxIA32FredContext    ctx,
char *    sp,
void(*    entry)()
 

Paramètres:
ctx  contexte à initialiser
sp  sommet de pile
entry  adresse de la procédure à démarrer
On initialise un pointeur de pile et une adresse d'instruction.



Implantation

C'est totalement dépendant du type de processeur et de l'implantation des fonction setjmp() et longjmp() car on doit connaitre les registres à modifier et leurs emplacements dans le jmp_buf.

00063 {
00064   ctx->__jmpbuf[JB_SP] = (int)sp;
00065   ctx->__jmpbuf[JB_PC] = (int)entry;
00066 };

void LinuxIA32FredContextRestore LinuxIA32FredContext    ctx
 

Paramètres:
ctx  contexte à restaurer
C'est l'équivalent d'un goto sans espoir de reprise.

Implantation

C'est exactement un longjmp() de la libC

00019 {
00020   longjmp(ctx,1);
00021   /*  Il n'y a pas de retour possible en séquence d'un tel appel  */
00022   KernelAbort(" FredContext Restore  : erreur fatale..... ");
00023 } 

void LinuxIA32FredContextSwitch LinuxIA32FredContext    old,
LinuxIA32FredContext    ctx
 

Paramètres:
old  contexte où sauvegarder
ctx  contexte à restaurer


Implantation

C'est exactement une combinaison de setjmp() pour la sauvegarde et longjmp() pour la restauration

00038 { 
00039   if(setjmp(old))return; /* cas de reprise du contexte*/
00040   /* contexte courant sauvegardé : on restaure un autre contexte*/
00041   longjmp(ctx,1);
00042   /* on ne revient jamais ici */
00043   KernelError(" FredContext switch  : erreur ????...???... ");
00044 }


Généré le Mon Jan 5 16:22:06 2004 par doxygen1.2.17