Sistemas Operacionais I

Maria Clicia Stelling de Castro
2006/1

Deadlocks

Deadlocks 
Problema  Modelo do Sistema  Caracterização  Métodos para Manipulação 

Prevenção  Evitar  Detecção  Recuperação

Objetivos 
Devenvolver uma descrição de deadlocks, deadlocks, os quais impedem que conjuntos de processos concorrentes completem suas tarefas  Apresentar diferentes métodos para prevenir ou evitar deadlocks em um sistema computacional

O Problema de Deadlocks 
Conjunto de processos bloqueados cada um mantendo um recurso e esperando para adquirir um recurso, mantido por um outro processo no conjunto 
Exemplo: Exemplo:  Sistema com 2 disk drives  P1 e P2 cada um mantendo um disk drive e cada um necessitando de um outro  Exemplo: semáforos A e B, iniciados com 1 Exemplo: P0 P1 wait (A); wait(B) wait (B); wait(A)

voltar (preempção de recursos e rollback) (preempção rollback)  Diversos carros podem ter que voltar se ocorre deadlock  Pode causar starvation . pode ser resolvido se um carro deadlock.Exemplo para Atravessar uma Ponte  Tréfego somente em uma direção  Cada seção da ponte pode ser vista como um recurso  Se ocorre deadlock.

Rm CPU cycles. .. . I/O devices  Cada tipo de recurso Ri tem Wi instâncias  Cada processo utiliza um recurso da seguinte forma:  pedido  uso  liberação .Modelo do Sistema  Tipos de recursos R1. R2. memory space. .

Caracterização de Deadlock Deadlock ocorre se e somente se quatro condições se mantiverem simultaneamente  Mutual exclusion: somente um processo de exclusion: cada vez pode usar um recurso  Hold and wait: um processo mantendo pelo wait: menos um recurso e está esperando para adquirir recursos adicionais mantidos por outros processos .

«. P0} wait: de processos esperando. Pn±1 está esperando por um recurso que está atribuído Pn. e Pn está esperando por um recurso que está atribuído a P0 . P1 está esperando por um recurso que está atribuído a P2.Caracterização de Deadlock  No preemption: um recurso só pode ser liberado preemption: voluntariamente pelo processo que o mantém. tal que P0 está esperando por um recurso que está atribuído P1. P1. após o processo completar a sua tarefa  Circular wait: existe um conjunto {P0. «.

Pn}. Rm}. o conjunto de todos os tipos de {R recursos no sistema  aresta de pedido ± aresta direcionada P1 p Rj  aresta de atribuição ± aresta direcionada Rj p Pi . o conjunto de todos os processos {P no sistema  R = {R1.Grafo de Alocação de Recursos Grafo : um conjunto de vértices V e um conjunto de arestas E  V está particionado em dois tipos:  P = {P1. P2. R2. «. «.

Grafo de Alocação de Recursos  Processo  Tipo de recurso com 4 instâncias  Pi solicita instância de Rj ‡Pi ‡Rj  Pi está mantendo uma instância de Rj ‡Pi ‡Rj .

Exemplo de um Grafo de Alocação de Recursos .

Grafo de Alocação de Recursos com Deadlock .

Grafo de Alocação de Recursos com Ciclo sem Deadlock .

então pode correr deadlock . então ocorre deadlock  diversas instâncias por tipo de recurso.Fatos Básicos  Grafo  não contém ciclos   não há deadlock  contém um ciclo   se houver  somente uma instância por tipo de recurso.

usado por muitos sistemas operacionais.Métodos de Manipulação de Deadlock  Garante que o sistema nunca entra num estado de deadlock  Permite que o sistema entre num estado de deadlock e então recupera  Ignora o problema e pretende que deadlocks nunca ocorram no sistema. incluindo o UNIX .

Prevenção de Deadlock  Mutual Exclusion ±  não é necessária para recursos compartilháveis  deve se manter para recursos que não podem ser compartilhados .

Prevenção de Deadlock  Hold and Wait ± deve guarantir que sempre que um processo solicite um recurso. ou permite que o processo solicite recursos somente quando não tenha nenhum outro  Baixa utilização de recursos. possibilita starvation . ele não mantém qualquer outro recurso  Exige que os processos solicitem e sejam alocados todos os seus recursos antes de iniciar a execução.

Prevenção de Deadlock  No Preemption ±  Se um processoque está mantendo alguns recursos e solicita um outro recurso que não pode ser imediatamente alocado   todos os recursos que ele mantém devem ser liberados  Recursos com preempção são adicionados a lista de recursos do processo que está esperando  Processo serão reiniciados somente quando ele puder recuperar seus recursos anteriores. além dos novos que está solicitando .

Prevenção de Deadlock  Circular Wait ±  impõe uma ordenação total de todos os tipos de recursos  requer que cada processo solicite recursos em uma ordem crescente de enumeração .

Evitar Deadlock Requer que o sistema tenha alguma informação adicional disponível a priori  Modelo mais simples e útil requer que cada processo declare o número máximo de recursos de cada tipo que pode precisar  Algoritmo de deadlock-avoidance examina deadlockdinamicamente o estado de alocação de recursos para garantir que nunca ocorra um condição de espera circular (circular-wait) (circular-wait) .

Evitar Deadlock  Estado de alocação de recursos é definido  pelo número de recursos disponíveis e alocados  demanda máxima dos processos .

o sistema permanece em um estado seguro  O sistema está em um estado seguro se exite uma seqüência <P0. com j < i .Estado Seguro  Quando um processo solicita um recurso disponível. «. Pn> de todos os processos o sistema é tal que para cada Pi. o sistema deve decidir se com a alocação imediata deste recurso. o recurso que Pi ainda pode solicitar e pode ser satisfeito pelos recursos correntemente disponíveis + recursos mantido por todos os Pj. P2.

. e assim por diante. retornar os recursos alocados e terminar  Quando Pi termina. executar. Pi +1 pode obter seus recursos necessários.Estado Seguro  Isto é:  Se Pi necessita de recursos que não estão disponíveis imediatamente. então Pi pode esperar até que todos Pj tenham teminado  Quando Pj termina. Pi pode obter os recursos necessários.

Fatos Básicos  Se um sistema está num  estado seguro   não ocorre deadlocks  estado inseguro   pode ocorrer deadlock  Evitar   garante que um sistema nunca entrará em um estado inseguro .

Algoritmos Avoidance  Única instânica de um tipo de recurso usar   um grafo de alocação de recurso  Múltiplas instâncias de um tipo de recurso   o banker¶s algorithm .

Esquema do Grafo de Alocação de Recursos  Aresta de demanda (claim edge) Pi p Rj indica que (claim edge) processo Pj pode solicitar o recurso Rj. representado por uma linha tracejada  Claim edge converte para aresta de pedido (request (request edge) quando um processo solicita um recurso edge)  Aresta de pedido converte para aresta de atribuição (assignment edge) quando o recurso é alocado ao edge) processo  Quando um recurso é liberado por um processo. a aresta de atribuição se converte para uma claim edge  Recursos devem ser declarados no sistema a priori .

Grafo de Alocação de Recursos .

Grafo de Alocação de Recursos em Estado Inseguro .

Algoritmo do Grafo de Alocação de Recursos  Suponha que o processo Pi solicite um recurso Rj  O pedido pode ser garantido somente se a conversão da aresta de pedido (request edge) (request edge) para aresta de atribuição (assignment edge) não (assignment edge) resulta numa formação de um ciclo no grafo de alocação de recursos .

ele deve liberá-los numa quantidade de liberátempo finita .Banker´s Algorithm  Mútiplas instâncias  Cada processo deve a priori declarar a sua demanda de uso máxima  Quando um processo solicita um recurso ele pode ter que esperar  Quando um processo consegue todos os seus recursos.

j] = k. Se Max [i.Estrutura de Dados: Banker´s Algorithm Suponha n = número de processos.j] processo Pi pode pedir até k instâncias do recurso do tipo Rj . existem k instâncias dos recursos do tipo Rj disponíveis  Max: matriz n x m. m = número de tipos de recursos  Available: Vetor de tamanho m. i. Se Available Available: [j] = k. então Max: m.

Estrutura de Dados: Banker´s Algorithm  Allocation: matriz n x m.j] = Allocation: k então Pi está alocando k instâncias de Rj  Need: matriz n x m.j] = Max[i. Se Need[i. Se Allocation[i.j] = k.j] .j] ± Allocation [i.j] pode necessitar de mais k instâncias de Rj para terminar sua tarefa Need [i. então Pi Need: Need[i.

1 2. n. «. então o sistema está em um estado seguro . vá para o passo 4 3. Encontre um i tal que ambos: (a) Finish [i] = false (b) Needi e Work Se não existe tal i. Se Finish [i] == true tara todo i. Work = Work + Allocationi Finish[ Finish[i] = true vá para o passo 2 4. 1.Algoritmo Seguro 1. Deixe Work e Finish serem vetores de tamanho m e n. Inicie: Work = Available Finish [i] = false for i = 0. respectivamente.

uma vez que o processo excedeu sua demanda máxima 2. contrário Pi deve esperar.Se 1.Algoritmo de Pedido de Recurso por Processo Pi Request = vetor de pedido para o processo Pi.Se 2. If Requesti [j]=k então processo Pi quer k instâncias ]=k do recurso de tipo Rj 1. Caso Available. vá para o passo 3. Caso contrário. uma vez que os recursos não estão disponíveis . raise error condição de erro. Se Requesti e Available. Se Requesti e Needi vá para o passo 2.

Pretende alocar recursos pedidos para Pi modificando o estado da seguinte forma: Available = Available ± Request.Pretende 3.Algoritmo de Pedido de Recurso por Processo Pi 3. Allocationi = Allocationi + Requesti. Se safe   os recursos são alocados a Pi Se unsafe   Pi deve esperar e o estado de alocação antigo é restaurado . Needi = Needi ± Requesti.

Exemplo do Algoritmo do Banqueiro  5 Processos P0 até P4. e C (7) instâncias  Snapshot do tempo T0: Allocation ABC 010 200 302 211 002 Max Available ABC ABC 753 332 322 902 222 433 P0 P1 P2 P3 P4 . 3 tipos de recursos: A (10). B (5).

P4. P2. P0> satisfais o critério de segurança . porque a seqüência < P1. P3. O conteúdo da matriz Need é definido como Max± Max±Allocation Need AB C 743 122 600 011 431 Exemplo do Algoritmo do Banqueiro P0 P1 P2 P3 P4  O sistema está em um estado seguro.

2) e (3.0.Exemplo: Pi solicita (1.2)   true) true) Allocation ABC 010 302 301 211 002 Need Available ABC ABC 743 230 020 600 011 431 P0 P1 P2 P3 P4 .0. (1.3.2)  Verfique que Request e Available (que é.

0. P3.2.3. P0.Exemplo: Pi solicita (1.0) pelo P0 pode ser garantido? . P4.2)  Execução do algoritmo de segurança mostra que a seqüência < P1. P2> satisfais a necessidade de segurança  O pedido para (3.0) pelo P4 pode ser garantido?  O pedido para (0.

Detecção de Deadlock  Permite ao sistema entrar num estado de deadlock  Algoritmo de Deteção  Esquema de Recuperação .

Se existe um ciclo. existe deadlock  Um algoritmo para detectar um ciclo em um grafo requer operações da ordem de n2.Única Instância para Cada Tipo de Recurso  Mantém grafo wait-for wait Nós são processos  Pi p Pj se Pi está esperando por Pj  Periodicamente invoca um algoritmo que busca por um ciclo no grafo. onde n é o número de vértices no grafo .

Grafo de Alocação de Recurso e Grafo Wait-For Resource-Allocation Graph Corresponding Wait-For Graph .

Diversas Instâncias de um Tipo de Recurso  Available: Um vetor de tamanho m indica o Available: número de recursos disponíveis de cada tipo  Allocation: Uma matriz n x m define o Allocation: número de recursos de cada tipo correntemente alocado para cada processo  Request: Uma matriz n x m indica o pedido Request: corrente de cada processo. então o processo Pi está pedindo mais k instâncias do tipo de recurso Rj . Se Request [ij] = k.

Deixe 1.otherwise.Algoritmo de Detecção 1. Finish[i] = true Finish[i] 2. Encontre um índice i tal que ambos: (a)Finish[ (a)Finish[i] == false (b) Requesti e Work Se tal i não existe.2. then Finish[i] Finish[i] = false. if Allocationi { 0. n. Deixe Work e Finish serem vetores de tamanho m e n. respectivamente. Inicie: (a) Work = Available (b) For i = 1. «.Encontre 2. vá para o passo 4 .

Work 3. Work = Work + Allocationi Finish[ Finish[i] = true vá para o passo 2 4.Algoritmo de Detecção 3. Se Finish[i] == false. se Finish[i] == false. deadlock. false. Além disso. para algum i. 1 e i e n. então o sistema está num estado de deadlock.Se Finish[ 4. então Pi está em deadlock Algoritmo requer operações da ordem de O(m x n2) para detectar se o sistema está em estado de deadlocked . Finish[ false.

3 tipo de recursos A (7). P1. P3. e C (6) instâncias  Snapshot no tempo T0: Allocation Request Available P0 P1 P2 P3 P4 ABC 010 200 303 211 002 ABC 000 202 000 100 002 ABC 000  Seqüência <P0.Exemplo do Algoritmo de Detecção  5 processos P0 até P4. P2. B (2). P4> resultará em Finish[ Finish[i] = true para todo i .

Exemplo do Algoritmo de Detecção  P2 pede uma instância adicional do tipo C Request AB C P0 000 P1 201 P2 001 P3 100 P4 002 .

pedidos. mas recursos insuficientes se ajustam a outros processos. P2.Exemplo do Algoritmo de Detecção  Estado do sistema?  Pode demandar recurso mantido pelo processo P0. e P4 . P3.  Deadlock existe. consistindo dos processos P1.

Uso do Algoritmo de Detecção  Quando e quantas vezes. pode haver muitos ciclos no grafo de recursos e então não seriam capazes de dizer quais dos muitos processos em deadlock causaram o deadlock . invocar depende de:  Quantas vezes é provável que ocorra deadlock ?  Quantos processos necessitarão ter a sua execução retornada para determinado ponto (rolled back)? back)?  um por cada ciclo disjunto  Se o algoritmo de detecção é invocado arbitrariamente.

Recuperação de Deadlock: Processo de Terminação  Abortar todos os processos em deadlock  Abortar um processo de cada vez até o ciclo de deadlock ser eliminado  Em que ordem escolheríamos abortar?  Prioridade do processo  Quanto tempo o processo computou. e quanto tempo mais falta para terminar  Recursos usados pelo processo  Recursos necessários para completar o processo  Quantos processos necessitam ser terminados  O process é interativo ou batch? batch? .

incluir número de rollbacks no fator de custo . reinicia processo naquele estado  Starvation ± algum processo pode sempre ser escolhido como vítima.Recuperação de Deadlock: Preempção de Recursos  Seleção de uma vítima ± minimiza o custo  Rollback ± returna para algum estado seguro.

Sign up to vote on this title
UsefulNot useful