A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

ProgramaçãoConcorrente Glêdson Elias

Apresentações semelhantes


Apresentação em tema: "ProgramaçãoConcorrente Glêdson Elias"— Transcrição da apresentação:

1 ProgramaçãoConcorrente Glêdson Elias gledson@di.ufpb.br

2 Programação Concorrente Seção Crítica  Introdução  Processos ou threads que compartilham dados devem sincronizar o acesso aos dados  Evita que atualizações sejam perdidas em função do acesso concorrente i := i + 1 i = 0 P: LD reg, i P: INC R Q: LD reg, i Q: INC R P: ST i, reg Q: ST i, reg LD reg, i INC reg ST i, reg P: LD reg, i P: INC R P: ST i,reg Q: LD reg, i Q: INC R Q: ST i, reg i = 2i = 1

3 Glêdson Elias Programação Concorrente Seção Crítica  Definição  Trecho de código que precisa ser executado de forma atômica  A seção crítica contém as instruções que acessam recursos compartilhados  Também denominada região crítica  Para assegurar que uma seção crítica é executada atomicamente deve-se adotar técnicas de exclusão mútua

4 Glêdson Elias Programação Concorrente Exclusão Mútua  Definição  Técnica que assegura que apenas um único processo ou thread pode executar a seção crítica  Se um processo está executando sua seção crítica, outros processos não podem entrar em suas próprias seções críticas  Um processo não pode entrar em sua seção crítica se qualquer outro processo estiver em sua própria seção crítica

5 Glêdson Elias Programação Concorrente Exclusão Mútua  Execução Concorrente... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Processo A Processo B Processo C

6 Glêdson Elias Programação Concorrente Exclusão Mútua  Execução Concorrente  Processos podem executar concorrentemente, exceto nas seções críticas... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Processo A Processo B Processo C

7 Glêdson Elias Programação Concorrente Exclusão Mútua  Execução Concorrente  Um único processo entra na seção crítica  Demais processos devem ser bloqueados quando alcançam suas seções críticas... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Código não crítico... RequisitaExclusão... Seção crítica... LiberaExclusão... Código não crítico... Processo A Processo B Processo C

8 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Como garantir a exclusão mútua?  O que devemos fazer antes que um processo entre em sua seção crítica?  O que devemos fazer quando um processo termina sua seção crítica?

9 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Entrada na Sessão Crítica (RequisitaExclusão)  Verificar se outro processo está em sua própria seção crítica  Caso afirmativo, bloquear o processo até que o outro processo saia da seção crítica  Senão, passar à execução da seção crítica  Saída da Sessão Crítica (LiberaExclusão)  Informar os outros processos que a sessão crítica foi concluída

10 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Primitivas do tipo RequisitaExclusão e LiberaExclusão garantem a exclusão mútua  Mas... Como implementar tais primitivas? É possível implementá-las? São de fácil implementação? Existem várias formas de implementá-las?

11 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável Booleana Compartilhada  Verdadeira  Um dos processos está na região crítica  Falsa  Nenhum dos processos está na região crítica

12 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável Booleana Compartilhada Begin {RequisitaExclusão} If Ocupado then Wait; Ocupado = True; End {RequisitaExclusão}... Seção crítica... Begin {LiberaExclusão} Ocupado = False; If P2 esperando then reative-o; End {LiberaExclusão} Begin {RequisitaExclusão} If Ocupado then Wait; Ocupado = True; End {RequisitaExclusão}... Seção crítica... Begin {LiberaExclusão} Ocupado = False; If P1 esperando then reative-o; End {LiberaExclusão} Variável Global Ocupado: Boolean; Processo P1 Processo P2

13 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável Booleana Compartilhada public interface Lock { public void requestCS(); public void releaseCS(); } public class LockImpl implements Lock { boolean busy = false; public void requestCS() { while (busy); busy = true; } public void releaseCS() { busy = false; }

14 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável Booleana Compartilhada public class MyLock extends Thread { Lock lock; public MyLock(Lock lock) { this.lock = lock; } public void run() { while (true) { lock.requestCS(); // Seção crítica lock.releaseCS(); } public static void main (String[] args) { Lock lock = new LockImpl(); MyLock t1 = new MyLock(lock); MyLock t2 = new MyLock(lock); t1.start(); t2.start(); }

15 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável Booleana Compartilhada  Não garante a exclusão mútua public class LockImpl implements Lock { boolean busy = false; public void requestCS() { while (busy); busy = true; } public void releaseCS() { busy = false; }

16 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável de Seleção Compartilhada  Indica qual processo tem a permissão de entrar na seção crítica Begin {RequisitaExclusão} If QualProc = 2 then Wait; End {RequisitaExclusão}... Seção crítica... Begin {LiberaExclusão} QualProc = 2; If P2 esperando then reative-o; End {LiberaExclusão} Begin {RequisitaExclusão} If QualProc = 1 then Wait; End {RequisitaExclusão}... Seção crítica... Begin {LiberaExclusão} QualProc = 1; If P1 esperando then reative-o; End {LiberaExclusão} Variável Global QualProc: Integer; Processo P1 Processo P2

17 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável de Seleção Compartilhada public interface Lock { public void requestCS(int id); public void releaseCS(int id); } public class LockImpl implements Lock { int turn = 0; public void requestCS(int id) { while (turn == 1 - id); } public void releaseCS(ind id) { turn = 1 - id; }

18 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável de Seleção Compartilhada public class MyLock extends Thread { Lock lock; int id; public MyLock(Lock lock, int id) { this.lock = lock; this.id = id; } public void run() { while (true) { lock.requestCS(id); // Seção crítica lock.releaseCS(id); } public static void main (String[] args) { Lock lock = new LockImpl(); MyLock t1 = new MyLock(lock, 0); MyLock t2 = new MyLock(lock, 1); t1.start(); t2.start(); }

19 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Variável de Seleção Compartilhada  Garante a exclusão mútua  Processos não são independentes  Alternam a execução das suas seções críticas  Um processo pode bloquear ou atrasar o outro public class LockImpl implements Lock { int turn = 0; public void requestCS(int id) { while (turn == 1 - id); } public void releaseCS(ind id) { turn = 1 - id; }

20 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Duas Variáveis Booleanas Compartilhadas  Cada variável está associada ao estado de um determinado processo específico  Verdadeira  Processo associado está na região crítica  Falsa  Processo associado não está na região crítica  Cada processo solicita a entrada na seção crítica e em seguida verifica se o outro processo também solicita

21 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Duas Variáveis Booleanas Compartilhadas Begin {RequisitaExclusão} Ocupado1 = True; If Ocupado2 then Wait; End {RequisitaExclusão}... Seção crítica... Begin {LiberaExclusão} Ocupado1 = False; If P2 esperando then reative-o; End {LiberaExclusão} Begin {RequisitaExclusão} Ocupado2 = True; If Ocupado1 then Wait; End {RequisitaExclusão}... Seção crítica... Begin {LiberaExclusão} Ocupado2 = False; If P1 esperando then reative-o; End {LiberaExclusão} Variável Global Ocupado1: Boolean; Ocupado2: Boolean; Processo P1 Processo P2

22 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Duas Variáveis Booleanas Compartilhadas public interface Lock { public void requestCS(int id); public void releaseCS(int id); } public class LockImpl implements Lock { boolean wantCS[] = {false, false}; public void requestCS(int id) { wantCS[id] = true; while (wantCS[1 – id]); } public void releaseCS(int id) { wantCS[id] = false; }

23 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Duas Variáveis Booleanas Compartilhadas public class MyLock extends Thread { Lock lock; int id; public MyLock(Lock lock, int id) { this.lock = lock; this.id = id; } public void run() { while (true) { lock.requestCS(id); // Seção crítica lock.releaseCS(id); } public static void main (String[] args) { Lock lock = new LockImpl(); MyLock t1 = new MyLock(lock, 0); MyLock t2 = new MyLock(lock, 1); t1.start(); t2.start(); }

24 Glêdson Elias Programação Concorrente Exclusão Mútua  Implementando Exclusão Mútua  Duas Variáveis Booleanas Compartilhadas  Garante a exclusão mútua  Processos são independentes  Não alternam a execução das seções críticas  Processos podem ficar bloqueados (deadlock) public class LockImpl implements Lock { boolean wantCS[] = {false, false}; public void requestCS(int id) { wantCS[id] = true; while (wantCS[1 – id]); } public void releaseCS(int id) { wantCS[id] = false; }


Carregar ppt "ProgramaçãoConcorrente Glêdson Elias"

Apresentações semelhantes


Anúncios Google