Partilhar via


Comutadores de contexto

O agendador mantém filas separadas de threads executáveis para cada nível de prioridade. Esses threads são conhecidos como threads prontos. Quando um processador fica disponível, o sistema executa uma alternância de contexto. As etapas em uma mudança de contexto são:

  1. Salve o contexto do thread que foi antecipado ou gerado voluntariamente pelo processador.
  2. Se o thread permanecer em um estado pronto, coloque-o no final da fila para seu nível de prioridade.
  3. Encontre a fila de prioridade mais alta que contém threads prontos.
  4. Remova o thread no topo da fila, restaure seu contexto e retome a execução.

As seguintes classes de threads não são threads prontos.

  • Threads criados com o sinalizador CREATE_SUSPENDED
  • Threads interrompidos durante a execução com a função SuspendThread ou SwitchToThread
  • Threads aguardando um objeto ou entrada de sincronização.

Até que os threads suspensos ou bloqueados fiquem prontos para serem executados, o agendador não aloca nenhum tempo do processador para eles, independentemente de sua prioridade.

Os motivos mais comuns para uma mudança de contexto são:

  • A fatia de tempo já passou.
  • Um thread com uma prioridade mais alta ficou pronto para ser executado.
  • Um thread em execução precisa esperar.

Quando um thread em execução precisa esperar, ele abre mão do restante de sua fatia de tempo.