25
Monitores Programa¸ ao Concorrente – 2012.2 September 11, 2012 Programa¸c˜ ao Concorrente – 2012.2 Monitores

Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

  • Upload
    others

  • View
    5

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Monitores

Programacao Concorrente – 2012.2

September 11, 2012

Programacao Concorrente – 2012.2 Monitores

Page 2: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Monitores

mecanismo de sincronizacao classico

Brinch-Hansen e Hoare, circa 1974

nıvel de protecao diferente do apresentado em outraspropostas

Programacao Concorrente – 2012.2 Monitores

Page 3: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

o que sao?

construcao sintatica: parte da linguagem

construcao garante exclusao mutua para as operacoesencapsuladas

combinacao de variaveis compartilhadas e procedimentos queoperam sobre essas variaveis

controle

unica forma de acesso a dados compartilhados!

ausencia de condicoes de corrida

Programacao Concorrente – 2012.2 Monitores

Page 4: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Exemplo – Exclusao Mutua

monitor conta {

int saldo ();

void transfere (...);

void deposita (...);

}

saldo estruturas de dadosinternas

transfere

deposita

...

Programacao Concorrente – 2012.2 Monitores

Page 5: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Exemplo exclusao mutua: buffer ilimitado

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;

}

}

Programacao Concorrente – 2012.2 Monitores

Page 6: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Cooperacao

espera de condicao: variaveis de condicao

primitivas wait e signal

Programacao Concorrente – 2012.2 Monitores

Page 7: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Exclusao Mutua e Cooperacao

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);

}

}

Programacao Concorrente – 2012.2 Monitores

Page 8: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Cooperacao

sinalizacao a cada vez que condicao e garantida simplificaprograma

mas chamadas a signal tem custo...

Programacao Concorrente – 2012.2 Monitores

Page 9: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Espera, Sinalizacao e Exclusao Mutua

espera por condicao nao pode manter exclusao mutua

caso contrario a condicao provavelmente nunca sera verdadeira

primitiva wait deve liberar EM

e o que acontece quando um outro processo executa signal?

dois processos dentro do monitor?

Programacao Concorrente – 2012.2 Monitores

Page 10: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Polıticas propostas

1 sinaliza e continua (SC)

2 sinaliza e espera (SW)

3 sinaliza e retorna

exclusao mutua e wait

independentemente da polıtica, wait sempre libera exclusaomutua

Programacao Concorrente – 2012.2 Monitores

Page 11: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Polıticas de Sinalizacao

fila de entrada

fila de condição

execução no

monitor

chamadamonitor livre

SW (sinalizador)

SW (proc sinalizado)SC (proc sinalizado)wait

SC (sinalizador)

SR (sinalizador)

SR (proc sinalizado)

Programacao Concorrente – 2012.2 Monitores

Page 12: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Polıticas de Sinalizacao

com SW, processo sinalizado pode ter certeza que a condicaoe verdadeira

polıtica proxima a proposta inicialmente por Hoare

com SC, o proprio processo sinalizador ou outros processos dafila de entrada podem ter revertido a condicao

sinalizacao passa a ser apenas “dica”teste de condicao deve, quase sempre, ficar dentro de loopmais facil de entender!

Programacao Concorrente – 2012.2 Monitores

Page 13: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Polıticas de Sinalizacao

a implementacao de um semaforo e um bom exemplo dadiferenca entre as polı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);

}

}

Programacao Concorrente – 2012.2 Monitores

Page 14: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Passagem de Condicao

tecnica um pouco semelhante a passagem de bastao pode serusada:

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...

Programacao Concorrente – 2012.2 Monitores

Page 15: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Leitores e Escritores

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

}

}

deixa decisoes para o escalonadorProgramacao Concorrente – 2012.2 Monitores

Page 16: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

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);

}

}

Programacao Concorrente – 2012.2 Monitores

Page 17: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Cuidados...

sinalizacao nao embute contagem

condicao sempre deve ser testada

ordens de entrada podem ser totalmente arbitrarias

aninhamento e deadlocks

reentrancia

Programacao Concorrente – 2012.2 Monitores

Page 18: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Aninhamento e composicao

monitores e programacao estruturada: e natural pensar emcriar novas estruturas a partir de outras ja definidas...

cond.wait()

Programacao Concorrente – 2012.2 Monitores

Page 19: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Implementacoes de Monitores

exemplos classicos: Concurrent Pascal, Modula, Mesa

baseadas em monitores: Java e pthreads

Programacao Concorrente – 2012.2 Monitores

Page 20: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Monitores em pthreads

locks explıcitos para exclusao mutuatipo pthread mutex t com operacoes pthread mutex lock

e pthread mutex unlock

variaveis de condicaotipo pthread cond t

operacoes explicitamente ligam condicoes a lockspthread cond wait(&cond, &mutex)

Programacao Concorrente – 2012.2 Monitores

Page 21: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Monitores em pthreads: exemplo

Soma de elementos de matriz (FMPDP)

Programacao Concorrente – 2012.2 Monitores

Page 22: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

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();

...

metodos podem ser declarados como synchronized

lock associado a cada objeto

uma fila de condicao por objeto

Programacao Concorrente – 2012.2 Monitores

Page 23: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Monitores em Java: exemplo

Programacao Concorrente – 2012.2 Monitores

Page 24: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Construcoes com testes implıcitos

variaveis de condicao substituıdas por predicados reavaliadosautomaticamente

programacao mais facil

sinalizacao e o grande problema na abstracao de monitores

implementacao mais difıcil

especialmente em termos de eficiencia (quanto testar cadapredicado pendente?)

alem de monitores, ja foram feitas varias propostas comesperas implıcitas

Programacao Concorrente – 2012.2 Monitores

Page 25: Monitores - inf.puc-rio.brnoemi/pc-12/aula5/aula5-monitores.pdf · Monitores Programa˘c~ao Concorrente { 2012.2 September 11, 2012 Programa˘c~ao Concorrente { 2012.2 Monitores

Bibliografia

Propostas originais

C. A. R. Hoare, Monitors: an operating system structuringconcept, Communications of the ACM, 17(10), p.549-557,Oct. 1974

Per Brinch Hansen, Structured multiprogramming,Communications of the ACM, 15(7), p.574-578, July 1972

P. A. Buhr and A. S. Harji. Implicit-signal monitors. ACMTransactions on Programming Languages and Systems,27:1270-1343, November 2005.

Programacao Concorrente – 2012.2 Monitores