sistemas - cloud object storage · a programação concorrente é um paradigma de programação...

37
Sistemas Operacionais Sincronização e Comunicação entre Processos – parte 1/2

Upload: truongdiep

Post on 23-Nov-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

Sistemas

Operacionais Sincronização e

Comunicação entre

Processos – parte 1/2

Page 2: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

Sumário

1. Introdução

2. Programação Concorrente

3. Aplicações Concorrentes

4. Especificação de Concorrência

5. Compartilhamento de Recursos

6. Exclusão Mútua

1. Soluções de Hardware

2. Soluções de Software

7. Sincronização Condicional

8. Semáforos

9. Monitores

1. Exclusão Mútua

2. Sincronização Condicional

10. Troca de Mensagens

11. Deadlock

1. Prevenção

2. Detecção e Correção

Page 3: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

1. Introdução

É natural que processos de uma aplicação concorrente compartilhem recursos do sistema, como por exemplo:

Arquivos ou registros.

Dispositivos de E/S.

Áreas de memória.

O compartilhamento de recursos entre processos realizado de maneira inadequada pode ocasionar problemas:

Programas complexos, ineficientes e ineficazes.

Inconsistência de dados.

Comprometimento da execução de aplicações ou do sistema.

Como evitar os problemas decorrentes do compartilhamento de recursos entre os processos de uma aplicação concorrente?

Page 4: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

2. Programação Concorrente

A programação concorrente é um paradigma de programação para a construção de programas que fazem uso da execução concorrente (podendo ser simultânea) de várias tarefas computacionais interativas.

Como programação paralela e programação concorrente se relacionam?

A programação paralela utiliza de múltiplos processadores para executar partes diferentes de um mesmo programa simultaneamente.

Quais são as principais questões discutidas durante o desenvolvimento de sistemas concorrentes?

A interação e a comunicação correta entre as diferentes tarefas;

Coordenação do acesso concorrente aos recursos computacionais.

Page 5: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

2. Programação Concorrente

Como um programa concorrente pode ser implementado?

1. Como programas separados ou;

2. Como um conjunto de threads criadas por um único programa.

Quanto ao processamento, como essas tarefas podem ser executadas?

1. Por um único processador ou;

2. Vários processadores em um único equipamento ou processadores distribuídos por uma rede.

Page 6: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

2. Programação Concorrente

Podemos entender a interação e a comunicação concorrente dividida em

duas classes:

1. Por memória compartilhada ou;

2. Por troca de mensagens (mais simples e robusta).

Page 7: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

2. Programação Concorrente

Como ocorre a comunicação por memória compartilhada?

Componentes concorrentes comunicam-se ao alterar o conteúdo de áreas de memória compartilhadas.

Geralmente requer métodos de trava (exclusão mútua).

Como ocorre a comunicação por troca de mensagens?

Componentes concorrentes comunicam-se ao trocar mensagens em que a leitura pode ser realizada de forma:

Síncrona (método rendezvous): o emissor é bloqueado até que a mensagem seja recebida ou;

Assíncrona.

Page 8: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

2. Programação Concorrente

Quais são as vantagens do paradigma de programação concorrente?

Aumento de desempenho: aumenta-se a quantidade de tarefas sendo executadas em determinado período de tempo.

Melhor modelagem: determinados problemas computacionais são concorrentes por natureza.

As linguagens mais utilizadas para tais construções são Java e C#.

Utilizam o modelo de memória compartilhada.

Bloqueio fornecido por monitores.

A linguagem Erlang é possivelmente a mais utilizada pela indústria atualmente, entre as linguagens que utilizam a troca de mensagens.

Page 9: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

3. Aplicações Concorrentes

A comunicação entre processos concorrentes de uma aplicação basicamente pode ser implementada, como vimos, por meio de:

Variáveis compartilhadas na memória principal ou

Trocas de mensagens.

Nesta situação, é necessário que os processos concorrentes tenham sua execução sincronizada por meio de mecanismos do sistema operacional.

Os mecanismos de sincronização garantem:

A comunicação entre processos concorrentes e;

O acesso a recursos compartilhados.

Page 10: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

3. Aplicações Concorrentes

Page 11: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

3. Aplicações Concorrentes

Neste exemplo dois processos concorrentes compartilham um buffer para trocar informações por meio de operações de gravação e leitura.

Um processo só poderá gravar dados no buffer caso este não esteja cheio.

Da mesmo forma, um processo só poderá ler dados armazenados no buffer caso exista algum dado para ser lido.

Em ambas situações, os processos deverão aguardar até que o buffer esteja pronto para as operações, seja de gravação, seja de leitura.

Page 12: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

4. Especificação de Concorrência

Existem várias notações utilizadas para especificar a concorrência em programas concorrentes.

As partes de um programa que devem ser executadas concorrentemente.

Os exemplos serão expressos em algoritmos com base principalmente na linguagem PASCAL.

A linguagem de programação Concurrent Pascal foi criada para o desenvolvimento de aplicações concorrentes.

Como notação da especificação de concorrência em um programa poderemos usar os comandos FORK e JOIN.

Page 13: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

4. Especificação de Concorrência

O programa A começa a ser executado e ao encontrar o comando FORK.

É criado um outro processo para execução do programa B.

O programa B é executado concorrentemente ao programa A.

O comando JOIN permite que o programa A sincronize-se com o programa B.

Quando o programa A encontrar o comando JOIN só continuará a ser processado após o término da execução do programa B.

Page 14: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

4. Especificação de Concorrência

Outra forma de especificar concorrência é a utilização de comandos PARBEGIN e PAREND conforme explicado a seguir.

O comando PARBEGIN especifica que a sequência de comandos seja executada concorrentemente em uma ordem imprevisível.

Por meio da criação de um processo (Processo_1, Processo_2, ...) para cada comando (Comando_1, Comando_2,...).

O comando PAREND define um ponto de sincronização.

Onde o processamento só continuará quando todos os processos criados já tiverem terminado suas execuções.

Os comandos delimitados por PARBEGIN e PAREND podem ser comandos simples, como atribuições ou chamadas a procedimentos.

Page 15: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

4. Especificação de Concorrência

Exemplo com PARBEGIN e PAREND.

Page 16: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

4. Especificação de Concorrência

Exemplo: PARBEGIN e PAREND

X = sqrt(1024) + (35.4 * 0.23) – (302/7)

Page 17: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

5. Compartilhamento de Recursos

Considere o programa Conta_Corrente.

Atualiza o saldo bancário de um cliente após o lançamento de débito ou crédito no arquivo Arq_Contas.

Arq_Contas: armazena os saldos de todos os correntistas do banco.

Page 18: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

5. Compartilhamento de Recursos

Considerando processos concorrentes pertencentes a dois funcionários do banco que atualizam o saldo (considere o saldo inicial de R$ 300.00) de um mesmo cliente simultaneamente.

A situação de compartilhamento do recurso pode levar à inconsistência.

Page 19: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

5. 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: débito (-R$ 50.00).

Antes de gravar o novo saldo no arquivo, o processo do segundo funcionário (Caixa 2) lê o registro do mesmo cliente, para somar ao campo saldo o valor de outro lançamento: crédito (R$ 100.00).

Page 20: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

5. Compartilhamento de Recursos

Independentemente de qual dos processos venha a atualizar o saldo por último (R$ 250.00 ou R$ 400.00) o dado gravado ao final estará inconsistente (o valor correto é R$ 350.00).

Conclusão: Em qualquer situação, onde dois ou mais processos compartilham o mesmo recurso devem existir mecanismos de controle para evitar problemas.

Page 21: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6. Exclusão Mútua

A solução mais simples para evitar os problemas de compartilhamento é:

Impedir que dois ou mais processos acessem um mesmo recurso simultaneamente.

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

Essa ideia é denominada exclusão mútua (mutual exclusion).

Page 22: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6. Exclusão Mútua

A exclusão mútua deve afetar apenas 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 é denominado região crítica (critical region).

A exclusão mútua utiliza protocolos de acesso à região crítica:

Toda vez que um processo desejar executar instruções de sua região crítica, deverá executar um protocolo de entrada nessa região;

Da mesma forma, ao sair da região crítica um protocolo de saída deverá ser executado.

Page 23: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6. Exclusão Mútua

Page 24: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6. Exclusão Mútua

Além de garantir a exclusão mútua, duas situações devem ser evitadas:

1. Espera Indefinida por Starvation:

Processo nunca consegue executar sua região crítica.

Pode ocorrer também em função da política de escalonamento.

2. Espera Indefinida por Problema em Processo:

Processo fora da sua região crítica impede que outros processos entrem nas suas próprias regiões críticas.

Page 25: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6. Exclusão Mútua

Diversas soluções foram propostas para garantir a exclusão mútua de processos concorrentes, entre elas:

Soluções de Hardware

Soluções de Software

Page 26: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

1. Desabilitação de Interrupções

O programa desabilita todas as interrupções antes de entrar em sua região crítica e reabilita após deixar a região crítica.

Principal Problema: a mudança de contexto de processos só pode ser realizada por meio de interrupções.

6.1 Soluções de Hardware

Page 27: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6.1 Soluções de Hardware

2. Instrução TEST-AND-SET

Consiste em utilizar uma instrução de máquina especial.

A instrução é executada sem interrupção.

A instrução é indivisível.

Se dois processos concorrentes invocam esta instrução simultaneamente, só um deles conseguirá executá-la.

Principal Vantagem: a simplicidade de implementação da exclusão mútua.

Principal Desvantagem: a possibilidade de starvation, pois a seleção do processo para o acesso ao recurso é arbitrária.

Page 28: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6.1 Soluções de Hardware

Algoritmo: Test_and_Set(X, Y); O valor lógico da variável Y é copiado para X, sendo então atribuído o valor lógico VERDADEIRO para Y.

Page 29: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6.2. Soluções de Software

1. Primeiro Algoritmo

Garante a exclusão mútua.

Page 30: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

Garante a exclusão mútua.

Page 31: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6.2. Soluções de Software

1. Primeiro Algoritmo

O acesso ao recurso compartilhado só pode ser realizado alternadamente.

O tempo de execução de um processo influi na possibilidade de execução da região crítica do outro processo.

Problema com um dos processos pode tornar o outro processo indefinidamente bloqueado, aguardando o acesso ao recurso.

Page 32: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

Não garante a exclusão mútua. Possibilidade de espera indefinida.

Page 33: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

Garante a exclusão mútua. Possibilidade de espera indefinida.

Page 34: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

Garante a exclusão mútua. Soluciona parcialmente a espera indefinida.

Page 35: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

Garante a exclusão mútua. Soluciona definitivamente o bloqueio indefinido.

Page 36: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

6.2. Soluções de Software

As soluções vistas até aqui implementam a exclusão mútua.

Possuem uma deficiência conhecida como espera ocupada (busy wait).

O processo permanece em looping, testando uma condição.

Consome tempo do processador desnecessariamente.

A solução para a espera ocupada foi a introdução de mecanismos de sincronização.

Permitem que um processo, quando não puder entrar em sua região crítica, seja colocado no estado de espera.

Esses mecanismos, conhecidos como semáforos e monitores.

Page 37: Sistemas - Cloud Object Storage · A programação concorrente é um paradigma de programação para a ... Vários processadores em um único equipamento ou processadores distribuídos

[Fim] Comunicação entre Processos – Parte 1

“Não se pode ensinar tudo a alguém, pode-se apenas ajudá-lo a encontrar por si mesmo.”

Galileu Galilei

Próximo Módulo: Comunicação entre Processos – Parte 2