[9]. Qual é a diferença entre mode switch e context switch?
Passo 1
O enunciado pede uma explicação da diferença entre dois termos: “mode switch” e “context switch”. Não foram fornecidas outras informações; a tarefa é definir cada termo, comparar os dois e dar exemplos práticos para entender quando cada um ocorre.
Passo 2
Definição e ideia básica de “mode switch”. Um “mode switch” é a mudança do processador entre níveis de privilégio — tipicamente entre o modo usuário (menos privilegiado) e o modo kernel/privilegiado. Por que existe isso? Para proteger recursos do sistema: Código de usuário não pode executar instruções sensíveis nem acessar diretamente memória e dispositivos; quando precisa de serviços do sistema (por exemplo, fazer uma chamada de sistema), o processador passa para modo kernel para que o sistema operacional execute a operação com privilégios. Pontos importantes sobre o mode switch:
- É normalmente disparado por: uma chamada de sistema (syscall), uma exceção (por exemplo, violação de página) ou uma interrupção (por exemplo, timer, I/O).
- O processador troca o nível de privilégio e desvia a execução para uma rotina do kernel.
- Em muitos casos o processo que estava rodando continua sendo o mesmo processo lógico — só mudou o nível de privilégio.
Passo 3
O que acontece tecnicamente num mode switch (passos típicos, explicado devagar).
- O hardware detecta o evento (syscall/interrupt/exception) e automaticamente faz algumas ações mínimas: salva o contador de programa (PC / RIP) e flags, e troca a pilha para a pilha do kernel (dependendo da arquitetura).
- O hardware ajusta bits de privilégio para permitir execução de código do kernel.
- Entrando no kernel, o sistema operacional pode salvar estados adicionais (por ex., registradores que não foram salvos pelo hardware) se precisar.
- Quando o kernel termina a operação (por ex., termina a syscall), ele faz a transição de volta para o modo usuário e retorna ao ponto do programa que chamou.
Resumo: mode switch é sobre trocar privilégio e entrar/voltar do kernel, geralmente sem mudar qual processo é dono da CPU.
Passo 4
Definição e ideia básica de “context switch”. Um “context switch” é a troca do que a CPU está executando: deixar de executar um processo ou thread A para passar a executar outro processo ou thread B. Ou seja, troca do “contexto” de execução. O contexto inclui o estado necessário para retomar a execução corretamente: registradores gerais, contador de programa, ponteiros de pilha, estado da FPU/ SIMD, e, em caso de mudança de processo, também a tabela de páginas (mapa de memória). Pontos importantes:
- É disparado pelo escalonador do sistema (por exemplo, preempção por timer, bloqueio/adiamento de I/O, chamada explícita para trocar de tarefa).
- Envolve salvar o contexto do processo atual em sua estrutura (PCB) e carregar o contexto do próximo.
- Se troca de processo também muda espaço de endereçamento virtual, o MMU/CR3 (ou equivalente) é trocado — operação cara (pode invalidar TLBs).
Passo 5
O que acontece tecnicamente num context switch (passos típicos, explicado devagar).
- O hardware/interrupt pode causar que o kernel assuma controle (aí ocorre um mode switch primeiro). Dentro do kernel, o escalonador decide trocar de tarefa.
- O kernel salva registradores essenciais do processo atual (RIP, RSP, registros gerais, flags, estado FPU) no seu PCB.
- O kernel atualiza estruturas internas (estado do processo: pronto, bloqueado, etc.).
- O kernel carrega os registradores do novo processo a partir do seu PCB.
- Se o novo processo tem outro espaço de endereço, o kernel atualiza a tabela de páginas (troca CR3 ou equivalente), o que pode provocar limpeza parcial do TLB.
- O kernel retorna para modo usuário e continua a execução do novo processo.
Resumo: context switch é mais pesado que mode switch porque salva/restaura muito mais estado e possivelmente muda o espaço de endereçamento.
Passo 6
Comparação direta (pontos práticos e de desempenho)
- Escopo:
- Mode switch: troca de privilégio dentro da mesma execução (usuário ↔ kernel).
- Context switch: troca de qual processo/thread está sendo executado.
- Gatilho:
- Mode switch: syscall, interrupção, exceção.
- Context switch: decisão do escalonador (preempção por timer, bloqueio, yield, término).
- Estado salvo/restaurado:
- Mode switch: apenas o mínimo necessário para entrar no kernel (alguns registradores salvos automaticamente; kernel pode salvar outros). Normalmente permanece o mesmo espaço de endereço.
- Context switch: salva/restaura registradores completos, ponteiros de stack, possivelmente tabela de páginas, FPU, etc.
- Custo:
- Mode switch: relativamente barato.
- Context switch: mais caro (muito mais trabalho, acesso a memória, troca de page table/TLB etc.).
- Frequência e impacto:
- Mode switches são comuns (cada syscall é um mode switch) e projetados para serem rápidos.
- Context switches são mais caros em desempenho e por isso sistemas tentam minimizá-los quando possível.
Passo 7
Exemplos práticos (para fixar)
- Exemplo 1 — syscall que não troca de processo: um programa chama
write(…) para gravar num arquivo. O processador faz um mode switch para o kernel que executa o serviço de escrita e retorna; se o kernel não decidir trocar de tarefa, não haverá context switch — o mesmo processo continua depois do retorno. - Exemplo 2 — preempção por timer: o timer dispara uma interrupção → mode switch para o kernel para tratar a interrupção; o escalonador decide que o processo atual deve pausar e outro deve rodar → o kernel realiza um context switch (salva contexto A, carrega contexto B) e então retorna ao modo usuário para executar o processo B.
- Observação: uma interrupção pode causar apenas mode switch (servir I/O e voltar) ou pode levar a um context switch se o escalonador assim decidir.
Passo 8
Casos especiais e nuances úteis
- Troca entre threads do mesmo processo (thread-level context switch) costuma ser mais barata do que entre processos porque as threads compartilham o mesmo espaço de endereçamento (não precisa trocar page tables).
- Em ambientes com “user-level threads” (bibliotecas de threads no espaço do usuário), muitas trocas de thread podem ser feitas sem entrar no kernel — muito mais baratas, porque evitam mode switch e context switch no kernel.
- Medição prática: sistemas expõem contadores de “context switches” (por exemplo, em Linux: campos “voluntary_ctxt_switches” e “nonvoluntary_ctxt_switches” em /proc/<pid>/status); já syscalls aparecem em ferramentas como strace/perf.
Passo 9
Como responder isso numa prova (receita rápida)
- Diga primeiro, em uma frase curta, o que é cada um.
- Liste dois ou três pontos que diferenciam (gatilho, estado trocado, custo).
- Dê um exemplo curto (por ex., “syscall = mode switch; troca de processo pelo escalonador = context switch”).
- Termine enfatizando o impacto de desempenho: context switches são muito mais caros.
Resposta
Mode switch: mudança de nível de privilégio do processador (usuário ↔ kernel) para executar código do sistema; normalmente ocorre em syscalls, interrupções ou exceções e mantém o mesmo processo.
Context switch: troca de qual processo ou thread está sendo executado pela CPU; envolve salvar/restaurar o contexto completo (registradores, pilha, possivelmente tabela de páginas) e é bem mais caro do que um mode switch.
Context switch: troca de qual processo ou thread está sendo executado pela CPU; envolve salvar/restaurar o contexto completo (registradores, pilha, possivelmente tabela de páginas) e é bem mais caro do que um mode switch.