Instrumentação de Código na Plataforma.NET

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

Download "Instrumentação de Código na Plataforma.NET"

Transcrição

1 Dissertação submetida à UNIVERSIDADE DE COIMBRA Para Obtenção do Grau de Mestre em Informática e Sistemas Instrumentação de Código na Plataforma.NET Bruno Miguel Brás Cabral Dissertação orientada por Doutor Paulo Jorge Pimenta Marques Departamento de Engenharia Informática Universidade de Coimbra, Portugal Departamento de Engenharia Informática Faculdade de Ciências e Tecnologia Universidade de Coimbra Junho 2005

2

3 Departamento de Engenharia Informática Faculdade de Ciências e Tecnologia Universidade de Coimbra ISBN Coimbra Portugal, Junho 2005

4

5 Esta dissertação foi parcialmente suportada pela Fundação para a Ciência e Tecnologia através da Unidade de Investigação CISUC (Unidade R&D 326/97) e por uma bolsa Microsoft Research Rotor-SSCLI Grant.

6

7 para a avó Lurdes

8

9 Resumo A instrumentação de código é uma técnica que permite a modificação do código e estrutura de um programa, após este ter sido compilado. Esta técnica não é recente. Já em 1995, a EEL fazia a modificação do código binário de programas escritos em C++. No entanto, mais recentemente, a instrumentação de código tem ganho um maior destaque devido à crescente disseminação das plataformas de execução de código gerido como a Java e a.net. O ciclo de vida do software orientado para estas plataformas permite que, por exemplo, o carregamento do código binário de um programa seja interceptado e consequentemente modificado antes de ser executado. Isto é possível porque o formato intermédio, para o qual os programas são compilados, apresenta nestes ambientes de execução uma quantidade enorme de informação que auxilia a desassemblagem do programa e à qual se dá o nome de metadata ou informação sobre a informação. A intercepção e modificação do código é um mecanismo muito útil para adicionar, remover ou modificar as funcionalidades de um programa. Muitas vezes estas modificações podem ser realizadas com o programa em execução, o que é particularmente útil em ambientes de produção em que as aplicações têm de estar disponíveis 24 horas por dia, 7 dias por semana. Actualmente, em.net, não existe qualquer ferramenta capaz de realizar instrumentação de código a alto nível, a plataforma também não possui quaisquer recursos para a manipulação do código dos programas, excepto ao nível das interfaces de programação das aplicações (API) de profiling não geridos. No entanto, existe uma crescente necessidade por ferramentas de instrumentação de código dentro da comunidade científica e empresarial. Por conseguinte, o principal objectivo desta dissertação foi desenvolver uma biblioteca para instrumentação de código em.net e discutir os problemas/soluções encontrados durante a sua implementação. Esta biblioteca foi baptizada de Runtime Assembly Instrumentation Library ou, de uma forma abreviada, RAIL. A motivação desta dissertação provém não só do facto de tal ferramenta não existir mas também por o seu desenvolvimento permitir o estudo de determinadas áreas de aplicação da instrumentação de código. Como por exemplo, a segurança, o tratamento de excepções, a programação orientada a objectos, a perfilagem de aplicações, a injecção de falhas e a optimização de código IL. Em grande parte estes estudos vieram provar que a instrumentação de código vai decididamente assumir um papel de relevo entre as técnicas de programação actuais, seja pelas suas enormes potencialidades ou pela melhoraria de desempenho dos programas instrumentados. A RAIL disponibiliza aos programadores um API de alto nível que esconde as subtilezas do formato e estrutura dos assemblies, por conseguinte, foi dado grande ênfase ao desenvolvimento de funcionalidades de alto nível como, por exemplo, a troca de referências dentro dos programas, a cópia de classes entre assemblies e a troca de chamadas a métodos (ou a campos, ou a propriedades). O desenvolvimento destas funcionalidades

10 x RESUMO de alto nível motivou a realização de investigação na área dos padrões de software para instrumentação de código, tendo sido dada grande importância ao estudo e aperfeiçoamento de padrões de alto nível para a realização de modificações complexas em aplicações de uma forma automática. A importância do desenvolvimento desta biblioteca para.net foi comprovada ao longo destes dois anos pelo volume médio de acessos ao site do projecto (com mais de 600 downloads do código fonte) e a sua utilização em inúmeros projectos internacionais.

11 Agradecimentos Esta dissertação nunca teria tido um início, se o Doutor Luís Silva não me tivesse motivado para a sua realização. Não teria um fim, se não fosse o exemplo de responsabilidade, qualidade, motivação, disponibilidade, entusiasmo, confiança, sabedoria e empenho que encontro todos os dias na pessoa do meu orientador, o Doutor Paulo Marques. Por outro lado, também não haveria um meio se a minha querida noiva não tivesse aturado todas as minhas rabugices e maus humores e, mais importante, arrastado para outros lugares e outras situações quando era mais preciso. O Patrício, sempre com um script na manga e uma observação que nos alegra o dia, também deu o seu empurrãozinho. Quero agradecer ao Sacra, pela convivência ao longo destes dois anos e pelo seu trabalho de estágio. Não posso esquecer o Nuno Santos, que embora já tenha seguido outros rumos há muito tempo, também deu a sua contribuição para o design do API do RAIL. Quero agradecer à Microsoft Research por acreditarem, desde muito cedo, no projecto RAIL e, em particular, ao Eng. Vítor Santos da Microsoft Portugal, pelo papel importante que tem na divulgação do projecto. Não posso esquecer o Doutor João Gabriel, que apadrinhou a primeira fase deste mestrado, e o Doutor Henrique Madeira, co-orientador do trabalho de Seminário II. A eles o meu muito obrigado. Por fim, quero agradecer aos meus pais, à minha manita, à minha madrinha, à minha tia Zilda e prima Catarina, pelas palavras de incentivo nestes últimos meses. Acima de tudo, a todos agradeço a amizade.

12

13 Índice RESUMO... IX AGRADECIMENTOS... XI ÍNDICE... XIII 1. INTRODUÇÃO Motivação Objectivos de Investigação Contribuição Estrutura da Dissertação INSTRUMENTAÇÃO DE CÓDIGO Instrumentação para Máquinas Virtuais Tipos de Instrumentação Intercepção do Carregamento de Código Níveis de Instrumentação de Código Bibliotecas para a Plataforma JAVA Bytecode Engineering Library SERP JAVA Object Instrumentation Environment ASM Javassist Binary Component Adaptation JMangler Twin Class Hierarchy Approach Instrumentação de Código em.net API de Perfilagem de Programas INSTRUMENTAÇÃO DE CÓDIGO EM.NET Introdução Execução em.net Execução Arquitectura Leitura e Carregamento em Memória Representação Orientada aos Objectos de um Programa Instrumentação de Alto Nível O padrão de software Visitor Substituição de Referências Cópia de Classes e Métodos Redireccionamento de Chamadas a Métodos Redireccionamento do Acesso a Campos e Propriedades Adicionar Epílogos e Prólogos a Métodos... 67

14 XIV ÍNDICE 3.5. Trabalho Relacionado AbstractIL PEAPI e PERWAPI MONO PEToolkit Reflector CLIFileReader Common Language Aspect Weaver WEAVE.NET DOMÍNIOS DE APLICAÇÃO Alternativa aos Proxies Dinâmicos Avaliação de Desempenho Avaliação dos Mecanismos de Tratamento de Excepções Programação Orientada aos Aspectos Utilização de Custom Attributes Tratamento de Excepções Automático Projectos de Terceiros CONCLUSÃO Avaliação do Projecto RAIL e Trabalho Futuro BIBLIOGRAFIA LISTA DE PUBLICAÇÕES Artigos em Revistas Artigos em Conferências Internacionais Relatórios Técnicos Palestras Convidadas...122

15 Capítulo 1 Introdução Se o conhecimento pode causar problemas, não é com ignorância que os vamos resolver. Isaac Asimov Esta dissertação é o resultado do trabalho realizado em instrumentação de código em máquinas virtuais, entre Julho de 2002 e Outubro de 2004, no seio do Grupo de Sistemas Confiáveis da Universidade de Coimbra. Na base deste trabalho está o estudo dos problemas existentes no desenvolvimento de uma biblioteca para instrumentação de código na plataforma.net e a descrição das soluções encontradas. Neste capítulo introdutório são apresentadas as motivações e os objectivos de investigação, de forma a contextualizar o trabalho em discussão. São também enumeradas as contribuições desta dissertação e é descrita a sua estrutura.

16 2 CAPÍTULO 1 INTRODUÇÃO 1.1. Motivação A instrumentação de código é um mecanismo que permite aos programas reescrever o código de outros programas ou o seu próprio código, após a compilação e imediatamente antes ou durante a sua execução. Esta abordagem tem sido usada ao longo dos anos com diferentes objectivos, como por exemplo: traçar o perfil das aplicações [Dmitriev2004], injectar falhas em software [Fu2004], optimizar e reutilizar código [Vall1999], realizar verificações de segurança [Chander1999], realizar migração transparente de threads [Truyen2000] e manipular as aplicações para que se faça gestão do acesso aos recursos do sistema [Binder2001]. Todos estes cenários de aplicação ainda são válidos mas, recentemente, a instrumentação de código tornou-se mais atractiva com o aparecimento da Programação Orientada aos Aspectos (AOP) [Kiczales1997]. Este paradigma de programação teve origem nos laboratórios do Xerox Park e postula que existem vários aspectos comuns a diferentes componentes de uma aplicação, que lhe podem ser aplicados de uma forma transversal. O código de um programa assume diferentes formas consoante a fase do processo de desenvolvimento de software em que este se encontra: Código Fonte, escrito pelo programador numa linguagem de alto nível; Código Binário, quase sempre obtido por compilação do código fonte; Código Intermédio, executado por máquinas virtuais (e.g. JAVA e.net), produto da compilação de código fonte e alvo de compilação ou interpretação por parte das máquinas virtuais. Exemplos de código intermédio são o Bytecode, da plataforma JAVA [Lindholm1999], e o Intermediate Language (IL), da plataforma.net [ECMA2002]. Nos últimos anos, a instrumentação de código intermédio tem ganho popularidade devido ao crescente interesse em plataformas de execução virtuais e o aumento da sua utilização em diferentes áreas. Um dos aspectos fundamentais das linguagens de programação modernas é a possibilidade do código ser carregado em tempo de execução a partir de uma fonte em formato binário (e.g. de um ficheiro ou de um endereço na rede). Um efeito colateral desta funcionalidade é a possibilidade de modificar o código imediatamente antes ou durante a sua execução, introduzindo ou removendo instruções e modificando as referências para classes, métodos ou campos, isto permite que se faça, por exemplo, uma determinada verificação de segurança que anteriormente não era realizada. Consideremos um possível cenário de aplicação, um utilizador ao descarregar uma aplicação da Internet, não pode assumir à partida que esta é de confiança. É essencial saber

17 MOTIVAÇÃO 3 quais os ficheiros que são lidos e escritos por essa aplicação, para assegurar que esta não está a roubar informação confidencial e enviá-la para parte incerta. Uma forma de o conseguir seria utilizar um desassemblador e procurar entender a estrutura do código. No entanto, exceptuando aplicações triviais, esta solução não é realmente viável. Utilizando instrumentação de código, é possível substituir transparentemente todas as referências para as classes responsáveis por implementar os métodos de I/O por referências para proxies [Gamma1995] que implementem as mesmas interfaces. Estas proxies podem registar todos os acessos ao sistema de ficheiros antes de permitir a invocação dos métodos originais, e mesmo barrar a sua execução. Desta forma, o utilizador pode examinar os logs e verificar quais os ficheiros que são acedidos ou até mesmo permitir o acesso caso a caso. As razões que tornam a instrumentação de código aliciante são bem visíveis nos diversos cenários de aplicação já mencionados. Mas, o que é que torna a instrumentação de código em máquinas virtuais ainda mais atraente? Em termos práticos, a instrumentação de código intermédio é mais eficaz que a instrumentação de código máquina (específico de uma plataforma), pois as modificações nos programas são propagáveis a todas as plataformas para as quais a portabilidade é assegurada. Por outro lado, poderia ser feita a instrumentação de código fonte. A opção de não o fazer (e apontar o código intermédio como alvo da instrumentação) deve-se principalmente a duas razões, a primeira é o facto do código fonte não ser normalmente disponibilizado ao utilizador, a segunda relaciona-se com a riqueza em metadata [ECMA2002], existente nos ficheiros do formato intermédio, que vai simplificar muito o processo de instrumentação de código. A metadata é descrita como dados sobre os dados e é utilizada para caracterizar a estrutura, funcionamento e recursos de um programa. O código intermédio é também muito mais fácil de manipular do que o código fonte, pois só é possível invocar instruções muito simples e com um número bem definido de argumentos. O conceito de instrumentação de código está contido num outro mais abrangente: o de Reflexão [Ferber1989;Malenfant1992]. Este é definido como sendo a capacidade de um programa de olhar para si próprio (i.e. saber como é constituído e estruturado) e ser capaz de modificar tanto a sua estrutura como o seu comportamento em tempo de execução. A instrumentação de código permite adicionar mecanismos de reflexão a linguagens de programação que não os possuem ou os implementam parcialmente (e.g. C#, JAVA, C++). A plataforma.net não possui um verdadeiro API de Reflexão visto que o System.Reflection.Emit não permite alterar a estrutura ou o comportamento dos

18 4 CAPÍTULO 1 INTRODUÇÃO programas, este API permite apenas que um programa saiba como é constituído, pelo que, a esta capacidade se dá usualmente o nome de Introspecção. Nesta dissertação, vão ser descritos os problemas e as soluções associadas ao desenvolvimento de uma biblioteca de instrumentação de código para a plataforma.net, permitindo ao programador ter assim um API completo para Reflexão. A palavra completo tem neste contexto um papel muito importante pois uma das grandes motivações para esta dissertação é o preenchimento de uma lacuna existente na plataforma. O Common Language Runtime (CLR) disponibiliza um API para ler programas (embora não seja possível ver o código IL dos métodos) e gerar novos programas em tempo de execução (System.Reflection.Emit). No entanto, não é possível ler, modificar e gerar novamente uma aplicação, utilizando apenas as bibliotecas da plataforma. O trabalho desta dissertação representa uma primeira tentativa para alcançar este objectivo visto que, como será discutido na secção de trabalho relacionado, não existe actualmente nenhuma biblioteca capaz de realizar instrumentação de código de alto nível em.net. A plataforma.net é multi-linguagem, isto significa que existem compiladores em.net para diferentes linguagens de programação como a C#, J#, C++, Eiffel, entre outras. Por conseguinte, realizar instrumentação de código sobre o formato intermédio do CLR, para o qual os programas em.net são compilados, permite a modificação de programas independentemente da linguagem em que estes foram escritos Objectivos de Investigação O objectivo principal desta dissertação foi desenvolver uma biblioteca de instrumentação de código para a plataforma.net. Deste objectivo derivaram muitos outros com um papel secundário mas igualmente indispensáveis para a escrita desta biblioteca, muitos nasceram do trabalho de análise/aprendizagem das bibliotecas de instrumentação de código em JAVA (ver a secção 2.2) e de particularidades inerentes à plataforma.net. Estes objectivos são descritos nos seguintes tópicos:

19 OBJECTIVOS DE INVESTIGAÇÃO 5 Figura 1 Exemplo da estrutura de um Assembly Produzir uma estrutura num formato Orientado aos Objectos (OO) capaz de representar um Assembly e todos os seus componentes (Figura 1). Um Assembly pode ser constituído por diversos ficheiros e cada ficheiro corresponde a um módulo. Um módulo é composto por diversos tipos (i.e. classes), métodos e campos. Cada tipo pode conter outros tipos, campos, propriedades, métodos, construtores e eventos [ECMA2002]. Permitir que a estrutura OO possa ser manipulada até ao nível das instruções em Linguagem Intermédia (IL) por funcionalidades de alto nível, que escondam do programador todos os detalhes da instrumentação de baixo nível, como o de recalcular referências e valores de tokens (os tokens são referências entre a metadata e o código IL existentes nos Assemblies). Fornecer formas de ler a metadata e carregar o código IL no ambiente de execução sem recorrer aos mecanismos de Introspecção da plataforma visto que, estes últimos são conhecidos pela sua fraca performance e pela lacuna de algumas funcionalidades, como por exemplo, a disponibilização do código IL ao programador dentro do API System.Reflection.Emit e não resolução de tokens (referências dentro da metadata) pelo API não gerido IMetadataImport. O API deve ser completamente implementado em código gerido, de forma a assegurar a portabilidade entre diferentes distribuições da plataforma.net, como o MONO [Novell2005a] ou o SSCLI [Stutz2002].

20 6 CAPÍTULO 1 INTRODUÇÃO Utilizar padrões de software de programação que permitam a fácil propagação de modificações a todos os componentes dos Assemblies, como por exemplo o padrão de software Visitor [Gamma1995]. Um outro objectivo desta dissertação foi encontrar padrões de software para a instrumentação de código de alto nível. Estes padrões são na realidade algoritmos que automatizam técnicas de instrumentação de grande complexidade, como por exemplo, substituir referências de uma classe para outra dentro de um programa. Estes mecanismos evitam que o programador tenha de conhecer todos os pormenores do formato em que as aplicações em.net são guardadas para conseguir realizar complicadas instrumentações visto que, o API em que estes novos padrões são disponibilizados lida apenas com objectos como classes, métodos, campos, propriedades, eventos e não com tabelas de metadata, tokens, assinaturas, streams e heaps de dados ou qualquer outra estrutura de baixo nível existente nos assemblies. Nesta dissertação também foram explorados alguns cenários de aplicação da Reflexão e da instrumentação de código, validando a eficácia destes mecanismos e da biblioteca desenvolvida Contribuição Este é o primeiro grande estudo na área de instrumentação de código, dentro da comunidade.net, sendo o conhecimento adquirido de grande relevância para futuros trabalhos e investigação em todos os campos que se relacionem com a instrumentação de código no Common Language Runtime. Esta dissertação tem diversas implicações práticas pois, fornece aos investigadores que utilizam o ambiente.net como plataforma de suporte à sua investigação, uma ferramenta muito útil para instrumentação de código. O interesse por parte da comunidade cientifica e até empresarial é demonstrado pelos mais de 600 downloads realizados do código fonte da biblioteca desde Outubro de 2003, altura em que o código foi colocado on-line, e pela média mensal de 200 acessos ao site do projecto. Uma outra contribuição desta dissertação está na identificação de novos padrões de software de instrumentação de código de alto nível. Estes padrões são válidos não só para a plataforma.net, mas também, de uma forma generalista, para todas as plataformas OO.

21 ESTRUTURA DA DISSERTAÇÃO Estrutura da Dissertação Esta dissertação está organizada em cinco capítulos: Capítulo 1: este capítulo descreve a motivação para o trabalho desenvolvido, os seus objectivos de investigação e a contribuição desta dissertação. Capítulo 2: apresenta o estado da arte em instrumentação de código em máquinas virtuais, descreve os diversos tipos de instrumentação que existe e sua diferenciação ao nível do carregamento do código. Neste capítulo também são descritas as bibliotecas existentes para a plataforma JAVA e o suporte para instrumentação de código disponível em.net. Capítulo 3: este capítulo inicia-se com a enumeração das ferramentas mais importantes para a instrumentação de código em.net e descrição do trabalho relacionado. Em seguida é discutida a arquitectura da biblioteca de instrumentação de código, a manipulação de código intermédio e a implementação das funcionalidades de reflexão de alto nível. Capítulo 4: discute a utilização da biblioteca desenvolvida em diversos domínios de aplicação, sendo também feita a avaliação do desempenho da biblioteca e da sua utilização por terceiros. Capítulo 5: neste capítulo são expressas as conclusões desta dissertação.

22

23 Capítulo 2 Instrumentação de Código É como se estivéssemos a criar um reino mágico, onde a partir de um bolo se obteria automaticamente a sua receita, e de uma receita se teria automaticamente o bolo. B. C. Smith, 1983 (tradução) Este capítulo inicia-se com a descrição do que é a instrumentação de código, quais as suas origens, objectivos e domínios de aplicação. Em seguida, é discutida a instrumentação de código em máquinas virtuais. Segue-se uma análise do estado da arte em bibliotecas de instrumentação de código para a plataforma JAVA, em termos do tipo de instrumentação, forma de intercepção do carregamento de código e nível da instrumentação. Finalmente, são enumerados os recursos, a nível de instrumentação, existentes para a plataforma.net.

24 10 CAPÍTULO 2 INSTRUMENTAÇÃO DE CÓDIGO 2.1. Instrumentação para Máquinas Virtuais A instrumentação de código não é um assunto novo. Na realidade, tem-se manipulado código, mesmo na sua forma binária, desde que este foi gerado pela primeira vez. O que é compreensível, pois a manipulação de código binário é de extrema utilidade em vários cenários de aplicação da instrumentação de código, como por exemplo, traçar o perfil de aplicações, realizar optimização de código, corrigir bugs em programas e emulação por software. Esta diversidade de cenários conduziu ao aparecimento de muitas e diferentes aplicações capazes de realizar instrumentação de código com objectivos definidos e plataformas alvo bem identificadas. Considerando o número de plataformas existentes, as dificuldades de portabilidade entre elas, e o número de pequenas tarefas que se podem executar, é claramente necessário desenvolver uma aplicação para instrumentação de código de âmbito geral, evitando a escrita de uma infinidade de pequenos programas. Em termos de bibliotecas de instrumentação, a Executable Editing Library (EEL) [Larus1995] foi uma das primeiras a permitir a instrumentação estática de executáveis gerados a partir de código C++. Os autores da EEL defendiam que a ideia de instrumentação de código é conceptualmente simples mas extremamente complexa na prática, isto porque existe uma miríade de detalhes arquitecturais específicos a cada sistema. É esta complexidade que reduz a atractividade dos mecanismos de instrumentação de código. A EEL disponibiliza abstracções que permitem que uma outra ferramenta analise e modifique executáveis sem se preocupar com determinados conjuntos de instruções, múltiplos formatos de ficheiros executáveis, com as consequências de apagar ou adicionar novas instruções. A EEL contribuiu, de uma forma extremamente significativa, para facilitar o desenvolvimento de ferramentas de depuração, tradução, protecção e medição da performance de programas. Um aspecto importante de muitas linguagens de programação modernas é serem compiladas para um formato intermédio e executadas por uma máquina virtual. Tipicamente, este ambiente permite que o código seja carregado em tempo de execução e posteriormente executado. Dois exemplos bem conhecidos são as plataformas JAVA [ECMA2002;Lindholm1999] (que suporta o carregamento dinâmico de classes) e.net [ECMA2002;Lindholm1999] (que permite o carregamento e execução dinâmicas de assemblies).

25 INSTRUMENTAÇÃO PARA MÁQUINAS VIRTUAIS 11 Um efeito colateral do carregamento dinâmico é o de ser possível instrumentar o código, antes da sua definição (load) na máquina virtual, introduzindo ou removendo instruções, modificando a utilização e o acesso a classes, variáveis e constantes. O conceito chave é ser possível modificar o código antes ou durante a sua execução, podendo estas transformações ser operadas depois da compilação ou no carregamento do código. O advento do uso generalizado de máquinas virtuais, que suportam carregamento dinâmico de código, e em particular, JAVA, despoletou um enorme desenvolvimento no campo da instrumentação de código. Surgiram diversas bibliotecas para JAVA, sendo duas das mais importantes a Bytecode Engineering Library (BCEL) [Dahm1999], que é agora parte integrante do projecto Apache e a JAVA Object Instrumentation Environment (JOIE) [Cohen1998]. Conjuntamente, estas duas bibliotecas são utilizadas por mais de 37 projectos, que usam instrumentação de código para realizar as mais diversas tarefas. Antes de enumerar e apresentar as mais importantes bibliotecas de instrumentação para JAVA, são descritos nas subsecções que se seguem os diversos atributos que permitirão classificar e distinguir essas bibliotecas. As bibliotecas pode ser classificadas de acordo com: A capacidade realizar instrumentação estática ou dinâmica, i.e. serem somente capazes de manipular as aplicações antes destas derem executadas ou já durante a sua execução, respectivamente. O momento e o mecanismo utilizado para interceptar o carregamento de código. A utilização de diferentes mecanismos pode limitar a utilização da biblioteca de instrumentação visto que, as diferentes técnicas podem criar dependências da biblioteca com plataforma, com o sistema operativo ou até com mecanismos internos da máquina virtual, como os classloaders personalizáveis que permitem controlar a forma como um programa é carregado. O nível do API de instrumentação, que pode ser de alto ou baixo nível. Dizemos que um API é de baixo nível se a instrumentação de código obriga a manipular directamente as estruturas existentes nos ficheiros.class, como por exemplo, a tabela de constantes, esta tabela serve para guardar o valor de todas as constantes existentes na execução de uma classe, as instruções que referenciam essas constantes fazem-no por meio de índices para esta tabela. Num API de baixo nível é o programador que tem de introduzir, remover, modificar e validar as

26 12 CAPÍTULO 2 INSTRUMENTAÇÃO DE CÓDIGO entradas na tabela de constantes. Um API diz-se de alto nível se todas as estruturas existentes no formato dos ficheiros.class estão escondidas do programador, ou seja a instrumentação de código lida com classes, métodos, campos, referências entres estes objectos e não com tabelas de constantes, índices para estas tabelas, etc Tipos de Instrumentação Quanto ao tipo de instrumentação, as bibliotecas actuais podem ser classificadas em dois grandes grupos: Com capacidade de realizar instrumentação estática; Com capacidade de realizar instrumentação dinâmica. Uma biblioteca pertence ao primeiro grupo se somente permitir a instrumentação do código de uma aplicação, antes deste ser executado pela primeira vez. Por outro lado, uma biblioteca capaz de realizar instrumentação dinâmica de código, permite modificar classes com objectos já instanciados. Para facilitar a compreensão destes conceitos é útil ter em mente o ciclo de vida de um programa em JAVA, desde da escrita do seu código fonte até à sua execução. De forma simples e resumida: inicialmente o programa é escrito numa linguagem de alto nível; em seguida esse código fonte é compilado para uma representação intermédia; a máquina virtual efectua o carregamento dessa representação intermédia da aplicação em memória; e em seguida encarrega-se da sua execução. É possível classificar a instrumentação estática de código em três categorias: instrumentação de código fonte; instrumentação em tempo de compilação; instrumentação em tempo de carregamento ou execução. A menos comum, devido à sua complexidade, é a instrumentação de código fonte. Na realidade as ferramentas que permitem este tipo de manipulação são muito específicas para uma determinada tarefa e muitas vezes desenvolvidas para uma única utilização, como por exemplo, um pré-processador de código capaz de introduzir código de monitorização da execução dentro de uma aplicação. A instrumentação em tempo de compilação é muito frequente, esta ocorre durante a compilação do código fonte para código intermédio. É possível identificar diversos

27 INSTRUMENTAÇÃO PARA MÁQUINAS VIRTUAIS 13 compiladores devidamente adaptados para realizar transformações ao código original, imprimindo melhoramentos e optimizações com os mais diversos objectivos, como por exemplo, adicionar suporte para novas instruções à plataforma original (e.g. AspectJ [Kiczales2001]). A instrumentação em tempo de carregamento ocorre imediatamente antes do primeiro carregamento do código na máquina virtual. Este é considerado o momento por eleição para fazer a instrumentação de uma aplicação, pois já estão disponíveis muitas informações que não são passíveis de ser obtidas em tempo de compilação e ainda não é tão complicado fazer a substituição e modificação do código da aplicação como em tempo de execução. A instrumentação em tempo de execução seria perfeita se não fosse tão complexa. Com a aplicação em execução já existe um conhecimento completo do ambiente virtual, dos recursos que estão disponíveis, do perfil de execução da aplicação e de toda a informação necessária ao funcionamento do programa. Nestas condições, a optimização de uma aplicação seria muito mais vantajosa pois seria possível fazer uma afinação do código a executar com base em valores actuais e não apenas em dados conhecidos antes da execução. No entanto, não é trivial modificar a implementação de uma classe que já esteja carregada no heap na máquina virtual pois algumas plataformas, como a JAVA e a.net, não o permitem. Nos capítulos seguintes desta dissertação, procura-se reduzir essa complexidade Intercepção do Carregamento de Código Todo o carregamento de classes na plataforma JAVA é implementado pela JAVA Virtual Machine (JVM) [Lindholm1999] através do carregador de classes bootstrap nativo e pelas classes descendentes de Java.lang.ClassLoader. O carregador de classes bootstrap é responsável pelo carregamento das classes do sistema, ou seja, todas as classes que fazem parte do JAVA Development Kit. ClassLoader é a super classe de todos os carregadores, específicos de cada aplicação. Os programadores de JAVA podem personalizar o carregamento das suas classes através da implementação de uma subclasse de ClassLoader [Lian1998]. Estes carregadores adaptados são utilizados por três razões: Personalização, de forma a satisfazer necessidades especiais das classes para o seu carregamento ou para fazer o pré processamento dessas classes para, por

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

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

4.2. UML Diagramas de classes

4.2. UML Diagramas de classes Engenharia de Software 4.2. UML Diagramas de classes Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt Um diagrama de classes serve para modelar o vocabulário de um sistema Construído e refinado ao longo

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

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

Figura 1 - O computador

Figura 1 - O computador Organização e arquitectura dum computador Índice Índice... 2 1. Introdução... 3 2. Representação da informação no computador... 4 3. Funcionamento básico dum computador... 5 4. Estrutura do processador...

Leia mais

Análise de Sistemas. Conceito de análise de sistemas

Análise de Sistemas. Conceito de análise de sistemas Análise de Sistemas Conceito de análise de sistemas Sistema: Conjunto de partes organizadas (estruturadas) que concorrem para atingir um (ou mais) objectivos. Sistema de informação (SI): sub-sistema de

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

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

UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C#

UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C# UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C# Robson Bartelli¹, Wyllian Fressatti¹. ¹Universidade Paranaense (Unipar) Paranavaí PR Brasil robson_lpbartelli@yahoo.com.br,wyllian@unipar.br

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

Interface Homem Máquina para Domótica baseado em tecnologias Web

Interface Homem Máquina para Domótica baseado em tecnologias Web Interface Homem Máquina para Domótica baseado em tecnologias Web João Alexandre Oliveira Ferreira Dissertação realizada sob a orientação do Professor Doutor Mário de Sousa do Departamento de Engenharia

Leia mais

REFLEXÃO EM JAVA. INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III

REFLEXÃO EM JAVA. INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III REFLEXÃO EM JAVA INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III ARQUITECTURAS DE SOFTWARE F. Mário Martins 2011 CLASS A partir de JAVA5 a classe java.lang.class

Leia mais

Virtualização e Consolidação de Centro de Dados O Caso da UTAD António Costa - acosta@utad.pt

Virtualização e Consolidação de Centro de Dados O Caso da UTAD António Costa - acosta@utad.pt Universidade de Trás-os-Montes e Alto Douro Virtualização e Consolidação de Centro de Dados O Caso da UTAD António Costa - acosta@utad.pt Agenda A UTAD Virtualização Uma definição Introdução e abrangência

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

Aspectos de Sistemas Operativos

Aspectos de Sistemas Operativos Paulo Sérgio Almeida Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho Serviços de um sistema operativo Interface com o utilizador Chamadas ao sistema Programas de sistema

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

DESENVOLVIMENTO DE SOFTWARE AULA 1

DESENVOLVIMENTO DE SOFTWARE AULA 1 DESENVOLVIMENTO DE SOFTWARE AULA 1 CAMPUS SANTO ANDRÉ CELSO CANDIDO SEMESTRE 2014 1 Características da Plataforma.NET A plataforma.net Framework 4.0 (.NET 4.0) é uma plataforma de softwares que fornece

Leia mais

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos em java. Polimorfismo Programação Orientada a Objetos em java Polimorfismo Polimorfismo Uma característica muito importante em sistemas orientados a objetos Termo proveniente do grego, e significa muitas formas Em POO, significa

Leia mais

PROGRAMAÇÃO JAVA. Parte 1

PROGRAMAÇÃO JAVA. Parte 1 PROGRAMAÇÃO JAVA Parte 1 O que é um programa? Um algoritmo (sequência de operações elementares - instruções) convertido para uma linguagem que possa ser executada por um computador Programa = Algoritmos

Leia mais

Linguateca e Processamento de Linguagem Natural na Área da Saúde: Alguns Comentários e Sugestões

Linguateca e Processamento de Linguagem Natural na Área da Saúde: Alguns Comentários e Sugestões Capítulo 7 Linguateca e Processamento de Linguagem Natural na Área da Saúde: Alguns Comentários e Sugestões Liliana Ferreira, António Teixeira e João Paulo da Silva Cunha Luís Costa, Diana Santos e Nuno

Leia mais

Qualidade de Software

Qualidade de Software Qualidade de Software O software é algo abstrato, pois são as instruções que quando executadas atingem o propósito desejado no sistema computacional. (Algoritmo). As principais características são: Complexidade:

Leia mais

Lógica de Programação

Lógica de Programação Lógica de Programação Unidade 4 Ambiente de desenvolvimento Java QI ESCOLAS E FACULDADES Curso Técnico em Informática SUMÁRIO A LINGUAGEM JAVA... 3 JVM, JRE, JDK... 3 BYTECODE... 3 PREPARANDO O AMBIENTE

Leia mais

WebSphere_Integration_Developer_D_Jan06 Script

WebSphere_Integration_Developer_D_Jan06 Script WebSphere_Integration_Developer_D_Jan06 Script 1a Nesta demonstração, Will Dunlop, um programador de integração da JK, utiliza o IBM, [ IBM], ou WID para construir um novo serviço orientado para os processos

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

Introdução ao C# . Visão geral do.net Framework

Introdução ao C# . Visão geral do.net Framework Introdução ao C# Microsoft.NET (comumente conhecido por.net Framework - em inglês: dotnet) é uma iniciativa da empresa Microsoft, que visa uma plataforma única para desenvolvimento e execução de sistemas

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

Gestão de Configurações II

Gestão de Configurações II Gestão de Configurações II Bibliografia Livro: Software Configuration Management Patterns: Effective Teamwork, Practical Integration Gestão de Projecto 14 Padrões de Gestão Os padrões de gestão de configurações

Leia mais

3 ao Quadrado - Agenda Web

3 ao Quadrado - Agenda Web 3 ao Quadrado - Agenda Web Relatório de Gestão de Projectos de Software - Grupo A - LEIC 2001/2002 http://gnomo.fe.up.pt/gps01a João Montenegro - ei97023@fe.up.pt André Teixeira - ei97024@fe.up.pt Carlos

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

Programando em C# Orientado a Objetos. By: Maromo

Programando em C# Orientado a Objetos. By: Maromo Programando em C# Orientado a Objetos By: Maromo Agenda Módulo 1 Plataforma.Net. Linguagem de Programação C#. Tipos primitivos, comandos de controle. Exercícios de Fixação. Introdução O modelo de programação

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

Protótipo de um sistema para licenciamento de aplicativos Microsoft.NET baseado em assinatura digital XML

Protótipo de um sistema para licenciamento de aplicativos Microsoft.NET baseado em assinatura digital XML Protótipo de um sistema para licenciamento de aplicativos Microsoft.NET baseado em assinatura digital XML Acadêmico: Leonardo Chagas D Ippolito Orientador: Prof. Marcel Hugo Blumenau, Dezembro de 2004

Leia mais

12 EXCEL MACROS E APLICAÇÕES

12 EXCEL MACROS E APLICAÇÕES INTRODUÇÃO O principal objetivo deste livro é auxiliar o leitor na sua aprendizagem sobre os recursos avançados do Excel em especial na interligação com o Visual Basic for Applications (VBA). Pretende-se

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

PROJETO DE REDES www.projetoderedes.com.br

PROJETO DE REDES www.projetoderedes.com.br PROJETO DE REDES www.projetoderedes.com.br Centro Universitário de Volta Redonda - UniFOA Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro

Leia mais

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Aula 3 Virtualização de Sistemas 1. Conceito Virtualização pode ser definida

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

Portal AEPQ Manual do utilizador

Portal AEPQ Manual do utilizador Pedro Gonçalves Luís Vieira Portal AEPQ Manual do utilizador Setembro 2008 Engenharia Informática - Portal AEPQ Manual do utilizador - ii - Conteúdo 1 Introdução... 1 1.1 Estrutura do manual... 3 1.2 Requisitos...

Leia mais

Engenharia de Software LEIC/LERC, 3 o Ano, 2 o Semestre, Ano lectivo de 2009/2010

Engenharia de Software LEIC/LERC, 3 o Ano, 2 o Semestre, Ano lectivo de 2009/2010 UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO Engenharia de Software LEIC/LERC, 3 o Ano, 2 o Semestre, Ano lectivo de 2009/2010 Segundo Exame 16 de Julho de 2010, 9:00H 11:30H (Versão A) Nome:

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA Sistemas Operativos 2003/2004 Trabalho Prático #2 -- Programação em C com ponteiros -- Objectivos Familiarização

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

Introdução aos Sistemas Operativos

Introdução aos Sistemas Operativos Introdução aos Sistemas Operativos Computadores e Redes de Comunicação Mestrado em Gestão de Informação, FEUP 06/07 Sérgio Sobral Nunes mail: sergio.nunes@fe.up.pt web: www.fe.up.pt/~ssn Sumário Definição

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

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

Engenharia de Software Sistemas Distribuídos

Engenharia de Software Sistemas Distribuídos Engenharia de Software Sistemas Distribuídos 2 o Semestre de 2009/2010 FEARSe Requisitos para a 1 a entrega 18 de Março de 2010 1 Introdução O projecto conjunto das disciplinas de Engenharia de Software

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 2: Classes e objectos LEEC@IST Java 1/24 Classes (1) Sintaxe Qualif* class Ident [ extends IdentC] [ implements IdentI [,IdentI]* ] { [ Atributos Métodos ]* Qualif:

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

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

Escola Superior de Tecnologia de Setúbal. Projecto Final

Escola Superior de Tecnologia de Setúbal. Projecto Final Instituto Politécnico de Setúbal Escola Superior de Tecnologia de Setúbal Departamento de Sistemas e Informática Projecto Final Computação na Internet Ano Lectivo 2002/2003 Portal de Jogos Executado por:

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

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

Engenharia de Software

Engenharia de Software Engenharia de Software 2º Semestre de 2006/2007 Terceiro enunciado detalhado do projecto: Portal OurDocs ic-es+alameda@mega.ist.utl.pt ic-es+tagus@mega.ist.utl.pt 1. Introdução O terceiro enunciado do

Leia mais

Arquitecturas de Software Licenciatura em Engenharia Informática e de Computadores

Arquitecturas de Software Licenciatura em Engenharia Informática e de Computadores UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO Arquitecturas de Software Licenciatura em Engenharia Informática e de Computadores Primeiro Teste 21 de Outubro de 2006, 9:00H 10:30H Nome: Número:

Leia mais

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente Capítulo 1 Introdução Um compilador é um que lê um escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num equivalente numa outra linguagem, a linguagem destino Como parte importante neste

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

Aula teórica 3. Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java. Preparado por eng.

Aula teórica 3. Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java. Preparado por eng. Aula teórica 3 Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java Preparado por eng.tatiana Kovalenko Linguagens de Programação Para escrever programas é necessário

Leia mais

Os Investigadores da Universidade de Coimbra e as plataformas

Os Investigadores da Universidade de Coimbra e as plataformas Os Investigadores da Universidade de Coimbra e as plataformas & 1 Índice 2 Introdução...3 3 A Plataforma de Curricula DeGóis...3 3.1 É utilizada porque...3 3.2 Com a utilização do DeGóis ganho...4 3.1

Leia mais

Aplicações. Sistema Operacional Hardware. Os sistemas de computadores são projetados com basicamente 3 componentes: Máquinas Virtuais e Emuladores

Aplicações. Sistema Operacional Hardware. Os sistemas de computadores são projetados com basicamente 3 componentes: Máquinas Virtuais e Emuladores Máquinas Virtuais e Emuladores Marcos Aurelio Pchek Laureano Sistemas de Computadores Os sistemas de computadores são projetados com basicamente 3 componentes: hardware sistema operacional aplicações Sistemas

Leia mais

Modelo Cascata ou Clássico

Modelo Cascata ou Clássico Modelo Cascata ou Clássico INTRODUÇÃO O modelo clássico ou cascata, que também é conhecido por abordagem top-down, foi proposto por Royce em 1970. Até meados da década de 1980 foi o único modelo com aceitação

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

Programação de Sistemas

Programação de Sistemas Programação de Sistemas Introdução à gestão de memória Programação de Sistemas Gestão de memória : 1/16 Introdução (1) A memória central de um computador é escassa. [1981] IBM PC lançado com 64KB na motherboard,

Leia mais

Manual de Utilizador. Disciplina de Projecto de Sistemas Industriais. Escola Superior de Tecnologia. Instituto Politécnico de Castelo Branco

Manual de Utilizador. Disciplina de Projecto de Sistemas Industriais. Escola Superior de Tecnologia. Instituto Politécnico de Castelo Branco Escola Superior de Tecnologia Instituto Politécnico de Castelo Branco Departamento de Informática Curso de Engenharia Informática Disciplina de Projecto de Sistemas Industriais Ano Lectivo de 2005/2006

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

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

Universidade do Minho Licenciatura em Engenharia Informática

Universidade do Minho Licenciatura em Engenharia Informática Universidade do Minho Licenciatura em Engenharia Informática Disciplina de Desenvolvimento de Sistemas de Software Trabalho Prático Fase 1 Ano Lectivo de 2009/10 GereComSaber Grupo 15 Cláudio Manuel Rigueiro

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

Plataforma de Gestão de Actualizações de Software Descrição do Problema

Plataforma de Gestão de Actualizações de Software Descrição do Problema Plataforma de Gestão de Actualizações de Software Descrição do Problema Pedro Miguel Barros Morgado Índice Introdução... 3 Ponto.C... 4 Descrição do Problema... 5 Bibliografia... 7 2 Introdução No mundo

Leia mais

PERIVER PLATAFORMA SOFTWARE REQUIREMENT SPECIFICATION. Periver_SoftwareRequirementSpecification_2008-03-31_v1.0.doc. Versão 1.0

PERIVER PLATAFORMA SOFTWARE REQUIREMENT SPECIFICATION. Periver_SoftwareRequirementSpecification_2008-03-31_v1.0.doc. Versão 1.0 PLATAFORMA Versão 1.0 31 de Março de 2008 TABELA DE REVISÕES Versão Autores Descrição da Versão Aprovadores Data António Rocha Cristina Rodrigues André Ligeiro V0.1r Dinis Monteiro Versão inicial António

Leia mais

ZS Rest. Manual Avançado. Menus. v2011 - Certificado

ZS Rest. Manual Avançado. Menus. v2011 - Certificado Manual Avançado Menus v2011 - Certificado 1 1. Índice 2. Introdução... 2 3. Iniciar o ZSRest... 3 4. Menus... 4 b) Novo Produto:... 5 i. Separador Geral.... 5 ii. Separador Preços e Impostos... 7 iii.

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

Introdução. Aulas. ltodi.est.ips.pt/es. Detalhes administrativos Definição de engenharia de software Contexto Relação com outras áreas e disciplinas

Introdução. Aulas. ltodi.est.ips.pt/es. Detalhes administrativos Definição de engenharia de software Contexto Relação com outras áreas e disciplinas Sumário Introdução Joaquim Filipe João Ascenso Engenharia de Software 2005/06 EST, Setúbal Detalhes administrativos Definição de engenharia de software Contexto Relação com outras áreas e disciplinas 2

Leia mais

DEPARTAMENTO DE MATEMÁTICA E CIÊNCIAS EXPERIMENTAIS

DEPARTAMENTO DE MATEMÁTICA E CIÊNCIAS EXPERIMENTAIS DEPARTAMENTO DE MATEMÁTICA E CIÊNCIAS EXPERIMENTAIS Planificação Anual da Disciplina de TIC Módulos 1,2,3-10.ºD CURSO PROFISSIONAL DE TÉCNICO DE APOIO À GESTÃO DESPORTIVA Ano Letivo 2015-2016 Manual adotado:

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 10 Persistência de Dados

Leia mais

Orientação a Objetos com Java

Orientação a Objetos com Java Orientação a Objetos com Java Julio Cesar Nardi julionardi@yahoo.com.br 2011/2 Aula 01: Começando com Java Objetivos: Compreender o que é Java, OO e suas vantagens; Entender os procedimentos para criação

Leia mais

Curso de Eng. Informática Linguagens de Programação. C Sharp University Data Processing. (C Sharp Universidade de Processamento de Dados) Docente:

Curso de Eng. Informática Linguagens de Programação. C Sharp University Data Processing. (C Sharp Universidade de Processamento de Dados) Docente: Trabalho elaborado por: Carlos Palma nº5608 Curso de Eng. Informática Linguagens de Programação C Sharp University Data Processing (C Sharp Universidade de Processamento de Dados) Docente: José Jasnau

Leia mais

FERRAMENTAS NECESSÁRIAS PARA O DESENVOLVIMENTO EM C#

FERRAMENTAS NECESSÁRIAS PARA O DESENVOLVIMENTO EM C# FERRAMENTAS NECESSÁRIAS PARA O DESENVOLVIMENTO EM C# Camila Sanches Navarro 1,2, Willian Magalhães 2 ¹Universidade paranaense (Unipar) Paranavaí PR Brasil sanchesnavarro@gmail.com wmagalhaes@unipar.br

Leia mais

Parte I Princípios básicos do Microsoft.NET Framework

Parte I Princípios básicos do Microsoft.NET Framework Sumário Parte I Princípios básicos do Microsoft.NET Framework Capítulo 1 A arquitetura da plataforma de desenvolvimento.net Framework.............................. 35 Compilando código-fonte em módulos

Leia mais

TRABALHO #1 Sistemas de Informação Distribuídos: Reflexão sobre a segurança

TRABALHO #1 Sistemas de Informação Distribuídos: Reflexão sobre a segurança DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA Negócio Electrónico, 2006/2007 TRABALHO #1 Sistemas de Informação Distribuídos: Reflexão sobre a segurança

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

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy) Capítulo 4 João Lourenço Joao.Lourenco@di.fct.unl.pt Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa 2007-2008 MARIE (Machine Architecture Really Intuitive and Easy) Adaptado dos transparentes

Leia mais

OFICIAL DA ORDEM MILITAR DE CRISTO MEDALHA DE EDUCAÇÃO FÍSICA E BONS SERVIÇOS. Circular n.º 029/2014 PORTAL FPT Abertura aos atletas

OFICIAL DA ORDEM MILITAR DE CRISTO MEDALHA DE EDUCAÇÃO FÍSICA E BONS SERVIÇOS. Circular n.º 029/2014 PORTAL FPT Abertura aos atletas Circular n.º 029/2014 PORTAL FPT Abertura aos atletas Exmo. Sr. Presidente, Após muitos meses de desenvolvimento e melhorias contínuas na nova plataforma informática onde se inclui o amplamente divulgado

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

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

NOVIDADES DO JAVA PARA PROGRAMADORES C

NOVIDADES DO JAVA PARA PROGRAMADORES C PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB NOVIDADES DO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o Conceito de Classes e Objetos Capacitar para a criação de objetos simples

Leia mais

Introdução. 1.1. Âmbito do Documento

Introdução. 1.1. Âmbito do Documento Introdução Embora o conceito de virtualização, não seja um conceito novo, o uso desta tecnologia vem crescendo exponencialmente nas infra-estruturas de TI. Este crescimento deve-se sobretudo aos benefícios

Leia mais

Programação de Computadores II: Java. / NT Editora. -- Brasília: 2014. 82p. : il. ; 21,0 X 29,7 cm.

Programação de Computadores II: Java. / NT Editora. -- Brasília: 2014. 82p. : il. ; 21,0 X 29,7 cm. Autor José Jesse Gonçalves Graduado em Licenciatura em Matemática pela Universidade Estadual de São Paulo - UNESP, de Presidente Prudente (1995), com especialização em Análise de Sistemas (1999) e mestrado

Leia mais

Teste de software. Definição

Teste de software. Definição Definição O teste é destinado a mostrar que um programa faz o que é proposto a fazer e para descobrir os defeitos do programa antes do uso. Quando se testa o software, o programa é executado usando dados

Leia mais

Sistemas Operacionais 1/66

Sistemas Operacionais 1/66 Sistemas Operacionais 1/66 Roteiro Máquinas virtuais Emuladores Propriedades Benefícios Futuro 2/66 Sistemas de Computadores Os sistemas de computadores são projetados com basicamente 3 componentes: hardware

Leia mais

Suporte à Engenharia Reversa para o ambiente SEA

Suporte à Engenharia Reversa para o ambiente SEA Otavio Pereira Suporte à Engenharia Reversa para o ambiente SEA Orientador: Ricardo Pereira e Silva Universidade Federal de Santa Catarina - UFSC Departamento de Informática e Estatística - INE Florianópolis

Leia mais

Programação Avançada

Programação Avançada Índice 1.1 - Introdução História A plataforma Java 1.2 - Conceitos Fundamentais na programação por objectos Objectos Encapsulamento Classes Herança Polimorfismo Interfaces Pacotes 1/24 1.1 Introdução 1.1

Leia mais

1 UML (UNIFIED MODELING LANGUAGE)

1 UML (UNIFIED MODELING LANGUAGE) 1 UML (UNIFIED MODELING LANGUAGE) Segundo Tonsig (2003), para conseguir desenvolver um software capaz de satisfazer as necessidades de seus usuários, com qualidade, por intermédio de uma arquitetura sólida

Leia mais