Modo do kernel para desabilitar a interrupção do modo de usuário

0

Eu li que o RFE (retorno da exceção) é uma instrução privilegiada que ajuda na transição do kernel para o modo de usuário.

Como é uma instrução privilegiada, uma interrupção de software (trap) será gerada durante sua execução.

Eu quero saber se todas as outras interrupções ou interromper o sinalizador de habilitação estão desabilitadas durante sua execução, para que o kernel não seja interrompido entre elas. As interrupções são desativadas durante a interrupção do software?

    
por Zephyr 16.12.2017 / 21:28

2 respostas

2

Disclaimer: Eu só já lidei com o código no nível do sistema operacional em um Motorola 68000. Esta resposta foi escrita da perspectiva de um sistema semelhante de dois toques, mas os conceitos devem se traduzir razoavelmente bem em sistemas modernos de vários anéis. .

Em um sistema com dois níveis de privilégio, chame-os de modo de usuário e modo de sistema, o programa de aplicativo seria executado no modo de usuário, enquanto o kernel é executado no modo de sistema. Se um aplicativo de modo de usuário tentar executar uma instrução privilegiada, ocorrerá uma interceptação para que o kernel possa decidir o que fazer com a situação.

Por outro lado, o kernel já tem os privilégios para executar as instruções desejadas, portanto, nenhum trap é executado.

No MC680x0 especificamente, qualquer manipulador de armadilhas é executado no modo privilegiado por padrão. Assim, qualquer manipulador de armadilhas pode usar o "retorno da exceção" sem repercussões e sem se preocupar em gerar outra armadilha. E o código no modo de usuário não deve usar tal instrução, pois não há exceção para retornar.

Em suma, a questão surge de uma falsa premissa; nenhuma armadilha é gerada ao usar "retorno da exceção" para alternar para o modo de usuário.

    
por 16.12.2017 / 22:51
1

Como as transições entre os modos de processador funcionam depende da arquitetura do processador. No entanto, você pode realmente esperar que haja uma instrução para alternar do modo kernel para o modo usuário; chame-lhe RFE se quiser, mas sua essência é mais modo jump-and-change do que o modo return-and-change. Também é enganoso pensar nisso como uma “interrupção de software”, já que ele não executa um controle de interrupção.

Realmente não faz sentido perguntar se as interrupções estão desativadas porque esta é uma única instrução. Uma interrupção nesse ponto não faria com que o kernel fosse “interrompido”, já que o kernel já havia decidido parar a execução. O kernel sempre permitiria interrupções antes de retornar ao modo de usuário, já que o modo de usuário nunca deveria ser executado com interrupções desabilitadas - isso seria uma negação de serviço. Se o processador precisar gastar vários ciclos para executar a instrução de RFE, pode ser que o processador não verifique as interrupções durante alguns desses ciclos, mas esse é um detalhe da arquitetura do processador que o software não pode observar (exceto através de medições de tempo finas).

    
por 16.12.2017 / 23:37