1 / 44

Concorrência e Occam

Concorrência e Occam. Paulo Abadie Guedes 09/2002. A linguagem Occam. Estrutura Introdução Características Sintaxe da linguagem Exemplos Occam na prática O compilador KROC. Introdução. A linguagem Occam Homenagem a William of Ockham Occam’s Razor

Download Presentation

Concorrência e Occam

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Concorrência e Occam Paulo Abadie Guedes 09/2002

  2. A linguagem Occam • Estrutura • Introdução • Características • Sintaxe da linguagem • Exemplos • Occam na prática • O compilador KROC

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. Concorrência Execução Seqüencial Fonte: Introduction to POSIX Threads Programming

  10. Execução Concorrente Concorrência Fonte: Introduction to POSIX Threads Programming

  11. Concorrência Fonte: Introduction to POSIX Threads Programming

  12. 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

  13. 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)

  14. Paralelismo • Exemplo • Problemas • Máquinas paralelas • Grand Challenge Problems • Modelagem meteorológica e física • Seqüenciamento e análise de DNA • ...

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. Deslocado 2 caracteres à direita A linguagem Occam • Sintaxe baseada na posição do texto • Identação muda a semântica do programa • Ex.: IF ( x > 1) x = 0 TRUE SKIP

  22. Composição de processos • Procedimentos PROC meuProc(INT x, VAL INT i) SEQ p1(x, i) p2(x) : • Funções INT FUNCTION inc(INT x) INT aux: VALOF SEQ aux = (x + 1) RESULT aux : • Execução em seqüência SEQ p1 p2 • Execução em paralelo PAR p1 p2

  23. 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]) :

  24. 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

  25. Executando Occam • Processador específico • O Transputer (INMOS) • Processamento paralelo • Compilação • Fonte occam => executável linux • Processamento concorrente

  26. O Transputer

  27. 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/

  28. 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

  29. 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

  30. Opções do compilador Kroc - 1 bonito:~> kroc KROC 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

  31. 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:~>

  32. 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)

  33. Arquivos Fonte (hello.occ) Compilador Kroc Bibliotecas C Arquivos Fonte em C Bibliotecas Occam Executável Arquivos objeto (.o) Compilador gcc Compilandoo Hello Occam • Fonte • Compilação • Execução

  34. 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

  35. Tabs separando os itens O arquivo Makefile • 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>

  36. 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

  37. Alvo Dependência: Arquivo fonte Ação para a criação do alvo O arquivo Makefile • Regra: Hello: hello.occ kroc hello.occ -o hello -d • Usando o make: • Criar o arquivo fonte (hello.occ) • Criar o makefile • Executar “make”

  38. Símbolo “#” usado para comentários Parâmetros Definição: FONTE=hello.occ Uso: $(FONTE) Regras sem dependências: Sempre executarão clean: rm -f hello Execução completa make Executa a primeira regra Execução específica make <alvo> Executa a regra <alvo> Make - Outras Opções

  39. 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

  40. Um Makefile Realista bonito:~/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=kroc ILIBR=ilibr AR=ar RANLIB=ranlib DEL=rm -f LIB_DIR=/opt/kroc.old/lib INC_DIR=$(LIB_DIR) # Default - build all targets all: copy LIBS=$(LIBDIR)/libfile.a $(LIB_DIR)/libhostio.a $(LIB_DIR)/libcourse.a $(LIB_DIR)/libstring.a $(LIB_DIR)/libconvert.a INCS=$(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

  41. 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/

  42. 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

  43. 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

  44. 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/

More Related