O que acontece com solicitações para um serviço que é parado com SIGSTOP


8

Se você enviar um SIGSTOP para um servidor da Web, o kernel simplesmente instrui a pilha de rede a bloquear / adormecer todas as conexões com os soquetes desse servidor até que continue? Parece que os valores de tempo limite do servidor não importam; vai esperar indefinidamente, mas como?

As solicitações ficam no buffer de soquete indefinidamente? E se o servidor da Web receber toneladas de solicitações? O que acontece quando o buffer do soquete é preenchido?

Respostas:


5

Do ponto de vista de qualquer parte do sistema que não esteja preocupada com o estado e as estatísticas do processo, um processo interrompido (ou seja, não será agendado até receber um SIGCONT) é indistinguível de um processo que está sendo executado, mas não está respondendo a uma consulta específica. Por exemplo, a pilha de rede opera da mesma maneira, se o processo está parado ou está funcionando (usando o tempo da CPU), mas não faz nenhuma chamada do sistema ou está bloqueado em alguma chamada do sistema que não é desbloqueada pela rede de origem. evento (por exemplo, aguardando para ler de um canal), etc.

Enquanto o processo está parado, não existe tempo limite no processo. Geralmente, também não há tempos limite na pilha de rede: o pacote foi recebido pela máquina, mesmo que não tenha chegado à máquina. No que diz respeito, por exemplo, à transmissão TCP, o pacote foi recebido e cabe ao aplicativo responder.

Se o buffer do soquete ficar cheio, a pilha de rede começará a soltar pacotes.

Não há razão para que o comportamento da pilha de rede dependa do estado do processo. O processo pode sair do estado parado a qualquer momento. Pode haver vários processos atendendo em um soquete, portanto, qualquer decisão com base no estado do processo precisaria levar todos eles em consideração.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.