440 likes | 570 Views
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
E N D
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 • “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
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
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
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
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
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
Concorrência Execução Seqüencial Fonte: Introduction to POSIX Threads Programming
Execução Concorrente Concorrência Fonte: Introduction to POSIX Threads Programming
Concorrência Fonte: Introduction to POSIX Threads Programming
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
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)
Paralelismo • Exemplo • Problemas • Máquinas paralelas • Grand Challenge Problems • Modelagem meteorológica e física • Seqüenciamento e análise de DNA • ...
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
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
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
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
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
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
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
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
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]) :
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
Executando Occam • Processador específico • O Transputer (INMOS) • Processamento paralelo • Compilação • Fonte occam => executável linux • Processamento concorrente
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/
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
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
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
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:~>
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)
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
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
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>
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
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”
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
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
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
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/
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
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
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/