Segment d'état de tâche
Un segment d'état de tâche ou Task state segment (TSS) est une structure spécifique aux processeurs de la famille x86 où est stockée tout le contexte d'un processus. Son descripteur est placé dans la GDT (Table globale de descripteurs).
En tant que segment, les segments d'état de tâche sont référencés par des descripteurs d'état de tâche (TSSD) situés dans la GDT.
Structure du TSS
Informations statiques
Le TSS peut contenir des informations statiques initialisées lors de la création du processus :
- Le sélecteur de segment de la LDT de la tâche
- L'adresse logique de la pile d'exécution de la tâche pour les différents niveaux de priorités
- Le champ T (debug trap bit)
- L'adresse de la matrice de permissions pour les E/S
Informations dynamiques
Le TSS contient également des informations qui sont mises à jour à chaque commutation de contexte :
- Les registres généraux EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
- Les registres de segments CS, ES, SS, DS, FS, GS
- Le registre EFLAGS
- Le compteur ordinal EIP
- Le sélecteur du TSS de la tâche qui s'exécutait précédemment
Utilisation
Sous Linux
Sous Linux, à chaque commutation de contexte, le noyau (grâce à la macro "SWITCH_TO") met à jour le TSS par les informations (registres généraux, EIP, drapeaux EFLAGS, etc) du nouveau processus, car il n'existe qu'un TSS par cœur sous Linux.
Le TSS est utilisé entre autres par le noyau pour revenir d'un appel système ou encore pour la gestion de l'exception "erreur double" (le processeur, ne pouvant plus faire confiance à ses registres, utilise le TSS).