Top Banner
Monitores Programa¸ ao Concorrente – 2012.2 September 11, 2012 Programa¸c˜ ao Concorrente – 2012.2 Monitores
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.

Jul 20, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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