Mobilidade e Blackboards

Tamanho: px
Começar a partir da página:

Download "Mobilidade e Blackboards"

Transcrição

1 Uma Máquina Virtual com Suporte à Concorrência, Mobilidade e Blackboards Alex Sandro Garzão, Jorge Luis Victória Barbosa Universidade do Vale do Rio dos Sinos (Unisinos) São Leopoldo, RS, Brasil Abstract. This text purposes the HoloVM, a virtual machine with support to concurrency, mobility and blackboards, realizing symbol processing. It was created to supply Hololanguage necessities, but it can be used as execution environment by another languages. After explanations about the Holoparadigm, Hololanguage and HoloJava, will be shown concepts about this virtual machine, the HoloASM (assembler to the machine language of HoloVM) and the HoloC (compiler to the Hololanguage), tools which are being used for help in validation and use of this machine. Keywords: Distributed Systems, Parallel programming, Languages and Programming Techniques Resumo. Este texto propõe a HoloVM, uma máquina virtual com suporte à concorrḙncia, mobilidade e blackboards, realizando processamento simbólico. Foi criada para suprir as necessidades da Hololinguagem, mas pode ser utilizada como ambiente de execução para outras linguagens. Após explicações sobre o Holoparadigma, a Hololinguagem e o HoloJava, serão apresentados conceitos desta máquina virtual, o HoloASM (montador assembly para a linguagem de máquina da HoloVM) e o HoloC (compilador para a Hololinguagem), ferramentas estas que estão sendo utilizados para auxiliar na validação e uso desta máquina. Palavras-chave: programação Sistemas distribuídos, Programação paralela, Linguagens e técnicas de

2 1. Introdução O Holoparadigma[13, 10, 11] é um modelo multiparadigma que integra os conceitos de paradigmas básicos (imperativo, orientado a objetos e lógico) e estimula a exploração automática do paralelismo e distribuição[7, 5]. Para uma melhor exploração deste modelo foram criadas a Hololinguagem[12, 13] (linguagem de programação que implementa os conceitos propostos neste modelo) e o HoloJava[9] (ferramenta que traduz programas Holo para a linguagem Java). O HoloJava, mesmo não suprindo todas as necessidades deste modelo, proporcionou subsídios suficientes para uma rápida prototipação do ambiente de desenvolvimento, bem como a explicitação de vários recursos inerentes deste novo paradigma de software. Mesmo existindo diferentes propostas e implementações de máquinas virtuais (por exemplo, JVM[18], WAM[6] e Mozart[21]), nenhuma conseguiu suprir todas as necessidades propostas pelo Holoparadigma, algumas por não terem recursos essenciais e outras pelo baixo desempenho apresentado[8]. Frente a estas dificuldades surgiu a proposta da HoloVM: uma máquina virtual com suporte nativo à concorrência (entes concorrentes e ações concorrentes), mobilidade e blackboards, realizando processamento simbólico, proporcionando uma melhor utilização destes recursos e tornando a execução dos programas holo mais eficiente. A idéia inicial era adaptar a JVM as necessidades da Hololinguagem; porém, ela não possui instruções nativas para controle da mobilidade e blackboards e o seu conjunto de instruções não pode ser expandido. O texto está organizado em 5 seções. A segunda seção apresenta um estudo sobre o projeto Holo; a terceira seção apresenta uma descrição da HoloVM, abordando aspectos como estruturas internas, exploração da concorrência e formas de sincronia; a quarta seção aborda o protótipo implementado; e a quinta seção contém a conclusão deste artigo. 2. Holoparadigma, Hololinguagem e HoloJava O Holoparadigma é um modelo multiparadigma orientado ao desenvolvimento de software paralelo e distribuído; possui uma semântica simples e distribuída que estimula a exploração automática da distribuição (implícita) e do paralelismo. Esta semântica estabelece a utilização de duas unidades de modelagem: o ente, que é a principal abstração do Holoparadigma, e o símbolo, que é utilizado para descrever os entes e suas relações. Um ente elementar (figura 1a) é organizado em três partes: interface, comportamento e história. Um ente composto (figura 1b) possui a mesma organização de um ente elementar, porém suporta a existência de outros entes na sua composição (entes componentes), assemelhando-se a um grupo. Neste caso, a história atua como um espaço compartilhado vinculado ao grupo. Cada ente possui uma história que fica encapsulada no seu interior e, no caso dos entes compostos, é compartilhada pelos entes componentes. Sendo assim, podem existir vários níveis de encapsulamento da história; porém, os entes acessam somente a história em um nível. A composição varia de acordo com a mobilidade dos entes em tempo de execução. A figura 1c mostra um ente composto de três níveis e exemplifica a história encapsulada. Figura 1: Tipos de entes 2

3 O Holoparadigma propõe a utilização do processamento simbólico como principal instrumento para o tratamento de informações, característica esta herdada do paradigma em lógica. A interface descreve suas possíveis relações com os demais entes; o comportamento contém ações que implementam sua funcionalidade; e a história é um espaço de armazenamento compartilhado no interior de um ente. Essa estrutura assemelha-se a um objeto[22] do paradigma orientado a objetos. Do ponto de vista estrutural, a principal diferença consiste na história, a qual atua como uma forma alternativa de comunicação e sincronização. Além disso, existe maior enfoque na composição e suporte implícito da mobilidade. A mobilidade é a capacidade que permite o deslocamento de um ente. No âmbito do Holoparadigma existem dois tipos: (1) a mobilidade lógica, que relaciona-se com o deslocamento a nível de modelagem, ou seja, sem considerações sobre o ambiente de execução; (2) a mobilidade física, que relaciona-se com o deslocamento entre nodos de uma arquitetura distribuída. Neste contexto, um ente se move quando desloca-se de um nodo para outro. O Holoparadigma propõe dois modos de invocação: (1) a afirmação, que envolve um fluxo de informação unidirecional, não existindo sincronismo. Podem ser utilizadas para comunicação assíncrona e para inserção de informações na interface, no comportamento e na história; (2) a pergunta, que envolve um fluxo de informação bidirecional, estabelecendo sincronismo. As perguntas podem ser utilizadas para comunicação síncrona e para retirada de informações da interface, do comportamento e da história. A Hololinguagem [2, 12, 13] é uma linguagem que implementa os conceitos propostos pelo Holoparadigma; é uma linguagem multiparadigma direcionada para o desenvolvimento de sistemas distribuídos. Neste sentido, destacam-se como suas principais características: (1) sem tipos e orientada ao processamento simbólico; (2) programação de alta ordem, ou seja, símbolos representando entes e suas partes (interface, comportamento e história) podem ser manipulados através de variáveis e operações da linguagem; (3) blackboard hierárquico; (4) mobilidade; (5) suporte a ações concorrentes e entes concorrentes; (6) sintaxe imperativa baseada na linguagem Pascal. Um programa é composto de descrições de entes (estáticos). Visando a realização de testes de Holoprogramas no menor espaço de tempo possível, foi criado uma ferramenta para conversão de programas[20] denominada HoloJava[12, 9]. Esta ferramenta converte programas em Holo (linguagem origem) para programas em Java (linguagem destino); porém não implementa algumas características propostas na Hololinguagem porque Java não possui suporte para estas características. Portanto, a conversão torna-se limitada e o uso de bibliotecas complementares torna-se necessário. Mesmo com limitações, diversos programas em Holo podem ser executados, permitindo assim a obtenção de resultados e a realização de análises. 3. HoloVM A HoloVM cria uma camada de abstração entre os programas e a máquina física em que está sendo executada, possibilitando que um bytecode Holo seja executado em qualquer plataforma onde exista uma implementação desta máquina. Possui um conjunto de instruções e manipula algumas áreas de memória em tempo de execução. A sua criação, como citado em [8], tornará a execução de programas Holo mais eficiente. Como a proposta é criar condições para uma melhor exploração da Hololinguagem, sua especificação está focada nos recursos que não foram possíveis de serem implementados no HoloJava. É utilizado um formato binário predefinido denominado arquivo hvm. Este arquivo contém uma tabela de símbolos e as instruções (bytecodes) à serem executadas. Qualquer compilador pode gerá-lo e usufruir dos recursos presentes nesta nova máquina virtual. Como realiza processamento simbólico, não existe a definição explícita de variáveis e tipos; as variáveis são criadas sob demanda e a verificação de tipos é feita durante a execução do bytecode. Para processamento interno, existem três tipos básicos de dados: símbolos, números e strings. Possui duas pilhas: (1) a pilha de operandos (OperandStack), que é similar as pilhas de linguagens con- 3

4 vencionais como C e Pascal, sendo utilizada para armazenar resultados parciais de cálculos, parâmetros necessários à execução de uma ação ou ente e informações de retorno destas ações. É manipulada explicitamente através de comandos de load e store. Por exemplo, para somar dois números utiliza-se a instrução lsb (load symbol) para carregar o primeiro e o segundo número e, após isso, a instrução add, que irá retirar esses números, somá-los e colocar o resultado nesta mesma pilha; (2) a pilha de controle (ControlStack) que também é similar as pilhas de linguagens convencionais como C e Pascal, sendo utilizada apenas para controle interno de um fluxo de execução, armazenando informações como o endereço de retorno e as variáveis locais de uma ação. Não há instruções específicas para acessar esta pilha, ficando seu uso restrito à máquina virtual. É utilizada implicitamente através de instruções de manipulação de variáveis e de invocação e término de ações. Cada ente possui sua pilha de operandos e pilha de controle, criadas na clonagem deste ente e destruídas no momento de sua extinção. Como a HoloVM é uma máquina de pilha, o conceito de registradores, normalmente utilizados em máquinas reais, somente existem para uso interno. A História, o Comportamento e a Interface são implementados através de blackboards (figura 2). Qualquer invocação feita à eles resume-se a uma invocação implícita para um blackboard[23]. Essa idéia surgiu da similaridade existente entre eles. Com isso, ao fazer uma afirmação para a história está sendo inserido um fato nesta história; ao fazer uma afirmação para o comportamento está sendo inserida uma ação neste comportamento. Da mesma forma é possível retirar uma ação ou aguardar que seja criada. Em suma, características existentes nos blackboards estão implementadas e são utilizadas tanto para a invocação da história, do comportamento e da interface. Figura 2: Invocações implícitas a um blackboard Para a exploração da concorrência está sendo utilizado a multiprogramação leve (multithreading), de forma a obter vários fluxos de execução dentro de um mesmo processo. Estes fluxos de execução, ou threads, são considerados processos leves porque todos os recursos alocados a um processo são compartilhados por todas as suas threads (como a descrição de recursos, por exemplo), tornando-as menos onerosas ao sistema operacional[17]. Além disto, o multithreading permite a exploração imediata do paralelismo real das arquiteturas SMP. A unidade básica de execução (fluxo de execução) denomina-se BCE (ByteCodeExecutor), demonstrado na figura 3. Cada ente possui sua própria Pilha de Operandos, Pilha de Controle e três blackboards: História, Comportamento e Interface. O BCE, por definição, é uma thread de execução, e sempre está associado a um ente, utilizando deste seus blackboards e pilhas durante sua execução. Conforme pode ser visto na figura 4, o BCE auxilia na exploração da concorrência inter-entes (entes concorrentes) e intra-entes (ações concorrentes). Os blackboards foram omitidos para simplificar a figura. Sempre que um ente é criado, um BCE é designado para executá-lo, possibilitando assim a exploração de entes concorrentes. As ações, quando invocadas de forma assíncrona, também são associadas a um BCE, possuindo seu próprio fluxo de execução e possibilitando a exploração de ações concorrentes. A diferença entre entes e ações concorrentes é que as ações não possuem blackboards, mas compartilham os blackboards do ente ao qual pertencem. Cada ente, como citado acima, possui sua própria história, e também compartilha a história do ente que 4

5 Figura 3: Unidade básica de execução (BCE) Figura 4: Exploração da concorrência na HoloVM o criou (ente criador). Cada ente pode realizar invocações implícitas para essa história compartilhada ou explícitas para outros entes. Como é compartilhada por todos os entes que estejam no mesmo nível (figura 1c), torna-se um espaço tanto para troca de informações como forma de sincronia entre vários entes, possibilitando que as ações troquem informações através do seu uso e através de invocações explícitas. A figura 5 tem um exemplo em Hololinguagem que explora a concorrência existente na HoloVM. Neste exemplo, o ente principal holo clona dois entes (ente 1 e ente 2), executa seu processamento e depois aguarda o término destes entes antes de terminar sua execução. A figura 6 demonstra os fluxos de execução (BCEs) gerados por este exemplo. Após a clonagem do ente 1 e ente 2, ambos os entes (holo, ente 1 e ente 2) estão sendo executados concorrentemente. Após o término da sentença for, o ente holo fica aguardando que os entes clonados terminem, utilizando sua história (que é compartilhada por todos os entes que ele clonou) como forma de sincronia, aguardando que seja inserido o símbolo terminei com um argumento indicando qual ente terminou. Os entes clonados, após executarem sua tarefa, inserem na história externa (história do ente que o criou que, neste caso, é o ente holo) o símbolo terminei com um argumento contendo sua identificação. A figura 7 tem um exemplo em Hololinguagem que demonstra como é possível explorar o particionamento dinâmico[19, 24]. Várias unidades de execução compartilham tarefas à serem realizadas. Essas tarefas são os números à serem calculados e as unidades de execução calculam o fatorial destes números. Os BCEs não possuem um conjunto predeterminado de números à serem calculados. Ao invés disso, através de 5

6 holo() { holo() { // definição do ente principal clone(ente_concorrente(1), ente_1), // clonagem de ente_1 clone(ente_concorrente(2), ente_2), // clonagem de ente_2 for X := 1 to 5 do { writeln( Ente d_holo esta na iteracao, X ) history#terminei(#id), writeln( Ente, Id, terminou... ), // perguntas destrutivas history#terminei(#id), writeln( Ente, Id, terminou... ) // para a história ente_concorrente() { ente_concorrente(id) { for X := 1 to 20 do { writeln( Ente, Id, esta na iteracao, X) out(history)!terminei(id) // definição do ente_concorrente // afirmação para a história externa Figura 5: Exploração da concorrência na Hololinguagem Figura 6: BCEs criados pelo programa da figura 5 uma pergunta destrutiva não-bloqueante, tentam retirar um número da história. Se conseguirem (existem números a serem calculados ainda) eles executam o cálculo sobre este número, colocam o resultado na história e tentam retirar outro número. Se não existir mais números para serem calculados, terminam sua execução. A HoloVM utiliza algumas áreas de dados durante a execução do bytecode. Algumas são criadas na sua inicialização e destruídas somente quando termina enquanto que outras estão associadas a um ente, sendo criadas quando este ente é criado e destruídas quando este ente é extinto. Existem três áreas distintas: (1) entes estáticos, que é uma imagem dos entes contidos em um arquivo hvm. É similar a área de armazenamento para código compilado de uma linguagem convencional, ou similar ao segmento texto de um processo UNIX[18]; (2) entes dinâmicos, que é responsável por armazenar a imagem dos entes em execução. Durante a criação de um ente, é criada uma entrada nesta área idêntica a sua imagem estática (armazenada na área de entes estáticos). Durante a execução, esta área pode sofrer mudanças como inserção, remoção ou alteração em suas ações; (3) Constant Pool (tabela de constantes), que é uma imagem estática da constant pool contida no arquivo hvm. Esta área é compartilhada por todos os entes em execução, sendo similar à tabela de símbolos de um compilador tradicional[4, 18]. Nesta área são armazenados constantes necessárias na descrição dos entes e na execução das instruções, contendo o tipo, o tamanho e a informação armazenada. Sempre que uma ação é invocada, é criada na pilha de controle uma entrada (frame) para armazenar suas 6

7 holo() { // definição do ente holo holo() { for X := 1 to 4 do { clone(calc_fat(x), null) // clonagem de entes sem identificá-los for X := 1 to 20 do { history#fat_result(#being,#value,#result), // pergunta destrutiva para a história writeln( Ente, Being, calculou o fatorial de, Value, :, Result) // exibe o resultado history { // fatos históricos fat(10). fat(5). fat(7). fat(2). fat(3). fat(2). fat(1). fat(9). fat(8). fat(5). fat(4). fat(8). fat(1). fat(5). fat(6). fat(10). fat(4). fat(8). fat(4). fat(7). calc_fat() { // definição do ente calc_fat calc_fat(id) { while(out(history)?#fat(#value)) do { // pergunta destrutiva não-bloqueante para a história fat(id, Value) // invoca a ação fat fat(id, Value) { // calcula o fatorial de um número Aux := Value, Result := 1, while(aux > 1) do { Result := Result * Aux, Aux := Aux - 1 out(history)!fat_result(id, Value, Result) // insere na história externa o resultado Figura 7: Cálculo do fatorial de 20 números com entes concorrentes variáveis (escopo local). Este frame é visível apenas para a ação que o criou [22]. No término da execução desta ação, este frame é retirado da pilha de controle e as variáveis destruídas. É possível inserir e remover ações de um ente durante sua execução. A figura 8 demonstra um programa Holo que utiliza este recurso. holo() { // definição do ente holo holo() { clone(ente,null), // clona um ente sem identificação (null) acao(), // invoca a ação acao sem argumentos acao(a), // invoca a ação acao com um argumento acao(a,b) // invoca a ação acao com dois argumentos ente() { // definição do ente ente ente() { out(behavior)!acao/0, // insere a ação acao/0 no comportamento do ente externo out(behavior)!acao/1, // insere a ação acao/1 no comportamento do ente externo out(behavior)!acao/2 // insere a ação acao/2 no comportamento do ente externo acao() { // acao/0 writeln( Em acao/0. Nenhum argumento. ) acao(vlr1) { // acao/1 writeln( Em acao/1. Argumento 1:,Vlr1) acao(vlr1,vlr2) { // acao/2 writeln( Em acao/2. Argumento 1:,Vlr1, Argumento 2:,Vlr2) Figura 8: Insere ações durante a execução A HoloVM possui 54 instruções. Uma instrução consiste em um opcode especificando a operação à ser executada, seguida de zero ou mais operandos, informando argumentos ou dados que serão utilizados na operação. Algumas instruções não possuem operandos e consistem apenas do opcode. O número dos operandos é determinado pelo opcode. Existem dois tipos de operandos: (1) gerados em tempo de compilação, que são embutidos nas instruções; (2) calculados em tempo de execução, que são colocados 7

8 na pilha de operandos. Mesmo tendo duas áreas para serem trabalhadas, estes operandos representam a mesma informação: valores para serem utilizados durante a execução. Essa metodologia gera flexibilidade e garante um código compilado mais compacto[14, 15]. A figura 9a mostra um trecho de código na linguagem Holo. Este código calcula uma expressão matemática, armazena o resultado na variável X, e logo após exibe o conteúdo desta variável. Na figura 9b encontra-se a tradução para bytecode Holo; por sua vez, a figura 9c mostra o estado da pilha de operandos após a execução de cada instrução. Figura 9: Exemplo de tradução de holo para bytecode As instruções estão divididas em 9 categorias: (1) ações específicas da Hololinguagem: são instruções que executam ações predefinidas da linguagem holo; (2) controle da pilha de operandos: são instruções de load e store. Transferem valores entre as variáveis locais, pilha de operandos e ações da Hololinguagem; (3) controle do fluxo de execução: são instruções, condicionais ou incondicionais, que forçam um desvio no fluxo normal de execução; (4) operações aritméticas: são instruções que calculam um resultado que é tipicamente uma função de dois valores na pilha de operandos, colocando o resultado de volta na pilha de operandos; (5) operações lógicas: são instruções que executam operações lógicas sobre informações contidas na pilha de operandos. Após a execução, cada operação armazena o resultado na pilha de operandos; (6) operações booleanas: são instruções que executam operações booleanas sobre informações contidas na pilha de operandos. Após a execução, cada operação armazena o resultado na pilha de operandos; (7) interação com blackboards: são instruções que interagem com os blackboards; (8) mobilidade: nesta categoria existe apenas uma instrução que executa a movimentação de um ente; (9) concorrência: são instruções que implicitamente criam um novo fluxo de execução (BCE) a partir de uma descrição estática. As figuras 10 e 11 demonstram, respectivamente, um exemplo em Hololinguagem e Holoassembly que exibem os números de 1 até 100. holo() { // definição do ente holo holo() { for X := 1 to 100 do { // for variando X de 1 até 100 writeln( X=, X) // exibe o valor de X Figura 10: Programa Holo que exibe os números de 1 até Implementação da HoloVM Foi construído um protótipo da HoloVM para validar esta especificação, desenvolvido na Linguagem C++ e testado no ambiente Linux com o compilador GCC versão As bibliotecas de código necessárias 8

9 holo // definicao do ente holo holo() lsb_1 // carrega o símbolo 1 na pilha sv X // armazena na variável X :for_test lv X // carrega o valor da variável X lsb 100 // carrega o símbolo 100 le // compara os dois símbolos da pilha (less or equal) ifnot for_end // se verdadeiro salta para o label for_end lv X // carrega o valor da variável X wr // exibe o valor wrln // salto de linha (line feed) lv X // carrega o valor da variável X na pilha inc // incrementa sv X // armazena o valor na variável X goto for_test // salta para o label for_test :for_end end end Figura 11: Programa em Holoassembly que exibe os números de 1 até 100 como acesso a blackboards, concorrência e mobilidade foram desenvolvidas. Para auxiliar na validação e testes deste protótipo, houve a necessidade de outras três ferramentas (figura 12): (1) o Holoassembly, a linguagem de máquina da HoloVM; (2) o HoloASM, um montador assembly que traduz programas em Holoassembly para bytecode Holo; (3) o HoloC, um compilador para Hololinguagem que traduz programas Holo para Holoassembly. Figura 12: Ambiente para execução de programas Na figura 13 pode ser vista a execução do programa que calcula o fatorial de 20 números com entes concorrentes (demonstrado na figura 7). Foram realizados testes para medir o desempenho entre a HoloVM e a JVM, verificando pontos positivos e negativos. O ambiente de teste utilizado é demonstrado na Tabela 1. Uma descrição sucinta dos programas escritos em Hololinguagem é apresentada a seguir: hello world: exemplo clássico que exibe a mensagem Hello world!!! e termina sua execução. performance: simula uma mineração usando três minas e um mineiro. O usuário determina quantas operações de mineração serão realizadas em cada mina. travel: simula uma viagem por dois estados brasileiros, visitando cinco municípios. Os estados e municípios são modelados como entes. Exemplifica a composição, mobilidade e o uso de ações predefinidas para obtenção de informações de entes (whereami, whoami e howmany). 9

10 Figura 13: Screenshot da execução do fatorial com entes concorrentes Tabela 1: Ambiente de teste utilizado Sistema operacional Red Hat Linux, vers ão 7.3 Kernel Processador (1) Pentium IV 1.6 Memória RAM 256 MB Compilador C++ GCC 2.96 Compilador Java J2SDK semaphores: suporta o gerenciamento de semáforos. Diversos entes concorrem por um recurso compartilhado usando semáforos para controle da exclusão mútua. O número de entes concorrentes é determinado pelo usuário. philosophers: implementa o clássico programa concorrente Jantar de Filósofos. Os filósofos são implementados como entes. datamining: simula uma mineração usando três minas e um mineiro. buffers: suporta o gerenciamento de buffers. Diversos produtores e consumidores podem acessar de forma concorrente o buffer. Os produtores e consumidores são entes e o sincronismo é realizado pela história que implementa o buffer. O número de produtores e consumidores é determinado pelo usuário. fibo: implementa o cálculo de Fibonacci recursivo. infobeing: demonstra o uso de ações predefinidas da Hololinguagem como howmany, whereami e whoami. interativo: testa o desempenho em um laço for. A quantidade de interações é definida pelo usuário. A cada iteração, o programa exibe uma mensagem avisando a interação atual. calculo intensivo: como o exemplo anterior, também testa o desempenho em um laço for, porém somente exibe uma mensagem no término da execução. O usuário define o número de interações. Para comparar o desempenho entre a HoloVM e a JVM foram realizados testes utilizando-se respectivamente os compiladores HoloC (versão 0.1.0) e HoloJava (versão 1.0). A Tabela 2 apresenta o tempo de execução (em segundos) de cada teste realizado. Analisando-se estas medidas, chegou-se as seguintes conclusões: (1) o desempenho da HoloVM está diretamente relacionado aos recursos que cada exemplo utilizou; (2) o ganho em relação à JVM está relacionado, em alguns casos, ao baixo tempo de inicialização da HoloVM se comparando ao tempo de inicialização da JVM. A JVM realiza verificações no bytecode à ser executado durante a sua inicialização e, quando possível, realiza otimizações neste bytecode. Este protótipo não está realizando verificações ou otimizações na inicialização, o que justificaria o baixo tempo de inicialização; (3) perdas significativas em relação à 10

11 Tabela 2: Tempo de execução dos testes realizados Tempo de Tempo médio 100 execuções de 1 execução Programa Parâmetros HoloVM JVM HoloVM JVM Desempenho hello world performance travel semaphores philosophers dataminig buffers buffers fibo infobeing interativo calculo intensivo JVM estão relacionadas aos programas que fazem uso intensivo de sincronismo ou blackboards. Nestes casos se enquadram os programas que fazem uso intensivo da história para sincronia (como em buffers e semaphores) e os que fazem uso intensivo do comportamento (ações recursivas em fibo, por exemplo); (4) o compilador e o montador holo não estão realizando nenhum tipo de otimização, o que torna este bytecode menos eficiente. Já o compilador Java realiza otimizações durante a geração do bytecode e durante a carga deste arquivo na inicialização da JVM, o que aumenta a eficiência deste bytecode; (5) em programas com baixo grau de paralelismo, a HoloVM mostrou-se menos eficiente. Porém, em programas com alto grau de paralelismo, a HoloVM mostrou-se mais eficiente; (6) a JVM, por não ter a capacidade de inserir e remover ações (métodos) durante sua execução, consegue realizar otimizações que não são possíveis na HoloVM. A JVM verifica a existência de um método apenas uma vez, enquanto que, na HoloVM, as ações são verificadas sempre que são invocadas; (7) a HoloVM realiza verificação dinâmica de tipos durante a execução do bytecode enquanto que, na JVM, essa tarefa é realiza estaticamente pelo compilador. Esta característica torna o bytecode Java mais eficiente. 5. Conclusão Este trabalho propõs a especificação de uma máquina virtual com suporte à concorrência, mobilidade e blackboards, validando esta especificação com a implementação de protótipos para a HoloVM, para o HoloASM e para o HoloC. Destacam-se como principais conclusões deste trabalho: (1) uma máquina de pilha mostrou-se uma forma eficaz de obter-se uma máquina virtual de fácil implementação; (2) comparando com uma máquina com registradores, uma máquina de pilha simplifica a implementação da HoloVM, do HoloC e do HoloASM em alguns aspectos. Isso se deve ao fato de operandos e argumentos serem passados através da pilha de operandos. Porém, otimizações como o uso dos registradores para passagem de argumentos requerem, no caso de uma máquina de pilha, otimizações em tempo de execução[14, 15]; (3) inserção e remoção de ações durante a execução aumenta a flexibilidade da máquina virtual mas diminui o desempenho; (4) uma máquina virtual dinamicamente tipada é mais flexível que uma máquina virtual estaticamente tipada, porém menos eficiente; (5) a HoloVM necessita de modificações para aumentar seu desempenho. Destacam-se os seguintes resultados: (1) núcleo executivo para execução de programas; (2) exploração de conceitos ainda não explorados do Holoparadigma; (3) difundir o uso do gerador de parsers YAPG[16], que foi criado para auxiliar o desenvolvimento do HoloC e do HoloASM; (4) difundir a cultura do software livre, uma vez que todo trabalho aqui realizado é desenvolvido considerando questões ligadas ao desenvolvimento de software livre; Como trabalhos futuros, pode-se citar: (1) especificação e desenvolvimento da DHolo, que proporcionará suporte para a execução de programas em ambiente distribuído; (2) implementação de um simulador para 11

12 a HoloVM; (3) implementação de um debugador para facilitar a busca por erros em programas escritos em Hololinguagem e Holoassembly; (4) suporte ao paradigma lógico e funcional; (5) otimizações no código assembly gerado pelo HoloC; (6) otimizações no protótipo e na especificação da HoloVM. O projeto HoloVM está sendo desenvolvido no contexto criado pelos projetos Opera[3], Appelo[1] e Holoparadigma[2]. Para maiores informações acesse os sites holo e Referências [1] APPELO - Ambiente de Programação Paralela em Lógica [2] Holoparadigma: Software multiparadigma distribuído. holo, [3] OPERA - Prolog Paralelo [4] A. V. Aho, R. Sethi, and J. D. Ullman. Compilers : principles, techniques, and tools. Addison Wesley, [5] G. R. Andrews. Paradigms for process interaction in distributed programs. ACM Computing Surveys, 23(1):49 90, march [6] H. Aït-kaci. Warren s Abstract Machine - A Tutorial Reconstruction. MIT Press, [7] H. E. Bal, G. Jennifer, and A. S. Tanenbaum. Programming languages for distributed computing systems. ACM Computing Surveys, 21(3): , september [8] J. L. V. Barbosa. Holoparadigma: Um Modelo Multiparadigma Orientado ao Desenvolvimento de Software Distribuído. PhD thesis, Universidade Federal do Rio Grande do Sul (UFRGS), Porto Alegre, [9] J. L. V. Barbosa, A. D. Bois, A. Pavan, and C. F. R. Geyer. HoloJava: Translating a distributed multiparadigm language into java. Conferḙncia Latinoamericana de Informática, September [10] J. L. V. Barbosa and C. F. R. Geyer. Princípios do holoparadigma. AST, [11] J. L. V. Barbosa and C. F. R. Geyer. Um modelo multiparadigma para desenvolvimento de software paralelo e distribuído. Workshop Conputação de Alto Desempnho (WSCAD), January [12] J. L. V. Barbosa and C. F. R. Geyer. Uma linguagem multiparadigma orientada ao desenvolvimento de software distribuído. Simpósio Brasileiro de Linguagens de Programação (SBLP 2001), [13] J. L. V. Barbosa, A. C. Yamin, P. K. Vargas, I. Augustin, and C. F. R. Geyer. Holoparadigm: a multiparadigm model oriented to development of distributed systems. International Conference on Parallel and Distributed Systems (ICPADS), [14] M. A. Ertl. Stack caching for interpreters. SIGPLAN 95, [15] M. A. Ertl. Implementation of Stack-Based languagens on Register Machines. PhD thesis, Technische Universitãt Wien, Austria, [16] A. S. Garzão. YAPG: Yet Another Parser Generator [17] A. S. Garzão, L. C. V. Real, and G. G. H. Cavalheiro. Ferramentas para desenvolvimento de um ambiente de programação sobre agregados. Workshop Software Livre (WSL), Maio [18] T. Lindholm and F. Yellin. The Java Virtual Machine specification. Addison Wesley, [19] P. O. A. Navaux, M. E. Barreto, R. B. Ávila, and F. A. D. de Oliveira. Execução de aplicações em ambientes concorrentes. ERAD, pages , [20] A. Pettorossi and M. Proietti. Rules and strategies for transforming functional and logic programs. ACM Computing Surveys, 28(2): , march [21] P. V. Roy. Mobile objects in Distributed Oz. ACM Transactions on Programming Languages and Systems, September [22] R. W. Sebesta. Concepts of Programming Languages. Addison Wesley, [23] S. Vraned and M. Stanojevic. Integrating multiple paradigms within the blackboard framework. IEEE Transactions on Software Engineering, March [24] A. C. Yamin. Escalonamento em sistemas paralelos e distribuídos. ERAD, pages ,

Introdução a Threads Java

Introdução a Threads Java Introdução a Threads Java Prof. Gerson Geraldo Homrich Cavalheiro Universidade Federal de Pelotas Departamento de Informática Instituto de Física e Matemática Pelotas RS Brasil http://gersonc.anahy.org

Leia mais

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 6 - ALGORÍTIMOS PARALELOS MPI - Parallel Virtual Machine e PVM - Parallel Virtual Machine 1. INTRODUÇÃO Inicialmente é necessário conceber alguns conceitos para entendimento dos algoritmos paralelos:

Leia mais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais Notas da Aula 4 - Fundamentos de Sistemas Operacionais 1. Threads Threads são linhas de execução dentro de um processo. Quando um processo é criado, ele tem uma única linha de execução, ou thread. Esta

Leia mais

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010 Construção de Compiladores Prof. Raimundo Santos Moura (http://www.ufpi.br/rsm) Construção de Compiladores Livro-Texto: AHO, Alfred V.; ULLMAN, Jeffrey D.; SETHI, R. Compiladores: princípios, técnicas

Leia mais

Remote Procedure Call. Programação distribuída e paralela (C. Geyer) RPC 1

Remote Procedure Call. Programação distribuída e paralela (C. Geyer) RPC 1 Remote Procedure Call Programação distribuída e paralela (C. Geyer) RPC 1 Autoria Autores C. Geyer Local II-UFRGS Versão V11.4 2014-2 Disciplinas SOII Programação distribuída e paralela (C. Geyer) RPC

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

Programação distribuída e paralela (C. Geyer) RPC 1

Programação distribuída e paralela (C. Geyer) RPC 1 Programação distribuída e paralela (C. Geyer) RPC 1 Autores C. Geyer Local II-UFRGS Versão v6 2008-2 Disciplinas SOII Programação distribuída e paralela (C. Geyer) RPC 2 Bibliografia base original dos

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Processos I: Threads, virtualização e comunicação via protocolos Prof. MSc. Hugo Souza Nesta primeira parte sobre os Processos Distribuídos iremos abordar: Processos e a comunicação

Leia mais

Sistemas Operacionais I Parte III Estrutura dos SOs. Prof. Gregorio Perez gregorio@uninove.br 2007. Roteiro. Componentes do Sistema

Sistemas Operacionais I Parte III Estrutura dos SOs. Prof. Gregorio Perez gregorio@uninove.br 2007. Roteiro. Componentes do Sistema Sistemas Operacionais I Parte III Estrutura dos SOs Prof. Gregorio Perez gregorio@uninove.br 2007 Roteiro Serviços Estrutura dos Sistemas Operacionais Funções do Sistema Operacional Chamadas do Sistema

Leia mais

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO Geração de código Ivan Ricarte 2008 Sumário Geração de código intermediário Código de três endereços Notação pós-fixa Otimização de código Heurísticas de otimização Geração de código em linguagem simbólica

Leia mais

Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron alexandre.a.giron@gmail.com

Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron alexandre.a.giron@gmail.com Sistemas Operacionais 2014 Introdução Alexandre Augusto Giron alexandre.a.giron@gmail.com Roteiro Sistemas Operacionais Histórico Estrutura de SO Principais Funções do SO Interrupções Chamadas de Sistema

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

UFRPE Prof. Gustavo Callou gcallou@gmail.com

UFRPE Prof. Gustavo Callou gcallou@gmail.com UFRPE Prof. Gustavo Callou gcallou@gmail.com 1 Algoritmos Representação Exercícios Linguagens de Programação Compilador Interpretador Ambiente de Desenvolvimento Python Característica Para que serve Onde

Leia mais

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 06: Threads Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Objetivos Introduzir o conceito de thread Discutir as APIs das bibliotecas de threads Pthreads, Win32

Leia mais

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas) ENIAC Introdução aos Computadores e à ção (Noções Básicas) Introdução aos Computadores e à ção (Noções Básicas) 1 Introdução aos Computadores e à ção (Noções Básicas) 2 O transistor foi inventado em 1947

Leia mais

Software Básico (INF1018)

Software Básico (INF1018) Software Básico (INF1018) http://www.inf.puc-rio.br/~inf1018 Noemi Rodriguez (noemi@inf.puc-rio.br) Ana Lúcia de Moura (amoura@inf.puc-rio.br) 1 Objetivo do curso Entender como funciona um computador típico,

Leia mais

Programação Concorrente Processos e Threads

Programação Concorrente Processos e Threads Programação Concorrente Processos e Threads Prof. Eduardo Alchieri Processos O conceito mais central em qualquer sistema operacional é o processo Uma abstração de um programa em execução Um programa por

Leia mais

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi 5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem

Leia mais

- Aula 1 - ARQUITETURA DE COMPUTADORES

- Aula 1 - ARQUITETURA DE COMPUTADORES - Aula 1 - ARQUITETURA DE COMPUTADORES Em arquitetura de computadores serão estudados aspectos da estrutura e do funcionamento dos computadores. O objetivo é apresentar de forma clara e abrangente a natureza

Leia mais

UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA CURSO DE ANÁLISE DE SISTEMAS E CIÊNCIA DA COMPUTAÇÃO

UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA CURSO DE ANÁLISE DE SISTEMAS E CIÊNCIA DA COMPUTAÇÃO UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA CURSO DE ANÁLISE DE SISTEMAS E CIÊNCIA DA COMPUTAÇÃO Automação Hospitalar aplicando a Computação Móvel com a utilização do Holoparadigma por Eduardo

Leia mais

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura UFPI CCN DIE Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura O projeto Desenvolver um compilador de um subconjunto básico da linguagem PORTUGOL.

Leia mais

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES 1 BRANCO; Guido Aparecido Junior, 2 TAMAE, Rodrigo Yoshio 1-Discente do Curso Sistemas de Informação FAEG/Garça 2-Docente do Curso Sistemas

Leia mais

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Prof. Bruno Vilela Oliveira bruno@cca.ufes.br http://www.brunovilela.webnode.com.br Programas e Linguagens Para executar uma tarefa

Leia mais

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação III Aula 02 Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação Técnica de comunicação padronizada para enviar instruções a um computador. Assim

Leia mais

ARQUITETURA DE COMPUTADORES - 1866

ARQUITETURA DE COMPUTADORES - 1866 7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4

Leia mais

Figura 01 Kernel de um Sistema Operacional

Figura 01 Kernel de um Sistema Operacional 01 INTRODUÇÃO 1.5 ESTRUTURA DOS SISTEMAS OPERACIONAIS O Sistema Operacional é formado por um Conjunto de rotinas (denominado de núcleo do sistema ou kernel) que oferece serviços aos usuários e suas aplicações

Leia mais

Arquitetura de Sistemas Operacionais Machado/Maia. Arquitetura de Sistemas

Arquitetura de Sistemas Operacionais Machado/Maia. Arquitetura de Sistemas Arquitetura de Sistemas Operacionais Capítulo 4 Estrutura do Sistema Operacional Cap. 4 Estrutura do Sistema 1 Sistemas Operacionais Pitágoras Fadom Divinópolis Material Utilizado na disciplina Sistemas

Leia mais

Arquitectura de Computadores II. Máquinas Virtuais

Arquitectura de Computadores II. Máquinas Virtuais Arquitectura de Computadores II 3º Ano Máquinas Virtuais João Luís Ferreira Sobral Departamento do Informática Universidade do Minho Março 2003 Máquinas Virtuais Questões que levaram à introdução de máquinas

Leia mais

3. PARADIGMA ORIENTADO A OBJETOS

3. PARADIGMA ORIENTADO A OBJETOS Paradigmas de Linguagens I 1 3. PARADIGMA ORIENTADO A OBJETOS Este paradigma é o que mais reflete os problemas atuais. Linguagens orientada a objetos (OO) são projetadas para implementar diretamente a

Leia mais

Sistemas Operacionais

Sistemas Operacionais UNIVERSIDADE BANDEIRANTE DE SÃO PAULO INSTITUTO POLITÉCNICO CURSO DE SISTEMAS DE INFORMAÇÃO Sistemas Operacionais Notas de Aulas: Tópicos 7 e 8 Estrutura do Sistema Operacional São Paulo 2009 1 Sumário

Leia mais

Capítulo 8 Arquitetura de Computadores Paralelos

Capítulo 8 Arquitetura de Computadores Paralelos Capítulo 8 Arquitetura de Computadores Paralelos Necessidade de máquinas com alta capacidade de computação Aumento do clock => alta dissipação de calor Velocidade limitada dos circuitos => velocidade da

Leia mais

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN SISTEMAS OPERACIONAIS Apostila 03 Estrutura do Sistema Operacional UNIBAN 1.0 O Sistema Operacional como uma Máquina Virtual A arquitetura (conjunto de instruções, organização de memória, E/S e estrutura

Leia mais

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - Linguagem de Programação II. Um pouco sobre Java FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 6 Estrutura de Sistemas Operacionais Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerência de processos Controle e descrição de processos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Representação e controle de processos pelo SO Estrutura

Leia mais

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2 Estrutura de Repetição. Ex. 2 A ESTRUTURA Enquanto faça{} É MELHOR UTILIZADA PARA SITUAÇÕES ONDE O TESTE DE CONDIÇÃO (V OU F) PRECISA SER VERIFICADO NO INÍCIO DA ESTRUTURA DE REPETIÇÃO.

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores INTRODUÇÃO AOS ALGORITMOS E À PROGRAMAÇÃO DE COMPUTADORES PARTE 1 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Programas e Programação

Leia mais

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto Conceitos de Linguagens de Roteiro: Apresentação do plano de ensino; Apresentação do plano de

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Introdução ao Paradigma OO

Leia mais

Interpretação e Compilação de Linguagens de Programação

Interpretação e Compilação de Linguagens de Programação Interpretação e Compilação de Linguagens de Programação 28 de Fevereiro de 2013 Esta unidade curricular pretende transmitir ao longo de um semestre as noções fundamentais sobre o desenho e implementação

Leia mais

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X Índice Traduzindo e iniciando uma aplicação Compiladores Assembladores Linkers Loaders DLLs Iniciando um programa em Java Após toda a matéria abordada nesta

Leia mais

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes Introdução Hardware X Software Corpo Humano Parte Física Componentes 18 Capacidade de utilizar o corpo em atividades especificas explorando seus componentes Hardware Introdução Parte física: placas, periféricos,

Leia mais

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador Sistemas de Informação Prof. Anderson D. Moura Um programa de computador é composto por uma seqüência de instruções, que é interpretada e executada por um processador ou por uma máquina virtual. Em um

Leia mais

Computação Concorrente (MAB-117) Monitores

Computação Concorrente (MAB-117) Monitores Computação Concorrente (MAB-117) Monitores Prof. Silvana Rossetto 1 Departamento de Ciência da Computação (DCC) Instituto de Matemática (IM) Universidade Federal do Rio de Janeiro (UFRJ) Maio de 2012 1.

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA MODELAGEM DE UMA PLATAFORMA VIRTUAL PARA SISTEMAS EMBUTIDOS BASEADA EM POWERPC

UNIVERSIDADE FEDERAL DE SANTA CATARINA MODELAGEM DE UMA PLATAFORMA VIRTUAL PARA SISTEMAS EMBUTIDOS BASEADA EM POWERPC UNIVERSIDADE FEDERAL DE SANTA CATARINA DANIEL CARLOS CASAROTTO JOSE OTÁVIO CARLOMAGNO FILHO MODELAGEM DE UMA PLATAFORMA VIRTUAL PARA SISTEMAS EMBUTIDOS BASEADA EM POWERPC Florianópolis, 2004 DANIEL CARLOS

Leia mais

Breve Histórico & Conceitos Básicos

Breve Histórico & Conceitos Básicos Breve Histórico & Conceitos Básicos compiladores interpretadores montadores filtros pré-processadores carregadores linkers compilador cruzado (cross-compiler) auto-compilável (bootstraping) auto-residente

Leia mais

Processos e Threads (partes I e II)

Processos e Threads (partes I e II) Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa

Leia mais

O objetivo desta prática é ensinar como usar a máquina chamada computador visível ou vc0, um simulador de computador de von Neumann escrito em Java.

O objetivo desta prática é ensinar como usar a máquina chamada computador visível ou vc0, um simulador de computador de von Neumann escrito em Java. Departamento de Ciência da Computação Universidade de Brasília Computação Básica - 2004.1 Roteiro de Laboratório #1 Usando o Computador Visível Professor Jorge Henrique Cabral Fernandes 0. Objetivo O objetivo

Leia mais

Edeyson Andrade Gomes

Edeyson Andrade Gomes Sistemas Operacionais Conceitos de Arquitetura Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Máquinas de Níveis Revisão de Conceitos de Arquitetura 2 Máquina de Níveis Máquina de níveis Computador

Leia mais

Introdução à Ciência da Computação

Introdução à Ciência da Computação Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Introdução à Ciência da Computação Aula 05 Rogério Eduardo Garcia (rogerio@fct.unesp.br)

Leia mais

Introdução à Arquitetura de Computadores

Introdução à Arquitetura de Computadores 1 Introdução à Arquitetura de Computadores Hardware e software Organização de um computador: Processador: registradores, ALU, unidade de controle Memórias Dispositivos de E/S Barramentos Linguagens de

Leia mais

Capítulo 2 Processos e Threads Prof. Fernando Freitas

Capítulo 2 Processos e Threads Prof. Fernando Freitas slide 1 Capítulo 2 Processos e Threads Prof. Fernando Freitas Material adaptado de: TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 3ª edição. Disponível em: http://www.prenhall.com/tanenbaum_br slide

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquiteturas RISC. (Reduced Instructions Set Computers) Arquiteturas RISC (Reduced Instructions Set Computers) 1 INOVAÇÕES DESDE O SURGIMENTO DO COMPU- TADOR DE PROGRAMA ARMAZENADO (1950)! O conceito de família: desacoplamento da arquitetura de uma máquina

Leia mais

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann Universidade Federal de Santa Maria NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann O modelo (ou arquitetura) de von

Leia mais

Projeto de Sistemas de Tempo Real

Projeto de Sistemas de Tempo Real Projeto de Sistemas de Tempo Real Centro de Informática - Universidade Federal de Pernambuco Engenharia da Computação Kiev Gama kiev@cin.ufpe.br Slides elaborados pelo professor Marcio Cornélio O autor

Leia mais

Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software. Prof. MSc.

Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software. Prof. MSc. Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software Prof. MSc. Hugo Souza Continuando nossas aulas relativas ao Módulo 1, veremos a seguir

Leia mais

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador. O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador. Linguagem de Programação Uma linguagem de programação é um método padronizado para expressar

Leia mais

Paradigmas e Histórico de

Paradigmas e Histórico de Paradigmas e Histórico de Linguagens de Programação Linguagens de Programação Departamento de Computação Universidade Federal de Sergipe Influências sobre o projeto de linguagens Arquitetura do computador

Leia mais

Capítulo 2. Charm++ 16

Capítulo 2. Charm++ 16 2 Charm++ O Charm++ é uma linguagem orientada a objetos para programação paralela baseada em C++ (34). Ela possui uma biblioteca de execução para suporte a computação paralela que se chama Kernel do Charm

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais SINCRONIZAÇÃO E COMUNICAÇÃO ENTRE PROCESSOS MACHADO/MAIA: CAPÍTULO 07, PÁGINA 101 Prof. Pedro Luís Antonelli Anhanguera Educacional sistemas multiprogramáveis Os sistemas multiprogramáveis

Leia mais

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de:

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de: i Sumário 1 Introdução 1 1.1 Linguagens....................................... 1 1.2 O que é um Compilador?................................ 2 1.3 Processadores de Programas: Compiladores, Interpretadores

Leia mais

Exemplos práticos do uso de RMI em sistemas distribuídos

Exemplos práticos do uso de RMI em sistemas distribuídos Exemplos práticos do uso de RMI em sistemas distribuídos Elder de Macedo Rodrigues, Guilherme Montez Guindani, Leonardo Albernaz Amaral 1 Fábio Delamare 2 Pontifícia Universidade Católica do Rio Grande

Leia mais

Software Básico. nível de linguagem de montagem (assembly) Tanembaum, capítulo 7

Software Básico. nível de linguagem de montagem (assembly) Tanembaum, capítulo 7 Software Básico nível de linguagem de montagem (assembly) Tanembaum, capítulo 7 Linguagem de montagem (Assembly) Abstração simbólica da linguagem de máquina Traduzida pelo programa assembler Mapeada diretamente

Leia mais

ARQUITETURA DE COMPUTADORES

ARQUITETURA DE COMPUTADORES 01001111 01110010 01100111 01100001 01101110 01101001 01111010 01100001 11100111 11100011 01101111 00100000 01100100 01100101 00100000 01000011 01101111 01101101 01110000 01110101 01110100 01100001 01100100

Leia mais

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação Cursos de Computação Sistemas Operacionais Prof. M.Sc. Sérgio Teixeira Aula 05 Estrutura e arquitetura do SO Parte 2 Referência: MACHADO, F.B. ; MAIA, L.P. Arquitetura de Sistemas Operacionais. 4.ed. LTC,

Leia mais

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação Cursos de Computação Sistemas Operacionais Prof. M.Sc. Sérgio Teixeira Aula 05 Estrutura e arquitetura do SO Parte 1 Referência: MACHADO, F.B. ; MAIA, L.P. Arquitetura de Sistemas Operacionais. 4.ed. LTC,

Leia mais

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. 7.3.1.2 Registradores: São pequenas unidades de memória, implementadas na CPU, com as seguintes características:

Leia mais

Capítulo 8. Software de Sistema

Capítulo 8. Software de Sistema Capítulo 8 Software de Sistema Adaptado dos transparentes das autoras do livro The Essentials of Computer Organization and Architecture Objectivos Conhecer o ciclo de desenvolvimento da linguagem Java

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA http://www.lsd.deinf.ufma.br

Leia mais

Table 1. Dados do trabalho

Table 1. Dados do trabalho Título: Desenvolvimento de geradores de aplicação configuráveis por linguagens de padrões Aluno: Edison Kicho Shimabukuro Junior Orientador: Prof. Dr. Paulo Cesar Masiero Co-Orientadora: Prof a. Dr. Rosana

Leia mais

Introdução à Linguagem Java

Introdução à Linguagem Java Introdução à Linguagem Java Histórico: Início da década de 90. Pequeno grupo de projetos da Sun Microsystems, denominado Green. Criar uma nova geração de computadores portáveis, capazes de se comunicar

Leia mais

RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos

RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos Almir Joaquim de Sousa 1, Fábio Silveira Vidal 1, Fredson Vieira Costa 1, Ranildo Costa Santana 1 Curso de Bacharelado em Ciência da Computação

Leia mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 5 - O NÍVEL DA LINGUAGEM DE MONTAGEM 1. INTRODUÇÃO É relativamente fácil compreender os fundamentos da programação de computadores, sob o ponto de vista da inteligibilidade dos comandos de alto

Leia mais

Módulo 4: Processos. Conceito de Processo. Escalonamento de processos Operações sobre processos Processos cooperantes Comunicação entre processos

Módulo 4: Processos. Conceito de Processo. Escalonamento de processos Operações sobre processos Processos cooperantes Comunicação entre processos Módulo 4: Processos Conceito de Processo Escalonamento de processos Operações sobre processos Processos cooperantes Comunicação entre processos 4.1 Conceito de Processo Um Sistema Operacional executa uma

Leia mais

SISTEMAS OPERACIONAIS

SISTEMAS OPERACIONAIS SISTEMAS OPERACIONAIS Tópico 4 Estrutura do Sistema Operacional Prof. Rafael Gross prof.rafaelgross@fatec.sp.gov.br FUNÇÕES DO NUCLEO As principais funções do núcleo encontradas na maioria dos sistemas

Leia mais

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional Sistemas Operacionais Prof. Pedro Luís Antonelli Anhanguera Educacional INTRODUÇÃO Sistema Operacional (S.O.) Aplicativos Formado por um conjunto de rotinas que oferecem serviços aos usuários, às aplicações

Leia mais

Descrição Formal de Linguagens -Sumário - Descrição Formal de Linguagens. -Overview- -Overview- - Fundamentos das Linguagens de Programação -

Descrição Formal de Linguagens -Sumário - Descrição Formal de Linguagens. -Overview- -Overview- - Fundamentos das Linguagens de Programação - Descrição Formal de Linguagens Linguagens de Programação Ciência da Computação DIN UEM CTC Prof. Jucimar Aula 4 Descrição Formal de Linguagens -Sumário - 1. Fundamentos de Linguagens de Programação 2.

Leia mais

SO Sistemas Operacionais

SO Sistemas Operacionais GOVERNO DO ESTADO DO RIO DE JANEIRO FUNDAÇÃO DE APOIO A ESCOLA TÉCNICA ESCOLA TÉCNICA ESTADUAL REPÚBLICA SO Sistemas Operacionais Curso de Informática ETE REPÚBLICA - Rua Clarimundo de Melo, 847, Quintino

Leia mais

Introdução à Programação de Computadores

Introdução à Programação de Computadores 1. Objetivos Introdução à Programação de Computadores Nesta seção, vamos discutir os componentes básicos de um computador, tanto em relação a hardware como a software. Também veremos uma pequena introdução

Leia mais

SIS17 - Arquitetura de Computadores

SIS17 - Arquitetura de Computadores SIS17 - Arquitetura de Computadores Organização Básica B de Computadores (Parte I) Organização Básica B de Computadores Composição básica b de um Computador eletrônico digital Processador Memória Memória

Leia mais

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 03: Estruturas dos SOs Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com OBJETIVOS Descrever os serviços que um sistema operacional oferece aos usuários e outros sistemas

Leia mais

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2) Arquitectura de um computador Caracterizada por: Conjunto de instruções do processador (ISA Estrutura interna do processador (que registadores existem, etc Modelo de memória (dimensão endereçável, alcance

Leia mais

Paralelização de Simuladores de Hardware Descritos em SystemC

Paralelização de Simuladores de Hardware Descritos em SystemC Paralelização de Simuladores de Hardware Descritos em SystemC 18 de maio de 2011 Roteiro Motivação Introdução à SLDL SystemC O Escalonador SystemC Simulação Paralela baseada em Eventos Discretos Suporte

Leia mais

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar Componentes de um Computador (5) Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar Prof. João Paulo A. Almeida (jpalmeida@inf.ufes.br) 2007/01 - INF02597 Com slides de Roberta Lima Gomes

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

Software Pipeline. Sergio Ricardo Souza Leal de Queiroz. IC-Unicamp - RA: 107070 RESUMO 2. SOFTWARE PIPELINE, CONCEITOS 1.

Software Pipeline. Sergio Ricardo Souza Leal de Queiroz. IC-Unicamp - RA: 107070 RESUMO 2. SOFTWARE PIPELINE, CONCEITOS 1. RESUMO Software Pipeline Sergio Ricardo Souza Leal de Queiroz A partir do momento em que se constatou que a evolução dos computadores não estaria mais na velocidade do processador, e sim em projetar máquinas

Leia mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula extra A Máquina Virtual Java Prof. Márcio Delamaro delamaro@icmc.usp.br Como

Leia mais

4 Conversor EDTV Raw. 4.1 Arquitetura

4 Conversor EDTV Raw. 4.1 Arquitetura 4 Conversor EDTV Raw O conversor EDTV Raw é o programa que lê um documento escrito no perfil NCL EDTV e gera um documento Raw equivalente, i.e. que define a mesma apresentação. Este capítulo, apresenta

Leia mais

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis Ciência da Computação Arq. e Org. de Computadores Máquinas Multiníveis Prof. Sergio Ribeiro Computador digital máquina que resolve problemas executando uma série de instruções. Programa conjunto de instruções

Leia mais

Máquina Multinível. Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa.

Máquina Multinível. Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa. Máquina Multinível Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa. Uma instrução pode ser definida como um comando para o processador.

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução a Linguagens de Programação Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Leia mais

Organização e Arquitetura de Computadores I. de Computadores

Organização e Arquitetura de Computadores I. de Computadores Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de Computadores I Organização Básica B de Computadores

Leia mais