Como os sinais são tratados no kernel

2

Como os sinais são manipulados no kernel. O que acontece internamente se eu enviar um sinal de kill para um thread / processo do kernel. Uma falha no processo do kernel significa sempre o kernel panic, se não irá gerar o coredump.

    
por Chu 01.04.2017 / 17:34

1 resposta

3

Quando um encadeamento está executando código no modo kernel, os sinais são enfileirados, ou seja, o kernel lembra que um sinal foi enviado mas não age nele. Quando um segmento do kernel está esperando por um evento, a espera pode ser interrompida pelo sinal - cabe ao autor do código do kernel. Por exemplo, a API do kernel do Linux tem pares de funções como wait_event e wait_event_interruptible ; somente a função “interruptible” retornará imediatamente se o thread receber um sinal.

O motivo pelo qual o código do kernel não é interrompido por sinais é que ele pode colocar a memória do kernel ou dispositivos de hardware em um estado inconsistente. Portanto, o código sempre tem a chance de limpar as coisas.

Os encadeamentos do kernel do Linux (ou seja, encadeamentos do kernel, listados sem nenhum executável correspondente nas listas de processos) não podem receber sinais. Mais precisamente, qualquer sinal enviado a um segmento do kernel é ignorado.

Uma falha no código do kernel pode ou não causar pânico, dependendo de qual parte do código causou a falha. O Linux, por exemplo, tenta se recuperar de falhas no código do driver, mas se isso é possível depende do que deu errado. Crashes no código do kernel podem ou não gerar um despejo dependendo do kernel e da configuração do sistema; por exemplo, o Linux tem um mecanismo despejo de memória do kernel .

    
por 03.04.2017 / 03:19