Concorrência e Occam Paulo Abadie Guedes 09/2002.
Transcript of Concorrência e Occam Paulo Abadie Guedes 09/2002.
![Page 1: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/1.jpg)
Concorrência e Occam
Paulo Abadie Guedes
09/2002
![Page 2: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/2.jpg)
A linguagem Occam
Estrutura
– Introdução
– Características
– Sintaxe da linguagem
– Exemplos
– Occam na prática
– O compilador KROC
![Page 3: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/3.jpg)
Introdução
A linguagem Occam– Homenagem a William of Ockham
Occam’s Razor– “Things should be complicated, but no
more than necessary”– A explicação mais simples, em geral, tende
a ser a correta– Keep it simple
Fonte: http://wotug.ukc.ac.uk/parallel/www/occam/occam-bio.html
![Page 4: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/4.jpg)
Características
Criada para considerar paralelismo– Construtores na linguagem para denotar
operações com execução em paralelo
Linguagem com base formal – Baseada em CSP
Sintaxe simples e limpa– Processamento, comunicação e controle
![Page 5: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/5.jpg)
Communicant Sequential Processes
Base formal para a linguagem Occam
Modelo de processamento paralelo
Processos seqüenciais
Cooperação:
– Comunicação explícita (troca de dados)
– Não existem variáveis compartilhadas
![Page 6: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/6.jpg)
Occam e CSP - Propriedades
Permite a verificação de propriedades– Análise e transformação de programas
Como garantir que:– Não haverá nunca deadlock?– Não ocorrem condições de corrida?– Não haverá starvation e livelock?
Conveniente para paralelismo– PISH e Co-Design:Implementação HW/SW
![Page 7: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/7.jpg)
Concorrência, Paralelismo e Tempo Real
Concorrência
– Compartilhamento da CPU
Paralelismo
– Várias unidades de processamento
– Execução de operações ao mesmo tempo
Tempo real
– Processamento no tempo certo
– Forte interação com o ambiente
![Page 8: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/8.jpg)
Concorrência
Compartilhamento da CPU– Simulação do paralelismo
S.O. é responsável pelo escalonamento– Melhor esforço
Objetivos:– Melhor uso de recursos– Otimizar a resposta, na média– Interação usuário/máquina
![Page 9: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/9.jpg)
Concorrência
Execução
Seqüencial
Fonte: Introduction to POSIX Threads Programming
![Page 10: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/10.jpg)
Concorrência
Execução
Concorrente
Fonte: Introduction to POSIX Threads Programming
![Page 11: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/11.jpg)
Concorrência
Fonte: Introduction to POSIX Threads Programming
![Page 12: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/12.jpg)
Paralelismo
Diversas unidades de processamento– Execução das operações em paralelo
Escalonamento– S.O. + usuário/programa determinam o
escalonamento– Otimizado para carga de trabalho pesada
Linguagens– Fortran, C e assembler
![Page 13: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/13.jpg)
Paralelismo
Objetivos– Velocidade máxima– Minimizar comunicação e espera– Problemas com processamento pesado
Requer hardware especializado– Algumas formas:
• Temporal: pipelines (arquitetura escalar)• Espacial: dupla canalização (superescalar)
![Page 14: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/14.jpg)
Paralelismo
Exemplo– Problemas– Máquinas paralelas
Grand Challenge Problems– Modelagem meteorológica e física– Seqüenciamento e análise de DNA– ...
![Page 15: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/15.jpg)
Tempo Real
Concorrência ou paralelismo Forte interação com o ambiente
– Em geral, são sistemas embutidos Objetivo:
– Garantir a resposta certa nos tempos corretos, mesmo no pior caso possível
– Controle, e não apenas velocidade
![Page 16: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/16.jpg)
Tempo Real
Aplicações específicas Escalonamento
– HW, SW e S.O. próprios– Em geral, criados pelo desenvolvedor– Análise profunda dos cenários de execução
Garantias funcionais e temporais– Soft Real Time X Hard Real Time
Existem centenas de kernels para RT
![Page 17: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/17.jpg)
Tempo Real
Exemplos– Circuitos de proteção
• Monitoração contra sobrecarga da rede elétrica• Falhas de suprimento de energia: No-break
– Freios ABS– Injeção eletrônica– Sistemas de navegação e controle aéreo,
terrestre, ferroviário e espacial– Sondas espaciais e robôs
• Para trabalho em ambiente hostil
– Sistemas de monitoração e suporte vital
![Page 18: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/18.jpg)
A linguagem Occam
Baseada em processos seqüenciais Comunicação explícita via canais Tipos fortes Permite descrever naturalmente
– Execução seqüencial– Execução paralela– Comunicação– Sincronização
![Page 19: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/19.jpg)
A linguagem Occam
Tipos básicos– Inteiro (INT, INT16, INT32, INT64)
• INT size:– Byte– Fracionário (REAL,REAL32, REAL64)
Outras primitivas da linguagem– TIMER– Canal
• CHAN OF BYTE stdin:– Processo
• Pode ser uma composição de outros processos
![Page 20: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/20.jpg)
A linguagem Occam
Processos básicos– Atribuição– Seleção (if) e iteração (for e while)– Stop, Skip– Combinação de outros processos
• Seq: execução seqüencial• Par: execução em paralelo
– Comunicação• Send/receive (? e !)• Canais de comunicação
![Page 21: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/21.jpg)
Sintaxe baseada na posição do texto– Identação muda a semântica do programa– Ex.:
IF( x > 1)
x = 0
TRUESKIP
A linguagem Occam
Deslocado 2 caracteres à direita
![Page 22: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/22.jpg)
Composição de processos
Execução em seqüênciaSEQ
p1p2
Execução em paraleloPAR
p1p2
ProcedimentosPROC meuProc(INT x, VAL INT i) SEQ p1(x, i) p2(x):
FunçõesINT FUNCTION inc(INT x) INT aux: VALOF SEQ aux = (x + 1) RESULT aux:
![Page 23: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/23.jpg)
Exemplo:
#INCLUDE "hostio.inc"
#USE "hostio.lib"
PROC today (CHAN OF BYTE stdin, stdout, stderr)
CHAN OF SP fs, ts:
[80]BYTE textline:
SEQ
[textline FOR 18] := "The date/time is: "
so.today.ascii (fs, ts, FALSE, TRUE, [textline FROM 18 FOR 19])
so.write.string.nl (fs, ts, [textline FOR 35])
:
![Page 24: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/24.jpg)
Passagem de parâmetros
Por valor ou cópia (PROC meuProc(VAL INT x) )– Não altera variáveis externas
Por referência (PROC meuProc(INT x) )– Efeitos colaterais visíveis
Compilador usa regras estritas– Constantes passadas apenas por valor
Conversão explícita de tipos– Mesmo conversão de int para float é explícita
![Page 25: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/25.jpg)
Executando Occam
Processador específico– O Transputer (INMOS)– Processamento paralelo
Compilação– Fonte occam =>
executável linux– Processamento
concorrente
![Page 26: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/26.jpg)
O Transputer
![Page 27: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/27.jpg)
O Compilador KROC
Kent Retargettable Occam Compiler– Compilador para a linguagem Occam 2.0– Programas usam concorrência– Código aberto, sob a licensa GNU
Disponível no CIn na rede Linux– Suporte bom à linguagem Occam– Configuração do compilador:
• source /opt/kroc/bin/setup.csh
A página do KROC está em– http://www.cs.ukc.ac.uk/projects/ofa/kroc/
![Page 28: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/28.jpg)
O Compilador KROC
Compilador de linha de comando Desenvolvimento
– Criar o código fonte (arquivo .occ)– Compilar (Occam => C => arquivo objeto)– Ligar e executar diretamente
• Não precisa de um ambiente para execução
O programa– Executável no formato ELF– Depende apenas das bibliotecas
![Page 29: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/29.jpg)
O Compilador KROC
Flags e parâmetros– Executável a ser gerado: “-o <program name>”– Depuração
• Flag “-d”. Útil inclusive para parar processos “travados”
– Geração de arquivos intermediários– Flags para passar parâmetros ao gcc– Verbose mode (“-v”)– Mais opções: digitar “kroc”
Uso do kroc na prática– Usar um makefile (just “make” it!)– Para criar o makefile: kmakef
![Page 30: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/30.jpg)
Opções do compilador Kroc - 1
bonito:~> krocKROC version 1.3.2 targeting i686-pc-linux-gnu (driver V1.38)Usage: kroc [options] [occam sources/pre-compiled sources]Options: -b, --brief Give brief occ21 error messages -c, --compile Compile source to objects, do not link -s, --strict Strict checking mode -d Enable post-mortem debugging -di Enable insert debugging (implied by -d) -h, --help Print this message and exit -IDIRECTORY Search DIRECTORY for occam libs & includes, C headers -k, --keep-temp Keep temporary files -V, --version Print version -l, --library Generate .so shared library -lNAME Link with native library libNAME.a -LDIRECTORY Search DIRECTORY for native libraries
![Page 31: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/31.jpg)
Opções do compilador Kroc - 2 -n, --dry-run Do not run any commands; just print them. --oc-opts=opts Use these occam compiler (occ21) options --oc-opts opts "" --cc-opts=opts Use these C compiler (gcc) options --cc-opts opts "" -nw, --no-warn Give no warnings from occ21 -nd, --no-dynmem Disable dynamic memory support -oFILE, -o FILE Place output in file FILE -p, --pre-compile Pre-compile occam source to .ktx files -t2, -t4, -t8, -t9 Set processor compilation class (default t8) -O --optimise Enable optimisations [now default] -P --pause Event/schedule check at loop-ends and backward jumps -io, --inline-io Inline input/output kernel calls -is, --inline-sched Inline parts of the scheduler -it, --inline-ldtimer Inline load-timer instruction -v, --verbose Show commands run during compilation -w, --warn Additional warnings from occ21 -X5 Enable MOBILEs and extended input (experimental) --oos Compile for OOS (experimental)bonito:~>
![Page 32: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/32.jpg)
KROC – Programas Auxiliares
Compilação– Executáveis kroc e occ21
Criação de bibliotecas– Occam: ilibr– Unix: ar e ranlib
Análise do conteúdo dos executáveis– tdump
Depuração e desenvolvimento– gcc + gdb– kmakef (criação automática de makefiles)
![Page 33: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/33.jpg)
Compilandoo Hello Occam Fonte Compilação Execução
Arquivos Fonte
(hello.occ)
Arquivos
Fonte em C
Compilador Kroc
Compiladorgcc
Arquivos
objeto (.o)
Bibliotecas C
Bibliotecas OccamExecutável
![Page 34: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/34.jpg)
O Comando “make”
Programa auxiliar– Automatizar tarefas repetitivas
O make– Analisa dependências entre os alvos– Executa as regras na ordem correta– Apenas executa o que for necessário
Vantagens– Facilita o processo de desenvolvimento– Facilita compilação e instalação
![Page 35: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/35.jpg)
Função– Guiar a ordem de execução das tarefas– Algoritmo para a compilação
Lista de regras de execução– Formato das regras:
<alvo>: <lista de dependências><ações para criar o alvo>
O arquivo Makefile
Tabs separando os itens
![Page 36: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/36.jpg)
O arquivo Makefile
Alvo (destino)– Arquivo a ser criado– Ação a ser realizada ou rótulo intermediário
Dependências– Pré-condições para a regra– Arquivos ou outros alvos
Ações– Comandos para a criação de cada alvo
![Page 37: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/37.jpg)
Regra:Hello: hello.occ
kroc hello.occ -o hello -d
Usando o make:– Criar o arquivo fonte
(hello.occ)– Criar o makefile– Executar “make”
O arquivo Makefile
Dependência:Arquivo fonte
Ação para a criação do alvo
Alvo
![Page 38: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/38.jpg)
Make - Outras Opções
Símbolo “#” usado para comentários
Parâmetros– Definição:
FONTE=hello.occ
– Uso: $(FONTE)
Regras sem dependências:– Sempre executarãoclean:
rm -f hello
Execução completa– make
• Executa a primeira regra
Execução específica– make <alvo>
• Executa a regra <alvo>
![Page 39: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/39.jpg)
Um Makefile Realista
Estrutura geral de um bom makefile:– # Criado por ... em ... para ...– Parâmetros– Help (texto com a forma de uso)– Alvo principal (em geral, “all”)– Lista de alvos secundários– Regras para manutenção
• clean => eliminar arquivos intermediários• cleanAll => eliminar todos os arquivos gerados
Usar o kmakef para criar o makefile
![Page 40: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/40.jpg)
Um Makefile Realistabonito:~/grad/Mestrado/mp3/desenvolvimento/copy_occ> more makefile# Makefile built by kmakef for pag on Tue Jun 26 17:24:58 2001# with 'kmakef copy'#KROC=krocILIBR=ilibrAR=arRANLIB=ranlibDEL=rm -f
LIB_DIR=/opt/kroc.old/libINC_DIR=$(LIB_DIR)
# Default - build all targetsall: copy
LIBS=$(LIBDIR)/libfile.a $(LIB_DIR)/libhostio.a $(LIB_DIR)/libcourse.a $(LIB_DIR)/libstring.a $(LIB_DIR)/libconvert.aINCS=$(INC_DIR)/filelib.inc $(INC_DIR)/hostio.inc $(INC_DIR)/consts.inc
clean: -$(DEL) copy *.tce *.o *.lib *.a *.s *.kt* *~
#copy: copy.occ $(INCS) $(LIBS)# $(KROC) copy.occ -o copy -lfile -lhostio -lcourse -lstring -lconvert -d
copy: copy.occ /opt/kroc.old/lib/inc/filelib.inc /opt/kroc.old/lib/libfile.a \ /opt/kroc.old/lib/inc/hostio.inc /opt/kroc.old/lib/libhostio.a \ /opt/kroc.old/lib/inc/consts.inc /opt/kroc.old/lib/libcourse.a \ /opt/kroc.old/lib/libstring.a /opt/kroc.old/lib/libconvert.a $(KROC) copy.occ -o copy -lfile -lhostio -lcourse -lstring -lconvert -d
![Page 41: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/41.jpg)
Documentação
Arquivos do kroc– Manuais de uso em formato PostScript (ps)– Exemplos de aplicativos em Occam– Código do compilador kroc
Livro sobre Occam 2.0– Diretório de exemplos da ferramenta
Help on-line: páginas sobre o KROC– http://wotug.ukc.ac.uk/kroc/– http://www.cs.ukc.ac.uk/projects/ofa/kroc/
![Page 42: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/42.jpg)
Exercício prático
Configurar o ambiente Criar o arquivo fonte(hello.occ) Compilar manualmente e executar Criar o makefile Compilar usando o make
– Hello.occ– Exemplo de comunicação– Servidor WEB em Occam
![Page 43: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/43.jpg)
Referências Kent Retargetable OccamTM Compiler (KRoC)
– http://www.cs.ukc.ac.uk/projects/ofa/kroc/
Compilers for the Occam Language– http://wotug.ukc.ac.uk/occam/compilers/index.shtml
The WWW Virtual Library (http://www.vlib.org)– The Occam archive
• http://www.afm.sbu.ac.uk/occam/
– The CSP archive• http://www.afm.sbu.ac.uk/csp/
– The transputer archive• http://www.afm.sbu.ac.uk/transputer/
William of Ockham– http://wotug.ukc.ac.uk/parallel/www/occam/occam-bio.html
![Page 44: Concorrência e Occam Paulo Abadie Guedes 09/2002.](https://reader035.fdocuments.net/reader035/viewer/2022062318/552fc142497959413d8df6b7/html5/thumbnails/44.jpg)
Referências
Parallel Programming in C for the Transputer– http://cs.smith.edu/~thiebaut/transputer/toc.html
Introduction to POSIX Threads Programming – http://www.llnl.gov/computing/tutorials/workshops/
workshop/pthreads/MAIN.html
Concurrent and Real-time Systems: the CSP Approach (Steve Schneider)– http://www.cs.rhbnc.ac.uk/books/concurrency/
Professor C.A.R. Hoare, FRS– http://users.comlab.ox.ac.uk/tony.hoare/