Udostępnij za pośrednictwem


Przełączniki kontekstowe

Harmonogram obsługuje oddzielne kolejki wątków wykonywalnych dla każdego poziomu priorytetu. Te wątki są nazywane gotowymi wątkami. Gdy procesor stanie się dostępny, system wykonuje przełącznik kontekstu. Kroki w przełączniku kontekstowym to:

  1. Zapisz kontekst wątku, który został wywłaszczone lub dobrowolnie zwrócony przez procesor.
  2. Jeśli wątek pozostaje w stanie gotowości, umieść go na końcu kolejki na poziomie priorytetu.
  3. Znajdź kolejkę o najwyższym priorytcie zawierającą gotowe wątki.
  4. Usuń wątek w nagłówku kolejki, przywróć jego kontekst i wznów wykonywanie.

Następujące klasy wątków nie są gotowe wątki.

  • Wątki utworzone za pomocą flagi CREATE_SUSPENDED
  • Wątki zatrzymane podczas wykonywania za pomocą funkcji SuspendThread lub SwitchToThread
  • Wątki oczekujące na obiekt synchronizacji lub dane wejściowe.

Dopóki wątki, które są zawieszone lub zablokowane, staną się gotowe do uruchomienia, harmonogram nie przydziela im żadnego czasu procesora, niezależnie od ich priorytetu.

Najczęstsze przyczyny przełączania kontekstu to:

  • Upłynął wycinek czasu.
  • Wątek o wyższym priorytcie jest gotowy do uruchomienia.
  • Uruchomiony wątek musi czekać.

Gdy uruchomiony wątek musi czekać, rezygnuje z reszty fragmentu czasu.