O que acontece quando há uma mudança de contexto enquanto o processo está no modo Kernel?

0

Esse é o meu entendimento:

  1. Quando no modo de usuário e ocorre uma chamada trap / system, os registradores são salvos na pilha do kernel, o switch é feito no modo kernel e o trap é manipulado e retornado ao modo de usuário.
  2. Quando no modo de usuário e a interrupção do temporizador se apaga, novamente os registradores são salvos, mudados para o modo kernel, e outro processo é agendado de acordo com o agendador, e ele retorna ao modo de usuário para executar o segundo processo. / li>

Mas e se o processo 1 já estiver no modo Kernel e a interrupção do temporizador for desativada? O que acontece então?

    
por Sreeniketh H 05.03.2018 / 07:20

1 resposta

1

De um modo geral (eu não sei como o kernel linux implementa isso exatamente) Se qualquer iterrupt for acionada, qualquer código que é executado é interrompido, todos os registradores são salvos e a CPU executa a rotina de serviço de interrupção que manipula as interrupções. Depois, os registros são restaurados e a execução do código continua.

A única coisa que você poderia fazer para evitar isso é desabilitar as interrupções, o que geralmente é feito em microcontroladores para lidar com operações atômicas. Normalmente, a primeira coisa que a rotina de serviço de interrupção faz é desabilitar as interrupções (portanto, ela não pode ser interrompida) e, depois de executar suas tarefas, a última coisa que faz é reativar as interrupções.

Novamente, não estou familiarizado com a implementação exata das rotinas de serviço de interrupção no kernel do linux, mas esperaria que funcionassem da mesma maneira.

Na medida em que o modo muda de usuário para o modo kernel na arquitetura x86, acho que está acontecendo independentemente disso. Sua salvar para assumir que o ISR é executado no modo kernel para que a CPU tenha que mudar para ele. Se já estiver no modo kernel, basta salvar os registradores e pular para o ISR. Depois disso, ele retoma o código que foi executado antes da interrupção no modo em que o código foi executado.

    
por 05.03.2018 / 12:26