Sunteți pe pagina 1din 27

Sistemas Distribudos Aplicados Tecnologia Java

Roteiro - ExclusoMtua

Introduo Algoritmo de Peterson Algoritmo de Lamport Soluo de Hardware Exerccios

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

Introduo

Quando processos compartilham dados, importante sincronizar o

acesso a eles

Dados podem ser perdidos como resultado da concorrncia entre

processos ou threads

Por exemplo, em x=x+1, e assumindo que o valor inicial da varivel

compartilha x seja 0

Tendo dois processos P0 e P1 que incrementem concorrentemente

essa varivel

O valor final poder ser comprometido


TecnologiaJavaSistemasDistribudos 2

RogrioSantosPozza

Introduo

natural que o programador assuma que o valor de x ser 1 depois

de executado ambos os processos

Porm, no se pode prever que a instruo x=x+1 no ocorra

atomicamente

A instruo x=x+1 decomposta em vrias instrues para ser

executada pelo processador, como: LD R,x; l o valor de x para o registrador R INC R ; incrementa o registrador R ST R, x; armazena o valor do registrador R em x

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

Introduo
Agora a execuo dos processos P0 e P1 pode ser intercaladas: P0: LD R,x ; l o valor de x para R P0: INC R ; incrementa o registrador R P1: LD R,x ; l o valor de x para R P1: INC R ; incrementa o registrador R P0: ST R,x ; armazena o valor de R em x P1: ST R,x ; armazena o valor de R em x

Ambos processos leram o valor 0 e armazeram 1 em x, resultando em

perda de atualizao ou lost update

O problema assegurar que x=x+1 seja executado atomicamente A seo que deve ser executada atomicamente chamada de regio

crtica ou seo crtica


RogrioSantosPozza TecnologiaJavaSistemasDistribudos 4

Introduo

O problema de assegurar que uma regio crtica seja executada

atomicamente chamada de excluso mtua

Este um problemas fundamentais na computao concorrente Pode-se abstrair o problema da excluso mtua implementando a

interface mostrada abaixo: public interface Lock{ public void requestCS(int pid); //deve bloquear public void releaseCS(int pid); }

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

Introduo

dados dois protocolos, um de entrada (requestCS) e outro de sada

(releaseCS)

O processo que quer entrar na regio crtica deve chamar requestCS

com seu identificar como argumento

Quando o processo ou thread terminar o acesso a regio crtica deve

chamar o mtodo releaseCS

A chamada dos mtodos fica a cargo do programador

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

Introduo Exemplo Lock


classmyThreadextendsThread{ intmyPID; Locklock; voidprocessa(inttempo){try{Thread.sleep(1000);}catch(Exceptione){}} publicmyThread(intpid,Locklock){ myPID=pid; this.lock=lock;} voidsecaoNaoCritica(){ System.out.println(myPID+"noestnaregiocrtica"); processa(r.nextInt(1000));} voidsecaoCritica(){ System.out.println(myPID+"estnaregiocrtica"); processa(r.nextInt(250)); } publicvoidrun(){ while(true){ lock.requestCS(myPID); secaoCritica(); lock.releaseCS(myPID); secaoNaoCritica();}}} RogrioSantosPozza TecnologiaJavaSistemasDistribudos 7

Introduo Exemplo Lock


publicclasstestaMyThread{ publicstaticvoidmain(Stringargs[]){ myThreadt[]; intN=Integer.parseInt(args[0]); t=newmyThread[N]; Locklock=newAttempt();//algoritmodeexclusomtua for(inti=0;i<N;i++){ t[i]=newmyThread(i,lock); t[i].start(); } } }

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

Algoritmo de Peterson

Esse algoritmo tem como preocupao a excluso mtua entre

processos ou threads

Utiliza uma varivel boolean abre inicializada como verdadeira O protocolo de entrada deve esperar que seu valor seja true Se for true, o processo entra na regio crtica e seta o valor de abre

para false

Quando sair, o processo atribui o valor de true para a varivel abre

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

Algoritmo de Peterson
classAttemptimplementsLock{ booleanabre=true; publicvoidrequestCS(inti){//verificaovalordeabre while(!abre);//esperaocupada abre=false;//atribuifalsoparaentrarnaregiocrtica } publicvoidreleaseCS(inti){ abre=true;//atribuiverdadeiroaosair } }

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

10

Algoritmo de Peterson

O algoritmo mostrado no funciona corretamente porque o teste de

abre e sua atribuio no feita atomicamente

Conceitualmente, um processo pode checar o valor de abre e passar

pelo condicional do while

Entretanto, antes do processo setar abre como false, um outro

processo pode testar o while e setar abre como false

Assim, o primeiro processo seta tambm abre como false e,

consequentemente, ambos esto na regio crtica

Isso ocorre quando processos tm tempo de execuo diferentes


TecnologiaJavaSistemasDistribudos 11

RogrioSantosPozza

Algoritmo de Peterson
classAttemptimplementsLock{ booleanabre=true; publicvoidrequestCS(inti) while(!abre); abre=false; } publicvoidreleaseCS(inti){ abre=true; } } RogrioSantosPozza TecnologiaJavaSistemasDistribudos 12 T1 T2 T3 T4 Ambosnaregiocrtica Exclusomtuaviolada

Algoritmo de Peterson

No prximo exemplo proposto duas variveis compartilhadas:

querCS[0] e querCS[1]

Cada processo primeiro seta seu prprio querCS como true e espera

que o valor do querCS de outro processo seja false

utilizado 1-i para identificar o processo quando so dois processos

(P0 e P1)

Para deixar a regio crtica, simplesmente seta como false querCS

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

13

Algoritmo de Peterson
classAttempt1implementsLock{ booleanquerCS[]={false,false}; publicvoidrequestCS(inti){//protocolodeentrada querCS[i]=true;//intenodeentrar while(querCS[1i]);//Esperaocupada } publicvoidreleaseCS(inti){ querCS[i]=false;//protocolodesada } } RogrioSantosPozza TecnologiaJavaSistemasDistribudos 14

Algoritmo de Peterson

Infelizmente, esse algoritmo tambm no funciona corretamente

porque ambos processos podem setar querCS como true e executar indefinidamente

Outra maneira de fixar o problema baseado no valor de uma

varivel vez

Um processo espera por sua vez para entrar na regio crtica Ao sair da regio crtica setado o valor para 1-i

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

15

Algoritmo de Peterson
classAttempt2implementsLock{ Esseprotocologaranteaexclusomtua

intvez=0;

Entretanto,seumdosprocessosformais publicvoidrequestCS(inti){ rpidoqueooutro,acarretarem problemas while(vez==1i);

Assim,seforgarantidoqueosprocessos publicvoidreleaseCS(inti){ seroexecutadosdemodoalternado,no ocorrerproblema vez=1i;

} }

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

16

Algoritmo de Peterson

Combinando o que foi visto dos algoritmos tem-se um outra proposta Neste caso mantem-se querCS[0] e querCS[1] e uma varivel vez A chamada para os processos funciona do mesmo jeito que os
classPetersonAlgorithmimplementsLock{ booleanquerCS[]={false,false}; intturn=1; publicvoidrequestCS(inti){ intj=1i; querCS[i]=true; turn=j; while(querCS[j]&&(turn==j));} publicvoidreleaseCS(inti){ querCS[i]=false; }} TecnologiaJavaSistemasDistribudos

anteriores

RogrioSantosPozza

17

Algoritmo de Peterson

Mostrou-se que o Algoritmo de Peterson tenta resolver as seguintes

propriedades:

Excluso Mtua dois processos no podem executar a mesma seo ao mesmo tempo

Progresso se um ou mais processos tentar entrar na regio crtica e no h processo algum dentro dela, pelo menos um processo deve ser capaz de entrar

Liberdade de Starvation se um processo est tentando entrar na regio crtica, eventualmente ele ter sucesso

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

18

Algoritmo de Peterson - Exerccio

O algoritmo de Peterson realmente satisfaz todas as propriedades

citas? Prove.

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

19

Algoritmo de Lamport's Bakery

O algoritmo de Peterson trabalha bem com dois processos, porm

com N o resultado mais complexo

O algoritmo de Lamport prope uma soluo para N processos ou

threads, levando em considerao que todos possuem nmeros de identificao distintos

Porm, em sistemas concorrentes, difcil assegurar que todo

processo tenha um nmero nico de identificao

No caso de empate, usa-se a menor identificao do processo

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

20

Algoritmo de Lamport's Bakery


classBakeryimplementsLock{ intN; boolean[]choosing; int[]number; publicBakery(intnumProc){ N=numProc; choosing=newboolean[N]; number=newint[N]; for(intj=0;j<N;j++){ choosing[j]=false; number[j]=0; } }

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

21

Algoritmo de Lamport's Bakery


publicvoidrequestCS(inti){ choosing[i]=true;//escolhendoumnmero for(intj=0;j<N;j++) if(number[j]>number[i]) number[i]=number[j]; number[i]++; choosing[i]=false;//verificandoseonmeroomenor for(intj=0;j<N;j++){ while(choosing[j]);//processojestnaentrada while((number[j]!=0)&&((number[j]<number[i])|| ((number[j]==number[i])&&j<i))) } } publicvoidreleaseCS(inti){//protocolodesada number[i]=0; } } RogrioSantosPozza TecnologiaJavaSistemasDistribudos

22

Soluo de Hardware

Solues via software so complexas e exigem muito processamento Excluso mtua pode ser conseguida com uma pequena ajuda do

hardware

Em um sistema monoprocessado, um processo pode desabilitar todas as interrupes antes de entrar na regio crtica. Isso garante que o processador no o interrompa enquanto o processo no terminar o processamento

Muitas mquinas tm instrues com alto nvel de atomicidade para leitura ou escrita

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

23

Soluo de Hardware

Instruo TestAndSet fornecida por alguma mquina, faz ambas

leituras e escritas de maneira atmica

Por exemplo, uma classe para ler o valor antigo da memria e


publicclassTestAndSet{ intmyValue=1; publicsynchronizedinttestAndSet(intnewValue){ intoldValue=myValue; myValue=newValue; returnoldValue; } }

colocar um valor novo

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

24

Soluo de Hardware

Se a instruo testAndSet est disponvel, pode-se desenvolver um

protocolo muito simples de excluso mtua

Porm, apesar de realizar excluso mtua, ainda existe espera


classHWMuteximplementsLock{ TestAndSetlockFlag=newTestAndSet(); publicvoidrequestCS(inti){//protocolodeentrada while(lockFlag.testAndSet(1)==1); } publicvoidreleaseCS(inti){//protocolodesada lockFlag.testAndSet(0); } }

ocupada

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

25

Exerccios

Mostre que qualquer das modificaes abaixo no algoritmo de

Peterson acarretar problema:

Um processo no algoritmo de Peterson seta a sua varivel vez ao invs de setar a do outro processo

Um processo seta a varivel vez antes de setar querCS

Mostre que o algoritmo de Peterson garante liberdade de startvation

RogrioSantosPozza

TecnologiaJavaSistemasDistribudos

26

Exerccios

Considere o protocolo de Dekker para excluso mtua entre dois

processos. Este protocolo satisfaz (a) excluso mtua e (b) liberdade de livelock (ambos processos tentarem entrar na regio crtica e nenhum deles conseguirem)? Ele satisfaz a liberdade de starvation?

Modifique o algoritmo de Bakery para resolver K excluses mtuas,

em que K processos podem estar em regies crticas concorrentemente.

Faa um algoritmo de excluso mtua que use instruo atmica de

swap.
RogrioSantosPozza TecnologiaJavaSistemasDistribudos 27

S-ar putea să vă placă și