manipulação de sinal no kernel unix

1

Eu estava lendo The Design Of UNIX OS e tive uma dúvida.

Uma função de manipulação de sinal pode ser especificada na chamada signal (). O manipulador deve executar quando o processo recebe esse sinal específico. Um algoritmo conhecido como psig é executado para manipular sinais se eles forem recebidos por um processo.

No caso de um manipulador definido pelo usuário ser especificado, o algoritmo psig modifica o contexto no nível do usuário (ou seja, envia um quadro no topo da pilha com o ponteiro da pilha apontando para o topo da pilha) Esse quadro indica a execução de a função de manuseio.

Se o acima mencionado for verdadeiro, a função de manipulação de sinal deve sempre ser executada após um retorno da chamada signal () (já que o quadro de pilha no topo da pilha será visto pelo kernel primeiro). No entanto, isso não é verdade, pois eu posso especificar um manipulador de sinal para um sinal específico no início do meu código (digamos, em main ()) e enviar um sinal em um momento posterior no código. A função de manipulação de sinal é executada somente quando o sinal é enviado (digamos, pela chamada kill ()) e não imediatamente após a chamada do sinal ().

Alguém pode, por favor, esclarecer?

    
por Karan 01.10.2012 / 18:24

1 resposta

5

Eu assumo pelo "The Design Of UNIX OS" você realmente quer dizer "O Design do Sistema Operacional UNIX" por Maurice J. Bach.

Meu melhor palpite sobre o que você está encontrando - e acho que devo, já que você não deu nenhuma referência a páginas ou seções - é a seção 7.2.1, abrangendo as páginas 203 a 204. Ele inicia a seção com dois parágrafos descrevendo como para configurar um manipulador de sinal, o terceiro começa a descrever o que o kernel faz quando recebe o sinal que seu programa pediu para capturar.

O simples fato de um parágrafo seguir o outro não lhe diz que as coisas nele descritas acontecem imediatamente uma após a outra no tempo. A prosa de um livro não é um algoritmo de computador. Bach está simplesmente descrevendo duas coisas separadas, sem explicitamente dizer-lhe que outras coisas podem acontecer no meio.

Portanto, a resposta é não, psig() não é executado imediatamente após a conclusão de uma chamada signal(2) . Bach não disse que sim. Você acabou de assumir isso.

    
por 01.10.2012 / 20:44

Tags