Em computação, uma troca de contexto é o processo de armazenar o estado de um processo ou thread, de forma que ele possa ser restaurado e a execução retomada posteriormente, e então restaurar um estado diferente, previamente salvo. Isso permite que múltiplos processos compartilhem uma única unidade central de processamento (CPU) e é uma característica essencial de um sistema operacional multiprogramável ou multitarefa. Em uma CPU tradicional, cada processo um programa em execução usa os vários registradores da CPU para armazenar dados e manter o estado atual do processo em execução. No entanto, em um sistema operacional multitarefa, o sistema operacional alterna entre processos ou threads para permitir a execução simultânea de múltiplos processos. Para cada troca, o sistema operacional deve salvar o estado do processo em execução e, em seguida, carregar o estado do próximo processo que será executado na CPU. Essa sequência de operações que armazena o estado do processo em execução e carrega o próximo processo em execução é chamada de troca de contexto.
O significado preciso da expressão "troca de contexto" varia. Em um contexto multitarefa, refere-se ao processo de armazenar o estado do sistema para uma tarefa, permitindo que essa tarefa seja pausada e outra retomada. Uma troca de contexto também pode ocorrer como resultado de uma interrupção, como quando uma tarefa precisa acessar o armazenamento em disco, liberando tempo de CPU para outras tarefas. Alguns sistemas operacionais também exigem uma troca de contexto para alternar entre tarefas em modo usuário e em modo kernel. O processo de troca de contexto pode ter um impacto negativo no desempenho do sistema.
Custo As trocas de contexto geralmente exigem alto poder computacional, e grande parte do projeto de sistemas operacionais visa otimizar seu uso. A transição entre processos requer um certo tempo para a administração. Salvar e carregar registradores e mapas de memória, atualizar várias tabelas e listas, etc. O que está realmente envolvido em uma troca de contexto depende das arquiteturas, dos sistemas operacionais e da quantidade de recursos compartilhados (threads que pertencem ao mesmo processo compartilham muitos recursos em comparação com processos não relacionados e não cooperativos).
Por exemplo, no kernel do Linux, a troca de contexto envolve o carregamento do bloco de controle de processo (PCB) correspondente, armazenado na tabela PCB na pilha do kernel, para recuperar informações sobre o estado do novo processo. As informações de estado da CPU, incluindo os registradores, o ponteiro de pilha e o contador de programa, bem como informações de gerenciamento de memória, como tabelas de segmentação e tabelas de páginas (a menos que o processo antigo compartilhe a memória com o novo), são carregadas do PCB para o novo processo. Para evitar traduções de endereço incorretas no caso de os processos anterior e atual utilizarem memórias diferentes, o buffer de tradução antecipada (TLB) deve ser limpo. Isso afeta negativamente o desempenho, pois cada referência de memória ao TLB resultará em uma falha, uma vez que ele estará vazio após a maioria das trocas de contexto.IA-64 Linux Kernel: Design and Implementation, 4.7 Switching Address SpacesOperating Systems, 5.6 The Context Switch, p. 118
Ligações externas Troca de contexto em OSDev.org Definição de troca de contexto pelo Linux Information Project (LINFO) Trocas de contexto da Microsoft Developer Network (MSDN) Arquitetura e Design Geral - Tratamento de Interrupções em FreeBSD.org Troca de contexto do sistema operacional - Computerphile
Categoria:Processo (computação) Categoria:Tecnologia dos sistemas operacionais Categoria:Computação concorrente