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 modifier

Informations statiques modifier

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 modifier

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 modifier

Sous Linux modifier

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 modifier

Articles connexes modifier