Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto
Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto
Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto
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...