sincronização e comunicação entre processos · • a parte do código do programa onde é ... e...

34
1 Sincronização e Comunicação entre Processos – Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização Condicional – Semáforos – Monitores

Upload: doandat

Post on 20-Nov-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

1

Sincronização e Comunicação entre Processos

– Introdução– Aplicações Concorrentes– Especificação de Concorrência em Programas – Problemas de Compartilhamento de Recursos– Exclusão Mútua– Sincronização Condicional– Semáforos– Monitores

Page 2: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

2

Introdução

• Partes diferentes do código do programa podem executar concorrentemente

• Aplicação concorrente tem como base a execução cooperativa de múltiplos processos ou threads, que trabalham em uma mesma tarefa na busca de um resultado comum

• Vantagem melhor desempenho

• Compartilhamento de recursos pode ocasionar problemas

Page 3: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

3

Aplicações Concorrentes

Processogravador

Processoleitor

dado

Sincronização

leitura

gravação

Buffer

Os mecanismos que garantem a comunicação entre processos concorrentes e o acesso a recursos compartilhados são chamados mecanismos de sincronização

Page 4: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

4

Especificação de Concorrência em Programas

Primeira notação para especificar concorrência em um programa foram os comandos FORK e JOIN.PROGRAM A; PROGRAM B;

. .

. .

FORK B; .

. .

JOIN B; .

. END.

.

END.

Page 5: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

5

Especificação de Concorrência em Programas

Processoprincipal

Processoprincipal

Processo 1 Processo 2 Processo n

PARBEGIN Comando_1; Comando_2; . . Comando_n;PAREND

PARBEGIN início da concorrência

PAREND ponto de sincronização

PARBEGIN COBEGIN

PAREND COEND

Page 6: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

6

Especificação de Concorrência em Programas

Expressão a ser calculadaX := SQRT (1024) + (35.4 * 0.23) - (302 / 7)

PROGRAM Expressao;VAR X, Temp1, Temp2, Temp3 : REAL;

BEGINPARBEGIN

Temp1 := SQRT (1024);Temp2 := 35.4 * 0.23;Temp3 := 302 / 7;

PAREND;X := Temp1 + Temp2 - Temp3;WRITELN ('x = ', X);

END.

Comandos executados concorrentemente

Page 7: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

7

Prob. de Compartilhamento de Recursos

• Para a compreensão de como a sincronização entre processos concorrentes é fundamental para a confiabilidade dos sistemas multiprogramáveis, são apresentados alguns problemas de compartilhamento de recursos.– Compartilhamento de arquivo em disco;– Compartilhamento de variável na memória.

Page 8: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

8

Prob. de Compartilhamento de Recursos

Problema 1: Compartilhamento de um arquivo em disco

PROGRAM Conta_Corrente;..READ (Arq_Contas, Reg_Cliente);READLN (Valor_Dep_Ret);Reg_Cliente.Saldo := Reg_Cliente.Saldo + Valor_Dep_Ret;WRITE (Arq_Contas, Reg_Cliente);..

END.

Page 9: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

9

Prob. de Compartilhamento de Recursos

• O processo do primeiro funcionário (Caixa 1) lê o registro do cliente e soma ao campo Saldo o valor do lançamento de débito. Antes de gravar o novo saldo no arquivo, o processo do segundo funcionário (Caixa 2) lê o registro do mesmo cliente, que está sendo atualizado, para realizar outro lançamento, desta vez de crédito. Independentemente de qual dos processos atualize primeiro o saldo no arquivo, o dado gravado estará inconsistente.

Page 10: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

10

Prob. de Compartilhamento de Recursos

Processo A Processo BX := X + 1; X := X - 1;

Processo A Processo BLOAD X,Ra LOAD X,Rb

ADD 1,Ra SUB 1,Rb

STORE Ra,X STORE Rb,X

Problema 2: Compartilhamento de uma variável por dois processos

Page 11: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

11

Prob. de Compartilhamento de Recursos

• Considere que o processo A carregue o valor de X no registrador Ra, some 1 e, no momento em que vai armazenar o valor de X, seja interrompido. Nesse instante, o processo B inicia sua execução, carrega o valor de X em Rbe subtraia 1. Desta vez, o processo B éinterrompido e o processo A volta a ser processado, atribuindo o valor 3 à variável X e concluindo sua execução. Finalmente, o processo B retorna a execução, atribui o valor 1 a X, e sobrepõe o valor anteriormente gravado pelo processo A.

Page 12: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

12

Exclusão Mútua

• A solução mais simples para evitar os problemas de compartilhamento apresentados éimpedir dois ou mais processos acessem um mesmo recurso simultaneamente.

• Para isso, enquanto um processo estiver acessando determinado recurso, todos os demais processo que queiram acessá-lo deverão esperar pelo término da utilização do recurso.

• Essa idéia de exclusividade de acesso échamada EXCLUSÃO MÚTUA.

Page 13: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

13

Exclusão Mútua

• A exclusão mútua deve afetar os processos concorrentes somente quando um deles estiver fazendo acesso ao recurso compartilhado.

• A parte do código do programa onde éfeito o acesso ao recurso compartilhado édenominada região crítica.

• Os mecanismos que implementam a exclusão mútua utilizam protocolos de acesso à região crítica.

Page 14: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

14

Exclusão Mútua

BEGIN..Entra_Regiao_Critica; Regiao_Critica;Sai_Regiao_Critica;..

END.

Protocolo de Entrada

Protocolo de Saída

Page 15: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

15

Exclusão Mútua

• Como é possível, então, observar, para garantir a implementação da exclusão mútua os processos envolvidos devem fazer acesso aos recursos de forma sincronizada.

• Existem 2 situações indesejadas.– Espera indefinida (Starvation) – é a situação

em que um processo nunca consegue executar sua região crítica e, consequentemente, acessar o recurso compartilhado.

Page 16: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

16

Exclusão Mútua

– Dependendo da escolha do sistema operacional pode ocorrer este problema.

• Exemplos: escolha aleatória, prioridades– No primeiro como a escolha é randômica;– No segundo valores de prioridade -20 a +19

– Solução – recurso simples e a criação de filas de pedidos de alocação para cada recurso, usando FIFO (First-In/First-Out).

Page 17: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

17

Exclusão Mútua

– Outra situação indesejada na implementação da exclusão mútua é aquela em que um processo fora da sua região crítica impede que outros processos entre nas suas próprias regiões críticas.

– No caso de esta situação ocorrer, um recurso estaria livre, porém alocado a um processo.

• Diversas soluções foram propostas para garantir a exclusão mútua de processos concorrentes.

Page 18: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

18

Exclusão Mútua

• Soluções de Hardware– Desabilitação de interrupções

• Processo mais simples• Reabilita as interrupções após deixar a região

crítica• Como a mudança de contexto de processos só

pode ser realizada através de interrupções, o processo que as desabilitou terá acesso garantido.

• Limitações o processo pode não reabilitar as interrupções, em sistemas com múltiplos processadores (tempo para todos receberem a informação)

Page 19: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

19

Exclusão Mútua

BEGIN..Desabilita_Interrupcoes;Regiao_Critica;Habilita_Interrupcoes;..

END.

Page 20: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

20

Exclusão Mútua

• Soluções de Hardware– Instrução Test-and-Set

• Muitos processadores possuem uma instrução de máquina especial que permite ler uma variável, armazenar seu conteúdo em uma outra área e atribuir um novo valor à mesma variável.

• Sua característica e ser executada sem interrupção (indivisível).

• Dessa forma, é garantido que dois processos não manipulem uma variável compartilhada ao mesmo tempo.

Page 21: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

21

Exclusão Mútua

• Soluções de Hardware• A instrução test-and-set possui o formato a seguir,

e quando executada o valor lógico da variável Y écopiado para X, sendo atribuído à variável Y o valor lógico verdadeiro.

Test-and-Set (X,Y);• O uso de uma instrução especial de máquina

oferece algumas vantagens, como a simplicidade de implementação. Já a principal desvantagem é a possibilidade da espera indefinida, pois a seleção do processo para acesso ao recurso é arbitrária.

Page 22: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

22

Exclusão Mútua

• Soluções de Software– Primeiro algoritmo– Segundo algoritmo– Terceiro algoritmo– Quarto algoritmo– Algoritmo de Dekker– Algoritmo de Peterson

Page 23: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

23

Exclusão Mútua

• Problema – Espera ocupada– Na espera ocupada, toda vez que um processo não

consegue entrar em sua região critica, por já existir outro processo acessando o recurso, o processo permanece em looping, testando uma condição atéque lhe seja permitido o acesso.

– Desta forma, o processo em looping consome tempo do processador.

• A solução para o problema e colocar o estado em espera.

Page 24: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

24

Sincronização Condicional

• É uma situação onde o acesso ao recurso compartilhado exige a sincronização de processos vinculada a uma condição de acesso.

• Um recurso pode não se encontrar pronto para uso devido a uma condição específica.

• Exemplo leitura (consumidor) e gravação (produtor) em um mesmo buffer.

• Ainda temos o problema da espera ocupada.

Page 25: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

25

Semáforos

• Mecanismo de sincronização que permite implementar de forma simples, a exclusão mútua e sincronização condicional entre processos.

• Um semáforo é uma variável inteira, não-negativa, que só pode ser manipulada por duas instruções que são indivisíveis.– UP ou V – incrementa uma unidade ao valor do

semáforo.– Down ou P - decrementa uma unidade ao valor do

semáforo.

Page 26: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

26

Semáforos

• A maioria das linguagens de programação disponibiliza rotinas para o uso de semáforos

• Os semáforos podem ser binários (apenas valores 0 e 1) ou contadores (qualquer valor)

• Exclusão Mútua Utilizando Semáforos– Semáforo = 1 nenhum processo está utilizando o

recurso– Semáforo = 0 recurso está em uso– Quando o recurso é liberado, o sistema seleciona um

processo na fila de espera associada ao recurso

Page 27: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

27

Semáforos

Fila de esperade processos

Processo acessaa região crítica

Processo deseja entrarna região crítica

DOW

N (S=0)DOW

N (S>0)

UP (S) - processo saida região crítica

Libera processoda fila de espera

Page 28: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

28

Semáforos

• Sincronização Condicional Utilizando Semáforos– Um exemplo desse tipo de sincronização ocorre

quando um processo solicita uma operação de E/S.– O pedido faz com que o processo execute uma

instrução DOWN no semáforo associado ao evento e fique no estado de espera, até que a operação seja completada.

– Quando a operação termina, a rotina de tratamento da interrupção executa um UP no semáforo, liberando o processo do estado de espera.

Page 29: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

29

Semáforos

• Problema dos Filósofos– Exemplo clássico de sincronização de processos.– Nesse problema, há uma mesa com cinco pratos e

cinco garfos, onde os filósofos podem sentar, comer e pensar. Toda vez que um filósofo pára de pensar e desejar comer, é necessário que ele utilize dois garfos, posicionados à sua direita e à sua esquerda.

– Possíveis soluções:• apenas 4 filósofos podem sentar à mesa ao mesmo tempo.• um filósofo só pega um garfo se o outro estiver disponível.• filósofo ímpar pega garfo à esquerda e depois à direita,

filósofo par pega garfo à direita e depois à esquerda.

Page 30: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

30

Semáforos

• Problema do Barbeiro– Outro exemplo clássico de sincronização de

processos. Neste problema, um barbeiro recebe clientes para cortar o cabelo.

– Na barbearia há uma cadeira de barbeiro e apenas cinco cadeiras para clientes esperarem.

– Quanto um cliente chega, caso o barbeiro esteja trabalhando, ele senta se houver cadeira vazia ou vai embora se todas as cadeiras estiverem ocupadas.

– No caso de o barbeiro não ter nenhum cliente para atender, ele senda na cadeira e dorme até que um novo cliente apareça.

Page 31: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

31

Monitores

• São mecanismos de sincronização de alto nível que tornam mais simples o desenvolvimento de aplicações concorrentes.– Monitores - mecanismos de sincronização

estruturados e implementados pelo compilador.

– Semáforos - mecanismos de sincronização não-estruturados e implementados pelo desenvolvedor

Page 32: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

32

Monitores

• O monitor é formado por procedimentos e variáveis encapsulados dentro de um módulo.

• Um monitor é definido especificando-se um nome, declarando-se variáveis locais, procedimentos e um código de inicialização.

• Um processo faz chamada a um dos procedimentos do monitor, caso outro processo já o esteja executando, o processo aguarda a sua vez na fila de entrada.

Page 33: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

33

Monitores

Estrutura do monitor

Declaração devariáveis globais

Procedimentos

Fila de entrada

Inicializaçãode variáveis

Proc. 1

Proc. 2

Proc. nM

onito

r

Page 34: Sincronização e Comunicação entre Processos · • A parte do código do programa onde é ... e quando executada o valor lógico da variável Y é ... –Quando a operação termina,

34

Monitores

Estrutura do monitor com varáveis de condição

Declaração devariáveis globais

Procedimentos

Fila de entrada

Inicializaçãode variáveis

Proc. 1

Proc. 2

Proc. n

Mon

itor

Filas de espera

Condição C1

Condição C2

Condição Cn