15.04.2013 Views

Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto

Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto

Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Disciplina: <strong>Sistemas</strong> <strong>Operacionais</strong> - <strong>CAFW</strong>-<strong>UFSM</strong><br />

<strong>Professor</strong>: <strong>Roberto</strong> <strong>Franciscatto</strong>


Objetivos<br />

• Devenvolver uma descrição de<br />

deadlocks, os quais impedem que<br />

conjuntos de processos<br />

concorrentes completem suas<br />

tarefas<br />

• Apresentar diferentes métodos<br />

para prevenir ou evitar deadlocks em<br />

um sistema computacional


O problema de Deadlocks<br />

• Conjunto de processos bloqueados<br />

cada um mantendo um recurso e<br />

esperando para adquirir um recurso,<br />

mantido por um outro processo no<br />

conjunto<br />

• Exemplo:<br />

• Sistema com 2 disk<br />

drives<br />

• P1 e P2 cada um<br />

mantendo um disk drive<br />

e cada um necessitando<br />

de um outro<br />

• Exemplo: semáforos A e B,<br />

iniciados com 1<br />

P0 P1<br />

wait (A); wait(B)<br />

wait (B); wait(A)


Exemplo para atravessar uma ponte<br />

• Tráfego somente em uma direção<br />

• Cada seção da ponte pode ser vista como um recurso<br />

• Se ocorre deadlock, pode ser resolvido se um carro voltar (preempção de<br />

recursos e rollback)<br />

• Diversos carros podem ter que voltar se ocorre deadlock<br />

• Pode causar starvation


Recursos<br />

• Exemplos de recursos de<br />

computador<br />

• impressoras<br />

• unidades de fita<br />

• tabelas<br />

• Processos precisam de acesso aos<br />

recursos numa ordem racional<br />

• Suponha que um processo<br />

detenha o recurso A e solicite o<br />

recurso B<br />

• ao mesmo tempo um<br />

outro processo detém B<br />

e solicita A<br />

• ambos são bloqueados e<br />

assim permanecem


Recursos<br />

• Deadlocks ocorrem quando …<br />

• garante-se aos<br />

processos acesso<br />

exclusivo aos<br />

dispositivos<br />

• esses dispositivos são<br />

normalmente chamados<br />

de recursos<br />

• Recursos preemptíveis<br />

• podem ser retirados de<br />

um processo sem<br />

quaisquer efeitos<br />

prejudiciais<br />

• Recursos não preemptíveis<br />

• vão induzir o processo a<br />

falhar se forem retirados


Recursos<br />

• Seqüência de eventos necessários<br />

ao uso de um recurso<br />

• solicitar o recurso<br />

• usar o recurso<br />

• Deve esperar se solicitação é<br />

negada<br />

• processo solicitante<br />

pode ser bloqueado<br />

• liberar o recurso • pode falhar resultando<br />

em um código de erro


Introdução aos Deadlocks<br />

• Definição formal:<br />

• Um conjunto de<br />

processos está em<br />

situação de deadlock se<br />

todo processo<br />

pertencente ao conjunto<br />

estiver esperando por<br />

um evento que somente<br />

um outro processo<br />

desse mesmo conjunto<br />

poderá fazer acontecer<br />

• Normalmente o evento é a<br />

liberação de um recurso<br />

atualmente retido<br />

• Nenhum dos processos pode...<br />

• executar<br />

• liberar recursos<br />

• ser acordado


Quatro condições para Deadlocks<br />

1. Condição de exclusão mútua<br />

• todo recurso está ou<br />

associado a um processo<br />

ou disponível<br />

2. Condição de posse e espera<br />

• processos que retêm<br />

recursos podem solicitar<br />

novos recursos<br />

3. Condição de não preempção<br />

• recursos concedidos<br />

previamente não podem<br />

ser forçosamente tomados<br />

4. Condição de espera circular<br />

• deve ser uma cadeia<br />

circular de 2 ou mais<br />

processos<br />

• cada um está à espera<br />

de recurso retido pelo<br />

membro seguinte dessa<br />

cadeia


Modelagem de Deadlock<br />

• Modelado com grafos dirigidos<br />

• recurso R alocado ao processo A<br />

• processo B está solicitando/esperando pelo recurso S<br />

• processos C e D estão em deadlock sobre recursos T e U


Modelagem de Deadlocks<br />

• Estratégias para tratar<br />

Deadlocks<br />

1. ignorar por completo<br />

o problema<br />

2. detecção e<br />

recuperação<br />

3 evitação dinâmica<br />

alocação cuidadosa de<br />

recursos<br />

4 prevenção<br />

negação de uma das<br />

quatro condições<br />

necessárias


Modelagem de Deadlocks<br />

Como ocorre<br />

um deadlock


Modelagem de Deadlocks<br />

Como pode ser evitado um deadlock


Algoritmo do Avestruz<br />

• Finge que o problema não<br />

existe<br />

• Razoável se<br />

• deadlocks<br />

ocorrem muito<br />

raramente<br />

• custo da<br />

prevenção é alto<br />

• UNIX e Windows seguem<br />

esta abordagem<br />

• É uma ponderação entre<br />

• conveniência<br />

• correção


Detecção com um recurso de cada tipo<br />

• Observe a posse e solicitações de recursos<br />

• Um ciclo pode ser encontrado dentro do grafo, denotando deadlock


Recuperação de Deadlock<br />

• Recuperação através de<br />

preempção<br />

• retirar um recurso<br />

de algum outro<br />

processo<br />

• depende da<br />

natureza do<br />

recurso<br />

• Recuperação através de<br />

reversão de estado<br />

• verifica um processo<br />

periodicamente<br />

• usa este estado salvo<br />

• reinicia o processo se este é<br />

encontrado em estado de<br />

deadlock


Recuperação de Deadlock<br />

• Recuperação através da<br />

eliminação de processos<br />

• forma mais<br />

grosseira mas<br />

também mais<br />

simples de<br />

quebrar um<br />

deadlock<br />

• elimina um dos processos<br />

no ciclo de deadlock<br />

• os outros processos<br />

conseguem seus recursos<br />

• escolhe processo que pode<br />

ser reexecutado desde seu<br />

início


Prevenção de Deadlock<br />

( Atacando a Condição de Exclusão Mútua)<br />

• Alguns dispositivos (como<br />

uma impressora) podem<br />

fazer uso de spool<br />

• o daemon de<br />

impressão é o<br />

único que usa o<br />

recurso impressora<br />

• desta forma<br />

deadlock<br />

envolvendo a<br />

impressora é<br />

eliminado<br />

• Nem todos os dispositivos<br />

podem fazer uso de spool<br />

• Princípio:<br />

• evitar alocar um recurso<br />

quando ele não for<br />

absolutamente necessário<br />

necessário<br />

• tentar assegurar que o menor<br />

número possível de processos<br />

possa de fato requisitar o<br />

recurso


Prevenção de Deadlock<br />

( Atacar a Condição de Posse e Espera)<br />

• Exigir que todos os processos<br />

requisitem os recursos antes de<br />

iniciarem<br />

• um processo nunca tem<br />

que esperar por aquilo<br />

que precisa<br />

• Problemas<br />

• podem não saber<br />

quantos e quais recursos<br />

vão precisar no início da<br />

execução<br />

• e também retêm<br />

recursos que outros<br />

processos poderiam<br />

estar usando<br />

• Variação:<br />

• processo deve<br />

desistir de todos os<br />

recursos<br />

• para então requisitar<br />

todos os que são<br />

imediatamente<br />

necessários


Prevenção de Deadlock<br />

( Atacar a Condição de Não Preempção)<br />

• Esta é uma opção inviável<br />

• Considere um processo<br />

de posse de uma<br />

impressora<br />

• no meio da<br />

impressão<br />

• retoma a<br />

impressora a<br />

força<br />

• ?


Prevenção de Deadlock<br />

( Atacar a Condição de Espera Circular (2) )<br />

• Recursos ordenados numericamente<br />

• Um grafo de recursos


Prevenção de Deadlock<br />

( Atacar a Condição de Espera Circular ( (2) ) )<br />

• Resumo das abordagens para prevenir deadlock


Evitar Deadlock<br />

• Requer que o sistema<br />

tenha alguma<br />

informação adicional<br />

disponível a priori<br />

• Modelo mais simples e<br />

útil requer que cada<br />

processo declare o<br />

número máximo de<br />

recursos de cada tipo<br />

que pode precisar<br />

• Algoritmo de deadlockavoidance<br />

examina<br />

dinamicamente o estado<br />

de alocação de recursos<br />

para garantir que nunca<br />

ocorra um condição de<br />

espera circular (circularwait)


Evitar Deadlock<br />

• Estado de alocação de<br />

recursos é definido<br />

• pelo número de<br />

recursos<br />

disponíveis e<br />

alocados<br />

• demanda<br />

máxima dos<br />

processos


Estado Seguro<br />

• Quando um processo solicita um recurso disponível, o<br />

sistema deve decidir se com a alocação imediata<br />

deste recurso, o sistema permanece em um estado<br />

seguro<br />

• O sistema está em um estado seguro se exite uma<br />

seqüência de todos os processos o<br />

sistema é tal que para cada Pi, o recurso que Pi ainda<br />

pode solicitar e pode ser satisfeito pelos recursos<br />

correntemente disponíveis + recursos mantido por<br />

todos os Pj, com j < i


Estado Seguro<br />

• Isto é:<br />

• Se Pi necessita de recursos que não estão<br />

disponíveis imediatamente, então Pi pode<br />

esperar até que todos Pj tenham teminado<br />

• Quando Pj termina, Pi pode obter os recursos<br />

necessários, executar, retornar os recursos<br />

alocados e terminar<br />

• Quando Pi termina, Pi+1 pode obter seus recursos<br />

necessários, e assim por diante.


Fatos Básicos<br />

• Se um sistema está num<br />

• estado seguro então não ocorre<br />

deadlocks<br />

• estado inseguro então pode ocorrer<br />

deadlock<br />

• Evitar garante que um sistema nunca entrará em<br />

um estado inseguro


Algoritmo do GGrafo<br />

afo de Alocação de Recursos<br />

• Suponha que o processo Pi solicite um recurso Rj<br />

• O pedido pode ser garantido somente se a<br />

conversão da aresta de pedido (request edge) para<br />

aresta de atribuição (assignment edge) não resulta<br />

numa formação de um ciclo no grafo de alocação<br />

de recursos


Banker's Algorithm<br />

• Mútiplas instâncias<br />

• Cada processo deve a priori declarar a sua<br />

demanda de uso máxima<br />

• Quando um processo solicita um recurso ele pode<br />

ter que esperar<br />

• Quando um processo consegue todos os seus<br />

recursos, ele deve liberá-los numa quantidade de<br />

tempo finita


Exemplo -Banker's Banker's Algorithm<br />

Cinco processos P0 até P4 • três tipos de recursos: recursos<br />

A (10), B (5), e C (7) instâncias<br />

Snapshot do tempo T0: Allocation Max Available<br />

A B C A B C A B C<br />

P0 0 1 0 7 5 3 3 3 2<br />

P1 2 0 0 3 2 2<br />

P2 3 0 2 9 0 2<br />

P3 2 1 1 2 2 2<br />

P4 0 0 2 4 3 3


Outras Questões<br />

( Bloqueio em Duas Fases)<br />

• Fase um<br />

• processo tenta bloquear<br />

todos os registros de que<br />

precisa, um de cada vez<br />

• Se registro necessário já<br />

estiver bloqueado, reinicia<br />

novamente<br />

• (nenhum trabalho real é<br />

feito na fase um)<br />

• Se a fase um for bem<br />

sucedida, começa a fase<br />

dois,<br />

• execução de atualizações<br />

• liberação de bloqueios<br />

• Observe a similaridade<br />

com a requisição de todos<br />

os recursos de uma só vez<br />

• Algoritmo funciona onde o<br />

programador tiver<br />

organizado tudo<br />

cuidadosamente para que<br />

• o programa possa ser<br />

parado, reiniciado


Condição de Inanição (Starvation)<br />

• Algoritmo para alocar<br />

um recurso<br />

• pode ter que ceder<br />

para o job mais curto<br />

primeiro<br />

• Funciona bem para<br />

múltiplos jobs curtos<br />

em um sistema<br />

• Jobs longos podem ser<br />

preteridos<br />

indefinidamente<br />

• mesmo não estando<br />

bloqueados<br />

• solução:<br />

• política do primeiro a chegar,<br />

primeiro a ser servido


Exercícios<br />

1. Procure por três tipos<br />

diferentes de algoritmos<br />

de prevenção de<br />

deadlocks.<br />

• Explique<br />

brevemente<br />

como funciona<br />

cada um deles...<br />

2 Quais seriam as<br />

quatro condições<br />

necessárias para a<br />

ocorrência de<br />

deadlocks?<br />

3 Indique uma regra que<br />

impede deadlocks em<br />

um sistema de<br />

computação.<br />

Email: roberto.franciscatto@gmail.com


Exercícios<br />

4. Utilize o simulador de<br />

deadlocks:<br />

http://martins.webc<br />

indario.com/jsiso/bi<br />

n/index.html<br />

Email: roberto.franciscatto@gmail.com<br />

Faça alguns<br />

exemplos, explique<br />

o funcionamento do<br />

simulador e o que<br />

você entendeu sobre<br />

o mesmo...

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!