Sistemas Operacionais

Documentos relacionados
Tipos de Soluções (cont.)

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

SSC0640 Sistemas Operacionais I

Tipos de Soluções (cont.)

Sincronização de Processos (2)

Sistemas Operacionais

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

Sincronização de Processos (2)

Sistemas Operacionais: Sincronização entre processos

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

Programação Concorrente e Paralela August 28, 2013

Programação Concorrente e Paralela

Sistemas Operativos: Concorrência (Parte 2)

Sistemas Operacionais

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

Comunicação entre processos

7 SINCRONIZAÇÃO DE PROCESSOS

Comunicação entre Processos

Fundamentos de Sistemas Operacionais

BC1518-Sistemas Operacionais. Prof. Marcelo Z. do Nascimento

Sistemas Operacionais

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

Programação concorrente em Java

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

Sistemas Operacionais

Sistemas Operacionais. Prof. André Y. Kusumoto

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

Sincronização e Comunicação

Sistemas Operacionais

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

Só podem ser executados por uma Thread que detenha o lock do objecto

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

Fundamentos de Sistemas Operacionais

Sincronização de Threads

Sistemas Distribuídos Aula 5

Modelagem e implementação de programas concorrentes

Unidade III Gerência de Processos

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

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

Sistemas Operacionais

Carlos Eduardo Batista Centro de Informática - UFPB

MC504 - Sistemas Operacionais

Programação concorrente (processos e threads)

Sistemas Operacionais

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 6. Primitivas de Sincronização

Comunicação entre processos (2)

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

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

Monitores. Programação Concorrente September 11, 2012

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

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

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

Alexandro Baldassin Programação Concorrente 2sem, 2017

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

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

Revisão Ultima aula [1/2]

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

Monitores. Setembro de Monitores

Exercício de Estrutura de dados. Java Fila

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Programação Concorrente

Mecanismos de Sincronização com Variáveis Compartilhadas

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

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

Sistemas Distribuídos Aula 7

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

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

Métodos Sincronizados

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

Sistemas Operacionais. Prof. André Y. Kusumoto

Threads. Linguagem Java. Adenilso da Silva Simão 17/05/05

1B Conceitos Básicos: Indique Verdade/Falso

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

Sistemas Operacionais

Sistemas Operativos: Concorrência (Parte 2)

MC504 Sistemas Operacionais MC514 Sistemas Operacionais: Teoria e

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

Informática UFRGS. Threads. Programação com Objetos Distribuídos (C. Geyer) C# Threads V5 1

Programação Concorrente em Java

UFRJ IM - DCC. Sistemas Operacionais I. Unidade II Concorrência

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Sistemas Operacionais II

Sistemas Operacionais

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

Concorrência entre Processos

Sistemas Operacionais. Comunicação entre processos

(Aula 17) Threads em Java

Problema dos Leitores/Escritores

Sistemas Distribuídos

Semáforos. Gerenciamento de Recursos I

1 a Questão Unidade I e II (45 pontos)

Sincronização e memória compartilhada no Linux

Programação Orientada a Objetos. Concorrência

Sistemas Operativos I

Threads. Leonardo Gresta Paulino Murta

Listas Lineares Ordenadas

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

Sistemas Operacionais

Concorrência e Paralelismo

Transcrição:

Sistemas Operacionais Processos Semáforos Semáforos Mecanismo de sincronização que não requer espera ocupada Dijkstra propôs usar uma variável inteira para contar o n o de WAKEUPs para uso futuro Menos complicado Esta variável, denominada semáforo, pode ter valor 0 (nenhum WAKEUP pendente) ou um valor inteiro positivo Apenas duas operações são definidas sobre estas variáveis: as operações P (Down) e V (Up) 2 Comunicação e Sincronização 1

(cont.) Semáforos P(s) (Down) - checa o valor do semáforo. Se o valor é maior que 0 (zero), decrementa e continua. Se for igual a 0, o processo é posto para dormir Ação atômica: é garantido que, uma vez iniciada a operação, nenhum outro processo tem acesso ao semáforo (essencial para resolver problemas de sincronização e evitar condições de corrida) P(s) equivale a: Se s > 0 então s := s - 1 senão bloqueia o processo até s > 0 (= wait(s)) V(s) (Up) - se um ou mais processos estão dormindo no semáforo, um deles é escolhido aleatoriamente pelo SO e continua sua operação Down (o valor zero continua). Se não há ninguém dormindo no semáforo, incrementa o valor dele Operação também é indivisível V(s) equivale a: Verifica se existe uma lista com processos bloqueados por causa de s, se existe escolhe um e o acorda, deixando-o pronto para seguir sua execução de P(s) (= signal(s)) senão s := s + 1 3 Comunicação e Sincronização Semáforos como um mecanismo de sincronização geral Semáforo Contador valor inteiro positivo pode variar sem limites Semáforo Binário valor inteiro só pode variar entre 0 e 1; Também conhecido como mutex locks Para fornecer exclusão mútua: Semaphore S; // initialized to 1 P(S); criticalsection(); V(S); 4 Comunicação e Sincronização 2

Deadlock e Starvation Deadlock dois ou mais processos ficam esperando indefinidamente por um evento que pode ser causado apenas por um dos processos bloqueados Sejam S e Q dois semáforos inicializados com 1 P 0 P 1 P(S); P(Q); P(Q);...... V(S); V(Q); P(S); V(Q); V(S); Starvation bloqueio indefinido. Um processo pode nunca ser removido da fila de semáforos na qual ele está bloqueado. 5 Comunicação e Sincronização Problema do Produtor-Consumidor Dois processos compartilham um buffer de tamanho fixo. Um dos processos, o produtor, coloca informação no buffer, e o outro, o consumidor, retira informação do buffer. Se o buffer estiver cheio, o produtor dorme e é acordado quando o consumidor remover um item Se o buffer estiver vazio, o consumidor dorme até que seja produzido e armazenado algum item 6 Comunicação e Sincronização 3

Produtor/Consumidor com Semáforos #define N 100 /* no máximo de ítens */ typedef int semaphore; semaphore mutex = 1; /* controla acesso à RC */ semaphore empty = N; /* conta slots vazios */ semaphore full = 0; /* conta slots ocupados */ void producer (void) int item; while (TRUE) produce_item(&item); P(&empty); P(&mutex); enter_item(item); V(&mutex); V(&full); void consumer(void) int item; while (TRUE) P(&full); P(&mutex); remove_item(&item); V(&mutex); V(&empty); consume_item(item); 7 Comunicação e Sincronização Bounded-Buffer Buffer Problem public class BoundedBuffer implements Buffer private static final int BUFFER SIZE = 5; private Object[] buffer; private int in, out; private Semaphore mutex; private Semaphore empty; private Semaphore full; // Continued on next Slide 8 Comunicação e Sincronização 4

Bounded Buffer Constructor public BoundedBuffer() // buffer is initially empty in = 0; out = 0; buffer = new Object[BUFFER SIZE]; mutex = new Semaphore(1); empty = new Semaphore(BUFFER SIZE); full = new Semaphore(0); public void insert(object item) /* next slides */ public Object remove() /* next slides */ 9 Comunicação e Sincronização Bounded Buffer Problem: insert() Method public void insert(object item) empty.acquire(); mutex.acquire(); // add an item to the buffer buffer[in] = item; in = (in + 1) % BUFFER SIZE; mutex.release(); full.release(); 10 Comunicação e Sincronização 5

Bounded Buffer Problem: remove() Method public Object remove() full.acquire(); mutex.acquire(); // remove an item from the buffer Object item = buffer[out]; out = (out + 1) % BUFFER SIZE; mutex.release(); empty.release(); return item; 11 Comunicação e Sincronização Bounded Buffer Problem: Producer import java.util.date; public class Producer implements Runnable private Buffer buffer; public Producer(Buffer buffer) this.buffer = buffer; public void run() Date message; while (true) // nap for awhile SleepUtilities.nap(); // produce an item & enter it into the buffer message = new Date(); buffer.insert(message); 12 Comunicação e Sincronização 6

Bounded Buffer Problem: Consumer import java.util.date; public class Consumer implements Runnable private Buffer buffer; public Consumer(Buffer buffer) this.buffer = buffer; public void run() Date message; while (true) // nap for awhile SleepUtilities.nap(); // consume an item from the buffer message = (Date)buffer.remove(); 13 Comunicação e Sincronização Bounded Buffer Problem: Factory public class Factory public static void main(string args[]) Buffer buffer = new BoundedBuffer(); // now create the producer and consumer threads Thread producer = new Thread(new Producer(buffer)); Thread consumer = new Thread(new Consumer(buffer)); producer.start(); consumer.start(); 14 Comunicação e Sincronização 7