Produtor Consumidor com Semaforo

gicaazevedo 501 views 7 slides Nov 06, 2014
Slide 1
Slide 1 of 7
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7

About This Presentation

No description available for this slideshow.


Slide Content

Sistemas Operacionais I – Faculdade de Informática de Pres. Prudente
Problemas Clássicos de Sistemas Operacionais: Produtor Consumidor com Semáforo
Gisele Fernanda Alves de Azevedo

Trabalho de Sistemas Operacionais I – Prof. Drº Robson Siscoutto
Aluna: Gisele Fernanda Alves de Azevedo

Problemas Clássicos de Sistemas Operacionais :
Produtor Consumidor com Semáforo

Descrição do problema:

Em Sistemas Operacionais, semáforo é conhecido como uma variável
protegida ou tipo abstrato de dados que tem por função o controle de
acesso de recursos compartilhados em um ambiente de multitarefas.
Semáforos são utilizados na resolução do problema Produtor e Consumidor,
que é um problema clássico em Sistemas Operacionais que busca
exemplificar de forma clara situações de impasses que ocorrem no
gerenciamento de processos de um S istema Operacional e suas soluções.
Partindo do principio de que cada processo executado em um Sistema
Operacional tem a possibilidade de utilizar determinados recursos
oferecidos, e que quando um recurso X está sendo utilizado por um
processo A, nenhum outro processo poderá utilizar este mesmo recurso,
encontramos um prob lema no momento em que um processo B tenta
utilizar o recurso X que já está em uso. Com os Semáforos, é eliminado
problema da espera ociosa.
Através do conceito de dormir e acordar garante-se que um
processo nunca irá ficar consumindo processamento à toa, ou seja, se
quiser utilizar um recurso e não conseguir este processo irá dormir, e só
será acordado quando o recurso que ele deseja utilizar ficar disponível
novamente.

Implementação detalhada do algoritmo :
Programa principal:

No programa principal é feito apenas a instanciação do ProcuctQueue(),
Producer() e Consumer(). O objeto pq da classe ProductQueue será enviado
por parâmetro para os construtores de Producer() e Consumer().

Sistemas Operacionais I – Faculdade de Informática de Pres. Prudente
Problemas Clássicos de Sistemas Operacionais: Produtor Consumidor com Semáforo
Gisele Fernanda Alves de Azevedo

Classe Producer:

Classe Consumer:


As classes Producer() e Consumer() serão uma extensão da Classe
Thread(), em seu construtor será chamado o método start(), que executará
o método run(), dentro dele haverá um que vai de 0 até 4, este controlará
a chamada do métodos putProductIntoQ() e getProductFromQ() da classe
ProcuctQueue().

Sistemas Operacionais I – Faculdade de Informática de Pres. Prudente
Problemas Clássicos de Sistemas Operacionais: Produtor Consumidor com Semáforo
Gisele Fernanda Alves de Azevedo



Classe ProcuctQueue:


Nesta classe iremos declarar duas variáveis do tipo semáforo semProd que
já recebera de inicio o valor 1 e semCon que recebera valor 0, estas
variáveis serão usadas pelos métodos putProductIntoQ() e
getProductFromQ(). As variáveis semProd e senCon farão as chamados
métodos acquire() e release(), estas farão o controlar de quem ficará
bloqueado ou liberado.
Funcionamento do programa:
As classes Producer() e Consumer() funcionam como duas Threads,
em seus métodos run() há um for que vai de 0 a 4, este controla o
funcionamento dos métodos da classe ProcuctQueue(). Dentro da classe
ProcuctQueue() temos as variáveis semProd e semCon elas são do tipo
semáforo, ou seja, através dos métodos acquire() e release() controla quem
fica bloqueado e quem é executa.

Sistemas Operacionais I – Faculdade de Informática de Pres. Prudente
Problemas Clássicos de Sistemas Operacionais: Produtor Consumidor com Semáforo
Gisele Fernanda Alves de Azevedo

O primeiro a ser executado é o método PutProductIntoQ() pois o
valor da variável semProd que o controla já recebe inicialmente o valor 1 e
logo após é decrementado (por causa do método acquire()) (linha11 da
classe ProcuctQueue()), então o produtor produtos o valor que está no for e
dá permissão (acorda) a variável senCon (através do método release()) o
valor de i da classe Producer() é incrementado (porém ela fica bloqueada),
logo a variável senCon decrementa seu valor, consome o valor produzido,
acorda a variável senProd, incrementa o valor de i da classe Consumer e
fica bloqueada novamente. Isso se repete até que os for da classe
Producer() e Consumer() finalizem.
Perceba que o valor do semáforo controla os acessos através dos
métodos acquire() e release(), assim quando o produtor está produzindo o
consumidor está bloqueado e é acordado somente quando o produtor
termina.

Teste de mesa:

Passo 1:
Variável: Valor:
i (Producer()) 0
i (Consumer()) 0
semProd 0
semCon 0


Passo 2:
Variável: Valor:
i (Producer()) 1
i (Consumer()) 0
semProd 0
semCon 1


Passo 3:
Variável: Valor:
i (Producer()) 1
i (Consumer()) 1
semProd 1
semCon 0

Sistemas Operacionais I – Faculdade de Informática de Pres. Prudente
Problemas Clássicos de Sistemas Operacionais: Produtor Consumidor com Semáforo
Gisele Fernanda Alves de Azevedo


Passo 4:
Variável: Valor:
i (Producer()) 2
i (Consumer()) 1
semProd 0
semCon 1


Passo 5:
Variável: Valor:
i (Producer()) 2
i (Consumer()) 1
semProd 1
semCon 0


Passo 6:
Variável: Valor:
i (Producer()) 3
i (Consumer()) 2
semProd 0
semCon 1



Passo 7:
Variável: Valor:
i (Producer()) 3
i (Consumer()) 3
semProd 1
semCon 0

Sistemas Operacionais I – Faculdade de Informática de Pres. Prudente
Problemas Clássicos de Sistemas Operacionais: Produtor Consumidor com Semáforo
Gisele Fernanda Alves de Azevedo


Passo 8:
Variável: Valor:
i (Producer()) 4
i (Consumer()) 3
semProd 0
semCon 1


Passo 9:
Variável: Valor:
i (Producer()) 4
i (Consumer()) 3
semProd 1
semCon 0


Passo 10:
Variável: Valor:
i (Producer()) 4
i (Consumer()) 4
semProd 0
semCon 1



Saída do programa:

Sistemas Operacionais I – Faculdade de Informática de Pres. Prudente
Problemas Clássicos de Sistemas Operacionais: Produtor Consumidor com Semáforo
Gisele Fernanda Alves de Azevedo


Instruções de execução:
Programa feito em linguagem Java, o programa utilizado para
compilação foi o NetBeans IDE 7.4, não é necessário nenhuma entrada de
dados para execução.
Referências:

TANENBAUM, Andrew S. Sistemas Operacionais: projeto e
implementação. Andrew S. Tanenbaum e Albert S. Woodhull; trad. Edson
Furmankiewicz. - 2ª Ed. - Porto Alegre, Bookman, 2000.

http://www.dca.ufrn.br/~affonso/DCA2401/2004_1/programas.html

http://www.ebah.com.br/content/ABAAAgD0oAG/so -semaforos

http://sandeepin.wordpress.com/2012/01/21/producer-consumer-problem-
solution-using-semaphore/
Tags