Вы находитесь на странице: 1из 36

Sistemas Operacionais

Impasses

Prof. Humberto Caetano


Humberto.ccs@gmail.com
Impasses
● A utilização de recursos pode gerar a
competição entre processos.
● Quando essa competição chega a um ponto
que não existe a solução temos um impasse
(deadlock).
● Impasses podem ocorrer entre processos,
threads e entre máquinas separadas.

2/36
Recursos
● Recurso pode ser qualquer dispositivo de
hardware ou um trecho de informação.
– CDRom, unidade de fita, HD, impressoras
– Tabelas em uma base de dados que precisam ser
atualizadas.

3/36
Recursos
● Não preemptível
– É um recurso que não pode ser retirado do
processo atual. Ou seja, se o processo proprietário
parasse de utilizar aquele recurso ocorreria uma
falha no sistema.
– Gravar de DVD, ler o DVD, gravar na fita, ler a fita,
etc.

4/36
Recursos
● Preemptível
– É um recurso que pode ser retirado do processo
atual. Esses recursos podem ser reutilizados,
compartilhados ou alterados para que outros
processos possam seguir trabalhando.
– Memória, HD, etc.

5/36
Aquisição de Recursos
● Alguns processos precisam garantir o acesso a
recursos para que seu funcionamento seja
correto.
● No caso de acesso a base de dados o software
SGBD tem que gerenciar o acesso a estes
recursos, já no acesso a dispositivos de
hardware o sistema tem que controlar.

6/36
Aquisição de Recursos

7/36
Aquisição de Recursos

8/36
Impasses
● Definição
– Um conjunto de processos estará em situação de
impasse se todo processo pertencente ao conjunto
estiver esperando por um evento que somente
outro processo desse mesmo conjunto poderá
fazer acontecer.

9/36
Impasses
● Condição para ocorrência de impasses
– Condição de exclusão mútua
– Condição de posse e espera
– Condição de não preempção
– Condição de espera circular

10/36
Modelagem de Impasses
● A modelagem de impasses pode ser feita
através de grafos.
– Processos → Círculos
● Uma linha saindo do processo para o recurso indica que
o processo está bloqueado esperando pelo recurso.
– Recursos → Quadrados
● Uma linha saindo de um recurso para um processo
indica que o recurso foi requisitado, está alocado e está
sendo usado pelo processo.

11/36
Modelagem de Impasses

12/36
Modelagem de Impasses
● Exemplo:
– Três processos, A, B e C, e três recursos, R, S e T.
– As requisições dos recursos se dão da seguinte
maneira.

13/36
Modelagem de Impasses
● Exemplo:

14/36
Estratégias
● Em geral existem 4 estratégias para tratarmos
impasses:
– Ignorar o problema
– Detecção e recuperação
– Anulação dinâmica por meio de alocação
cuidadosa de recursos
– Prevenção, negando estruturalmente uma das
quatro condições necessárias para gerar um
impasse.

15/36
Algoritmo do Avestruz
● É o método mais simples para evitarmos
impasses.
● A ideia é analisar quantas vezes, o tempo de
retorno e o impacto que um impasse irá causar
no nosso sistema.

16/36
Detecção e Recuperação de
Impasses
● Detecção de impasses com um recurso de cada tipo
1.Para cada nó N, realize os passos abaixo
2.Inicialize uma lista L, vazia, e adicione cada item na medida
que for passando pelos nós.
3.Insira o nó inicial na lista L e verifique se a mesma tem dois
nós iguais. Isso indica um impasse.
4.A partir do nó verifique se existe um arco de saída, se existir
vá para o passo 5, se não vá para o passo 6.
5.Escolha uma das saídas, e vá para o passo 3.
6.Se esse for o nõ inicial, não existe ciclo, termine o algoritmo.
Se não, o final foi alcançado, remova-o da lista, volte ao nó
anterior e vá para o passo 3.
17/36
Detecção e Recuperação de
Impasses

18/36
Detecção e Recuperação de
Impasses
● Detectando impasses com múltiplos recursos
de cada tipo.
– O algoritmo para detecção de impasses com
recursos múltiplos é baseado em matrizes.
● E → Vetor de recursos existentes
● C → Matriz de alocação atual
● A → Vetor de recursos disponíveis
● R → Matriz de requisições
● P → lista de processos

19/36
Detecção e Recuperação de
Impasses
● Detectando impasses com múltiplos recursos
de cada tipo.
– O algoritmo:
1. Procure um processo desmarcado, Pi, para o qual a
linha i de R seja menor ou igual a linha correspondente
de A.
2. Se esse processo for encontrado adicione a linha i de C
à correspondente de A, marque o processo e volte ao
passo 1.
3. Se não existir o processo, o algoritmo finalizará.

20/36
Detecção e Recuperação de
Impasses
● Exemplo:
– Temos três processos, e quatro classes de
recursos.
– O processo 1 está utilizando 1 scanner
– O processo 2 duas unidades de fita e um CD-Rom
– O processo 3 um plotter e dois scanners

21/36
Detecção e Recuperação de
Impasses

22/36
Recuperação de Situações de
Impasse
● Recuperação por meio de preempção.
– Em hardwares que permitem esse tipo de
operação, a preempção pode ser uma boa
alternativa para resolução de impasses.
● Recuperação por meio de retrocesso.
– É possível programar os processos para que eles
façam checkpoints, assim, quando necessário,
podemos ordenar que um processo retorne a um
estado onde ele não estava usando o hardware.

23/36
Recuperação de Situações de
Impasse
● Recuperação por meio de eliminação de
processos.
– Quando dois processos disputam um recurso, por
vezes é necessário encerrar um deles para que o
outro possa ser concluído. Em seguida o processo
parado pode ser retomado.

24/36
Evitando Impasses
● Os algoritmos principais para evitarmos
impasses são baseados no conceito de
estados seguros.

25/36
Evitando Impasses

26/36
Evitando Impasses
● Estados seguros e inseguros.

Estado Seguro

Estado Inseguro
27/36
Evitando Impasses
● O algoritmo do banqueiro para um único
recurso.
– Este algoritmo trata dos estados seguros ou
inseguros no momento em que é feita uma
requisição.

28/36
Evitando Impasses
● O algoritmo do banqueiro para múltiplos
recursos.

29/36
Prevenção de Impasses
● Condição de exclusão mútua.
– Se dois processos não conseguirem ficar com um
recurso exclusivamente para si, não existirão
impasses.
– Nem todos os processos podem trabalhar sem ter o
recurso exclusivamente para si, mas em alguns
casos podemos lançar mão da técnica de spooling.

30/36
Prevenção de Impasses
● Condição de posse e espera.
– Se pudermos impedir que processos que já tem um
recurso fiquem a espera de mais recursos,
eliminaremos os impasses.
– Uma forma de fazer com que isso ocorra é exigir
que os processos façam a requisição de todos os
recursos antes de “travá-los”.

31/36
Prevenção de Impasses
● Condição de posse e espera.
– Um problema dessa técnica é que os processos
não sabem, antecipadamente, quais recursos irão
usar, nem quando.
– Outro problema é, mesmo sabendo quais recursos
irão ser usados, não quer dizer que eles serão
usados imediatamente. Pode ser que precisemos
da fita daqui a uma hora, e esse recurso ficará
indisponível a todos durante esse tempo.

32/36
Prevenção de Impasses
● Condição de não preempção.
– A condição de preempção de um recurso pode ser
atingida virtualizando-o.
– Podemos utilizar spool ou um serviço intermediário
que faça com que a saída final de uma requisição
seja tratada por outro software e não pelo recurso
final.

33/36
Prevenção de Impasses
● Condição de espera circular.
– Podemos contornar essa condição fazendo com
que o processo só possa ter um recurso por vez.
Essa abordagem leva a mais problemas que
soluções, pois, em geral, um processo atua com
mais de um recurso.

34/36
Prevenção de Impasses
● Condição de espera circular.
– Outra abordagem é a numeração dos recursos. A
impressora seria 1, o CR-Rom seria 2, um scanner
3, etc. E o processo só pode solicitar recursos na
ordem. Assim se dois processos solicitarem
recursos eles terão que seguir a ordem pré
estabelecida.

35/36
Prevenção de Impasses
● Condição de espera circular.
– Embora a ordenação resolva o problema de
impasses ela não pode ser aplicada a todos os
casos. Dependendo do número de recursos
disponíveis, pode se tornar “caro” e impossível
determinar a ordem correta dos recursos.

36/36

Вам также может понравиться