Deadlock Prof. Alexandre Monteiro Recife ‹#› Contatos Prof. Guilherme Alexandre Monteiro Reinaldo Apelido: Alexandre Cordel E-mail/gtalk: [email protected] [email protected] Site: http://www.alexandrecordel.com.br/fbv Celular: (81) 9801-1878 Exemplos de recursos de computador • impressoras • unidades de fita • tabelas Processos precisam de acesso aos recursos numa ordem racional Suponha que um processo detenha o recurso A e solicite o recurso B • ao mesmo tempo um outro processo detém B e solicita A • ambos são bloqueados e assim permanecem Seqüência de eventos necessários ao uso de um recurso 1. solicitar o recurso 2. usar o recurso 3. liberar o recurso Deve esperar se solicitação é negada – processo solicitante pode ser bloqueado – pode falhar resultando em um código de erro Deadlocks ocorrem quando … • garante-se aos processos acesso exclusivo aos dispositivos • esses dispositivos são normalmente chamados de recursos Recursos preemptíveis • podem ser retirados de um processo sem quaisquer efeitos prejudiciais Recursos não preemptíveis • vão induzir o processo a falhar se forem retirados Conceito Deadlock (interbloqueio, encravamento, impasse)pode se definir como situação em que ocorre um impasse e dois ou mais processos ficam impedidos de continuar suas execuções, ou seja, ficam bloqueados. O deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um ou mais processos desse conjunto está aguardando a liberação de um recurso por um outro processo que, por sua vez, aguarda a liberação de outro recurso alocado ou dependente do primeiro processo. Conceito Representação de Deadlock em grafos de alocação de recursos, com dois processos A e B, e dois recursos R1 e R2. O deadlock é representado na forma de grafos dirigidos, onde o processo é representado por um círculo e o recurso, por um quadrado. Quando um processo solicita um recurso, uma seta é dirigida do círculo ao quadrado. Quando um recurso é alocado a um processo, uma seta é dirigida do quadrado ao círculo. Conceito Na figura, podemos ver dois processos diferentes (A e B), cada um com um recurso diferente alocado (R1 e R2). Neste exemplo, é facilmente visível a condição de espera circular em que os processos se encontram, onde cada um solicita o recurso que está alocado ao outro processo. Conceito O deadlock pode ocorrer mesmo que haja somente um processo no SO, considerando que este processo utilize múltiplos threads e que tais threads requisitem os recursos alocados a outros threads no mesmo processo; O deadlock é independente da quantidade de recursos disponíveis no sistema; Condições Necessárias para a Ocorrência de Deadlock O deadlock ocorre naturalmente em alguns sistemas. No entanto, existem Condições de Coffman para que uma situação de deadlock se manifeste: 1. 2. 3. 4. Condição de exclusão mútua: cada recurso pode estar, alocado a um processo ou estar disponível; Condição de posse-e-espera: cada processo pode solicitar um recurso, ter esse recurso alocado para si e ficar bloqueado esperando por um outro recurso; Condição de não-preempção: recursos já alocados a processos não podem ser tomados a força. Eles precisam ser liberados explicitamente pelo processo que detém a sua posse; Condição de espera circular: deve existir uma cadeia circular de dois ou mais processos, cada um dos quais esperando por um recurso que está com o próximo membro da cadeia. Escalonamento de Processos Prevenir a ocorrência de deadlocks 1) Exclusão mútua: o processo solicita o recurso para uso de forma mutuamente exclusiva. Esta condição é eliminada se o processo solicita todos os recursos que necessita em uma única vez. Escalonamento de Processos Prevenir a ocorrência de deadlocks 2) Espera por recursos (posse-e-espera):. Processos possuem recursos enquanto esperam por recursos adicionais. Um processo pode requisitar e liberar recursos, mas quando requisitar um recurso não disponível deve liberar os que estavam utilizando e, então solicitar todos coletivamente Escalonamento de Processos Prevenir a ocorrência de deadlocks 3) Não preempção: Quando os recursos não puderem ser confiscados temporariamente para serem alocados a outros processos. Elimina-se esta condição se os recursos forem ordenados e os processos devem requisitar os recursos em uma seqüência que respeite esta ordenação. Escalonamento de Processos Prevenir a ocorrência de deadlocks 4) Espera circular: Quando for possível a formação de um ciclo no qual cada processo está bloqueado à espera de recursos que estão alocados para outros processos de mesmo ciclo. Esta condição é eliminada se for construído um grafo e se for verificado, para cada requisição, se o atendimento não levará o sistema a um estado não seguro. As requisições que levarem o sistema a um estado não seguro ou de deadlock não deverão ser atendidas. Condições Necessárias para a Ocorrência de Deadlock As três primeiras caracterizam um modelo de sistema, e a última é o deadlock propriamente dito: Processos que estejam de posse de recursos obtidos anteriormente podem solicitar novos recursos. Caso estes recursos já estejam alocados a outros processos, o processo solicitante deve aguardar pela liberação do mesmo; Uma solução bastante utilizada na maioria dos S.Os. é eliminar os processos envolvidos no deadlock e desalocar os recursos já garantidos por eles, quebrando assim a espera circular. Estratégias para tratar Deadlocks 1. ignorar por completo o problema 2. detecção e recuperação 3. evitação dinâmica • alocação cuidadosa de recursos 4. prevenção • negação de uma das quatro condições necessárias Tratamento de Deadlock Existem quatro estratégias para tratamento de deadlocks: Algoritmo do Avestruz (Ignorar a situação) A estratégia mais simples para tratamento (ou não) do deadlock, conhecida como Algoritmo do Avestruz, é simplesmente ignorá-lo. É defendida pelo fato de que a frequência de ocorrência deste tipo de evento é baixa demais para que seja necessário sobrecarregar a CPU com códigos extras de tratamento, e que, ocasionalmente, é tolerável reiniciar o sistema como uma ação corretiva. Tratamento de Deadlock Existem quatro estratégias para tratamento de deadlocks: Detectar o deadlock e recuperar o sistema Nessa estratégia, o sistema permite que ocorra o deadlock e só então executa o procedimento de recuperação, que resume-se na detecção da ocorrência e na recuperação posterior do sistema. Na execução desse procedimento ocorre a sobrecarga, pois existem dois grandes problemas: primeiramente, como/quando detectar o deadlock e depois, como corrigi-lo. Caso um recurso seja solicitado e a nova situação gere um impasse, o Sistema Operacional tentará eliminar um processo do ciclo. Se o ciclo ainda existir, outro processo será eliminado até que o ciclo seja quebrado. Tratamento de Deadlock Existem quatro estratégias para tratamento de deadlocks: Evitar o deadlock (Deadlock avoidance) O sistema pode evitar que um impasse ocorra mediante a alocação cuidadosa dos recursos disponíveis. Para que isso ocorra, o sistema precisará de informações adicionais a priori de quais recursos um processo irá requisitar e usar durante sua execução. Analisaremos o algoritmo do banqueiro para um recurso e para múltiplos recursos, que são utilizados para avaliar se uma alocação de recursos é considerada segura ou não. Algoritmo do Banqueiro O algoritmo do banqueiro foi proposto por Dijkstra (1965). Este algoritmo é baseado na mesma idéia de um banqueiro de uma pequena cidade para garantir ou não crédito a seus clientes. A idéia é que um banco jamais possa alocar todo seu dinheiro disponível em caixa de tal modo que não possa mais atender às necessidades de todos os seus clientes. Tratamento de Deadlock Existem quatro estratégias para tratamento de deadlocks: Prevenção Negação de uma das quatro condições necessárias. Exercício Represente em forma de grafos a situação da figura ao lado. Solução Referências Sistemas Operacionais Modernos – 3ª Edição. A. Tanenbaum, 2008. Modern Operating Systems 3 e. Prentice-Hall, 2008.