Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5,...
-
Upload
vitor-gabriel-joao-vitor-beltrao-azeredo -
Category
Documents
-
view
218 -
download
3
Transcript of Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5,...
![Page 1: Expressão da Concorrência. Autoria 4 Alunos de turma de SOII 4 C. Geyer 4 Versão –V24.5, 2015-2.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/1.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/2.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/3.jpg)
Í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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/4.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/5.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/6.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/7.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/8.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/9.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/10.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/11.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/12.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/13.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/14.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/15.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/16.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/17.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/18.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/19.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/20.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/21.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/22.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/23.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/24.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/25.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/26.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/27.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/28.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/29.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/30.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/31.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/32.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/33.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/34.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/35.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/36.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/37.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/38.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/39.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/40.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/41.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/42.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/43.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/44.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/45.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/46.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/47.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/48.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/49.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/50.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/51.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/52.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/53.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/54.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/55.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/56.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/57.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/58.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/59.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/60.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/61.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/62.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/63.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/64.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/65.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/66.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/67.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/68.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/69.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/70.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/71.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/72.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/73.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/74.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/75.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/76.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/77.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/78.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/79.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/80.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/81.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/82.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022081604/5706386e1a28abb823906611/html5/thumbnails/83.jpg)
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