Você está na página 1de 35

PROGRAMAO CONCORRENTE

CHAMADA DE PROCEDIMENTO REMOTO - RPC


DEADLOCK

SO PAULO
2014

PROGRAMAO CONCORRENTE
CHAMADA DE PROCEDIMENTO REMOTO - RPC
DEADLOCK

Trabalho apresentado no curso de


graduao de Tecnologia em Anlise e
Desenvolvimento

de

Sistemas,

XXXXXXXXXXXXXXXXXX,

ao
para

complemento da avaliao semestral da


disciplina de Sistemas Operacionais, sob
orientao do Prof. XXXXXXXXXXXXX.

SO PAULO
2014

RESUMO

Neste trabalho so abordados trs temas:


Programao Concorrente: conjunto de computadores completos e
autnomos, logo, fracamente acoplados, interligados por uma rede,
atravs

do

qual

se

comunicam

por

mensagens,

visando

compartilhamento de recursos e a cooperao.


Chamada de Procedimento Remoto (acrnimo de Remote Procedure
Call): uma tecnologia de comunicao entre processos que permite a
um programa de computador chamar um procedimento em outro espao
de endereamento (geralmente em outro computador, conectado por
uma rede);
Deadlock: uma situao em que ocorre um impasse e dois ou mais
processos ficam impedidos de continuar suas execues, ou seja, ficam
bloqueados.
Palavras-chave: Programao concorrente, thread, processo, pseudo-paralela, chamada de
procedimento remoto, RPC, modelo sncrono, modelo assncrono, deadlock, impasse.

SUMRIO
RESUMO
1

PROGRAMAO CONCORRENTE

1.1

Introduo............................................................................................................0

1.2

Diferena entre programao concorrente e paralela........................................0

1.3

Motivao e finalidade.........................................................................................0

1.4

Interao e comunicao concorrente................................................................0

1.4.1 Comunicao por memria compartilhada

1.4.2 Comunicao por troca de mensagens 0


1.5

Diferena entre thread e processo......................................................................0

1.5.1 Estados de um processo 0


1.6

Criao e Manuteno de Processos.................................................................0

1.7

Suporte em linguagens.......................................................................................0
2

CHAMADA DE PROCEDIMENTO REMOTO - RPC 0

2.1

Introduo............................................................................................................0

2.2

Operao de uma RPC.......................................................................................0

2.2.1 Representao grfica da operao de uma RPC:


2.3

Modelo sncrono e modelo assncrono...............................................................0

2.4

Possveis Falhas durante uma RPC...................................................................0

2.4.1 Crash do servidor 0


2.4.2 Crash do cliente

0
3

DEADLOCK 0

3.1

Definies de deadlock.......................................................................................0

3.2

Condies necessrias para a ocorrncia de deadlock.....................................0

3.3

Representao de deadlock em grafos..............................................................0

3.4

Mtodos para tratamento de deadlocks..............................................................0

3.4.1 Algoritmo do avestruz

3.5

Preveno de deadlock.......................................................................................0

3.6

Como evitar deadlock..........................................................................................0

3.7

Deteco de deadlock.........................................................................................0

3.8

Recuperao do deadlock...................................................................................0

3.8.1 Abortar um ou mais processos para interromper a espera circular 0


3.8.2 Preemptar alguns recursos:
3.9

Concluses sobre deadlock................................................................................0


REFERNCIAS BIBLIOGRFICAS

1.1

PROGRAMAO CONCORRENTE

Introduo

Programao concorrente um paradigma (modelo) de programao


para a construo de programas de computador que contem mltiplas atividades
que interagem entre si e progridem em paralelo (atividades iniciadas, mas no
terminadas, ou seja, esto em andamento, em algum ponto intermedirio da
execuo). Isto uma propriedade de um sistema - que pode ser um programa
individual, um computador ou uma rede.
O termo programao concorrente provm do ingls: concurrent
programming, onde concurrent significa acontecendo ao mesmo tempo.
relacionado com programao paralela, porm, tem seu foco na interao entre as
tarefas.
A grande maioria dos programas escritos so seqenciais, ou seja, exige
a execuo seqencial, em ordem, respeitando incio e trmino de cada componente
do programa. O problema dividido em uma srie de instrues que so executadas
uma aps a outra. Neste caso, existe somente um fluxo de controle no programa.
J na programao concorrente, um trabalho particionado em vrias
tarefas que so executadas quase que ao mesmo tempo pelo processador. O
processador atua to rapidamente que temos a impresso de que as tarefas esto
sendo executadas simultaneamente (pseudo-paralelo). Estas tarefas trocam
informaes entre si.

1.2

Diferena entre programao concorrente e paralela

No devemos confundir programao concorrente com a computao


paralela simplesmente, em que ocorre somente o processamento simultneo fsico,
e no lgico. O programa concorrente gera vrios processos que cooperam para a
realizao de uma tarefa atravs de entrelaamento e aes (interleaving). Por
exemplo, os processos simultneos podem ser executados em um nico ncleo do
processador intercalando as etapas de execuo de cada processo atravs de uma
diviso de tempo: apenas um processo executado de cada vez, e se ele no for
concludo durante a sua fatia de tempo, pausado o seu clculo, um outro processo
comea ou retoma, e depois o processo original retomado. Desta forma, vrios
processos esto em andamento, mas apenas um processo est sendo executado
em um determinado instante. Como dito acima, embora relacionada com
programao paralela, programao concorrente foca mais na interao entre as
tarefas. Em computao paralela, a execuo, literalmente, ocorre no mesmo
instante; por exemplo, em uma mquina com multi-processadores. A computao
paralela impossvel em um nico processador, j que apenas um clculo pode
ocorrer em um mesmo instante (durante um nico ciclo de clock).
A execuo concorrente admite a seguinte possibilidade de progresso:
Pseudo-paralela: execuo em um nico processador. Este
reveza-se entre as atividades. No simultnea. O processador executa
rapidamente um pouco de cada instruo em fraes de segundo, de forma
que, para o usurio, parece que esto sendo realizadas ao mesmo tempo;
J o paralelismo real:
Paralela: execuo em vrios processadores que compartilham
uma memria. Cada processo do programa est sendo executado em um
processador diferente;
Distribuda: execuo em vrios processadores independentes,
sem compartilhamento de memria.

1.3

Motivao e finalidade

O aumento de desempenho e agilidade , com certeza, uma das grandes


vantagens deste modelo de programao, pois aumenta-se a quantidade de tarefas
sendo executadas em determinado perodo de tempo. Tambm destaca-se a
possibilidade de uma melhor modelagem de programas, pois determinados
problemas computacionais so concorrentes por natureza.
A programao concorrente mais complexa que a programao
seqencial. Um programa concorrente pode apresentar todos os tipos de erros que
aparecem nos programas seqenciais e, adicionalmente, os erros associados com
as interaes entre os processos. Alguns erros so difceis de reproduzir e de
identificar.
Apesar da maior complexidade, existem muitas reas nas quais a
programao concorrente vantajosa. Em sistemas nos quais existem vrios
processadores (mquinas paralelas ou sistemas distribudos), possvel aproveitar
esse paralelismo e acelerar a execuo do programa. Mesmo em sistemas com um
nico processador, existem, obviamente, razes para o seu uso em vrios tipos de
aplicaes.
Considere um programa que deve ler registros de um arquivo, colocar em
um formato apropriado e ento enviar para uma impressora fsica (em oposio a
uma impressora lgica ou virtual, implementada com arquivos). Podemos fazer isso
com um programa seqencial que, dentro de um lao, faz as trs operaes (ler,
formatar e imprimir registro).

Arquivo

Processo

Impressora
fsica

Figura 1.1 - Programa seqencial acessando arquivo e impressora.

Inicialmente o processo envia um comando para a leitura do arquivo e fica


bloqueado. O disco ento acionado para realizar a operao de leitura. Uma vez
concluda a leitura, o processo realiza a formatao e inicia a transferncia dos
dados para a impressora. Como se trata de uma impressora fsica, o processo
executa um lao no qual os dados so enviados para a porta serial ou paralela
apropriada. Como o buffer da impressora relativamente pequeno, o processo fica
preso at o final da impresso. O disco e a impressora nunca trabalham
simultaneamente, embora isso seja possvel. o programa seqencial que no
consegue ocupar ambos.
Vamos agora considerar um programa concorrente como o mostrado na
figura 2 para realizar a impresso do arquivo. Dois processos dividem o trabalho. O
processo leitor responsvel por ler registros do arquivo, formatar e colocar em um
buffer na memria. O processo impressor retira os dados do buffer e envia para a
impressora. suposto aqui que os dois processos possuem acesso memria onde
est o buffer. Este programa mais eficiente, pois consegue manter o disco e a
impressora trabalhando simultaneamente. O tempo total para realizar a impresso
do arquivo vai ser menor.

Arquivo

Processo
Leitor

Buffer

Processo
Impressor

Impressora
fsica

Figura 1.2. - Programa concorrente acessando arquivo e impressora.

O uso da programao concorrente natural nas aplicaes que


apresentam paralelismo intrnseco, ditas aplicaes inerentemente paralelas.
Nessas aplicaes pode-se distinguir facilmente funes para serem realizadas em
paralelo. Este o caso do spooling de impresso, exemplo que ser apresentado a

seguir. Pode-se dizer que, em geral, a programao concorrente tem aplicao


natural na construo de sistemas que tenham de implementar servios que so
requisitados de forma imprevisvel [DIJ65]. Nesse caso, o programa concorrente ter
um processo para realizar cada tipo de servio.
A seguir considerado um servidor de impresso para uma rede local. A
figura 3 ilustra uma rede local na qual existem diversos computadores pessoais (PC)
utilizados pelos usurios e existe um computador dedicado ao papel de servidor de
impresso. O servidor usa um disco magntico para manter os arquivos que esto
na fila de impresso.

PC

PC

Usurios

PC
Servidor de Impresso

Figura 1.3. - Rede local incluindo um servidor de impresso dedicado.

importante observar que o programa "servidor de impresso" possui


paralelismo intrnseco. Ele deve: (1) receber mensagens pela rede; (2) escrever em
disco os pedaos de arquivos recebidos; (3) enviar mensagens pela rede (contendo,
por exemplo, respostas s consultas sobre o seu estado); (4) ler arquivos
previamente recebidos (para imprimi-los); (5) enviar dados para a impressora. Todas
essas atividades podem ser realizadas "simultaneamente". Uma forma de programar
o servidor de impresso usar vrios processos, cada um responsvel por uma
atividade em particular. Obviamente, esses processos vo precisar trocar
informaes para realizar o seu trabalho.
A figura 4 mostra uma das possveis solues para a organizao interna
do programa concorrente "servidor de impresso". Cada crculo representa um
processo. Cada flecha representa a passagem de dados de um processo para o
outro. Essa passagem de dados pode ser feita, por exemplo, atravs de variveis
que so compartilhadas pelos processos envolvidos na comunicao.

Vamos agora descrever a funo de cada processo. O processo


"Receptor" responsvel por receber mensagens da rede local. Ele faz isso atravs
de chamadas de sistema apropriadas e descarta as mensagens com erro. As
mensagens corretas so ento passadas para o processo "Protocolo". Ele analisa o
contedo das mensagens recebidas luz do protocolo de comunicao suportado
pelo servidor de impresso. possvel que seja necessrio a gerao e o envio de
mensagens de resposta. O processo "Protocolo" gera as mensagens a serem
enviadas e passa-as para o processo "Transmissor", que as envia atravs de
chamadas de sistema apropriadas.
Algumas mensagens contm pedaos de arquivos a serem impressos.
suposto aqui que o tamanho das mensagens tenha um limite (alguns Kbytes). Dessa
forma, um arquivo deve ser dividido em vrias mensagens para transmisso atravs
da rede. Quando o processo "Protocolo" identifica uma mensagem que contm um
pedao de arquivo, ele passa esse pedao de arquivo para o processo "Escritor".
Passa tambm a identificao do arquivo ao qual o pedao em questo pertence.
Cabe ao processo "Escritor" usar as chamadas de sistema apropriadas para
escrever no disco. Quando o pedao de arquivo em questo o ltimo de seu
arquivo, o processo "Escritor" passa para o processo "Leitor" o nome do arquivo, que
est pronto para ser impresso.

Receptor

Transmissor

Protocolo
Escritor

Leitor

Impressor

Figura 1.4. - Servidor de impresso como programa concorrente.

O processo "Leitor" executa um lao no qual ele pega um nome de


arquivo, envia o contedo do arquivo para o processo "Impressor" e ento remove o
arquivo lido. O envio do contedo para o processo "Impressor" feito atravs de um
lao interno composto pela leitura de uma parte do arquivo e pelo envio dessa parte.
Finalmente, o processo "Impressor" encarregado de enviar os pedaos de arquivo
que ele recebe para a impressora. O relacionamento entre os processos "Leitor" e
"Escritor" foi descrito antes, no incio desta seo.
O servidor de impresso ilustra o emprego da programao concorrente
na construo de uma aplicao com paralelismo intrnseco. O resultado uma
organizao interna clara e simples para o programa. Um programa seqencial
equivalente seria certamente menos eficiente

1.4

Interao e comunicao concorrente

Em alguns sistemas computacionais concorrentes, a comunicao entre


os componentes escondida do programador, enquanto em outros a comunicao
deve ser lidada explicitamente. A comunicao explcita pode ser dividida em duas
classes: por memria compartilhada ou por troca de mensagens.

1.4.1 Comunicao por memria compartilhada


Os componentes concorrentes comunicam-se ao alterar o contedo de
reas de memria compartilhadas, o que geralmente requer o desenvolvimento de
alguns mtodos de trava para gerenciar a utilizao de um determinado recurso
entre as tarefas.

1.4.2

Comunicao por troca de mensagens


Componentes concorrentes comunicam-se ao trocar mensagens, cuja

leitura pode ser feita assincronamente (tambm denominada como "enviar e rezar",
apesar da prtica padro ser reenviar mensagens que no so sinalizadas como
recebidas) ou pelo mtodo rendezvous, no qual o emissor bloqueado at que a
mensagem seja recebida (comunicao sncrona).
A comunicao por mensagens tende a ser mais simples que a
comunicao por memria compartilhada, e considerada uma forma mais robusta
de programao concorrente.

1.5

Diferena entre thread e processo

Um processo aquilo que executa um conjunto de instrues associadas


a um programa (programa este que pode ter vrios processos a si associados),
tendo cada um uma zona de memria independente. Cada processo possui tambm
um identificador nico (o process identification ou simplesmente pid). Por sua vez,
cada processo pode ser constitudo por vrias threads (linhas de execuo), que
partilham as variveis globais e a heap, mas tm uma stack (pilha) independente.
Ter vrios processos e/ou threads em execuo em simultneo um requisito
essencial para que se tire partido de um processador multi-core. O fato de
partilharem recursos torna as threads mais leves do que os processos, permitindo
tambm uma comunicao mais simples entre elas. Por estes motivos, a utilizao
de vrias threads habitualmente a melhor opo para programao concorrente.
O que melhor distingue uma thread de um processo o espao de
endereamento. Todas as threads de um processo trabalham no mesmo espao de
endereamento, que a memria lgica do processo hospedeiro. Isto , quando se
tem um conjunto de threads dentro de um processo, todas as threads executam o
cdigo do processo e compartilham as suas variveis. Por outro lado, quando se tem
um conjunto de processos, cada processo trabalha num espao de endereamento
prprio, com um conjunto separado de variveis.
No caso de um processo com N threads, tem-se um nico registro
descritor (o registro do processo hospedeiro) e N mini-descritores de threads. O
mini-descritor de cada thread usado para salvar os valores dos registradores da
UCP (PC, PSW, etc.). Adicionalmente, cada thread possui uma pilha, que usada
para as chamadas e retornos de procedimentos.
mais fcil chavear a execuo entre threads (de um mesmo processo)
do que entre processos, pois se tem menos informaes para salvar e restaurar. Por
esse motivo, as threads so chamadas tambm de "processos leves".

1.5.1 Estados de um processo

Executando (Running): Utilizando a CPU


Executvel ou Pronto (Runnable ou Ready): Esperando para ser escalonado para
usar a CPU
Suspenso (Suspended): Recebeu um sinal para ser suspenso
Bloqueado (Blocked): Esperando pela concluso de algum servio solicitado ao
S.O.

Figura 2.1. Estados de um processo

1.6

Criao e Manuteno de Processos

As principais system calls (chamadas de sistema) disponveis para a


criao e manipulao de processos so as seguintes:

Fork: cria um processo filho;

Wait: espera que um processo termine;

Getpid: devolve o pid de um processo;

Exit: termina o processo atual.

Figura 2.2. Espao de endereamento de um processo

1.7

Suporte em linguagens

Atualmente, as linguagens mais utilizadas para tais construes so Java


e C#. Ambas utilizam o modelo de memria compartilhada, com o bloqueio sendo
fornecido por monitores. Entretanto, o modelo de troca de mensagens pode ser
implementado sobre o modelo de memria compartilhada. Entre linguagens que
utilizam o modelo de troca de mensagens, Erlang possivelmente a mais utilizada
pela indstria atualmente. Vrias linguagens de programao concorrente foram
desenvolvidas como objeto de pesquisa, como por exemplo Pict. Apesar disso,
linguagens como Erlang, Limbo e Occam tiveram uso industrial em vrios momentos
desde a dcada de 1980. Vrias outras linguagens oferecem o suporte
concorrncia atravs de bibliotecas, como por exemplo C e C++.

CHAMADA DE PROCEDIMENTO REMOTO - RPC

2.1

Introduo

Remote

Procedure

Call,

tambm

traduzido

como

Chamada

de

Procedimento Remoto, ou ainda, Chamada de Procedimentos Distncia um tipo


de comunicao entre processos em que um computador local solicita servios a um
servidor que executa a solicitao e envia a resposta ao computador cliente. Esta
operao realizada por meio da estrutura da rede de computadores, ou seja, a
solicitao e execuo dos servios ocorrem em computadores distintos (cliente e
servidor), sendo utilizada a rede de computadores para realizar a comunicao e
viabilizar este procedimento.
A Chamada de Procedimento Remoto tem como objetivo possibilitar que
procedimentos encontrados em servidores possam ser chamados como se tivessem
no computador local onde foi solicitada a chamada. O cdigo que est no servidor,
utiliza os servios de comunicao oferecido pela rede para receber as solicitaes
de servio e tambm para enviar as respostas.
Na prtica a RPC funciona da seguinte forma: O programa cliente faz a
chamada de procedimentos e usurio imagina que a execuo est ocorrendo no
computador local, porm, os procedimentos sero executados no servidor. O
servidor possui o cdigo que implementa a lgica da aplicao e o cdigo inserido
pelo ambiente de desenvolvimento. O cdigo inserido recebe as solicitaes do
cliente, chama o procedimento local inerente chamada e envia os resultados de
volta.
Para que haja sucesso na comunicao necessrio que acontea
compatibilidade das informaes entre o cliente e o servidor, ou seja, o cliente deve
receber a mesma quantidade e tipos de parmetros processados pelo servidor. A
compatibilidade das informaes controlada por um arquivo usado quanto da

compilao tanto do cliente, quando do servidor. Neste arquivo so encontradas as


definies dos procedimentos, quantidade e tipos dos argumentos e tambm a
quantidade e tipo dos valores obtidos.
O RPC um mecanismo muito utilizado em sistemas distribudos e nos
sistemas de mquinas paralelas sem memria comum, organizados de acordo com
o modelo cliente/servidor.
A idia principal permitir a chamada de um procedimento em uma
mquina por um programa sendo executado em outra mquina. Em uma RPC, um
programa em uma mquina P, (cliente) chama um procedimento em uma mquina
Q, (servidor) enviando os parmetros adequados. O cliente suspenso e a
execuo do procedimento comea. Os resultados so enviados da mquina Q para
a mquina P e o cliente acordado.

2.2

Operao de uma RPC

O mecanismo da RPC tem que ser transparente, ou seja, as chamadas


tm que parecer locais. Ao ser feita uma chamada a um procedimento remoto, da
mesma forma que em uma chamada local, os parmetros so colocados na pilha,
assim como guardado o endereo de retorno.

2.2.1 Representao grfica da operao de uma RPC:

No processo de uma RPC, a funo dos servidores de atender s


demandas dos clientes, sendo que cada servidor fica responsvel por um conjunto
de servios, por exemplo, o File System responsvel pelas funes de gerncia de
arquivos, o Memory manager pelas funes de gerncia de memria, etc. Os
servidores executam o seguinte procedimento:
Pegar a primeira mensagem da fila;
Identificar a funo;
Verificar o nmero de parmetros;
Chamar o procedimento correspondente.

As etapas de uma chamada local so as seguintes:

1. O cliente chama o procedimento e envia os parmetros;


2. O cliente fica suspenso;
3. Constri a mensagem;
4. Envia a mensagem para o ncleo local de comunicao;

5. O ncleo de comunicao analisa o cabealho da mensagem e


descobre que o servidor local (mesmo processador);
6. Aloca um buffer;
7. Faz uma cpia da mensagem para o buffer;
8. Coloca o endereo do buffer na fila de mensagens do servidor;
9. Acorda o servidor;
10. O servidor pega a mensagem;
11. Analisa os parmetros;
12. Dispara os procedimentos correspondentes ao servio;
13. Prepara a mensagem de resposta;
14. Envia a mensagem de resposta ao ncleo de comunicao;
15. O ncleo de comunicao acorda o cliente;
16. O stub client extrai os resultados;
17. O cliente que fez a chamada inicial recomea.

No que diz respeito s chamadas de servidores distantes, a diferena a


ao do ncleo de comunicao:

1. Procura em sua tabela de servidores a identificao do servidor;


2. Envia a mensagem endereada a este servidor;
3. O ncleo de comunicao do processador destinatrio recebe a
mensagem;
4. Analisa seu header e determina o servidor destinatrio;
5. Aloca um buffer e copia a mensagem;

6. Coloca o endereo do buffer na fila de mensagens do servidor e o


acorda;

2.3

Modelo sncrono e modelo assncrono

Existem dois modelos de Chamada de Procedimento Remoto. O modelo


sncrono e o modelo assncrono.
Modelo sncrono: O processo trata cada chegada de mensagem por vez,
enquanto isso, o computador cliente fica suspenso at o momento que a resposta
chegue. Este modelo no adequado porque no existe paralelismo entre o cliente
e servidor nas arquiteturas paralelas ou distribudas. Caso haja uma desconexo o
cliente ficar bloqueado. Um RPC sncrono trata as chamadas locais e distantes de
maneira idntica.
Modelo assncrono: O cliente envia as requisies para todos os
servidores em sequencia e depois espera por todas as respostas. A chamada no
suspende o cliente e as respostas so recebidas quando elas so necessrias,
assim, o cliente continua a sua execuo em paralelo com o servidor.

2.4

Possveis Falhas durante uma RPC

Cliente no consegue localizar o Servidor: Isto pode acontecer por duas


razes: o servidor ficar fora do ar ou ento determinado programa foi compilado com
um client stub desatualizado. A soluo para este problema disparar um timer aps
enviar cada solicitao; se o timer expirar, ser necessrio enviar o pedido

novamente at que seja atingido um limite mximo de repeties. Se o limite for


alcanado, ocorrer uma exceo, que precisa ser tratada pelo programa cliente.
Perda de mensagens de Solicitao de Servios: Uma mensagem pode
se perder na rede e ento o servio solicitado deixar de ser executado no por
falha do servidor, mas porque este no recebeu o pedido devido. A soluo tambm
usar um timer para controlar o reenvio das mensagens.
Perda de mensagens de Resposta: Tambm utilizado um timer para
solucionar o problema.
Crash do Servidor: uma situao em que muito difcil descobrir o que
aconteceu, j que, com o servidor quebrado, no possvel obter nenhuma
informao sobre o resultado da RPC.

2.4.1 Crash do servidor

Na representao, o caso (a) aquele em que tudo d certo e no h


com que se preocupar. No caso (b), a solicitao foi executada e, portanto, no
sendo a operao idempotente, no possvel execut-la de novo. Na situao (c),
por sorte nada foi feito antes que o servidor quebrasse.

2.4.2 Crash do cliente

Quando um cliente pra de operar, as solicitaes dele que estavam


sendo processadas perdem o sentido, pois no h ningum aguardando o resultado
de seu trabalho. Estas solicitaes so chamadas de rfs e precisam ser tratadas
com cuidado, uma vez que desperdiam tempo de processador e podem estar
executando bloqueios em alguns recursos valiosos do sistema.
Para este tipo de falha h vrias solues:
Escrever um log de cada chamada RPC, a fim de ser possvel
desfaz-la, se necessrio;

Usar a chamada reencarnao: o tempo dividido em intervalos


numerado sequencialmente denominados pocas; quando um cliente
reiniciado, este declara o nascimento de uma nova poca enviando um
broadcast pela rede. Os servidores, ao receberem a mensagem, verificam se
possuem algum procedimento em execuo de uma poca anterior; se o
encontram, ento este abortado. Se for usada a reencarnao gentil,
ento os servidores tentam localizar o proprietrio de cada operao rf a
fim de aproveitar o servio que j foi realizado.
Usar o mecanismo de expirao. Neste caso, cada RPC recebe
um tempo mximo em que pode ficar executando, ao final do qual ela
destruda. A dificuldade que, dada a diversidade de tipos de chamadas
possveis, fica complicado estabelecer um intervalo mdio de tempo que se
aplique a todos os casos.

3.1

DEADLOCK

Definies de deadlock

Deadlock, tambm traduzido como blocagem ou impasse, um termo


utilizado para traduzir um problema que ocorre quando um grupo de processos
compete entre si, ou seja, h um impasse e dois ou mais processos ficam impedidos
de continuar suas execues e ficam bloqueados. Segundo Tanenbaum, um
conjunto de processos estar em situao de deadlock se todo processo
pertencente ao conjunto estiver esperando por um evento que somente outro
processo desse mesmo conjunto poder fazer acontecer.
Deadlock acontece porque, em um ambiente multiprogramado, vrios
processos podem competir por um nmero finito de recursos. Um processo requisita
recursos, se no houver disponibilidade do recurso naquele momento, o processo
entra em estado de espera e pode nunca mais mudar de estado se os recursos
requisitados ficarem retidos por outros processos no estado de espera.
Segundo Silberchatz, "em um deadlock, os processos nunca terminam de
executar, e os recursos do sistema ficam retidos, impedindo que outras tarefas
sejam iniciadas."
Um exemplo que pode facilitar a compreenso de deadlock a seguinte
analogia: Imagine dois carros movimentando em direes opostas em uma rua que
permite a passagem de apenas um deles. Nesta situao, ao se aproximar, os dois
ficam impedidos de continuar seu percurso.

3.2

Condies necessrias para a ocorrncia de deadlock

Para que ocorra um deadlock as quatro condies a seguir devem ser


atendidas de forma simultnea em um sistema.
Condio de no-preempo: Nestas condies, recursos que j esto
devidamente alocados a um processo no podem ser tomados a fora. Ele s pode
ser liberado de forma voluntria pelo processo que detm depois deste processo
concluir sua tarefa, ou seja, precisa ser explicitamente liberado pelo processo que
detm a sua posse. De uma forma resumida se o recurso for tirado do processo
atual ocorrero falhas;
Condio de espera circular: Deve existir uma cadeia circular de dois ou
mais processos, cada um deles ficam esperando por um recurso que est sendo
usado pelo prximo membro da cadeia;
Condio de excluso mtua: Somente um processo por vez pode usar
o recurso, ou seja, em um determinado instante. Se outro processo requisitar esse
recurso, o processo requisitante dever ser adiado at a liberao do recurso.
Resumindo, cada recurso estar entre duas situaes: ou associado a um nico
processo ou disponvel;
Condio de posse e espera: Um processo precisa estar de posse de
pelo menos um recurso e esperando para obter a posse de outros recursos que
esto ocupados em outros processos;

3.3

Representao de deadlock em grafos

comum a demonstrao de deadlock por meio de grafos direcionados,

onde o processo representado por um crculo e o recurso, por um quadrado.


Quando um processo solicita um recurso, uma seta dirigida do crculo ao
quadrado. Quando um recurso alocado a um processo, uma seta dirigida do
quadrado ao crculo. Se o grafo no tiver ciclo, nenhum processo no sistema est
em deadlock, porm, se o grafo tiver um ciclo, poder haver deadlock.
Representao de deadlock em grafos de alocao de recursos, com dois
processos A e B, e dois recursos R1 e R2.

Acima pode ser visto dois processos diferentes (A e B), cada um com um
recurso diferente alocado (R1 e R2). Este um exemplo clssico de deadlock. A
condio de espera circular facilmente visvel nos processos, onde cada um
solicita o recurso que est alocado ao outro processo.
Representao de: P1 R1 P2R3 R2 P1 P2 R3 P3
R2 P2

Os processos P1, P2, P3, esto em deadlock. O processo P2 est


aguardando o recurso R3, em posse do processo P3. O processo P3 est
aguardando que o processo P1 ou o processo P2 libere o recurso R2. possvel
identificar tambm que o processo P1 est aguardando o processo P2 liberar o
recurso R1.
Representao de: P1 R1 P3R2 P1

Neste
grafo,

apesar

de

haver um ciclo, no
existe deadlock. O
processo P4 pode
liberar sua instncia
do recurso R2 e este recurso ser alocado pelo processo P3, rompendo o ciclo.

3.4

Mtodos para tratamento de deadlocks

Podemos considerar quatro formas de lidar com problemas de deadlock:

Ignorar a situao e fingir que este problema no ocorre no sistema;


Detectar o deadlock e recuperar o sistema, ou seja, deixar que os deadlocks

ocorram, detect-los e agir;


Usar um protocolo para prevenir ou evitar deadlock, garantindo que o sistema

no entre em estado de deadlock;


Anulao dinmica por meio de uma alocao cuidadosa de recursos.

3.4.1 Algoritmo do avestruz


O algoritmo do avestruz defende a idia de que a melhor soluo fingir
que nada est acontecendo. Este nome utilizado porque h um mito que diz que
quando o avestruz est com muito medo ele enterra a cabea. Da a citao que
explica o nome do algoritmo: Enterre a cabea na areia e finja que nada est
acontecendo. H muitas criticas acerca desta estratgia, inclusive, muitos
matemticos consideram totalmente inaceitvel e defendem que os problemas de
deadlock devem ser evitados. Porm, outros defendem que a frequncia em que
ocorre este tipo de evento muito baixa para que seja necessrio sobrecarregar a
CPU com cdigos de tratamento, e que, ocasionalmente, aceitvel reiniciar o
sistema de forma manual, como uma ao corretiva.

3.5

Preveno de deadlock

Tendo em vista que para a ocorrncia de um deadlock necessrio que


as quatro condies (no-preempo, espera circular, excluso mtua e posse e
espera) aconteam simultaneamente, garantindo que pelo menos uma dessas
condies no seja atendida, o sistema estar prevenindo do deadlock. Desta forma,
preveno de deadlock pode ser definida como um conjunto de mtodos aplicados
para garantir que pelo menos uma das quatro condies no seja satisfeita.
Se no houver nenhum algoritmo no sistema para preveno ou para
evitar deadlock possvel a ocorrncia deste fator. Um sistema pode ter um
algoritmo que examina seu estado para certificar da ocorrncia de um deadlock e
um outro algoritmo capaz de recuperar do deadlock. Se um sistema no possuir
nenhum algoritmo de deteco e recuperao de deadlock ele pode chegar a uma
situao em que estar em estado de deadlock, porm no haver como reconhecer
o que aconteceu. Neste caso, o deadlock no detectado resultar em degradao do
desempenho do sistema, tendo em vista que os recursos esto sendo mantidos por
processos que no podem ser executados e tambm porque, medida que fizerem
requisies dos recursos, mais e mais processos entraro em estado de deadlock

at chegar ao ponto de parar de funcionar e necessitar de ser reiniciado


manualmente.

3.6

Como evitar deadlock

Para evitar a ocorrncia de deadlock o sistema operacional deve receber


com antecedncia informaes adicionais com relao s quais recursos um
processo ir requisitar e usar durante o seu tempo de vida. Com esta informao e
conhecimento adicional possvel decidir, para cada requisio, se o processo deve
esperar ou no. Para decidir se a requisio atual pode ser satisfeita ou se precisa
ser adiada, o sistema ir considerar os recursos disponveis, os recursos alocados a
cada processo e tambm as requisies e liberaes futuras de cada processo.
Um algoritmo para evitar deadlock examina dinamicamente o estado de
alocao de recursos para garantir que pelo menos uma das condies necessrias
para a ocorrncia de deadlock nunca exista, ou seja, previnem os deadlocks
restringindo o modo como as restries so feitas e isso diminui a utilizao de
dispositivos e a reduo do thoughput. Um mtodo alternativo para evitar deadlocks
exigir informaes adicionais sobre como os recursos devem ser requisitados.

3.7

Deteco de deadlock

Para a deteco do deadlock necessrio um algoritmo que examine o


estado do sistema para determinar se houve a ocorrncia do impasse. Um esquema
de deteco e recuperao exige custo adicional com tempo de execuo e da
manuteno das informaes necessrias para execuo do algoritmo de deteco
e tambm com as perdas inerentes recuperao de um deadlock. S o mero
procedimento de atualizao dessas estruturas j gera uma sobrecarga no sistema,
pois toda vez que um processo aloca, libera ou requisita um recurso, as estruturas
precisam ser atualizadas.

So conhecidos vrios recursos de deteco de ciclos em grafos


dirigidos. Ser mostrado a seguir um algoritmo que inspeciona o grafo e termina nas
seguintes condies: O algoritmo percorre o grafo e termina, quando encontra um
ciclo ou quando percebe que no existe um ciclo. Ele usa uma estrutura de dados, L,
uma lista de ns e uma lista de arcos. Durante a execuo do algoritmo, os arcos
so marcados para indicar que j foram inspecionados para evitar repeties.

Baseado na figura acima, o algoritmo deve seguir os seguintes passos:


1-Para cada n do grafo, N, execute os seguintes passos, usando o N
como inicial.
2-Inicialize L como lista vazia e assinale os arcos como desmarcados.
3- Acrescente o n atual ao final de L e verifique se o n parece em L
duas vezes. Se sim, o grafo contm um ciclo e o algoritmo termina.
4- A partir do referido n, veja se existem quaisquer arcos de sada no
marcados. Se sim, v para o passo 5; seno v para o passo 6.
5- Pegue qualquer arco de sada no marcado aleatoriamente e marqueo. Ento siga para o prximo n corrente e v para o passo 3.
6- Se esse n for o inicial, o grafo no conter um ciclo e ser o fim do
algoritmo. Caso contrrio, o fim ainda no foi alcanado, ento volte para
o n anterior, marque como atual e v para o passo 3.

O que este algoritmo faz tomar cada n, um aps o outro, e fazer uma
busca do tipo depth-first. Se passar novamente por um n j percorrido, significa que
encontrou um ciclo. Se j tiver percorrido todos os arcos a partir de um n qualquer,
ele retorna ao n anterior. Se esta propriedade for satisfeitas em todos ns o sistema
no ter deadlock.

3.8

Recuperao do deadlock

H vrias alternativas disponveis quando um algoritmo de deteco


determina que existe um deadlock. Uma das alternativas informar ao operador da
ocorrncia do deadlock e deixar que ele trate o deadlock manualmente. Outra
alternativa deixar o sistema se recuperar do deadlock automaticamente. H duas
opes para desfazer um deadlock: Uma abortar um ou mais processos para
interromper a espera circular e a outro preemptar alguns recursos de um ou mais
processos em deadlock.

3.8.1 Abortar um ou mais processos para interromper a espera circular


H dois mtodos para eliminar deadlock abordando um processo:

Abordar todos os processos em deadlock: um mtodo que visa


desfazer o ciclo de deadlock. Este mtodo possui um custo alto porque
os processos de deadlock podem ter sido executados por muito tempo
e os resultados da computao parcial precisam ser descartados e

provavelmente tero de ser refeitos mais tarde.


Abortar um processo de cada vez at que o ciclo de deadlock seja
eliminado:Tambm possui um custo considervel, tendo em vista que
depois de cada processo ser abortado, um algoritmo de deteco de
deadlock precisa ser invocado para determinar se ainda h processos

em deadlock.
O mtodo de abortar processos no uma alternativa fcil. Se por
exemplo o processo estiver no meio de uma atualizao de um arquivo, seu
cancelamento deixar esse arquivo em estado incorreto. Na pratica, se um processo
estivesse no meio de uma impresso e fosse interrompido, o sistema teria que
reiniciar a impressora para um estado correto antes de liberar a impressora para
imprimir a prxima tarefa.
Se a escolha for o mtodo de trmino parcial, ser necessrio determinar
quais processos em deadlock devem ser terminados. Esta determinao uma
deciso poltica, semelhante s decises de escalonamento de CPU.

3.8.2 Preemptar alguns recursos:

Para eliminar deadlocks com a tcnica de preempo de recursos


necessrio apropriar de alguns recursos de processos com sucesso e entregar
esses recursos a outra processos, at que o ciclo de deadlock seja desfeito.
Trs questes precisam ser resolvidas se a preempo tiver que lidar com
deadlocks:

Seleo de uma vtima: Assim como no trmino de processo necessrio


determinar a ordem da preempo para minimizar o custo. Os fatores de
custo podem incluir parmetros como nmero de recursos que um processo
em deadlock est mantendo e o tempo que o processo consumiu durante sua

execuo.
Reverso (Rollback): Ao apropriar de um recurso de um processo, o
processo no poder continuar com sua execuo normal, uma vez que no
ter um recurso necessrio. Assim ser necessrio fazer o rollback do
processo at algum estado seguro e reinici-lo a partir deste estado. Pelo fato
de ser difcil determinar qual o estado seguro, a soluo mais simples

fazer um rollback total.


Starvation: Em um sistema em que a escolha da vtima normalmente
baseada em fatores de custo, pode ocorrer que o mesmo processo sempre

seja o escolhido. Desta forma esse processo nunca completar sua tarefa.
Por este motivo necessrio garantir que um processo seja escolhido como
vtima em um nmero finito e pequeno de vezes. Normalmente isso ocorre
incluindo o nmero de rollbacks no fator de custo.

3.9

Concluses sobre deadlock

Um estado de deadlock ocorre quando dois ou mais processos esto


esperando indefinidamente por um evento que s pode ser causado por um dos
processos em espera.
Existem quatro estratgias para lidar com os deadlocks:

Ignorar a situao e fingir que este problema no ocorre no sistema;


Detectar o deadlock e recuperar o sistema, ou seja, deixar que os deadlocks

ocorram detect-los e agir;


Usar um protocolo para prevenir ou evitar deadlock, garantindo que o sistema

no entre em estado de deadlock;


Anulao dinmica por meio de uma alocao cuidadosa de recursos.
Um deadlock s ocorrer se as quatro condies necessrias forem

satiristas simultaneamente. Estas condies so:

Condio de no-preempo;
Condio de espera circular;
Condio de excluso mtua;
Condio de posse e espera.
Para prevenir um deadlock, basta garantir que pelo menos uma das

condies necessrias nunca seja satisfeita.


Referncias Bibliogrficas
TANENBAUM, A. S. Sistemas Operacionais Modernos Andrew Stuart
Tanenbaum So Paulo: Pearson Prentice Hall, 2009.
COLOURIS, G. S. Fundamentos de Tolerncia a Falhas Andrew Stuart
Tanenbaum So Paulo: Pearson Prentice Hall, 2009.

SILBERSCHATZ, A. Sistemas Operacionais: conceitos e aplicaes - Abraham


Silberschatz - Editora Elsevier 8.
DEITEL, H. M.; DEITEL, P. J.; CHOFFNES, D. R. Sistemas Operacionais. 3 ed.
Harvey M. Deitel, Paul J. Deitel, David R. Choffnes - So Paulo: Pearson Prentice
Hall, 2005.