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

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

©André Santos, 1998-2000 Concorrência: Sincronização de fina granularidade André Santos CIn-UFPE.

Apresentações semelhantes


Apresentação em tema: "©André Santos, 1998-2000 Concorrência: Sincronização de fina granularidade André Santos CIn-UFPE."— Transcrição da apresentação:

1 ©André Santos, 1998-2000 Concorrência: Sincronização de fina granularidade André Santos CIn-UFPE

2 ©André Santos, 1998-2000 Busy Waiting n Tipo de sincronização em que um processo continuamente verifica uma condição até que ela se torne verdadeira n Pode ser implementada com o conjunto de instruções de qualquer processador moderno n Ineficiente para multiprogramação

3 ©André Santos, 1998-2000 Busy waiting n Utilizado em dispositivos de hardware multiprocessados Pode ser usado para implementar await

4 ©André Santos, 1998-2000 O Problema da Exclusão Mútua (Região Crítica) n N processos executam um loop infinito:  Seção crítica  Seção não crítica n O programa deve satisfazer a propriedade de exclusão mútua  instruções das regiões críticas de dois ou mais processos não podem ser executadas ao mesmo tempo.

5 ©André Santos, 1998-2000 Exclusão Mútua para N processos n N processos executando loop infinito  Seção crítica  Seção não crítica n Programa deve satisfazer a propriedade de exclusão mútua  Em um dado instante no máximo um processo está executando sua região crítica.

6 ©André Santos, 1998-2000 solução: instruções adicionais n protocolo de entrada e de saída n P[i: 1..n]:: while (TRUE) { entry protocol critical section exit protocol non-critical section }

7 ©André Santos, 1998-2000 outras condições n um processo pode parar ou terminar fora da região crítica, sem interferir com outros processos. n Ausência de deadlock (ou livelock)  se dois ou mais processos tentam entrar em sua região crítica, um deles deve conseguir.

8 ©André Santos, 1998-2000 Outras condições n Ausência de espera desnecessária  Se um processo quer entrar em sua região crítica e os outros processos estão fora da sua região crítica ou terminaram, ele não será impedido de entrar n Entrada eventual (ausência de starvation)  se um processo quer entrar na região crítica, em algum momento ele entrará.

9 ©André Santos, 1998-2000 Tentativa 1: variável Turn n int Turn = 1; void P1() { void P2() { while (TRUE) { while (TRUE) { /* Non_Cr_S_1 */ /* Non_Cr_S_2 */ while (Turn != 1) {}; while (Turn != 2) {}; /* Crit_S_1 */ /* Crit_S_2 */ Turn = 2; Turn = 1; } } } }

10 ©André Santos, 1998-2000 Verificação da solução n A solução satisfaz o requisito de exclusão mútua  assuma que ela não satisfaz  contradição n A solução não entra em deadlock  assuma que o programa está em deadlock  contradição

11 ©André Santos, 1998-2000 Verificação da solução n Não há starvation  ao sair da região crítica cada processo passa a vez ao outro

12 ©André Santos, 1998-2000 Verificação da solução n A solução pode falhar se um processo parar fora da região crítica  se um processo pára em sua região não crítica, o outro não pode prosseguir. n Corrotinas n Execução “sincronizada”

13 ©André Santos, 1998-2000 Tentativa 2: 2 variáveis n int In1, In2 = FALSE; void P1 () { void P2 () { while (TRUE) while (TRUE) { Non_Cr_S_1; { Non_Cr_S_2; while (In2) {}; while (In1) {}; In1 = TRUE; In2 = TRUE; Crit_S_1; Crit_S_2; In1 = FALSE; In2 = FALSE; } } } }

14 ©André Santos, 1998-2000 Verificação da solução n P1 e P2 podem entrar na seção crítica simultaneamente  P1 verifica In2 e encontra In2 = FALSE  P2 verifica In1 e encontra In1 = FALSE  P1 seta In1 para TRUE  P2 seta In2 para TRUE  P1 entra na seção crítica  P2 entra na seção crítica

15 ©André Santos, 1998-2000 Tentativa 3: n Int In1, In2 = FALSE; void P1 () { void P2() { while (TRUE) while (TRUE) { Non_Cr_S_1; { Non_Cr_S_2; In1 = TRUE; In2 = TRUE; while (In2) {}; while (In1) {}; Crit_S_1; Crit_S_2; In1 = FALSE; In2 = FALSE; } } } }

16 ©André Santos, 1998-2000 Verificação da solução n A solução satisfaz a propriedade de exclusão mútua

17 ©André Santos, 1998-2000 Verificação da solução n A solução pode entrar em deadlock  P1 atribui TRUE a In1  P2 atribui TRUE a In2  P1 testa In2 e fica no loop  P2 testa In1 e fica no loop

18 ©André Santos, 1998-2000 Tentativa 4: passando a vez n Int In1, In2 = 1; void P1 () { void P2 () { while (TRUE) while (TRUE) { Non_Cr_S_1; { Non_Cr_S_2; In1 = TRUE; In2 = TRUE; while (In2) while (In1) { In1 = FALSE; { In2 = FALSE; In1 = TRUE; In2 = TRUE; }; }; Crit_S_1; Crit_S_2; In1 = FALSE; In2 = FALSE; } } } }

19 ©André Santos, 1998-2000 Verificação da solução n Um processo pode ser starved  P1 seta In1 para TRUE  P2 seta In2 para TRUE  P2 verifica In1 e seta In2 para FALSE  P1 faz um ciclo completo: verifica In2, entra na região crítica, seta In1 para FALSE, executa região não-crítica, seta In1 para TRUE  P2 seta In2 para TRUE...

20 ©André Santos, 1998-2000 Verificação da solução n A solução pode entrar em livelock n deadlock: nenhuma sequência resulta em sucesso n livelock: existe uma ou mais sequências que evita que os processos entrem na região crítica

21 ©André Santos, 1998-2000 Entretanto... n É possível inserir um delay entre as mudanças nas variáveis, para aumentar a possibilidade de context-switch ocorrer com variável alterada. n Uso prático: algorítimo semelhante é usado em redes Ethernet

22 ©André Santos, 1998-2000 Solução Ideal 1 n int In1, In2 = FALSE; void P1 () { void P2 () { while (TRUE) while (TRUE) { Non_Cr_S_1; { Non_Cr_S_2; In1 = TRUE;> In2 = TRUE;> Crit_S_1; Crit_S_2; In1 = FALSE; In2 = FALSE; } } } }

23 ©André Santos, 1998-2000 Solução Ideal 2 n int lock = FALSE; void P1 () { void P2 () { while (TRUE) while (TRUE) { Non_Cr_S_1; { Non_Cr_S_2; lock = TRUE;> Iock = TRUE;> Crit_S_1; Crit_S_2; lock = FALSE; lock = FALSE; } } } }

24 ©André Santos, 1998-2000 Exclusão mútua assistida por hardware n load e store em uma única instrução n test e set:  TS(lock, cc) = n Exchange(A,B)  =

25 ©André Santos, 1998-2000 Exclusão mútua com Test and Set n int lock = FALSE; void P1 () { void P2 () { int C1; int C2; while (TRUE) while (TRUE) { Non_Cr_S_1; { Non_Cr_S_2; TS (lock,C1); TS (lock,C2); while (C1) { while (C2) { TS (lock,C1); TS (lock,C2); }; }; Crit_S_1; Crit_S_2; lock = FALSE; lock = FALSE; } } } }

26 ©André Santos, 1998-2000 Vantagens n Funciona facilmente para vários processos.

27 ©André Santos, 1998-2000 Desvantagens n Escrita frequente nas variáveis n Todos os processos acessam a mesma variável lock.

28 ©André Santos, 1998-2000 Exclusão mútua com Exchange n int InCS = FALSE; void P1 () { void P2 () { int L1 = TRUE; int L2 = TRUE; while (TRUE) while (TRUE) { Non_Cr_S_1; { Non_Cr_S_2; Exchng (L1,InCS); Exchng (L2,InCS); while (L1) { while (L2) { Exchng (L1,InCS); Exchng (L2,InCS); }; }; Crit_S_1; Crit_S_2; Exchng (L1,InCS); Exchng (L2,InCS); } } } }


Carregar ppt "©André Santos, 1998-2000 Concorrência: Sincronização de fina granularidade André Santos CIn-UFPE."

Apresentações semelhantes


Anúncios Google