Transcript
Page 1: Concorrência e Occam Paulo Abadie Guedes 09/2002

Concorrência e Occam

Paulo Abadie Guedes

09/2002

Page 2: 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

Page 3: Concorrência e Occam Paulo Abadie Guedes 09/2002

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

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

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

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

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

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

Concorrência

Execução

Seqüencial

Fonte: Introduction to POSIX Threads Programming

Page 10: Concorrência e Occam Paulo Abadie Guedes 09/2002

Concorrência

Execução

Concorrente

Fonte: Introduction to POSIX Threads Programming

Page 11: Concorrência e Occam Paulo Abadie Guedes 09/2002

Concorrência

Fonte: Introduction to POSIX Threads Programming

Page 12: Concorrência e Occam Paulo Abadie Guedes 09/2002

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

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

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

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

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

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

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

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

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

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

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

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

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

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

O Transputer

Page 27: Concorrência e Occam Paulo Abadie Guedes 09/2002

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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/


Top Related