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).

Voir aussi Articles connexes Descripteur de segment Segment Table globale de descripteurs

Catégorie:Programmation concurrente