SlideShare uma empresa Scribd logo
1 de 7
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 Sistema 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 problema 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/

Mais conteúdo relacionado

Mais procurados

Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 
Kiến Trúc Luân Phiên
Kiến Trúc Luân PhiênKiến Trúc Luân Phiên
Kiến Trúc Luân PhiênThieu Mao
 
Giáo trình Cơ sở dữ liệu.pdf
Giáo trình Cơ sở dữ liệu.pdfGiáo trình Cơ sở dữ liệu.pdf
Giáo trình Cơ sở dữ liệu.pdfMan_Ebook
 
Exercicio Vetores Pascal
Exercicio Vetores PascalExercicio Vetores Pascal
Exercicio Vetores PascalMarcus Vinicius
 
Microcontroladores PIC - Interface com displays de 7 segmentos
Microcontroladores PIC - Interface com displays de 7 segmentosMicrocontroladores PIC - Interface com displays de 7 segmentos
Microcontroladores PIC - Interface com displays de 7 segmentosFabio Souza
 
XÂY DỰNG DỆ THỐNG THÔNG TIN QUẢN LÝ THIẾT BỊ ĐẠI HỌC THÁI NGUYÊN
XÂY DỰNG DỆ THỐNG THÔNG TIN QUẢN LÝ THIẾT BỊ ĐẠI HỌC THÁI NGUYÊNXÂY DỰNG DỆ THỐNG THÔNG TIN QUẢN LÝ THIẾT BỊ ĐẠI HỌC THÁI NGUYÊN
XÂY DỰNG DỆ THỐNG THÔNG TIN QUẢN LÝ THIẾT BỊ ĐẠI HỌC THÁI NGUYÊNĐH Thái Nguyên Trung tâm Học liệu
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Leinylson Fontinele
 
Đề tài: Nghiên cứu xây dựng ứng dụng cho hệ điều hành iOS
Đề tài: Nghiên cứu xây dựng ứng dụng cho hệ điều hành iOSĐề tài: Nghiên cứu xây dựng ứng dụng cho hệ điều hành iOS
Đề tài: Nghiên cứu xây dựng ứng dụng cho hệ điều hành iOSViết thuê trọn gói ZALO 0934573149
 
Lịch sử hình thành trung tâm đào tạo quản trị mạng và an ninh mạng quốc tế at...
Lịch sử hình thành trung tâm đào tạo quản trị mạng và an ninh mạng quốc tế at...Lịch sử hình thành trung tâm đào tạo quản trị mạng và an ninh mạng quốc tế at...
Lịch sử hình thành trung tâm đào tạo quản trị mạng và an ninh mạng quốc tế at...kmht
 
phân tích thiết kế hệ thống thông tin
phân tích thiết kế hệ thống thông tinphân tích thiết kế hệ thống thông tin
phân tích thiết kế hệ thống thông tinQuynh michelanh quynh
 
Trabalho tecnologia da informação, TI
Trabalho tecnologia da informação, TITrabalho tecnologia da informação, TI
Trabalho tecnologia da informação, TIDANILLO RIBEIRO CUNHA
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
Conceitos básicos e aplicações dos sistemas de informações ivaldo
Conceitos básicos e aplicações dos sistemas de informações ivaldoConceitos básicos e aplicações dos sistemas de informações ivaldo
Conceitos básicos e aplicações dos sistemas de informações ivaldoIvaldo Santos Barbosa
 
Hàm băm và đại diện thông điệp - Message digest and hash function
Hàm băm và đại diện thông điệp - Message digest and hash functionHàm băm và đại diện thông điệp - Message digest and hash function
Hàm băm và đại diện thông điệp - Message digest and hash functionNguyen Duong
 
Giáo trình kiến trúc máy tính ICTU
Giáo trình kiến trúc máy tính ICTUGiáo trình kiến trúc máy tính ICTU
Giáo trình kiến trúc máy tính ICTUNgô Doãn Tình
 
Sistema Informático
Sistema InformáticoSistema Informático
Sistema Informáticocrbmonteiro
 
Gerenciamento de Memória
Gerenciamento de MemóriaGerenciamento de Memória
Gerenciamento de Memóriaelliando dias
 
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kếLập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kếNgo Trung
 

Mais procurados (20)

Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Kiến Trúc Luân Phiên
Kiến Trúc Luân PhiênKiến Trúc Luân Phiên
Kiến Trúc Luân Phiên
 
Giáo trình Cơ sở dữ liệu.pdf
Giáo trình Cơ sở dữ liệu.pdfGiáo trình Cơ sở dữ liệu.pdf
Giáo trình Cơ sở dữ liệu.pdf
 
Exercicio Vetores Pascal
Exercicio Vetores PascalExercicio Vetores Pascal
Exercicio Vetores Pascal
 
Microcontroladores PIC - Interface com displays de 7 segmentos
Microcontroladores PIC - Interface com displays de 7 segmentosMicrocontroladores PIC - Interface com displays de 7 segmentos
Microcontroladores PIC - Interface com displays de 7 segmentos
 
XÂY DỰNG DỆ THỐNG THÔNG TIN QUẢN LÝ THIẾT BỊ ĐẠI HỌC THÁI NGUYÊN
XÂY DỰNG DỆ THỐNG THÔNG TIN QUẢN LÝ THIẾT BỊ ĐẠI HỌC THÁI NGUYÊNXÂY DỰNG DỆ THỐNG THÔNG TIN QUẢN LÝ THIẾT BỊ ĐẠI HỌC THÁI NGUYÊN
XÂY DỰNG DỆ THỐNG THÔNG TIN QUẢN LÝ THIẾT BỊ ĐẠI HỌC THÁI NGUYÊN
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Đề tài: Nghiên cứu xây dựng ứng dụng cho hệ điều hành iOS
Đề tài: Nghiên cứu xây dựng ứng dụng cho hệ điều hành iOSĐề tài: Nghiên cứu xây dựng ứng dụng cho hệ điều hành iOS
Đề tài: Nghiên cứu xây dựng ứng dụng cho hệ điều hành iOS
 
TI - A profissão do Futuro
TI - A profissão do FuturoTI - A profissão do Futuro
TI - A profissão do Futuro
 
Lịch sử hình thành trung tâm đào tạo quản trị mạng và an ninh mạng quốc tế at...
Lịch sử hình thành trung tâm đào tạo quản trị mạng và an ninh mạng quốc tế at...Lịch sử hình thành trung tâm đào tạo quản trị mạng và an ninh mạng quốc tế at...
Lịch sử hình thành trung tâm đào tạo quản trị mạng và an ninh mạng quốc tế at...
 
phân tích thiết kế hệ thống thông tin
phân tích thiết kế hệ thống thông tinphân tích thiết kế hệ thống thông tin
phân tích thiết kế hệ thống thông tin
 
Trabalho tecnologia da informação, TI
Trabalho tecnologia da informação, TITrabalho tecnologia da informação, TI
Trabalho tecnologia da informação, TI
 
Algoritmos - Pascal
Algoritmos - PascalAlgoritmos - Pascal
Algoritmos - Pascal
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Conceitos básicos e aplicações dos sistemas de informações ivaldo
Conceitos básicos e aplicações dos sistemas de informações ivaldoConceitos básicos e aplicações dos sistemas de informações ivaldo
Conceitos básicos e aplicações dos sistemas de informações ivaldo
 
Hàm băm và đại diện thông điệp - Message digest and hash function
Hàm băm và đại diện thông điệp - Message digest and hash functionHàm băm và đại diện thông điệp - Message digest and hash function
Hàm băm và đại diện thông điệp - Message digest and hash function
 
Giáo trình kiến trúc máy tính ICTU
Giáo trình kiến trúc máy tính ICTUGiáo trình kiến trúc máy tính ICTU
Giáo trình kiến trúc máy tính ICTU
 
Sistema Informático
Sistema InformáticoSistema Informático
Sistema Informático
 
Gerenciamento de Memória
Gerenciamento de MemóriaGerenciamento de Memória
Gerenciamento de Memória
 
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kếLập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế
 

Semelhante a Produtor Consumidor com Semaforo

Processo de desenvolvimento de software
Processo de desenvolvimento de softwareProcesso de desenvolvimento de software
Processo de desenvolvimento de softwareJeoás Alves
 
Padrão Observador (Orientação à Objetos)
Padrão Observador (Orientação à Objetos)Padrão Observador (Orientação à Objetos)
Padrão Observador (Orientação à Objetos)Teles Maciel
 
Sistemas Operacionais - Aula 08 (Sincronização e Comunicação entre Processos)
Sistemas Operacionais - Aula 08 (Sincronização e Comunicação entre Processos)Sistemas Operacionais - Aula 08 (Sincronização e Comunicação entre Processos)
Sistemas Operacionais - Aula 08 (Sincronização e Comunicação entre Processos)Leinylson Fontinele
 
Introdução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptxIntrodução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptxPaulo Cardoso
 
Plano do projeto de software
Plano do projeto de softwarePlano do projeto de software
Plano do projeto de softwareDanilo Gois
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWLays Lopes
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoAlexandre Duarte
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitRobinson Castilho
 
GOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdfGOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdfRodolphoCesar2
 
Apostila supervisorio indusoft ind371
Apostila supervisorio indusoft ind371Apostila supervisorio indusoft ind371
Apostila supervisorio indusoft ind371Sandra Rocha
 
Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)Leinylson Fontinele
 

Semelhante a Produtor Consumidor com Semaforo (20)

ava facul uva unijorge (146).pdf
ava facul uva unijorge (146).pdfava facul uva unijorge (146).pdf
ava facul uva unijorge (146).pdf
 
Processo de desenvolvimento de software
Processo de desenvolvimento de softwareProcesso de desenvolvimento de software
Processo de desenvolvimento de software
 
A programação básica
A programação básicaA programação básica
A programação básica
 
A programacao basica
A programacao basicaA programacao basica
A programacao basica
 
Padrão Observador (Orientação à Objetos)
Padrão Observador (Orientação à Objetos)Padrão Observador (Orientação à Objetos)
Padrão Observador (Orientação à Objetos)
 
Sistemas Operacionais - Aula 08 (Sincronização e Comunicação entre Processos)
Sistemas Operacionais - Aula 08 (Sincronização e Comunicação entre Processos)Sistemas Operacionais - Aula 08 (Sincronização e Comunicação entre Processos)
Sistemas Operacionais - Aula 08 (Sincronização e Comunicação entre Processos)
 
ava facul uva unijorge (81).pdf
ava facul uva unijorge (81).pdfava facul uva unijorge (81).pdf
ava facul uva unijorge (81).pdf
 
Introdução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptxIntrodução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptx
 
Plano do projeto de software
Plano do projeto de softwarePlano do projeto de software
Plano do projeto de software
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: Sincronização
 
Questionário de automação industrial
Questionário de automação industrialQuestionário de automação industrial
Questionário de automação industrial
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Tese de mestrado
Tese de mestradoTese de mestrado
Tese de mestrado
 
GOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdfGOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdf
 
Apostila supervisorio indusoft ind371
Apostila supervisorio indusoft ind371Apostila supervisorio indusoft ind371
Apostila supervisorio indusoft ind371
 
Analise sistemas 05
Analise sistemas 05Analise sistemas 05
Analise sistemas 05
 
Visualg2_manual.pdf
Visualg2_manual.pdfVisualg2_manual.pdf
Visualg2_manual.pdf
 
gabarito.pdf
gabarito.pdfgabarito.pdf
gabarito.pdf
 
Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)
 

Produtor Consumidor com Semaforo

  • 1. 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 Sistema 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 problema 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().
  • 2. 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().
  • 3. 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.
  • 4. 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
  • 5. 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
  • 6. 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:
  • 7. 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/