8 PROBLEMAS CLÁSSICOS



Documentos relacionados
Sincronização de Processos (3) Exercícios - Semáforos

Sistemas Operacionais. Técnicas de Implementação de Exclusão Mútua. Aula VI Prof. Rosemary Silveira

Produtor - Consumidor c/ Buffer Circular (1) Aula 13 - Exercícios - Semáforos. Produtor - Consumidor c/ Buffer Circular (3)

Sincronização de Processos (3) Exercícios - Semáforos

Sincronização de Processos (3) Exercícios - Semáforos

Aula 7. Problemas Clássicos de Sincronização. 1.1 O Jantar dos Filósofos. 1.2 Leitores e Escritores. 1.3 O Barbeiro Dorminhoco

Sistemas Operacionais Processos

Sistemas Operacionais

Exercícios Resolvidos (Problemas Clássicos e Outros)

Sistemas Operacionais Aula 08: Sincronização de Processos. Ezequiel R. Zorzal

Programação de Sistemas

Semáforos. Gerenciamento de Recursos I

Semáforos. Gerenciamento de Recursos I

Sistemas Operacionais

Retrospectiva da aula passada... Escalonamento. Na aula passada... Comunicação entre processos (-- O jantar dos filósofos --)

Sincronização e Comunicação Problemas Clássicos

Problemas Clássicos de Sincronização

Prof. Silvana Rossetto 9 de julho de DCC/IM/UFRJ

Termo genérico que se aplica a vários tipos de diagramas que enfatizam interações de objetos.

Sistemas Operacionais. Prof. André Y. Kusumoto

Sistemas Operacionais

Sistemas Operacionais. Sincronização: Semáforos Problema dos Leitores/Escritores

Sistemas Operacionais. Prof. André Y. Kusumoto

Sistema Operacional. Implementação de Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais

Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo 6 - Threads

Oficina: Jogar para gostar e aprender matemática. Profa. Dra. Adriana M. Corder Molinari dri.molinari@uol.com.br

Serviço de Edição e Informação Técnico-Científica/abril 2012 SISTEMA DE INFORMAÇÃO DO CÂNCER (SISCAN)

Onde está o peso extra? Série Problemas e Soluções. Objetivos 1. Estudar uma estratégia que valoriza ao máximo as informações disponíveis.

Orientação a Objetos

PJe - NOVIDADES DA VERSÃO USUÁRIOS INTERNOS

Uma equação trigonométrica envolve como incógnitas arcos de circunferência e relacionados por meio de funções trigonométricas.

Diário Oficial Digital. Sistema web para pesquisa de mátérias Manual do usuário

Utilização de threads em Java

Trabalho Prático II - Resta 1 Data de Entrega: Conferir no calendário!

Problema dos Leitores/Escritores

REQUERIMENTO (Do Sr. Francisco Praciano)

Mecanismos de Sincronização com Variáveis Compartilhadas

Calculando seno(x)/x com o interpretador Hall.

Requisitos de Software

TUTORIAL MATLAB Victor Breder 2016

(Aula 17) Threads em Java

Threads e Sincronização no Linux

Introdução à Ciência da Informação

Modem e rede local Guia do usuário

Sincronização de Processos (4) Monitores

Engenharia de Software

AULA 3 Alocação dinâmica de memória: Ponteiros

A realidade do SAB para as crianças e adolescentes de 7 a 14 anos. O acesso à Educação

Gabinete do Procurador-Geral da República. 3 Procedimento de Sistema de Auditoria Interna

QUESTIONAMENTO 02. No item QUALIFICAÇÃO TÉCNICA: Letra a está sendo exigido das empresas interessadas em participar do certame;

Tutorial de utilização do Sistema E-CONTROLE. Maio 2013

Capítulo 6: Sincronização de Processos. Operating System Concepts 8th Edition

FERRAMENTAS DA QUALIDADE BRAINSTORMING

XXXII Olimpíada Brasileira de Matemática. GABARITO Segunda Fase

Algoritmos e Estruturas de Dados I. Recursividade. Pedro O.S. Vaz de Melo

MANUAL DO SISTEMA. Versão 6.05

Alguns Apontamentos Sobre Cálculo Combinatório

- Campus Salto. Disciplina: Sistemas de Arquivos Docente: Fernando Santorsula

TOM, SEMITOM, SUSTENIDO, BEMOL.

Manual do Usuário. Cadastro

e-nota G Módulo de Guarda da Nota Fiscal eletrônica

TUTORIAL DO SISTEMA CE MERCANTE

Erros e Incertezas. Rafael Alves Batista Instituto de Física Gleb Wataghin Universidade Estadual de Campinas (Dated: 10 de Julho de 2011.

NORMA TÉCNICA E PROCEDIMENTOS PARA REALIZAR ALTERAÇÕES NO BANCO DE DADOS CORPORATIVO

OpenPDV: Sistema aberto para gerenciamento de restaurantes

Vetores, Matrizes e String

Diagrama de Seqüência

Memórias Cache. Memória

Segurança com um toque de sofisticação e conveniência

Sinto, por vezes, que alguns responsáveis governamentais parecem ter dificuldades em entender as reivindicações e as aspirações dos Corvinos.

G u i a d a O u v i d o r i a

MANUAL DE UTILIZAÇÃO DO AUTO ATENDIMENTO SETOR PÚBLICO DO BANCO DO BRASIL

A ser preenchido para todos os moradores do domicílio com 50 anos e mais de idade, pelos próprios ou pelo informante do domicílio ou pelo cuidador.

Nota Fiscal Eletrônica para Consumidor Final NFC-e. PROJETO NFC-e NOTA FISCAL ELETRÔNICA PARA CONSUMIDOR FINAL

Manual do Usuário. Cadastro + Controle

CURSO DE INSTRUMENTAÇÃO. Erros de Medição. Cedtec 2007/2. Sem equivalente na Apostila 1 Pressão e Nível

Programação WEB I Funções

UNIVERSIDADE ESTADUAL DE PONTA GROSSA SETOR DE CIÊNCIAS AGRÁRIAS E DE TECNOLOGIA DEPARTAMENTO DE INFORMÁTICA

MANUAL DE UTILIZAÇÃO DO SERVIÇO VIRTUAL DE INFORMAÇÕES AO CIDADÃO

Noções de Microeconomia

GUIA PRÁTICO ATENDIMENTO AÇÃO SOCIAL

Serviço Público Federal Universidade Federal do Pará - UFPA Centro de Tecnologia da Informação e Comunicação - CTIC S I E

PNV 3100 INTRODUÇÃO À ENGENHARIA

3.3 Qual o menor caminho até a Escola? 28 CAPÍTULO 3. CICLOS E CAMINHOS

Microsoft Powerpoint 2003

Portal nddcargo Manual de Utilização Central de Relacionamento Visão Suporte

Maratona de Programação - Dicas Para Iniciantes

Switch switch switch switch switch variável_inteira valor1 valor2 switch variável_inteira case case break switch case default default switch switch

Pagamento de complemento de salário-maternidade, considerando que este valor deve ser deduzido da guia de INSS, pois é pago pelo INSS.

Transcrição:

8 PROBLEMAS CLÁSSICOS 8.1.1 FILÓSOFOS GLUTÕES Contexto: temos cinco filósofos, cujas únicas atividades são comer macarrão e pensar. Além disso, o macarrão nunca acaba. Componentes do problema: 5 Filósofos 5 Pratos com macarrão. Cada prato é destinado a um filósofo 5 Garfos para comer macarrão Problema: para comer o macarrão é preciso manejar dois garfos. Dessa maneira, apenas dois filósofos podem comer simultaneamente, os demais devem ficar pensando. Ou seja, este problema modela um determinado número de processos competindo pelo acesso a um número limitado de recursos. A Figura abaixo ilustra o ambiente do problema. Uma primeira solução é a execução de 5 processos simultaneamente, onde cada processo representa um filósofo. O código do processo é ilustrado a seguir: #define N 5 // número de filósofos void philosopher (int i)

think(); take_fork(i); take_fork((i+1)%n); eat(); put_fork(i); put_fork((i+1)%n); Algumas considerações: As ações eat (comer) e think (pensar) possuem um tempo de duração aleatório e independente da implementação da solução; São 5 processos sendo executados simultaneamente; Deficiências dessa solução: se todos os filósofos resolverem comer ao mesmo tempo e, cada um deles vai pegar o seu garfo da esquerda. Todos estarão bloqueados, pois ficarão esperando o seu respectivo garfo direito ser liberado. Esta é uma situação de deadloak; Poderia-se sugerir que se um filósofo verificar que o garfo direito estiver ocupado, ele libera o esquerdo. Entretanto, na mesma situação em que todos os filósofos resolvem comer ao mesmo tempo. Acontecerá o seguinte problema: Todos pegarão os seus respectivos garfos da esquerda; Verificarão que os garfos da direita não estão disponíveis; Devolverão os garfos; Por coincidência, todos os filósofos vão tentar pegar os garfos novamente; Assumindo que isto sempre ocorrerá, os filósofos ficarão em um eterno ciclo de pegar-devolver o garfo, sem comer. Esta situação é chamada de starvation. Mesmo considerando que a possibilidade de ocorrência dessa situação é muito pequena, deve ser observada e prevenida. Uma solução mais aceitável é descrita logo abaixo. #define N 5 #define LEFT (i-1)%n // número de vizinhos a esquerda de i #define RIGHT (i+1)%n // número de vizinhos à direita de i

#define THINKING 0 //filósofo pensando #define HUNGRY 1 // filósofo com fome #define EATING 2 // filósofo comendo int state[n]; semaphore mutex =1; semaphore s[n]; void semaphore (int i) think(); take_forks(i); eat(); put_forks(i); void take_forks(int i) down(&mutex); state[i]= HUNGRY; test(i); up(&mutex); down(&s[i]); void put_forks(int i)

down(&mutex); state[i]= THINKING; test(left); test(right); up(&mutex); void test(int i) if(state[i] = = HUNGRY && state[left]!= EATING && state[right] = EATING) state[i] = EATING; up(&s[i]); Considerações da solução: mutex é um semáforo binário que controla o acesso a região crítica, no caso o acesso aos garfos; Cada filósofo possui seu próprio semáforo para bloqueá-lo, caso não consiga acesso aos recursos; Temos cinco processos philosopher executando simultaneamente; As funções take_forks e put_forks são executadas respectivamente quando o filósofo quer pegar os garfos e devolver os garfos; A função test verifica se os garfos estão livres e cuida para que o filósofo tome os dois garfos de uma só vez. 8.1.2 LEITORES E DESCRITORES Contexto: Um determinado número de leitores ficam lendo um livro, o qual ainda está em processo de escrita. Componentes: 1 escritor Vários leitores

1 livro Problema: Todos os leitores podem ler o livro simultaneamente. Entretanto, quando o escritor estiver com o livro, ninguém pode ler ele. Analogia: este problema modela o acesso a um banco de dados. Onde vários usuários podem ler os dados simultaneamente. Entratanto, somente um usuário pode alterar o banco de dados, e enquanto estiver fazendo este processo, nenhum outro usuário pode ter acesso ao banco de dados. Solução: semaphore mutex = 1; semaphore db = 1; int rc = 1; void reader(void) down(&mutex); rc = rc + 1; if (rc = = 1) down(&db); up(&mutex); read_database(); down(&mutex); rc = rc - 1; if (rc = = 0) up(&db); up(&mutex); use_data_read(); void writer(void)

think_up_data(); down(&db); write_database(); up(&db); Considerações da solução: Pode haver vários leitores. Isto significa que se houver N leitores, haverá N processos reader ativos e sendo executados simultaneamente; primeiro leitor faz um down(db), os subsequentes apenas incrementam rc número de leitores; Todo leitor que deixa o acesso a db, deve decrementar o rc. Caso não haja nenhum outro leitor, deve ser liberado o acesso a db. Quando houver um leitor acessando o banco de dados, o escritor deve estar bloqueado; Só pode haver um escritor escrevendo no banco de dados por vez. 8.1.3 BARBEIRO DORMINHOCO Contexto: Em uma barbearia, há uma cadeira de atendimento, na qual o cliente é atendido pelo barbeiro. Também existe um determinado número de cadeiras para que clientes que chegam, quando o barbeiro estiver ocupado, sentar e aguadar. Se todas as cadeiras estiverem ocupadas e chegar um outro cliente, o mesmo deve ir embora. Componentes: 1 barbeiro; 1 cadeira de barbairo; CHAIRS cadeiras para aguardar; Vários clientes transitando pela barbearia.

Analogia: um processo servidor que possui um buffer de atendimento e vários processos clientes que desejam utilizar os serviços do processo servidor; Código da solução: #define CHAIRS 5 semaphore customers = 0; semáfore babers = 0 semaphore mutex = 1; int waiting = 0; void Baber(void) down(customers); down(mutex); waiting = waiting =1; up(babers); up(mutex); cut_hair(); void Customer(void) down(mutex); if( wating <CHAIRS) waiting = waiting + 1; up(customers); up(mutex); down(babers);

get_haircut(); else up(mutex); Considerações da solução Se não houver clientes, o barbeiro é bloqueado; Mutex controla o acesso às cadeiras do barbeiro; barbeiro não está em um loop, pois ele é somente acionado quando requisitado.;