Sistemas Operacionais: Deadlocks
Deadlocks (impasse)
• Definição– “Um conjunto de processos bloqueados cada um
de posse de um recurso, esperando por um outro recurso que já está alocado por outro processo do mesmo conjunto”mesmo conjunto”
Código de trânsito brasileiro• Art. 29. O trânsito de veículos nas vias terrestres abertas à circulação obedecerá às seguintes
normas:– III - quando veículos, transitando por fluxos que se cruzem, se aproximarem de local não sinalizado, terá
preferência de passagem:
• a) no caso de apenas um fluxo ser proveniente de rodovia, aquele que estiver circulando por ela;
• b) no caso de rotatória, aquele que estiver circulando por ela;
• c) nos demais casos, o que vier pela direita do condutor;
• Existe a possibilidade de um impasse?
Caracterização de um impasse
• Um deadlock pode ocorrer, somente se as quatro condições a seguir ocorrem simultaneamente:– Exclusão mútua: acesso exclusivo a recursos
– Obtém e espera: um processo de posse de um recurso espera para obter um outro recursoespera para obter um outro recurso
– Sem preempção: um recurso somente pode ser liberado voluntariamente pelo processo
– Espera circular: um conjunto de processos {P0,P1,..,Pn}. O processo P0 espera por um recurso alocado por P1, P2 espera por P2, e assim sucessivamente
Modelo do sistema
• Recursos do sistemas S1, S2, ... ,Sn
• Cada recurso Ri tem Wi instâncias
• Para utilizar um recurso, um processo realiza as seguintes seqüênciasas seguintes seqüências– Requisita
– Utiliza
– Libera
Grafo de alocação de recursos
• Conjunto de vértices V e arestas E– V é particionado em dois tipos:
– P = {P1, P2, …, Pn}, conjunto de processos no sistema.R = {R , R , …, R }, conjunto de recursos do R = {R1, R2, …, Rm}, conjunto de recursos do sistema.
• Aresta de requisição – aresta P1 → Rj
• Aresta de atribuição – aresta Rj → Pi
Grafo de alocação de recursos
• Processo
• Recurso
• Processo Pi solicita recurso Rj
• Recurso Rj alocado para o processo Pi
Pi
Pi
Rj
Rj
Exemplo
Impasse: satisfaz as 4 propriedades
de um impasse?
Grafo com ciclo porém sem impasse
Porque não existe impasse na situação acima?
Impasse
• Se um grafo não contém ciclos⇒ sem impasse.
• Se um grafo contém ciclos⇒– Se existe somente uma instância do recurso, então – Se existe somente uma instância do recurso, então
impasse.
– Se existe várias instâncias, possibilidade de impasse.
Métodos para manipular impasses
1. Garantir que o sistema nunca entrará em um estado de impasse.
a) Prevenção de impasse (por construção)
b) Evitar o impasse (em tempo de execução)
2. Permitir que o sistema entre em um estado de impasse e recuperá-lo.
3. Ignorar o problema e torcer para que um deadlock não ocorra no sistema (afinal, qual seria a utilidade do botão reset?).
Prevenção do impasse
• Exclusão mútua– Alguns recursos necessitam de acesso exclusivo,
portanto é uma situação obrigatória
• Obtém e espera: evitar que um processo • Obtém e espera: evitar que um processo solicite um recurso, enquanto estiver de posse de outros recursos– Solicitar todos os recursos no início da execução– Baixa utilização dos recursos (possibilidade de
abandono de processos “starvation”)
Prevenção de impasses(2)
• Sem preempção– Possibilitar a preempção. Um processo de posse de alguns
recursos, solicita outro recurso que não pode ser alocado. O processo libera os recursos obtidos e espera
– O processo entra na fila de solicitação de todos os recursos – O processo entra na fila de solicitação de todos os recursos que ele tinha acesso, mais o recurso solicitado
– O processo volta a executar somente quando todos os recursos estão disponíveis
• Espera circular– Impor uma ordem dos recursos, e possibilitar somente a
alocação dos recursos em ordem crescente
Evitar o impasse
• Necessita de algumas informações adicionais– Cada processo deve declarar o número máximo de
recursos de cada tipo que utilizará durante a execução
– Algoritmo para evitar o impasse analisa – Algoritmo para evitar o impasse analisa dinamicamente o estado do grafo de alocação de recursos para verificar a situação de espera circular
– O estado do grafo de alocação do recurso considera o número de recursos alocados e o máximo disponível, e a utilização máxima de cada processo
Estado seguro
• Quando um processo solicita um recurso, deve-se analisar se a alocação imediata deixará o sistema em um estado seguro (sem possibilidade de impasse)
• Estado seguro: se existe uma sequencia de processos <P1, P2, …, Pn>, de todos os processos do sistema, onde para cada P , os recursos que P pode ainda
1 2 n
onde para cada Pi, os recursos que Pi pode ainda solicitar, são satisfeitos pelos recursos disponíveis + recursos alocados por Pj, onde j < i– Se os recursos que Pi necessita não estão disponíveis, Pi
poderá esperar até que os processso Pj sejam finalizados
– Os recursos que Pi necessita, estarão disponíveis após a finalização dos processos Pj
– Pi+1 pode continuar a executar após finalização de Pi, onde todos os recursos necessários estarão disponíveis
Estado seguro x Estado inseguro
• Se o sistema está em estado seguro: sem possibilidade de impasse
• Se o sistema está inseguro: existe a possibilidade de impassepossibilidade de impasse
• Evitar o impasse: não permitir que o sistema entre em estado inseguro.
Algoritmo do banqueiro
• Evitar o impasse em um sistema com múltiplas instâncias de recursos
• Cada processo deve durante sua inicialização, indicar todos os recursos que irá utilizar (o máximo)máximo)
• Quando um processo solicita um recurso, o mesmo pode esperar
• O processo tem que garantir que liberará todos os recursos em uma quantidade finita de tempo
Algoritmo do banqueiro
• N = processos, M= tipos de recursos– Available= vetor de tamanho M. Available[j]= K, indica
que existem K instâncias do recurso Rj disponíveis
– Max= matriz NxM. Max[i, j]=K, indica que um processo Pi pode solicitar no máximo K instâncias do recurso Rj.Pi pode solicitar no máximo K instâncias do recurso Rj.
– Allocation= matriz NxM. Allocation[i, j]=K, indica que um processo Pi, alocou K instâncias do recurso Rj
– Need= matriz NxM. Need[i, j]=K, indica que um processo Pi, necessita ainda K instâncias do recurso Rj para finalizar.
• Need= Max-Allocation
Algoritmo para avaliação do estado
1. Work e Finish são dois vetores de tamanho m e n, respectivamente. Inicializar
• Work= available
• Finish[i]= false, para i=0..N
2. Procure um i, onde:• Finish[i]= false• Finish[i]= false
• Needi<=Work
• Se não existir um processo i, vá para o passo 4
3. Passo 3• Work= Work+ Allocationi
• Finish[i]= true
• Volte para o passo 2
4. Passo 4• Se Finish[i]=true para todo i, o sistema está em estado seguro
Algoritmo para alocação recursos do processo Pi
• Requesti= vetor de requisições do processo Pi1. Se Requesti <= Needi, vá para o passo 2. Senão, sinalize um
erro, pois o processo solicitou mais recursos que ele declarou necessitar
2. Se Requesti <= Available, vá para o passo 3. Senão, o processo Pi deve esperar pois os recursos não estão processo Pi deve esperar pois os recursos não estão disponíveis
3. O processo Pi pretende alocar os recursos, logo é necessário atualizar as estruturas de dados
Available = Available – Request;
Allocationi = Allocationi + Requesti;Needi = Needi – Requesti;
• Se seguro => os recursos podem ser alocados
• Senão o processo deve esperar, e o estado anterior deve ser restaurado
Exemplo do algoritmo do banqueiro
• 5 processos P0 .. P4; • 3 tipos de recursos: A (10 instâncias), B (5
instâncias), and C (7 instâncias).• Visão do sistema no tempo T0:
Allocation Max AvailableAllocation Max Available
A B C A B C A B C
P0 0 1 0 7 5 3 3 3 2P1 2 0 0 3 2 2 P2 3 0 2 9 0 2P3 2 1 1 2 2 2P4 0 0 2 4 3 3
Exemplo
• O conteúdo da matriz Need = Max – Allocation.Need
A B C
P0 7 4 3 P 1 2 2 P1 1 2 2 P2 6 0 0 P3 0 1 1P4 4 3 1
• O sistema esta em estado seguro < P1, P3, P4, P2, P0> satifaz o critério de segurança.
P1 requisita (1,0,2)
• Verifique que Request ≤ Available (isto é, (1,0,2) ≤(3,3,2) ⇒ true.
Allocation Need Available
A B C A B C A B C
P0 0 1 0 7 4 3 2 3 0P0 0 1 0 7 4 3 2 3 0P1 3 0 2 0 2 0 P2 3 0 1 6 0 0 P3 2 1 1 0 1 1P4 0 0 2 4 3 1
• Executando o algoritmo, obtemos que a sequência < P1, P3, P4, P0, P2> satisfaz o critério de segurança.
Exercício
• Requisição (3,3,0) por P4 pode ser realizada?
• Requisição (0,2,0) por P0 pode ser realizada?
Detecção de impasses
Permitir que o sistema entre em um estado de impasse e recuperá-lo.
Detecção de impasses
• Permitir que o sistema entre em estado de impasse
• Detectar
• Recuperar um estado seguro• Recuperar um estado seguro
Única instância
• Gerar um grafo waiting-for
– Nós: processos
– Pi ->Pj , Pi esperando por um recurso alocado
por Pj
– Algoritmo de detecção de ciclos
Múltiplas instâncias
• M tipos de recursos no sistema
• Available: vetor de tamanho m. Indica os recursos disponíveis
• Allocation: matriz NxM. Número de recursos• Allocation: matriz NxM. Número de recursosque cada processo tem alocado
• Request: matriz NxM. Matriz representa as requisições que estão em andamento.
Algoritmo de detecção de impasse
1. Work e Finish são vetores de tamanho M e N respectivamente• Work= Available• Finish[i]= false, se Allocationi!= 0, senão Finish[i]= true
2. Procurar um i, onde• Finish[i]== false • Requesti<= Work• Se um nenhum elemento i existe com essas condições, vá para o • Se um nenhum elemento i existe com essas condições, vá para o
passo 43. Passo 3
• Work= Work + Allocation• Finish[i]= true• Vá para o passo 2
4. Passo4• Se existe Finish[i] ==false, então o sistema está em estado de
impasse. Os processos com Finish=false, estão em impasse.
Exemplo de detecção de deadlocks
• Processos P0 .. P4; 3 tipos de recursos A (7 instâncias), B (2 instâncias), e C (6 instâncias).
• Estado do sistema no tempo T0:Allocation Request Available
A B C A B C A B CA B C A B C A B C
P0 0 1 0 0 0 0 0 0 0P1 2 0 0 2 0 2P2 3 0 3 0 0 0 P3 2 1 1 1 0 0 P4 0 0 2 0 0 2
• Seqüência <P0, P2, P3, P1, P4> resultará Finish[i] = true para todo i.
Deadlock
• P2 requisita uma instância adicional do recurso C.Request
A B C
P0 0 0 0P 2 0 2P1 2 0 2P2 0 0 1P3 1 0 0 P4 0 0 2
• Estado do sistema?– Pode utilizar os recursos de P0, porém insuficiente para satisfazer as
outras requisições.– Um impasse existe no sistema, com os processos P1, P2, P3, and P4
Utilização do algoritmo de detecção de impasse
• Qual a freqüência para invocar o algoritmo– Depende da utilização do sistema
• Se demorar muito, poderá ocorrer muitos ciclos
– Quantos processos devem retornar a um estado seguro para sair do estado de impasse? (um para seguro para sair do estado de impasse? (um para cada ciclo)
Recuperação do impasse
• Finalizar processos– Finalizar todos os processos no estado de impasse
– Eliminar um processo por vez, até que o impasse seja finalizado
– Em qual ordem?• Prioridade
• Utilização dos recursos
• Tempo de execução
• Preempção de recursos