Estou estudando o kernel do Linux corretamente, com o Entendendo o Linux Kernel da O'Reilly, e ultimamente abordei o capítulo sobre manipulação de sinais e interrupções, aderindo a uma versão básica do linux 2.4 e mergulhando no código, tanto quanto posso entender.
No entanto, não consegui explicar para mim mesmo nem encontrar uma resposta em outro lugar, qual é o fluxo de instruções que ocorre quando, digamos, a ctrl + c
é pressionado por um processo que é executado no shell.
o que eu descobri até agora:
- uma vez pressionado o teclado APIC, aumenta a linha de IRQ para a CPU
- se as interrupções não são mascaráveis, a CPU carrega o int correspondente. manipulador do IDT
- do que, algum int crítico. o código do manipulador é chamado, manipulando ainda mais o
char
pressionado do registro do dispositivo de teclado no APIC para outros registros
daqui é vago para mim.
No entanto, eu entendo que o tratamento de interrupções não está no contexto do processo enquanto a exceção está, por isso foi fácil descobrir como as exceções são atualizadas current->thread.error_code
e, current->thread.trap_no
finalmente, invocadas force_sig
. No entanto, uma vez que um manipulador de interrupção é executado, como no exemplo acima, como ele finalmente entra em contexto com o processo desejável e a geração do sinal?