Não é realmente mágica, é hardware. Informações sobre eventos periféricos chegam à CPU através do barramento frontal, que é a porta de entrada para outro hardware; programaticamente (no código do kernel) estes são tratados através do conceito da solicitação de interrupção (IRQ).
Veja estes em ordem:
link .
Agora considere que o kernel é o que determina o que acontece na CPU. Próximo:
Para obter um WRT mais específico, o código do kernel do Linux, ele usa manipuladores que são disparados no recebimento de uma solicitação de interrupção. As partes básicas disso são feitas com um código ASM específico da arquitetura, muitas das quais você encontrará em (por exemplo) src/arch/x86/kernel
. Eu não codifico em asm (os arquivos .S
), então é grega para mim, infelizmente, mas a idéia aqui (deve estar nesse material da wikipedia) é que ao receber um IRQ, o kernel antecipa qualquer usuário código de espaço está sendo executado para processar o IRQ (possivelmente passando algo para qualquer processo de espaço do usuário).