Inanição (computação)
De Wikipedia, a enciclopédia encyclopedia
Em programação concorrente, ocorre inanição quando um processo nunca é executado ("morre de fome"), pois processos de prioridade maior sempre o impedem de ser executado. Em um ambiente computacional multitarefa, a execução de diversos processos simultâneos deve seguir uma regra de escalonamento destes para uso do processador. Isso se deve ao fato de que, durante a mudança de contexto pelo processador, é feita a escolha do próximo processo a ser executado a partir da prioridade deste. Quando o escalonamento não é feito adequadamente, pode haver inanição. Uma solução para esta situação é a delegação de um tempo máximo de espera.
Esta página ou se(c)ção precisa ser formatada para o padrão wiki. (Dezembro de 2018) |
A ocorrência da inanição se dá quando os programas rodam indefinidamente (razão pela qual também se dá o nome de preterição indefinida a esta situação) e não fazem nenhum progresso em seu processamento, ao contrário do deadlock, que ocorre quando os processos permanecem bloqueados, dependendo da liberação dos recursos por eles alocados.
Em um sistema dinâmico, as requisições de recursos ocorrem durante todo o tempo. Algumas políticas são necessárias para subsidiar a decisão de quem vai ficar com qual recurso e em que momento. Essas políticas, apesar de parecerem extremamente razoáveis, podem fazer com que alguns processos nunca sejam servidos, apesar de não estarem em deadlock.
Um algoritmo possível para implementar a alocação da impressora é o que escolhe o processo com o menor arquivo a ser impresso (assumindo que esta informação está disponível). Este algoritmo maximiza o número de usuários satisfeitos com o sistema, e parece ser um algoritmo justo. Consideremos, no entanto, o que acontece num sistema muito carregado, quando determinado processo tem um arquivo imenso a ser impresso. Cada vez que a impressora estiver disponível, o sistema vai escolher, para usar a impressora, o processo com o menor arquivo a ser impresso. Se houver um fluxo constante de processos no sistema com arquivos pequenos, aquele ou aqueles com arquivos grandes jamais poderão usar a impressora. Eles apenas “morrerão de fome” (como o próprio sentido da palavra inanição estabelece), ou seja, serão preteridos indefinidamente em favor de outros, como se estivessem bloqueados.
A preterição por tempo indeterminado pode ser evitada usando-se uma política de alocação baseada na regra do primeiro-a-chegar é o primeiro-a-ser-servido. Com esta abordagem, o processo que espera há mais tempo é o primeiro a receber serviço por parte do recurso liberado. Fica claro que qualquer dos processos será o mais antigo com o passar do tempo, recebendo, assim, o direito ao uso do recurso pelo qual estiver esperando.
Outra solução é fazer com que o processo em inanição aumente sua prioridade de acordo com o seu tempo de espera, o que também pode resolver o problema.