processo Linux - mensagens do kernel [fechado]

2

Eu tenho aprendido sobre diferentes mecanismos de IPC presentes no Linux, para comunicação entre processos de espaço do usuário.

Eu quero perguntar quais são as várias maneiras no Linux para o kernel se comunicar com o processo de espaço do usuário (tipo de oposto a chamada do sistema, onde o espaço do usuário inicia a solicitação)? Pode sinalizar ser um deles? Quais são os outros?

    
por Jake 22.06.2015 / 03:58

1 resposta

2

Um sinal é uma comunicação clássica entre o kernel e o processo em alguns casos. Claro, qualquer processo com UID apropriado pode usar kill() para enviar um sinal, mas sinais como SIGCHLD ou SIGWINCH quase sempre vêm do kernel.

Específico para o Linux, você pode examinar a chamada do sistema signalfd() . O manuseio usual do sinal é via "upcall", mas signalfd() fornece ao processo uma maneira diferente de receber sinais.

O valor de retorno das chamadas do sistema pode ser considerado uma comunicação de processo do kernel para o usuário. Isso varia muito, mas fork() é um exemplo. O processo pai recupera um ID de processo diferente de zero (ou -1 no erro) e o processo filho retorna zero.

As chamadas de sistema poll() e select() têm argumentos em que o kernel define valores nos argumentos para indicar quais descritores de arquivo têm quais eventos / mudanças de estado estão disponíveis para eles. Isso é mais como um argumento formal "inout", mas o kernel define valores.

A API inotify permite a comunicação do kernel para o processo por meio de um read() em um descritor de arquivo especial.

O sistema de E / S assíncrona POSIX parece ter várias maneiras de se comunicar com um processo do usuário, incluindo iniciar um encadeamento quando ocorre uma E / S, se eu ler a página man corretamente. Eu nunca fiz E / S assíncrona POSIX, e parece complicado.

    
por 22.06.2015 / 05:45