fundamentos de sistemas operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 ·...

37
Fundamentos de Sistemas Operacionais Aula 4: Programação Concorrente Diego Passos

Upload: others

Post on 12-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Fundamentos de Sistemas Operacionais

Aula 4: Programação Concorrente

Diego Passos

Page 2: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Últimas Aulas

Page 3: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Processos

Compostos por:Código (programa).Estado (memória, registradores).

Em um sistema com multiprogramação:Vários processos residentes em memória.

Várias aplicações rodam simultaneamente. "Processo é um programa em execução".

Exemplo de um único programa que usa mais de um processo.

Função fork().

Page 4: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Threads

Page 5: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Threads

Similares a processos."Processos leves".

Definem uma "linha de execução" em um programa.Sequência de instruções a serem executadas.

Diferença entre processo e thread: espaço de endereçamento.

Processos diferentes têm espaços de endereçamento diferentes.Threads diferentes (de um mesmo processo) compartilham o mesmo espaço de endereçamento.

Memória compartilhada.

Page 6: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Threads (mais)

Toda thread pertence a um processo.O conceito de thread não existe sem o conceito de processo.

Todo processo tem ao menos uma thread.Uma sequência de instruções a serem executadas.

Page 7: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Vantagens e Desvantagens

Threads são mais "leves".Mudança de contexto entre duas threads do mesmo processo é rápida.Poucas informações de estado para salvar/restaurar.

Threads (de um mesmo processo) compartilham memória.Comunicação é mais fácil que entre processos.Porém, uma thread pode interferir na execução da outra.

Os erros em uma podem se propagar para as outras.Programas podem ser mais difíceis de depurar.

Page 8: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Programação Concorrente

Page 9: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Definição

Utilização de mais de uma "linha de execução" em um mesmo programa.

Vários processos para um único programa.e.g., utilizando a função fork().

Várias threads em um mesmo processo.Ou uma mistura dos dois.

Exemplo:Servidor web tem um processo principal que espera conexões dos usuários.Para cada nova conexão, é criado um novo processo (ou thread).Processo (thread) principal volta a esperar por conexões.

Page 10: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Programa Paralelo vs. Sequencial

Programa Sequencial:Uma única linha de execução.

Um processo com uma thread.Programa Paralelo:

Múltiplas linhas de execução.Vários processos ou threads.

Outro nome para a Programação Concorrente.

Page 11: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Objetivos da Programação Concorrente

Permite a separação lógica das funcionalidades de um programa.

Espera por conexões.Atendimento aos clientes.

Simplifica a escrita de alguns programas.Existem programas intrinsecamente paralelos.

Melhora a utilização dos processadores modernos.Vários núcleos.Ambientes multiprocessados.Operações de E/S são sobrepostas com processamento.

Page 12: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Sobreposição de Operações de E/S

Versão Paralela (Concorrente)

Versão Sequencial

Page 13: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Desvantagens da Programação Concorrente

Coordenação dos processos (threads) pode ser complexa.Em termos de programação.

Erros "não-intuitivos" ocorrem.Principalmente com threads.

É comum fazer suposições inválidas:e.g, processos executam na mesma "velocidade".

Condições de erro são difíceis de reproduzir.Depuração de programas paralelos tende a ser mais difícil.Ordem de execução dos processos (threads) é imprevisível.

Page 14: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Tipos de Paralelismo

Paralelismo Real:Ocorre apenas em máquinas multiprocessadas.Processos (threads) são executados realmente simultaneamente.

Paralelismo aparente:Ocorre em maquinas monoprocessadas.Processos (threads) são executados concomitantemente.

Page 15: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Especificação de Paralelismo

Page 16: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Diferentes Representações

Sintaxe de criação de um programa paralelo depende do sistema.

Chamadas podem ser ligeiramente (ou extremamente) diferentes em SOs diferentes.

Porém, existem tipos "gerais" de especificação de paralelismo.

Page 17: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Paralelismo Explícito

Paralelismo é descrito explicitamente no programa.Três funcionalidades básicas:

Criação de um processo (thread): create_process().Encerramento de um processo (thread): exit(). Espera pelo encerramento de um processo (thread): wait_process().

Page 18: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Paralelismo Explícito (Exemplo)int main() { f1 = create_process(codigo_filho); f2 = create_process(codigo_filho); wait_process(f1); wait_process(f2);

return(0);}

void codigo_filho() {

printf("Alguma coisa\n"); exit();}

Page 19: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Paralelismo Implícito

Programador apenas indica quais "regiões" são paralelizáveis.Compilador é responsável por criar os respectivos processos (threads).Dois comandos básicos:

Parbegin (início da região paralela).Parend (fim da região paralela).

Page 20: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Paralelismo Implícito (Exemplo)

int main() {

Parbegin codigo_filho(); codigo_filho(); Parend return(0);}

void codigo_filho() {

printf("Alguma coisa\n"); exit();}

Função codigo_filho() é executada duas vezes.

Mas por dois processos (threads) diferentes.

Page 21: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Paralelismo Implícito vs. Explícito

A versão explícita é mais comum.Em geral, as chamadas de sistema são deste tipo.

e.g., função fork(). Há algumas linguagens (e compiladores) que implementam o paralelismo implícito.

Exemplo: biblioteca OpenMP.Paralelismo implícito é mais simples.

Programador não se preocupa com como os processos (threads) são alocados.

Paralelismo explícito é mais flexivel.Programador tem total controle sobre os processos (threads).

Page 22: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Grafo de Precedência

Algumas vezes, é preciso garantir a ordem em que certos eventos ocorrem em um programa paralelo.Exemplo:

Garantir que o primeiro processo filho só morra após o início do segundo processo filho.

Nem sempre é fácil nas representações implícita e explícita.Envolve a utilização de comunicação entre os processos (threads) filhos.

Page 23: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Grafo de Precedência (Exemplo)

Page 24: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Compartilhamento de Recursos

Page 25: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Recursos Comuns

Processos (threads) de um programa paralelo geralmente compartilham recursos.

Variáveis.Arquivos.Sockets....

Estes recursos, em geral, estão ligados à comunicação entre processos (threads) do programa paralelo.

Page 26: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Compartilhamento de Memória

Tipo mais comum de recurso compartilhado.Threads compartilham todo o espaço de endereçamento.Processos podem requisitar do SO uma área de memória compartilhada.

Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações.

e.g., segundo processo filho pode alterar a variável inicio_filho_2 de 0 para 1 para informar iniciou seu processamento.

Page 27: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Produtor-Consumidor

Aplicação comum em vários sistemas.Há processos (threads) produtores.

Geram dados quaisquer.Há um processo (thread) consumidor.

Pega dados dos produtores e realiza alguma operação.Exemplo: servidor impressão.

Processos (threads) geram dados a serem impressos.Um único processo é responsável por coletar os dados e realizar a operação de E/S de impressão.Múltiplas impressões podem ser requisitadas simultaneamente.

Page 28: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Produtor-Consumidor (Funcionamento)

Há uma região de memória compartilhada por todos.

Spool de impressão.Em geral, é um Buffer Circular. Ao adicionar um novo elemento, produtor avança o ponteiro do próxima posição livre.Ao coletar um dado, consumidor avança ponteiro da próxima posição livre.

Page 29: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Região (Ou Seção) Crítica

Page 30: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Definição

É um trecho de código de um programa.Especial, pois alguma manipulação de variável compartilhada acontece ali.Em outras palavras:

É um trecho de um programa paralelo no qual existe acesso a variáveis compartilhadas entre dois ou mais processos (threads).

Page 31: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Importância da Região Crítica

A ordem de execução dos processos (threads) é imprevisível.Acessos concorrentes podem causar problemas.Exemplo:

Considere 'x' uma variável compartilhada por duas threads. Seu valor inicial é 0Qual o valor final de 'x'?

Thread 1: x = x + 1;

Thread 2: x = x + 1;

Page 32: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Importância da Região Crítica (mais)

O trecho executado pelas threads em assembly se torna: MOVE x, ACC ADD ACC, 1 MOVE ACC, x

Suponha que a Thread 1 começa a execução, porém é interrompida imediatamente antes da segunda instrução.A Thread 2 começa sua execução, lendo o valor de 'x' da memória.Valor ainda é 0.

Thread 1 foi interrompida antes que pudesse armazenar em memória o novo valor de 'x'.

Ao final das execuções, x = 1.

Page 33: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Outro Exemplo: Produtor-Consumidor

Suponha dois produtores simultâneos.P1 insere "Dado 3" na próxima posição livre.

Mas é interrompido antes de atualizar o ponteiro.

P2 executa e insere "Dado 4" na posição antiga do ponteiro.

"Dado 3" é sobreescrito.

Page 34: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Condição de Corrida

Problema decorrente da execução simultânea de múltiplos processos na seção crítica.Resultados inesperados (e diferentes) ocorrem.O resultado depende da ordem de execução dos processos (threads).

Operações não são atômicas. Como solucionar?

Evitar que processos (threads) diferentes possam estar na região crítica simultaneamente.

Conhecido como Exclusão Mútua.Tornar operações sobre recursos compartilhados atômicas.

Page 35: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Operação Atômica

Operação que não pode ser interrompida.Exemplo: a execução de uma única instrução de máquina é atômica.

Não há como interromper a operação uma vez que ela tenha sido iniciada.

Se a manipulação de uma região compartilhada de memória é atômica, não há condição de corrida.

Page 36: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Revisão

Page 37: Fundamentos de Sistemas Operacionaisdiego/disciplinas/2011_1/sisop/aula... · 2011-04-07 · Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações

Para Lembrar

Definição de Programação Concorrente.Tipos de paralelismo.

Real, aparente.Representações implícita e explícita de paralelismo.Razões para adoção de paralelismo.Ordem de execução de um programa paralelo é imprevisível.

Não se pode fazer suposições.Compartilhamento de recursos.

Recursos típicos.Razões para compartilhar.

O que é região (seção) crítica é qual a sua importância. O que é uma condição de corrida.O que é exclusão mútua.O que é uma operação atômica.