expressão da concorrência. autoria 4 alunos de turma de soii 4 c. geyer 4 versão –v24.5, 2015-2

83
Expressão da Concorrênc ia

Upload: vitor-gabriel-joao-vitor-beltrao-azeredo

Post on 07-Apr-2016

215 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Expressão da Concorrência

Page 2: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Autoria

Alunos de turma de SOII C. Geyer Versão

– V24.5, 2015-2

Page 3: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Índice

Visão geral do Assunto Grafo de Precedência Fork/join Parbegin/end Vetor de processos

Page 4: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Resumo geral dos slides Apresentação das principais formas (mecanismos) de

criação e gerência da concorrência Tipos Propriedades Prós e contras Exemplos

Page 5: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Representação de uma tarefa Forma abstrata

– Independentemente de modelo e linguagem de programação Processo

– conceito ou construção de SO e bibliotecas– freqüentemente (↓) associado a uma tarefa

Thread– conceito ou construção de SO, bibliotecas e de linguagens– freqüentemente (↑) associado a uma tarefa

Page 6: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Processo x thread Processo

– Mais antigo– Mais lento (criação, ...)– Maior consumo de memória– Oferece mecanismos de proteção entre processos– Não oferece variáveis (memória) compartilhada entre

processos• Via bibliotecas• Consideradas menos eficientes e “inseguras”

– Mais usado em PC com memória distribuída (redes, ...)

Page 7: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Processo x thread

Thread– Em geral o inverso de processo

• P.ex.: mais rápido– Mais usado em PC com memória compartilhada (1

computador)

Page 8: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação

Inicialmente, convém considerar as formas pelas quais a concorrência da execução pode ser especificada.

Tipos em função de “quando”– Estática– Dinâmica

Page 9: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação

Tipos em função de “quando”– estática

• o programa contém a declaração de um conjunto fixo de processos

• os quais são ativados simultaneamente, no início da execução do programa

• mais simples para o programador• eventualmente gerência de tarefas mais simples -> mais

eficiente

Page 10: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação

Tipos em função de “quando”– dinâmica

• pois os processos são criados e terminados dinamicamente, durante a execução

• mais flexibilidade, pois os processos são criados e terminados conforme as necessidades da aplicação

• quantidade variável conforme necessidade em cada execução e momento

Page 11: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação Em função de “quem”

– Implícita e explícita– Implícita

• sistema cria automaticamente – Compilador– Máquina virtual (JVM, ...)

• mais simples para o programador• freqüentemente menos flexível• nem sempre o “sistema” sabe quando, o que, ...

Page 12: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação Em função de “quem”

– explícita• programador deve usar uma primitiva ou construção

específica• mais flexível• trabalho extra para o programador

Page 13: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação

Freqüentemente– estática-implícita

• MPI (biblioteca para programação paralela)• Versão 1: estática em tempo de carga do programa• N instâncias do mesmo código onde N é quantidade de

cpus– dinâmica-explícita

• fork (Unix)• Comando ou procedimento que cria novo processo

Page 14: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação

Outros casos– dinâmica-implícita

• paralelização automática (via compilação) de linguagens– Prolog, Lisp– Fortran, C

• Paralelização semi automática via diretivas de linguagens– OpenMP

Page 15: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação

Outros casos– estática-explícita

• SR (linguagem proposta por [Andrews 1991]• declaração de processos por palavra reservada e

begin/end• ativados no início da execução• quantidade fixa em todas as execuções• obs: processos são encapsulados em um “resource” o qual

é dinâmico– Vários outros casos: combinando tipos acima

Page 16: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Tipos de criação

Outros casos– Exercício

• Considere uma linguagem onde se possa criar uma tarefa via marcação de um trecho de código com uma palavra reservada

• ...Task:

x := y +1;z := fibonacci(x);

...• É modo implícito ou explícito? Dinâmico ou estático?

Page 17: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Grafo de Precedência – grafo (usualmente) acíclico dirigido, no qual cada nó

representa a execução de um processo – pode ser interpretado como um grafo de fluxo de processos– normalmente usado em projeto, especificação, análises, ...

• editor convencional• editores para PC

– pouco usado em linguagens e bibliotecas de programação• motivos:

– alto consumo de espaço em telas e impressões– necessidade de ser completado com texto

Conceito

Page 18: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Cada nodo representa um processo; Cada arco indica a precedência de execução e restrição

na ordem dos processos; Exemplo:

Grafo de Precedência

Pi Pj

– Pj só pode ser executado após Pi, ou seja, Pj depende de Pi

Page 19: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

I1 :: A := X + Y;I2 :: B := Z + 1;I3 :: C := A - B;I4 :: W := C + 1;

Grafo de Precedência - Exemplo 1Programa:

Suponha que queremos executar algumas dessas instruções concorrentemente.

Claramente, é possível perceber que a instrução I3 não pode ser executada antes de I1 e I2, pois I3 necessita dos novos valores de A e B.

E o mesmo acontece com I4, que não pode ser executado antes que o valor de C seja atualizado por I3.

Page 20: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Grafo de Precedência - Exemplo 1

I3 I4 Fim

I2

I1

Grafo de Precedência correspondente ao programa apresentado

Início

Page 21: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Considere um grafo de precedência com as seguintes relações de precedência:

– C2 e C3 podem ser executados depois da execução de C1;– C4 pode ser executado depois da execução de C2;– C5 e C6 podem ser executados depois da execução de C4;– C7 só pode ser executado depois da execução de C5, C6 e

C3;

Grafo de Precedência - Exemplo 2

Page 22: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Grafo de Precedência - Exemplo 2

C1

C2

C3

C4

C5

C6

C7

Page 23: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Grafo de Precedência

Limitações– não representa comunicação contínua (repetida) entre dois

processos– não representa comunicação realizada durante a execução

(subcaso)– não representa repetições de processos– na literatura: inúmeros extensões, ou ainda outras propostas,

para contornar essas e outras limitações

Page 24: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Usos Em projeto e especificação de programas concorrentes Em análise da complexidade de PCs Em programação de programas paralelos

– em geral, modelos mais restritos– por exemplo, a comunicação entre processos é somente por

arquivos No controle da execução de um Sistema Distribuído

– Sistema composto de vários programas sequenciais– Meta programação ou programação em 2 níveis– Ferramentas de workflow

Page 25: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork/Join– As instruções fork e join foram introduzidas por Conway

[1963] e Dennis e Van Horn [1966];– Foram a primeira notação de linguagem para especificação

de concorrência;

Conceito

Page 26: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork

A instrução fork L produz duas execuções concorrentes (fluxo, tarefa) num programa. – Uma execução começa na instrução rotulada L, – enquanto a outra é a continuação da execução na instrução

seguinte à instrução fork– Processo (tarefa) filho:

• Usualmente a nova execução concorrente– Processo pai:

• Usualmente a que executou o fork

Page 27: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork

Para ilustrar este conceito, considere o seguinte segmento de programa:– Ci é um comando qualquer (inclusive composto)

C1;fork L; // L é um rótuloC2;.......L: C3;

Page 28: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork

Parte do grafo de precedência do programa é apresentado na figura ao lado.

Quando a instrução fork L é executada, uma nova computação é iniciada em C3. Esta nova computação executa concorrentemente com a antiga computação, a qual continua em C2.

C1

Fork

C3C2

Page 29: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Join A instrução join agrupa duas computações

concorrentes em uma. – Cada uma das computações deve requisitar para ser

agrupada com a outra. – Já que as computações podem ter tempos de execução

diferentes, uma pode executar o join antes da outra e sua execução é terminada.

A instrução join deve ser executada de forma atômica.– Sem interrupções na visão de terceiros

Page 30: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Join - Exemplo 1

count := 2;fork L1;...C1;goto L2;L1: C2;L2: join count;

Join

C2 C1

C3

Parte do grafo de precedência para a programa ao lado

Page 31: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork/Join - Exemplo

C1;count := 3;fork L1;C2;C4;fork L2;C5;goto L3;

L2: C6;goto L3;L1: C3;L3: join count;C7;

Ver grafo de precedência correspondente

Page 32: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork/Join

É importante notar que a execução de uma instrução fork divide uma única computação em duas computações independentes.

Também é importante salientar que a execução de uma instrução join agrupa diversas execuções concorrentes.

Page 33: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork- Características

criação dinâmica de processos, o que dificulta a correção do programa;

quantidade de processos variável em cada execução;– Através do uso de comandos ifs, whiles, ...

código do novo processo é o mesmo do processo pai;– existem variações como por exemplo nas threads ou em OO

Page 34: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork- Características

variáveis: 2 alternativas em geral;– A: compartilhamento de variáveis;– B: duplicação das variáveis, como ocorre no Unix;

• Valor inicial na cópia é idêntico mas depois são independentes

estruturas do tipo goto dão pouca legibilidade ao programa;

Page 35: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork - exemplos

SO Unix, Linux– Formato:

process_id fork();– process_id:

• se pai recebe id do filho• Se filho, recebe zero

– ambos os processos continuam a execução na instrução seguinte ao fork

– duplicação de variáveis

Page 36: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Fork - exemplos SO Unix, Linux

– Uso comumint pid;pid = fork();if pid == -1 { “código de erro”} else if pid == 0 { “código do filho”} else { “código do pai”}

Page 37: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Join - Variações Forma geral: agrupamento de 2 processos concorrentes Join “n”

– n: número de processos a sincronizar ou terminar no join Join Pk

– espera pelo término do processo Pk; – Pk é normalmente um processo filho;– é necessário que os processos estejam nomeados para sua

identificação; Join-filho

– espera pelo término de algum filho– filho não precisa ser identificado (nomeado)

Page 38: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Join usando exit– o processo que executa join espera pelo término de um

filho;– processo filho termina por exit;– Exemplo:

...I1;fork LI3;I2;join;I4;goto LI5;LI3: I3;exit;

Join - Variações

Page 39: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exemplos de Implementações

SOs Unix, Linux Biblioteca de programação paralela MPI

Page 40: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Thread Variação do fork/join Modelo mais usado atualmente para PC

– Devido vantagens básicas: • Mais eficiente• Variáveis compartilhadas

Inúmeras implementações– SOs: Unix, Linux, Windows, SOs de dispositivos móveis

(PDAs, celulares), embarcados, sensores, ...– Bibliotecas– Linguagens: Java, C#, Python, ...

Page 41: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Thread

Modelo processo + thread usual– Um processo pode conter várias threads– O código main (procedure, método) é uma thread– Uma thread tem escopo limitado ao de seu processo

• Processo B não tem acesso a threads de processo A– Usualmente o escopo de um processo é limitado por um

computador• Escopo: hw (cpu, ram, ...) mais o SO• Logo também o de uma thread

Page 42: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Thread

Criação– Primitiva (procedure, método) “create_thread”– Argumentos

• Procedure que contém o código da thread• Argumento da procedure

– Retorno• Identificador da thread

– Semântica• Similar à do fork• Thread atual continua execução concorrentemente à nova

Page 43: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Thread

Morte– Final da procedure (ou método)– Exit– comando (de linguagem ou de biblioteca – método,

procedure) que solicita o fim da execução de uma thread• Executado por outra thread; frequentemente a thread mãe• Thread a ser encerrada deve ter nome ou identificador

(ID)

Page 44: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Thread

Modelo usual de variáveis– Variáveis estáticas

• Compartilhadas entre as threads de um mesmo processo– Variáveis locais

• Uma cópia por thread– Argumentos

• Uma cópia por thread

Page 45: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Thread

Exemplos– Posix threads

• Biblioteca padronizada• SO Unix, Linux e outros

– Java threads– C# threads

Page 46: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Parbegin/end– comando de alto nível para especificação da concorrência;

• comando estruturado– especifica explicitamente um conjunto de blocos

(sequenciais internamente) de programa que serão executados concorrentemente;

– normalmente encontrado em algumas linguagens• nunca (?) usado em bibliotecas• exige compilação

Conceito

Page 47: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Parbegin/End Todos os comandos são encapsulados entre o parbegin

e parend e devem ser executados concorrentemente; Quantidade fixa de processos (tarefas); Sintaxe do comando:

• Parbegin C1;C2;…;Cn Parend Semântica do comando:

–Cada Ci é um bloco de código autônomo sequencial

–Os Ci são executados concorrentemente.

Page 48: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Parbegin/End

grafo de precedência que corresponde à sintaxe dada anteriormente

C0 e Cn+1 são os comandos que aparecem logo antes e após da/a instrução parbegin/parend, respectivamente.

o comando Cn+1 pode ser executado somente após todos Ci i= 1,2…n , tiverem sido executadosC n+1

C2 Cn...

Co

C1

Page 49: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Parbegin/End - Exemplo 1C1;parbegin

C3;begin

C2;C4;parbegin C5;

C6; parend;

end;parend;C7;

Ver grafo de precedência correspondente

Page 50: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Parbegin/End - Vantagens e Desvantagens

Vantagens:– Mais legível;– Maior facilidade na verificação de erros;

Desvantagens:– Todo o grafo de precedências pode ser expresso por

fork/join, mas nem todo o grafo de precedências pode ser representado por parbegin/parend.• Com fork/join é possível entrar e sair de um subgrafo

– Dependendo da sofisticação da linguagem, pode-se proibir o uso de goto para dentro ou para fora do parbegin/end

Page 51: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Vetor de Processos–necessita a criação de um vetor de tarefas de n posições• também pode trabalhar com matrizes;

– cada processo (tarefa) executa o mesmo código• código é declarado dentro de um laço cujas

instruções são executadas concorrentemente;• obs: concorrência entre tarefas!

Conceito

Page 52: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Vetor de Processos– cada processo (tarefa) executa o mesmo

código• Para ser útil => sobre dados diferentes• Solução implícita (simples)

– Cada tarefa tem um ID distinto correspondendo a índice de vetor (ou array, matriz)

– Se vetor: entre 1 (ou 0) e n (ou n-1) – Com esses índices se acessa arrays de dados

» => dados distintos por tarefa

Conceito

Page 53: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Vetor de processos - Exemplo 1

Declaração do vetor:var a[1:n]: real; // sintaxe SR Código:

process inicializa (i: 1 to n) a[i] := 0 Código de cada processo: a[i] := 0 Função geral: inicializar o vetor “a” de forma

concorrente

Page 54: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Vetor de processos - Exemplo 1

Equivale a

fa i := 1 to n a[i] := 0 af // sintaxe SRoufor (i := 1 to n) {a[i] := 0}

Cada tarefa de índice i inicializa uma posição i do vetor

Page 55: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Vetor de processos - Exemplo 2

Declaração das matrizes: (sintaxe SR)var a[1:n,1:n], b[1:n,1:n]: real;var c[1:n, 1:n]: real := ( [n], ([n] 0.0))

Inicialização das matrizes:fa i:= 1 to n, j:= 1 to n

read(filea, a[i,j]); read(fileb, b[i,j])af

Page 56: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Vetor de processos - Exemplo 2 (cont.)

Laço de execução:process compute (i := 1 to n, j := 1 to n) fa k:= 1 to n

c[i,j]) := c[i,j] + a[i,k]*b[k,j] af Comentários:

– criação de n2 processos (2 laços de ordem n)– matrizes são inicializadas seqüencialmente– produtos são computados em paralelo

Page 57: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Vetor de processos - caso

Biblioteca OpenMP– Padronizada– Para programação paralela– Para certos tipos de programas

• Ou melhor, para certos tipos de padrões de código (estruturas)

• Em particular: loops– Uso de diretivas

• Algo entre implícito e explícito– Exige compilador especial– Adicionada às linguagens C, Fortran, ...

Page 58: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Considerações Finais

Vários modelos para criação da concorrência– Modelos de programa concorrente– APIs para criação e gerência (join, ...) das tarefas– Variações na semântica das APIs– Variações na sintaxe das APIs (menos importante)

Diferentes modelos afetam os outros aspectos da PC– Sincronização e comunicação

Page 59: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Considerações Finais

Existem outros modelos– Nas linguagens OO

• E com APIs distintas, ...– Na paralelização de linguagens seqüenciais (Fortran, Lisp,

Prolog, ...)• Normalmente usando os modelos acima na

implementação

Page 60: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Resumo

Tarefa, processo e thread Tipos: estático x dinâmico, implícito x explícito Modelos

– Grafo de precedências (ou de comunicação)– Fork/join– Thread– Parbegin/parend– Array de processos

Page 61: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 1 Reescreva o seguinte programa usando instruções

parbegin/parend. Certifique-se de que será explorado o máximo de paralelismo e que o resultado produzido será sempre o mesmo da execução seqüencial.

W := X1 * X2;V := X3 * X4;Y := V * X5;Z := V * X6;Y := W * Y ;ANS := Y + Z;

Page 62: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 1-a Reescreva o seguinte programa usando instruções

parbegin/parend. Certifique-se de que será explorado o máximo de paralelismo e que o resultado produzido será sempre o mesmo da execução seqüencial.

W := X1 * X2;V := X3 * X4;T := Y1 + Y2;Y := V * T;Z := V * X6;W := W * Y ;ANS := Y + Z;

Page 63: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 1 - RespostaparbeginW := X1 * X2;

begin V := X3 * X4;

parbegin Y := V * X5; Z := V * X6;

parend; end;parend;Y := W * Y ;ANS := Y + Z;

Page 64: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 2 Transforme o grafo de precedência abaixo em um

programa usando fork/join:

C1

C2

C3

C4

C6

C5

Page 65: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 2-a Transforme o grafo de precedência abaixo em um

programa usando fork/join:

C1

C2

C3

C4

C8

C5

C6

C7

Page 66: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 2 - Resposta

C1;fork LC3;fork LC4;C2;LJ3: join;C5;LJ4: join;C6;

LC3: C3; goto

LJ3;LC4: C4; goto LJ4;

Transformação do grafo de precedência em um programa utilizando instruções fork/join

Page 67: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 3 Transforme o grafo de precedência abaixo em um

programa fork/join e em parbegin/parend. Se o grafo não puder ser representado por parbegin/parend, explique porquê.

C1

C2

C3

C4

C5

C6 FIM

Page 68: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 3 - Resposta

C1;fork LI3;C2;fork LI5;C4;LJ5: join;LJ3: join;C6;

LC3: C3; goto LJ3;

LI5: C5; goto LJ5;

Transformação do grafo de precedência em um programa utilizando instruções fork/join

Page 69: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 3 - RespostaC1;parbegin

C3;begin

C2; parbegin

C4; C5;

parend; end;parend;C6;

Transformação do grafo de precedência em um programa utilizando instruções parbegin/parend

Page 70: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 4 Implemente o grafo de precedência abaixo utilizando fork/join.

Explique a semântica do fork e do join: início do processo, quantidade de processos...

1

5 9

4

3

2

10

7

6

8

Page 71: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 4 - Resposta1;Fork L3;2;Fork L5;4;8;J2: JoinJ3: Join;

10; exit;

L3: 3; Fork L7; 6;

J1: Join; goto J3;

L7: 7;goto J1;

L5: 5;9;goto J2;

O início do processo se dá com o processo pai (1). O comando fork cria processos filhos. A quantidade de processos criados é variável. Já a semântica do processo join é esperar o término de 2 processos (join padrão) para somente depois disso passar para a próxima instrução. O código com fork/join não fica legível, mas a criação dos processos é feita de forma dinâmica . Exemplo: Fork L3 cria ó processo 3. O join de rótulo J1 espera o término da execução de 6 e 7.

Page 72: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 5 A partir do programa abaixo que utiliza fork/join, implemente o

grafo de precedência correspondente.

1;Fork L3;Fork L4;2;goto J1;

L3: 3; Fork L6;

5;J1: Join; 7; Fork L9; 8;J2: Join;J3: Join; 11;exit;

L4: 4; goto J4;

L6: 6; J4: Join; 10; goto J3;

L9: 9; goto J2;

Page 73: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Exercício 5 - Resposta

1

5

9

4

3

2

10

7

6

8

11

Page 74: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Revisão Expressão da Concorrência

Tipos quanto a “quando”? Tipos quanto a “quem”? Combinações usuais? Tipos mais simples para programador? Tipos mais eficientes? Tipos mais flexíveis?

Page 75: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Revisão...

Conceito de grafo de precedência– nó?– arco?– 2 nós ligados por 1 arco?– 1 nó com 2 ou mais arcos de saída?– 1 nó com 2 ou mais arcos de entrada?

Page 76: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Revisão...

Conceito de fork clássico– função básica?– código?– variáveis?– início?

Variações no fork Unix?– sobre acima?– retorna?

Problemas de eng. de sw

Page 77: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Revisão...

Conceito de join clássico– versão 2 processos– versão n (2 ou mais) processos

Variações no Unix– nome– tipo 1 (anônimo)– tipo 2 (com identificador)

Page 78: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Revisão …

Parbegin/parend– estático ou dinâmico?– implícito ou estático?– quais funções do modelo fork/join?– qual o modelo de código?– qual o modelo de dados?– o que pode ser proibido no parbegin/parend?– quais as vantagens?

Page 79: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Revisão …

Vetor de processos– estático ou dinâmico?– implícito ou explícito?– qual o código?– qual o modelo de dados?– qual a similaridade com o parbegin/parend?– qual a diferença com …?

Page 80: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Revisão ...

Outras primitivas Unix– sobre identificadores– término– código

Page 81: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Bibliografia Andrews, G.

– Concurrent Programming: Principles and Practice. – The Benjamim Cummings, 1991.

Andrews, G.– Foundations of Multithreaded, Distributed and Parallel Programming.– Ed. 2001.

Silberschatz, A. – Operating Systems Concepts.– Addison-Wesley, 5º edição, 1992, e edições seguintes.– última versão: 9th Edition. Hardcover: 944 pages. Publisher: Wiley; 9 edition

(December 17, 2012). Language: English. ISBN-10: 1118063333. ISBN-13: 978-1118063330

Page 82: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

Bibliografia Tanenbaum, A. S.

– Modern Operating Systems.– Prentice-Hall, 1992, e edições seguintes.– última versão: 4th Edition. by Hardcover: 1136 pages. Publisher: Pearson; 4

edition (March 20, 2014). Language: English. ISBN-10: 013359162X. ISBN-13: 978-0133591620

Livros dos professores da UFRGS– Toscani, S. S., Oliveira, R., Caríssimi, A. Sistemas Operacionais e Programação

Concorrente. Editora Sagra-Luzzato, 2003. ISBN: 8524106824. 247 páginas.– Oliveira, R., Caríssimi, A .Toscani, S. S. Sistemas Operacionais - Volume 11. ed. Bookman.

4ª ed. 2010.

Page 83: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2

EspecificaçõesAutores da 1ª versãoIngrid de Vargas Mito [email protected]íra Colling Wenzel [email protected]

LocalInstituto de InformáticaUFRGSDisciplina: Sistemas Operacionais IIAno: 1998/2Revisões anuais: C. Geyer