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 alexgarzao@bol.com.br, barbosa@exatas.unisinos.br 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 ,

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

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

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

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

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

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

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

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

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

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

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

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

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

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET 1 IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET Daniel da Silva Carla E. de Castro Franco Diogo Florenzano Avelino daniel.silva1@ext.mpsa.com

Leia mais

3. O NIVEL DA LINGUAGEM DE MONTAGEM

3. O NIVEL DA LINGUAGEM DE MONTAGEM 3. O NIVEL DA LINGUAGEM DE MONTAGEM Nas aulas anteriores tivemos a oportunidade de discutir dois diferentes níveis presentes na maioria dos computadores atuais. Nesta aula dedica-se a outro nível que também

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

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

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

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

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

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

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Professor: João Fábio de Oliveira jfabio@amprnet.org.br (41) 9911-3030 Objetivo: Apresentar o que são os Sistemas Operacionais, seu funcionamento, o que eles fazem,

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

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Modelo Cliente-Servidor: Introdução aos tipos de servidores e clientes Prof. MSc. Hugo Souza Iniciando o módulo 03 da primeira unidade, iremos abordar sobre o Modelo Cliente-Servidor

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

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

1.1. Organização de um Sistema Computacional

1.1. Organização de um Sistema Computacional 1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes

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

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

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

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

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA RESUMO Ricardo Della Libera Marzochi A introdução ao Service Component Architecture (SCA) diz respeito ao estudo dos principais fundamentos

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064 Sistemas Distribuídos Professora: Ana Paula Couto DCC 064 Processos- Clientes, Servidores, Migração Capítulo 3 Agenda Clientes Interfaces de usuário em rede Sistema X Window Software do lado cliente para

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

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

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

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA 1. INTRODUÇÃO O conceito de concorrência é o princípio básico para o projeto e a implementação dos sistemas operacionais multiprogramáveis. O sistemas multiprogramáveis

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 4 SUPORTE AO SISTEMA OPERACIONAL Prof. Luiz Gustavo A. Martins Sistema Operacional (S.O.) Programa responsável por: Gerenciar os recursos do computador. Controlar a execução

Leia mais

ENGENHARIA DE SOFTWARE I

ENGENHARIA DE SOFTWARE I ENGENHARIA DE SOFTWARE I Prof. Cássio Huggentobler de Costa [cassio.costa@ulbra.br] Twitter: www.twitter.com/cassiocosta_ Agenda da Aula (002) Metodologias de Desenvolvimento de Softwares Métodos Ágeis

Leia mais

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1. Universidade Federal de Santa Maria Curso de Arquivologia Disciplina de Banco de Dados Aplicados à Arquivística Prof. Andre Zanki Cordenonsi Versao 1.0 Março de 2008 Tópicos Abordados Conceitos sobre Banco

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

Curso Técnico em Redes

Curso Técnico em Redes Curso Técnico em Redes Prof. Airton Ribeiro - 2012 Histórico das Linguagens de Programação O que é? É um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas

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

3 SCS: Sistema de Componentes de Software

3 SCS: Sistema de Componentes de Software 3 SCS: Sistema de Componentes de Software O mecanismo para acompanhamento das chamadas remotas se baseia em informações coletadas durante a execução da aplicação. Para a coleta dessas informações é necessário

Leia mais

Geração de código intermediário. Novembro 2006

Geração de código intermediário. Novembro 2006 Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas

Leia mais

Arquitetura de Computadores. Sistemas Operacionais IV

Arquitetura de Computadores. Sistemas Operacionais IV Arquitetura de Computadores Sistemas Operacionais IV Introdução Multiprogramação implica em manter-se vários processos na memória. Memória necessita ser alocada de forma eficiente para permitir o máximo

Leia mais

Planejando o aplicativo

Planejando o aplicativo Um aplicativo do Visual FoxPro geralmente inclui um ou mais bancos de dados, um programa principal que configura o ambiente de sistema do aplicativo, além de uma interface com os usuários composta por

Leia mais

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 Estrutura do Sistema Operacional. 4.1 - Kernel 1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,

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

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

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

Virtualização de Sistemas Operacionais

Virtualização de Sistemas Operacionais Virtualização de Sistemas Operacionais Felipe Antonio de Sousa 1, Júlio César Pereira 1 1 Universidade Paranaense (Unipar) Paranavaí PR Brasil felipeantoniodesousa@gmail.com, juliocesarp@unipar.br Resumo.

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

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

Introdução aos Computadores

Introdução aos Computadores Os Computadores revolucionaram as formas de processamento de Informação pela sua capacidade de tratar grandes quantidades de dados em curto espaço de tempo. Nos anos 60-80 os computadores eram máquinas

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

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

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional Introdução à Linguagem JAVA Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação Laboratório de Visão Computacional Vantagens do Java Independência de plataforma; Sintaxe semelhante às linguagens

Leia mais

MC-102 Aula 01. Instituto de Computação Unicamp

MC-102 Aula 01. Instituto de Computação Unicamp MC-102 Aula 01 Introdução à Programação de Computadores Instituto de Computação Unicamp 2015 Roteiro 1 Por que aprender a programar? 2 Hardware e Software 3 Organização de um ambiente computacional 4 Algoritmos

Leia mais

Sistemas Operacionais. Conceitos de um Sistema Operacional

Sistemas Operacionais. Conceitos de um Sistema Operacional Sistemas Operacionais Conceitos de um Sistema Operacional Modo usuário e Modo Kernel Como já vimos são ambientes de execução diferentes no processador Há um conjunto de funções privilegiadas acessadas

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 07 Arquitetura de Sistemas Operacionais Prof. Maxwell Anderson www.maxwellanderson.com.br Introdução Conceitos já vistos em aulas anteriores: Definição de Sistemas Operacionais

Leia mais

Linguagem de Programação Introdução a Linguagem Java

Linguagem de Programação Introdução a Linguagem Java Linguagem de Programação Introdução a Linguagem Java Rafael Silva Guimarães Instituto Federal do Espírito Santo Campus Cachoeiro de Itapemirim Definição A linguagem Java foi desenvolvida pela Sun Microsystems,

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel Ambiente de Desenvolvimento Orientação a Objetos É uma técnica de desenvolvimento de softwares que consiste em representar os elementos do mundo

Leia mais

SIMULADOR DE ROTEAMENTO DE PACOTES (V. 3 20/05/2010)

SIMULADOR DE ROTEAMENTO DE PACOTES (V. 3 20/05/2010) SIMULADOR DE ROTEAMENTO DE PACOTES (V. 3 20/05/2010) OBJETIVO GERAL Este trabalho possui o objetivo de exercitar a lógica de programação dos alunos do Terceiro ano do Curso de BSI e também desenvolver

Leia mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários

Leia mais

DESENVOLVIMENTO WEB DENTRO DOS PARADIGMAS DO HTML5 E CSS3

DESENVOLVIMENTO WEB DENTRO DOS PARADIGMAS DO HTML5 E CSS3 DESENVOLVIMENTO WEB DENTRO DOS PARADIGMAS DO HTML5 E CSS3 Eduardo Laguna Rubai, Tiago Piperno Bonetti Universidade Paranaense (Unipar) Paranavaí PR- Brasil eduardorubay@gmail.com, bonetti@unipar.br Resumo.

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Caminho de Dados Slide 1 Sumário Introdução Convenções Lógicas de Projeto Construindo um Caminho de Dados O Controle da ULA Projeto da Unidade de Controle Principal

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

Escalonamento no Linux e no Windows NT/2000/XP

Escalonamento no Linux e no Windows NT/2000/XP Escalonamento no Linux e no Windows NT/2000/XP 1 Escalonamento no Linux Os requisitos do escalonador do Linux eram: Apresentar boa performance em programas interativos, mesmo com carga elevada; Distribuir

Leia mais

BARRAMENTO DO SISTEMA

BARRAMENTO DO SISTEMA BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade

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

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

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Caminho de Dados Slide 1 Sumário Introdução Convenções Lógicas de Projeto Construindo um Caminho de Dados O Controle da ULA Projeto da Unidade de Controle Principal

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 11 Sincronização de Processos Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

2 Diagrama de Caso de Uso

2 Diagrama de Caso de Uso Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa

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

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

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

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

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS. 5.1 - Os Programas de Avaliação

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS. 5.1 - Os Programas de Avaliação 36 5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS 5.1 - Os Programas de Avaliação Programas de avaliação convencionais foram utilizados para análise de diversas configurações da arquitetura. Estes programas

Leia mais

Processos. Adão de Melo Neto

Processos. Adão de Melo Neto Processos Adão de Melo Neto 1 EXECUTE O SEGUINTE Baixa a aula dos dias 20 MAR 15 e 08 MAI 15 e salve no computador. Feche o browser Inicialize o vmware player e inicialize a máquina virtual ubuntu Inicialize

Leia mais

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01 Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal

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 À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D)

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D) Universidade Federal de Ouro Preto - UFOP Instituto de Ciências Exatas e Biológicas - ICEB Departamento de Computação - DECOM INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 1 AULA TEÓRICA 2

Leia mais

ESTUDO DE CASO WINDOWS VISTA

ESTUDO DE CASO WINDOWS VISTA ESTUDO DE CASO WINDOWS VISTA História Os sistemas operacionais da Microsoft para PCs desktop e portáteis e para servidores podem ser divididos em 3 famílias: MS-DOS Windows baseado em MS-DOS Windows baseado

Leia mais

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 1 2 Revisão de Hardware 2.1 Hardware O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 2.1.1 Processador O Processador

Leia mais

Visão Geral de Sistemas Operacionais

Visão Geral de Sistemas Operacionais Visão Geral de Sistemas Operacionais Sumário Um sistema operacional é um intermediário entre usuários e o hardware do computador. Desta forma, o usuário pode executar programas de forma conveniente e eficiente.

Leia mais

Documento de Análise e Projeto VideoSystem

Documento de Análise e Projeto VideoSystem Documento de Análise e Projeto VideoSystem Versão Data Versão Descrição Autor 20/10/2009 1.0 21/10/2009 1.0 05/11/2009 1.1 Definição inicial do documento de análise e projeto Revisão do documento

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

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES Alexandre Egleilton Araújo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil araujo.ale01@gmail.com, jaime@unipar.br Resumo.

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

GARANTIA DA QUALIDADE DE SOFTWARE

GARANTIA DA QUALIDADE DE SOFTWARE GARANTIA DA QUALIDADE DE SOFTWARE Fonte: http://www.testexpert.com.br/?q=node/669 1 GARANTIA DA QUALIDADE DE SOFTWARE Segundo a NBR ISO 9000:2005, qualidade é o grau no qual um conjunto de características

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

ESTUDO COMPARATIVO ENTRE AS PLATAFORMAS ARDUINO E PIC

ESTUDO COMPARATIVO ENTRE AS PLATAFORMAS ARDUINO E PIC ESTUDO COMPARATIVO ENTRE AS PLATAFORMAS ARDUINO E PIC Tiago Menezes Xavier de Souza¹, Igor dos Passos Granado¹, Wyllian Fressatti¹ ¹Universidade Paranaense (UNIPAR) Paranavaí- PR- Brasil tiago_x666@hotmail.com,

Leia mais

Desenvolvimento de um Simulador de Gerenciamento de Memória

Desenvolvimento de um Simulador de Gerenciamento de Memória Desenvolvimento de um Simulador de Gerenciamento de Memória Ricardo Mendes do Nascimento. Ciência da Computação Universidade Regional Integrada do Alto Uruguai e das Missões (URI) Santo Ângelo RS Brasil

Leia mais

Sistemas Distribuídos Processos I. Prof. MSc. Hugo Souza

Sistemas Distribuídos Processos I. Prof. MSc. Hugo Souza Sistemas Distribuídos Processos I Prof. MSc. Hugo Souza Até agora vimos a organização como um todo dos SDS, com o mapeamento estrutural e suas devidas características descritas em elementos, regras, conceitos,

Leia mais

Processadores BIP. Conforme Morandi et al (2006), durante o desenvolvimento do BIP, foram definidas três diretrizes de projeto:

Processadores BIP. Conforme Morandi et al (2006), durante o desenvolvimento do BIP, foram definidas três diretrizes de projeto: Processadores BIP A família de processadores BIP foi desenvolvida por pesquisadores do Laboratório de Sistemas Embarcados e Distribuídos (LSED) da Universidade do Vale do Itajaí UNIVALI com o objetivo

Leia mais