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

SistemasOperacionais

ProblemasClssicosdeComunicaoentre Processos
NortonTrevisanRoman MarceloMorandini JUeyama

ApostilabaseadanostrabalhosdeKalinkaCasteloBranco,Antnio CarlosSementille,PaulaPrataenastransparnciasfornecidasnosite decompradolivro"SistemasOperacionaisModernos"

Produtor Consumidor

Um sistema composto por entidades produtoras e entidades consumidoras. Entidades produtoras

Responsveis pela produo de itens que so armazenados em um buffer (ou em uma fila) Itens produzidos podem ser consumidos por qualquer consumidor Consomem os itens armazenados no buffer (ou na fila) Itens consumidos podem ser de qualquer produtor

Entidades consumidoras

Produtor Consumidor

Jantar dos Filsofos

Cinco filsofos esto sentados ao redor de uma mesa circular para o jantar.

Cada filsofo possui um prato para comer macarro. Alm disso, eles dispem de hashis, em vez de garfos

4 3

0 2 1

Cada um precisa de 2 hashis

Entre cada par de pratos existe apenas um hashi.

Hashis precisam ser compartilhados de forma sincronizada

Jantar dos Filsofos

Os filsofos comem e pensam, alternadamente

No se atm a apenas uma das tarefas

Alm disso, quando comem, pegam apenas um hashi por vez

Se conseguir pegar os dois, come por alguns instantes e depois larga os hashis

Como evitar que fiquem bloqueados?

Jantar dos Filsofos

tpicos

Que fazer???

Jantar dos Filsofos

tpicos

Jantar dos Filsofos

Jantar dos Filsofos

Isso funciona?

Jantar dos Filsofos

Isso funciona?

Em take_fork():

Se todos os filsofos pegarem o hashi da esquerda, nenhum pegar o da direita deadlock

E como solucionar?

Jantar dos Filsofos

Isso funciona?

Em take_fork():

Se todos os filsofos pegarem o hashi da esquerda, nenhum pegar o da direita deadlock

E como solucionar?

Aps pegar o hashi da esquerda, o filsofo verifica se o da direita est livre. Se no estiver, devolve o hashi que pegou, espera um pouco e tenta novamente

Jantar dos Filsofos

Isso funciona?

Jantar dos Filsofos

Isso funciona?

Se todos os filsofos pegarem o hashi da esquerda ao mesmo tempo:


Vero que o da direita no est livre Largaro seu garfo e e esperaro Pegaro novamente o garfo da esquerda Vero que o da direita no est livre ...

Starvation (inanio)

Jantar dos Filsofos

Problemas que devem ser evitados:

Deadlock todos os filsofos pegam um nico hashi ao mesmo tempo; Starvation os filsofos ficam indefinidamente pegando hashis simultaneamente;
0

4 3

2 1

Jantar dos Filsofos

E agora?

Poderamos fazer com que eles esperassem um tempo aleatrio

Reduz a chance de starvation

Na maioria das aplicaes, tentar novamente no problema

Via ethernet, exatamente isso que feito com envio de pacotes Sistemas no crticos E controle de segurana em usina nuclear? Ser uma boa idia?

Jantar dos Filsofos

E agora, como evitar as mltiplas tentativas?

Jantar dos Filsofos

E agora, como evitar as mltiplas tentativas?

Proteger os passos aps pensar por um instante com um semforo binrio um mutex
down(mutex)

up(mutex)

Jantar dos Filsofos

semaphore mutex = 1;

down(&mutex);

up(&mutex);

Somente um filsofo come!

Jantar dos Filsofos

H problemas?

Jantar dos Filsofos

H problemas?

Teoricamente, uma soluo adequada Na prtica, contudo, tem um problema de performance:

Somente um filsofo pode comer em um dado momento Com 5 hashis, deveramos permitir que 2 filsofos comessem ao mesmo tempo

Jantar dos Filsofos

Como solucionar?

Sem deadlocks ou starvation Com o mximo de paralelismo para um nmero arbitrrio de filsofos

Jantar dos Filsofos

Como solucionar?

Sem deadlocks ou starvation Com o mximo de paralelismo para um nmero arbitrrio de filsofos Usar um arranjo state para identificar se um filsofo est comendo, pensando ou faminto (pensando em pegar os hashis)

Um filsofo s pode comer (estado) se nenhum dos vizinhos estiver comendo Filsofos famintos podem ser bloqueados se os hashis estiverem ocupados

Usar um arranjo de semforos, um por filsofo

Jantar dos Filsofos

Jantar dos Filsofos

Jantar dos Filsofos

til para modelar processos que competem por acesso exclusivo a um nmero limitado de recursos:

Perifricos em geral etc

Leitores e Escritores

Modela acessos a uma base de dados Um sistema com uma base de dados acessado simultaneamente por diversas entidades. Estas entidades realizam dois tipos de operaes:

Leitura Escrita

Escritor Leitor Base de dados

Leitores e Escritores

Neste sistema aceitvel a existncia de diversas entidades lendo a base de dados ao mesmo tempo. Porm, se um processo necessita escrever na base, nenhuma outra entidade pode estar realizando acesso a ela

Nem mesmo leitura

Leitores e Escritores

O que fazer?

Leitores e Escritores

O que fazer?

Escritores devem bloquear a base de dados Leitores:

Se a base estiver desbloqueada:

Se for o primeiro leitor a usar a base, deve bloque-la, para que nenhum escritor entre Se, contudo, j houver outro leitor l, basta usar a base

Ao sair, os leitores verificam se h ainda outro usando a base.


Se no houver, desbloqueia a base Se houver, deixa bloqueada

Leitores e Escritores

Possvel soluo:

Jantar dos Filsofos

H algum problema com esse procedimento?

Jantar dos Filsofos

H algum problema com esse procedimento?


Ele esconde uma deciso tomada por ns Suponha que um leitor acesse a base Enquanto isso, outro leitor aparece, e entra sem problemas. Mais leitores aparecem, entrando na base Agora suponha que um escritor aparece

No poder entrar, devido aos leitores. Ento ele suspenso

Mas no param de chegar leitores

Jantar dos Filsofos

E como resolvemos?

Jantar dos Filsofos

E como resolvemos?

Podemos fazer com que, quando um leitor chegar e um escritor estiver esperando, o leitor suspenso tambm, em vez de ser admitido imediatamente

Escritores precisam apenas esperar que leitores ativos completem No precisam esperar por leitores que chegam depois dele H menos concorrncia menor performance

Desvantagem:

Barbeiro Sonolento

Uma barbearia possui:


1 barbeiro 1 cadeira de barbeiro N cadeira para clientes esperarem

Quando no h clientes, o barbeiro senta em sua cadeira e dorme

Barbeiro Sonolento

Quando um cliente chega, ele acorda o barbeiro. Quando um cliente chega e o barbeiro estiver atendendo um cliente, ele aguarda sua vez sentado na cadeira de espera. Quando um cliente chega e no existem cadeiras de espera disponveis, o cliente vai embora. O problema programar o barbeiro e os clientes sem que haja condio de disputa

Barbeiro Sonolento Soluo


Para controle de regio crtica Conta os clientes espera de atendimento Ao chegar para trabalhar, se no houver clientes, o barbeiro dorme

Um cliente que entra na barbearia deve contar o nmero de clientes espera de atendimento. Se este for menor que o nmero de cadeiras, ele ficar; do contrrio, sair Qualquer outro cliente (e at o barbeiro) deve esperar a liberao de mutex

Problemas clssicos de comunicao entre processos

Sugesto de Exerccios:

Entender a soluo para o problema dos Filsofos utilizando semforos:


Identificando a(s) regio(es) crtica(s); Descrevendo exatamente como a soluo funciona;

Entender a soluo para o problema dos Produtores/Consumidores utilizando monitor:


Identificando a(s) regio(es) crtica(s); Descrevendo exatamente como a soluo funciona;

Links Interessantes

http://www.anylogic.pl/fileadmin/Modele/Traffic/f ilozof/Dining%20Philosophers%20-%20Hybrid %20Applet.html http://www.doc.ic.ac.uk/~jnm/concurrency/class es/Diners/Diners.html http://journals.ecs.soton.ac.uk/java/tutorial/java/ threads/deadlock.html http://users.erols.com/ziring/diningAppletDemo. html

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