Você está na página 1de 8

UNIFIEO

Sistemas Operacionais

AULA 09 Sincronizao de Processos - II


Monitores
Conforme comentamos, o uso equivocado dos semforos pode levar a uma situao de deadlock, por isso devemos tomar cuidado ao programar utilizando este mecanismo de sincronizao para evitar situaes desagradveis e, muitas vezes, difcies de serem analisadas. Em meados da dcada de 70, Hoare e Brinch Hansen propuseram uma primitiva de alto nvel para coordenar a sincronizao de processos e facilitar a escrita de programas paralelos. Tais primitivas foram denominadas de monitores. A idia das propostas de cada um so bem semelhantes. Um monitor um conjunto de procedimentos, variveis e estrutura de dados, todas agrupadas em um mdulo especial. Os processos podem chamar os procedimentos do monitor sempre que desejarem, mas nunca podero acessar diretamente as estruturas de dados e as variveis internas do monitor a partir de procedimentos declarados fora do monitor [1]. Relacionado sincronizao dos processos e excluso mtua, os monitores oferecem uma propriedade importante: apenas um processo pode estar ativo dentro do monitor em um determinado instante. Toda as verificaes so efetuadas pelo compilador e pelo fato do compilador implementar a excluso mtua muito pouco provvel que algo venha a dar errado, como pode acontecer no uso dos semforos. Portanto, para o programador basta colocar a regio crtica dentro do monitor que no haver a possibilidade de existir 2 ou mais processos executando a regio crtica ao mesmo tempo. Funcionamento: quando um processo realiza uma chamada a algum procedimento do monitor este verifica se existe se algum outro processo est ativo dentro dele. Caso exista, o processo que est tentando entrar no monitor suspenso at que o outro processo libere este monitor. Se no existir nenhum processo ativo dentro do monitor, o processo que est solicitando o acesso poder entrar e executar o procedimento chamado. Apesar dos monitores tambm garantirem a excluso mtua necessrio cuidarmos dos casos onde devemos bloquear os processos quando no houver mais condies para que os mesmos continuem executando (ex. Buffer vazio ou cheio). Para resolver este problema propuseram o Prof. Dr. Jean M. Laine 1

UNIFIEO

Sistemas Operacionais

uso de variveis de condio, com as seguintes operaes sobre elas: WAIT e SIGNAL. As semnticas dessas operaes so: bloqueio (semelhante ao sleep) e desbloqueio (semelhante ao wakeup) com uso de filas. Brinch Hansen props que ao executar a operao SIGNAL o processo seria obrigado a deixar o monitor imediatamente em seguida. Se um SIGNAL executado sobre uma varivel de condio, somente um processo associado a fila de espera desta varivel poder ser reativado pelo escalonador de processos.

Prof. Dr. Jean M. Laine

UNIFIEO

Sistemas Operacionais

Produtor consumidor com monitores.

Prof. Dr. Jean M. Laine

UNIFIEO

Sistemas Operacionais

Problema: poucas linguagens do suporte ao uso de monitores, Java uma que usa monitores para realizar sincronizao entre threads. A linguagem C no possui monitores.

Produtor Consumidor em Java

Prof. Dr. Jean M. Laine

UNIFIEO

Sistemas Operacionais

Problemas Clssicos de Comunicao entre Processos 1. O problema dos Filsofos Glutes / Jantar dos Filsofos
Considere cinco filsofos que passam suas vidas meditando e comendo. Cada um dos filsofos compartilham uma mesa redonda comum cercada por cinco cadeiras. Cada filosofo tem um prato de espaguete. Para que o filsofo consiga comer ele precisa de 2 garfos. A vida de cada filsofo consiste em perodos nos quais ele alternadamente come e pensa. Quando ele medita ele no interage com seus colegas. Quando um filsofo sente fome ele tenta pegar os dois garfos mais prximos de si (direita e esquerda do seu prprio prato). Um filsofo pode pegar apenas um garfo de cada vez (a ordem no importa) e, claro, no poder pegar nenhum garfo que esteja na mo de outro filsofo. Assim, quando um filsofo est de posse de dois garfos ele poder comer. Passado um tempo ele pra de comer, solta os garfos e volta a pensar [1]. Este exemplo pode ser aplicado a uma vasta classe de problemas de controle de concorrncia. Como podemos verificar uma representao simples do problema de alocar vrios recursos a vrios processos, sem causar deadlocks. Quais solues podem ser possveis para este problema? 1. pegar garfo da esquerda e depois o da direita => se todos resolvem pegar o garfo da esquerda ao mesmo tempo gera um deadlock. 2. pegar o garfo da esquerda e tentar pegar o da direita, se estiver sendo usado o filsofo devolve o garfo e espera um tempo para tentar mais tarde. Se todos esto sincronizados e passam a esperar o mesmo tempo para tentar novamente o impasse continuar. 3. ao invs de usar o mesmo tempo de espera uma estratgia que funciona esperar um tempo aleatrio para tentar novamente. Usar semforos para controlar o acesso aos garfos. Aplicao: processos que competem por um nmero limitado de recursos (dispositivos de E/S, por exemplo).

Prof. Dr. Jean M. Laine

UNIFIEO

Sistemas Operacionais

O problema dos Leitores e Escritores


Este problema muito interessante para simular o acesso a uma grande base de dados, tal como um sistema de reserva de passagens, onde temos muitos processos competindo para ler e escrever nela. Intuitivamente, podemos presumir que no existe nenhum problema se dois ou mais processos estiverem lendo a base de dados ao mesmo tempo, mas se algum processo estiver escrevendo (escritor) algo na base de dados, nenhum outro processo, inclusive os leitores, podero ter acesso enquanto o escritor no terminar. Tudo isso deve ser respeitado para manter a consistncia das informaes do sistema. Como resolver o problema? Veja a soluo dada a seguir [1]:

Esta soluo d prioridade ao leitores, inibindo os escritores de usar a RC enquanto existir algum leitor ativo.

Prof. Dr. Jean M. Laine

UNIFIEO

Sistemas Operacionais

O problema do Barbeiro Dorminhoco


Existe uma barbearia com uma cadeira de barbeiros e diversos lugares para que os clientes possam esperar, se houver algum, sentados. Caso no tenha clientes, o barbeiro senta em sua cadeira e dorme. Quando chegarem fregueses, enquanto o barbeiro estiver cortando o cabelo de outro, estes devem ou sentar, se houver cadeira vazia, ou ir embora, se no houver nenhuma cadeira livre. Como programar uma soluo para o problema? Veja a soluo abaixo:

Prof. Dr. Jean M. Laine

UNIFIEO

Sistemas Operacionais

Referncia Bibliogrfica
[1] TANENBAUM, A. S. Sistemas Operacionais Modernos. 2 ed. So Paulo: Prentice Hall, 2003. [2] SILBERSCHATZ, A. et al. Sistemas Operacionais: conceitos e aplicaes. Campus, 2001.

Prof. Dr. Jean M. Laine

Você também pode gostar