
Estou lendo alguma documentação do Linux sobre 'sinais' e ainda tenho essas perguntas fazendo barulho em minha mente:
1) Um manipulador de 'sinal'execuçãoé feito quando o processo 'alvo' recebe seutoken de execuçãodeAgendador?
2) Ou manipulador de 'sinal'execuçãotem lugar emqualquer que sejao 'contexto' do processo aconteceestar executandoquando o 'sinal' foi enviado? (O mesmo estilo de um ISR de hardware).
3) E quanto à execução do processoprioridades? Eles são eliminados ao lidar com “sinais”?
Responder1
1) O manipulador de sinal será executado na próxima vez que oprocesso alvoretorna do modo kernel para o modo usuário.
Isso ocorre quando o processo está programado para ser executado novamente após uma interrupção de hardware (e ainda não estava sendo executado no modo kernel) ou quando o processo retorna de uma chamada do sistema (em algumas arquiteturas, são a mesma coisa).
Na operação normal, ao sair do modo kernel, seu processo simplesmente retornará para a próxima instrução após o ponto onde originalmente saiu do modo de usuário.
Porém se um sinal estiver pendente para o seu processo, o kernel iráreescreverseu contexto de processos de tal forma que o retorno ao modo de usuário irá para a primeira instrução do seu manipulador de sinal e sua pilha terá sido modificada para parecer que você fez uma chamada de sub-rotina "especial" para o manipulador de sinal no ponto onde você originalmente deixou o modo de usuário (o retorno desta chamada de sub-rotina "especial" envolve fazer uma chamada de sistema para restaurar o estado original).
Para detalhes leiaesse,esseeesse.
Entãoo processo 'alvo' pode receber seutoken de execuçãodeAgendadorqualquer número de vezes antes que o manipulador de sinal seja finalmente executado (se ele permanecer no modo kernel por algum motivo).
2) Não - o manipulador de sinal só será executado no contexto do modo de usuário do seu processo.
3) Não há realmente nenhuma execuçãoprioridadesem um sistema de tempo compartilhado como o Linux, a menos que você conte olegalvalor de um processo, então você não podevarreralgo que não está lá.
As coisas são complicadas por fios e os chamadostempo realpolíticas de agendamento, portanto os comentários acima são válidos apenas para processos de thread único executados com políticas de agendamento que não sejam em tempo real (o único tipo de processo que existianos bons velhos tempos:-).