Monitores. Setembro de Monitores

Documentos relacionados
Monitores. Programação Concorrente September 11, 2012

Monitores. Setembro de Monitores

Sistemas Operacionais II

Programação Concorrente e Paralela August 28, 2013

Programação Concorrente e Paralela

O PROBLEMA DOS LEITORES E ESCRITORES LABORATORIO 1

Carlos Eduardo Batista Centro de Informática - UFPB

Comunicação entre Processos

Sistemas Distribuídos Aula 7

Monitores. Paulo Sérgio Almeida. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho

MAC422/5753 Sistemas Operacionais

Sistemas Operativos: Concorrência (Parte 2)

Sistemas Operacionais

Sistemas Operacionais

Fundamentos de Sistemas Operacionais

Programação Orientada a Objetos. Concorrência

Mecanismos de Sincronização com Variáveis Compartilhadas

Programação concorrente em Java

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

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

Sincronização de Processos (4) Monitores

Sistemas Operacionais. Prof. André Y. Kusumoto

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

Monitores. Conceito Sistemas Operacionais II

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

Sistemas Operacionais

SSC0640 Sistemas Operacionais I

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

Sincronização. Cooperação entre Processos

Sistemas Operacionais. Prof. André Y. Kusumoto

Sincronização. Cooperação entre Processos

Sincronização de Processos (2)

Sincronização. Cooperação entre Processos

Sincronização de Threads

Sincronização de Processos (2)

Programação concorrente (processos e threads)

Unidade III Gerência de Processos

Capítulo II Modelos de Programação Distribuída

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

Métodos Sincronizados

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

Monitores. Walter Fetter Lages.

Problemas Típicos de Sincronização

Tipos de Soluções (cont.)

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

Sincronização e Comunicação entre Processos

Sistemas Distribuídos INF

Sistemas Operacionais: Sincronização entre processos

Sincronização. Objectivos da aula de hoje

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios

1B Conceitos Básicos: Indique Verdade/Falso

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

Sistemas Operacionais II

MC504 Sistemas Operacionais MC514 Sistemas Operacionais: Teoria e

INE5645 Programação Paralela e Distribuída - Prova 1 22/10/2012 Aluno: Parte 1 Controle de Concorrência Conceitos Básicos (2,5)

Programação Estruturada e Orientada a Objetos

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

Memória Compartilhada

Threads. O que é uma Thread? Paralelismo

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

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

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

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

Threads e Sincronização no Linux

(Aula 17) Threads em Java

Exclusão Mútua (mutex)

Fundamentos de sistemas paralelos e distribuídos

Métodos Sincronizados

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

Java Threads. Introduçã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)

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

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 11 - Threads e Concorrência

Cooperação entre Processos

Pthreads API. Criação de Threads: usando Pthreads

Programação Concorrente em Java

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

SO: Sincronização. Sistemas Operacionais Flavio Figueiredo (

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

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

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

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

Semáforos. Gerenciamento de Recursos I

Curso de Programação Distribuída e Paralela 29/09/2008. Informática UFRGS. Sistemas Operacionais II (C. Geyer) Sincronização 1. Pg.

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

Programação Concorrente e Paralela. Noemi Rodriguez

Alexandro Baldassin Programação Concorrente 2sem, 2017

Tipos de Soluções (cont.)

Nomes, vinculações e escopos

DISCIPLINA: ELE213 Programação de Sistemas de Tempo Real. Créditos: 4. Caráter: Eletiva. Professor Regente: Prof. Walter Fetter Lages

Parte 1 Processos e Threads (20%)

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

Linguagens de Programação Conceitos e Técnicas. Amarrações

Sincronização e memória compartilhada no Linux

Transcrição:

Setembro de 2010

mecanismo de sincronização clássico referência influência de conceitos de programação estruturada C. A. R. Hoare, Monitors: an operating system structuring concept, Communications of the ACM, v.17 n.10, p.549-557, Oct. 1974 Per Brinch Hansen, Structured multiprogramming, Communications of the ACM, v.15 n.7, p.574-578, July 1972 material baseado no Cap. 5 de FMPDP (Andrews)

o que são? construção sintática: compilador entende a encapsulação por monitor construção monitor garante exclusão mútua para as operações encapsuladas monitor meusdados { int pegadado (); void poedado (int); para cooperação, uso de condições cond umacond;... while (!B) wait(umacond); primitivas wait, signal e signal all

Exclusão Mútua monitor BufferIlimitado { int buf[]; int nxtfree = 0; int nxtdata = 0; void deposit (int data) { buf[nxtfree] = data; nxtfree = nxtfree+1; int fetch () { int data; data = buf[nxtdata]; nxtdata = nxtdata+1 return data;

Exclusão Mútua e Cooperação monitor BoundedBuffer { int buf[size]; int nxtfree = 0; int nxtdata = 0; cond hasfree, hasdata; void deposit (int data) { while ((nxtfree+1)%size == nxtdata) wait(hasfree); buf[nxtfree] = data; nxtfree = (nxtfree+1)%size; signal(hasdata); int fetch () { int data; while (nxtfree == nxtdata) wait(hasdata); data = buf[nxtdata]; nxtdata = (nxtdata+1)%size; signal(hasfree);

Espera, Sinalização e Exclusão Mútua espera por condição não pode manter exclusão mútua caso contrário a condição provavelmente nunca será verdadeira primitiva wait deve liberar EM e o que acontece quando um outro processo executa signal? dois processos dentro do monitor?

Poĺıticas propostas 1 sinaliza e continua (SC) 2 sinaliza e espera (SW) 3 sinaliza e sai

Poĺıticas de Sinalização chamada fila de entrada SW (sinalizador) SC (sinalizador) execução no monitor livre monitor SC (proc sinalizado) wait fila de condição SW (proc sinalizado)

Poĺıticas de Sinalização com SW, processo sinalizado pode ter certeza que a condição é verdadeira poĺıtica próxima à proposta inicialmente por Hoare com SC, o próprio processo sinalizador ou outros processos da fila de entrada podem ter revertido a condição sinalização passa a ser apenas dica teste de condição deve, quase sempre, ficar dentro de loop mais fácil de entender!

Poĺıticas de Sinalização a implementação de um semáforo é um bom exemplo da diferença entre as poĺıticas: monitor Semaphore { int s = 0; ## s >= 0 cond pos; # signaled when s > 0 procedure Psem() { while (s == 0) wait(pos); s = s-1; procedure Vsem() { s = s+1; signal(pos);

Passagem de Condição técnica um pouco semelhante à passagem de bastão pode ser usada: monitor Semaphore { int s = 0; ## s >= 0 cond pos; # signaled when s > 0 procedure Psem() { if (s == 0) wait (pos); else s = s-1; procedure Vsem() { if (empty(pos)) s = s+1; else signal(pos); mais difícil de entender...

Leitores e Escritores deixa decisões para o escalonador monitor RW_Controller { int nr = 0, nw = 0; ## (nr == 0 or nw == 0) and nw <= 1 cond oktoread; # signaled when nw == 0 cond oktowrite; # signaled when nr == 0 and nw == 0 procedure request_read() { while (nw > 0) wait(oktoread); nr = nr + 1; procedure release_read() { nr = nr - 1; if (nr == 0) signal(oktowrite); # awaken one writer procedure request_write() { while (nr > 0 nw > 0) wait(oktowrite); nw = nw + 1; procedure release_write() { nw = nw - 1; signal(oktowrite); # awaken one writer and signal_all(oktoread); # all readers

outro exemplo: Barreira monitor Barreira { int qtos = 0; ## qtos >= 0 cond chegaram; # signaled when qtos == TODOS procedure cheguei() { qtos++; if (qtos < TODOS) while (qtos < TODOS) wait(chegaram); else signal_all (chegaram);

Filósofos

Cuidados... sinalização não embute contagem condição sempre deve ser testada ordens de entrada podem ser totalmente arbitrárias aninhamento e deadlocks reentrância

Implementações de exemplos clássicos: Concurrent Pascal, Modula, Mesa baseadas em monitores: Java e pthreads

em pthreads locks expĺıcitos para exclusão mútua tipo pthread mutex t com operações pthread mutex lock e pthread mutex unlock variáveis de condição tipo pthread cond t operações explicitamente ligam condições a locks pthread cond wait(&cond, &mutex)

em pthreads: exemplo Soma de elementos de matriz (FMPDP)

Java classe Thread e interface Runnable class Simple implements Runnable { public void run () { System.out.println ("alo alo"); Runnable s = new Simple; new Thread(s).start();... métodos podem ser declarados como synchronized lock associado a cada objeto uma fila de condição por objeto

em Java: exemplo

Construções com testes impĺıcitos programação mais fácil sinalização é um grande problema na abstração de monitores implementação mais difícil especialmente em termos de eficiência (quanto testar cada predicado pendente?) além de monitores, já foram feitas várias propostas com esperas impĺıcitas

Espera de condições em Guide CLASS FixedSizeBuffer IMPLEMENTS ProducerConsumer IS CONST size=100; buffer : ARRAY[0..size-1] OF Element; first, last: Integer = 0, 0; METHOD Put(IN m: Element); BEGIN buffer[last]:=m; last:=last+1 MOD size; END Put; METHOD Get(OUT m: Element); BEGIN m:=buffer[first]; first:= first +1 MOD size; END Get; CONTROL Put: (completed(put) - completed (Get)<size) AND current(put)=0; Get: (completed (Put) > completed (Get)) AND current(get)=0; END FixedSizeBuffer. R. Balter, S. Lacourte and M. Riveill. The Guide Language. Computer J., vol. 37, no. 6, pp. 521-530, 1994.

com sinalização impĺıcita Buhr, P. A. and Harji, A. S. 2005. Implicit-signal monitors. ACM Trans. Program. Lang. Syst. 27(6), Nov. 2005, 1270-1343.