Commutateurs de contexte

Le planificateur gère une file d’attente de threads exécutables pour chaque niveau de priorité. Ces threads sont appelés threads prêts. Lorsqu’un processeur devient disponible, le système effectue un commutateur de contexte. Les étapes d’un commutateur de contexte sont les suivantes :

  1. Enregistrez le contexte du thread qui vient d’être exécuté.
  2. Placez le thread qui vient de s’exécuter à la fin de la file d’attente pour sa priorité.
  3. Recherchez la file d’attente de priorité la plus élevée qui contient des threads prêts.
  4. Supprimez le thread en tête de la file d’attente, chargez son contexte et exécutez-le.

Les classes de threads suivantes ne sont pas des threads prêts.

  • Threads créés avec l’indicateur CREATE_SUSPENDED
  • Threads arrêtés pendant l’exécution avec la fonction SuspendThread ou SwitchToThread
  • Threads en attente d’un objet de synchronisation ou d’une entrée.

Jusqu’à ce que les threads suspendus ou bloqués soient prêts à s’exécuter, le planificateur ne leur alloue pas de temps processeur, quelle que soit leur priorité.

Les raisons les plus courantes d’un changement de contexte sont les suivantes :

  • La tranche de temps s’est écoulée.
  • Un thread avec une priorité plus élevée est prêt à être exécuté.
  • Un thread en cours d’exécution doit attendre.

Lorsqu’un thread en cours d’exécution doit attendre, il abandonne le reste de sa tranche de temps.