Sistemas Operacionais

Documentos relacionados
Sistemas Operacionais II

Sistemas Operacionais

LabSO Gerência de Processos. Retrospectiva da aula passada... Na aula passada... Na aula passada...

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

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. Prof. André Y. Kusumoto

Sistemas Operacionais

Sistemas Operacionais

Sistemas Operacionais. Prof. André Y. Kusumoto

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação

Sistemas Operacionais

Sincronização de Processos (2)

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

Sistemas Operacionais Concorrência. Carlos Ferraz Jorge Cavalcanti Fonsêca

Fundamentos de Sistemas Operacionais

Capítulo 2 Processos e Threads

Sincronização e Comunicação

Sincronização e comunicação entre entidades de processamento. Mutex Volnys Bernal 1. Tópicos. Exclusão Mútua (mutex) Exclusão Mútua (Mutex)

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação

Sincronização e comunicação entre processos

Sincronização de Processos (2)

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

Problema do Produtor -Consumidor. Solução por semáforos

Tipos de Soluções (cont.)

Aula 6: Comunicação entre processos. Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela

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

Sistemas Operacionais

Escalonamento. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 28

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Comunicação entre processos

Exclusão Mútua (mutex)

Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização

Sistemas Operacionais: Sincronização entre processos

SSC0640 Sistemas Operacionais I

MC504 Sistemas Operacionais MC514 Sistemas Operacionais: Teoria e

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I SEM/12 PROVA I. Tempo de Prova: 100 minutos / Escore Máximo: 300 pontos

Sistemas Distribuídos Aula 7

Sincronização e Comunicação entre Processos. Adão de Melo Neto

Threads e Sincronização no Linux

Sistemas Operacionais

Escalonamento. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Roteiro. BC1518-Sistemas Operacionais. Prof. Marcelo Z. do Nascimento Semáforos

DCA-108 Sistemas Operacionais

Capítulo 3. Programação Concorrente. Conteúdo. Objetivos. Recordando. Recordando. Objetivos de sistema operacional. DCA-108 Sistemas Operacionais

Concorrência. Condições de Corrida. 5a. Tentativa. Dificuldades: Sincronização de Processos (2) Aula 11 Profa. Patrícia Dockhorn Costa

Concorrência entre Processos

Introdução a Programação Concorrente. Aula 02. Prof. André Luis Meneses Silva

Sistemas Operacionais. Deadlock

Sistemas Operacionais. Condição de corrida e Região crítica

Sistemas Operacionais. Comunicação entre processos

7 SINCRONIZAÇÃO DE PROCESSOS

Programando com Threads em C

Comunicação entre Processos

Tipos de Soluções (cont.)

Sistemas Operacionais Sincronização e Comunicação entre Processos

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 4. Comunicação e Sincronização de Processos

Sincronização e Comunicação entre Processos

Impasses. Pedro Cruz. EEL770 Sistemas Operacionais

Semáforos. Gerenciamento de Recursos I

Semáforo Volnys Borges Bernal Departamento de Sistemas Eletrônicos Escola Politécnica da USP

Sistemas Operacionais Aula 6

Sistemas Distribuídos Aula 5

Unidade III Gerência de Processos

Programação Concorrente e Paralela

Sincronização e Comunicação de/entre Processos. Na Aula Anterior... Nesta Aula. Comunicação entre Processos. Pipes 07/09/2016

Threads em Java. Java Threads. Java Componentes: JVM JVM:

Sincronização e Comunicação entre Processos. Sincronização e Comunicação Volnys Bernal 1. Agenda

OO Engenharia Eletrônica

Fundamentos de Sistemas Operacionais

Sincronização e Comunicação entre Processos. Adão de Melo Neto

Programação Concorrente e Paralela August 28, 2013

Mecanismos de Sincronização com Variáveis Compartilhadas

Sincronização. Cooperação entre Processos

SISTEMA DE ARQUIVOS DO SISTEMA OPERACIONAL

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,

1 Porque o estado de um processo deve ser salvo quando ele deixa a CPU?

8 PROBLEMAS CLÁSSICOS

Comunicação entre processos (2)

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Unidade 3. Controle de Concorrência. Primitivas de Programação Concorrente Clássica

Sistemas Operacionais

Sistemas de Computação. Threads e Sincronização

Programação concorrente (processos e threads)

SISTEMAS EMBARCADOS. Acesso a recursos compar,lhados. Prof. André Schneider de Oliveira

Sistemas Operacionais

Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Escalonamento (Exclusão Mútua)

Problemas Típicos de Sincronização

Semáforos. Gerenciamento de Recursos I

FILAS. As coisas de que uma fila é feita serão chamadas itens. Os itens podem ser números, strings, structs, etc., etc.

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Carlos Eduardo Batista Centro de Informática - UFPB

Programação Concorrente Locks

Sincronização e Comunicação entre Processos. Adão de Melo Neto

Programação de Sistemas Cafetaria

Cooperação entre Processos

Transcrição:

Sistemas Operacionais Programação Concorrente Problemas clássicos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno

Sumário Produtor / consumidor O jantar dos filósofos O barbeiro sonolento

Produtor / Consumidor Característica de execução Dois processos que compartilham um buffer de tamanho limitado O processo produtor: Produz um dado Insere no buffer Volta a gerar um dado O processo consumidor: Consome um dado do buffer (um por vez) O problema é Como garantir que o produtor não adicionará dados no buffer se este estiver cheio? Como garantir que o consumidor não vai remover dados de um buffer vazio?

Produtor / Consumidor Solução Para o processo produtor Entrar em Sleep ou descartar o dado se o buffer estiver cheio Quando o consumidro remover um item do buffer, este notifica o produtor Para o processo consumidor O mesmo pode ser feito no sentido inverso Na próxima inserção de dados pelo produtor, este notifica o consumidor Como implementar a solução? Via IPC, tal como semáforos. Construção deve ser cuidadosa Solução inadequada pode acarretar em deadlock Ambos processos aguardando notificação

Produtor / Consumidor Proposta de solução A partir do uso de semáforos Implementação de exclusão mútua Semáforos cheio e vazio cheio conta os espaços utilizados Se cheio igual a zero, então o consumidor deve ser bloqueado vazio conta os espaços não utilizados no buffer Se vazio igual a zero, então o produtor deve ser bloqueado

Produtor / Consumidor int buffer[tam_buffer]; sem_t cheio, vazio; void produtor(void *) { while (true) { item = produceitem(); sem_wait(&vazio); putitemintobuffer(item); sem_post(&cheio); } } int main(){ pthread_t prod, cons; sem_init(&cheio, 0,?); sem_init(&vazio, 0,?); void consumidor(void *) { while (true) { sem_wait(&cheio); item = removeitemfrombuffer(); sem_post(&vazio); consumeitem(item); } } pthread_create(&prod, NULL, produtor, NULL); pthread_create(&cons, NULL, consumidor, NULL); pthread_join(prod, NULL); pthread_join(cons, NULL); }

Produtor / Consumidor void produtor(void *) { while (true) { item = produceitem(); sem_wait(&vazio); putitemintobuffer(item); sem_post(&cheio); } } int buffer[tam_buffer]; sem_t cheio, vazio; int main(){ pthread_t prod, cons; sem_init(&cheio, 0, 0); sem_init(&vazio, 0, TAM_BUFFER); pthread_create(&prod, NULL, produtor, NULL); pthread_create(&cons, NULL, consumidor, NULL); pthread_join(prod, NULL); pthread_join(cons, NULL); } void consumidor(void *) { while (true) { sem_wait(&cheio); item = removeitemfrombuffer(); sem_post(&vazio); consumeitem(item); } }

Sumário Produtor / consumidor O jantar dos filósofos O barbeiro sonolento

O jantar dos filósofos

Jantar dos Filósofos Definção do problema Há cinco filósofos em torno de uma mesa. Um garfo é colocado entre cada filósofo. Cada filósofo deve, alternadamente, refletir e comer. Para que um filósofo coma, ele deve possuir dois garfos Os dois garfos devem ser aqueles logo a sua esquerda e a sua direita Para pegar um garfo Somente pode ser pego por um filósofo Somente pode ser pego não estiver em uso por nenhum outro filósofo Após comer, o filósofo deve liberar o garfo que utilizou Um filósofo pode segurar o garfo da sua direita ou o da sua esquerda assim que estiverem disponíveis Mas, só pode começar a comer quando ambos estiverem sob sua posse

Jantar dos Filósofos Solução 1 Solução funciona bem?

Jantar dos Filósofos Solução 1 Não, pois pode ocorrer deadlock Como?

Jantar dos Filósofos Solução 2 Proposta de solução E se após pegar pegarmos um garfo e não conseguimos pegar o outro devolvêssemos à mesa o primeiro garfo e esperássemos um tempo fixo?

Jantar dos Filósofos Solução 2 Proposta de solução E se após pegar pegarmos um garfo e não conseguimos pegar o outro devolvêssemos à mesa o primeiro garfo e esperássemos um tempo fixo? Solução é propensa a starvation

Jantar dos Filósofos Solução 3 Proposta de solução E se após pegar pegarmos um garfo e não conseguimos pegar o outro devolvêssemos à mesa o primeiro garfo e esperássemos um tempo, mas agora ALEATÓRIO?

Jantar dos Filósofos Solução 3 Proposta de solução E se após pegar pegarmos um garfo e não conseguimos pegar o outro devolvêssemos à mesa o primeiro garfo e esperássemos um tempo, mas agora ALEATÓRIO? Funcionaria algumas vezes, mas nem sempre Essas solução é usada em rede local Ethernet quando da colisão de pacotes; Assim sendo, a solução é válida para alguns caso, mas e se precisássemos de uma solução que funcionasse corretamente sempre?

Jantar dos Filósofos Solução 4 Proposta de solução Usando semáforos Após a estágio de pensamento tem-se Ou a captura dos recursos necessário para comer Ou o aguarde de uma notificação de que está apto a comer

Jantar dos Filósofos Solução 4

Jantar dos Filósofos Solução 4 Uma solução para o problema do jantar dos filósofos (parte 2)

Sumário Produtor / consumidor O jantar dos filósofos O barbeiro sonolento

O barbeiro sonolento

O barbeiro sonolento Descrição do problema A analogia de uma barbearia com um barbeiro. A barbearia possuir Uma cadeira para corte de cabelo Uma sala de espera com um número determinado de cadeiras Quando o barbeiro finaliza o corte de cabelo de um cliente Ele libera o cliente e vai até a sala de espera para ver se há algum cliente esperando Se há algum cliente esperando, ele trás consigo um dos clientes corta o seu cabelo Se não há clientes esperando então ele volta para a cadeira de corte para dormir Quando um cliente chega à barbearia O cliente olha o que o barbeiro está fazendo. Se o barbeiro estiver dormindo, ele o acorda e senta na cadeira. Se o barbeiro estiver trabalhando então o cliente vai para a sala de espera Se houver uma cadeira livre na sala de espera então ele senta e aguarda sua vez Se não houver cadeira livre na sala de espera então o cliente vai embora.

O barbeiro sonolento O problema Como programar o barbeiro e o(s) cliente(s) para não entrarem em uma situação de corrida Situação similar a ambientes que trabalham com fila Exemplo: Helpdesks para clientes cujo atendimento é enfileirado por um sistema centralizador de espera em uma fila de vagas limitadas

O Barbeiro Sonolento

O barbeiro sonolento Solução proposta Usa três semáforos Customer: Contabiliza e limita o número de clientes em espera Waiting: Essencialmente uma cópia de customer Barber: Contabiliza o número de barbeiros dormindo Mutex: usado para acesso à região crítica

O Barbeiro Sonolento