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

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

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

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

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

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

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

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

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

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

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

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

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

Iteração 2 Design inicial

Iteração 2 Design inicial Universidade de Aveiro Departamento de Electrónica, Telecomunicações e Informática Engenharia de Software Iteração 2 Design inicial Projecto: FX-Center Grupo: BEDS David Pacheco (nº 32665) Cesário Lucas

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

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

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

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

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

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

Laboratório 4 Validação do Formulário

Laboratório 4 Validação do Formulário Laboratório 4 Validação do Formulário Introdução Agora que já definimos os nossos documentos usando xhtml e já os embelezámos através da utilização das CSS, está na hora de validar a informação que o utilizador

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

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

ASP.NET. Guia do Desenvolvedor. Felipe Cembranelli. Novatec Editora. www.novateceditora.com.br

ASP.NET. Guia do Desenvolvedor. Felipe Cembranelli. Novatec Editora. www.novateceditora.com.br ASP.NET Guia do Desenvolvedor Felipe Cembranelli Novatec Editora www.novateceditora.com.br 1 Introdução à plataforma.net A plataforma Microsoft.NET.NET é uma nova plataforma de software para desenvolvimento

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

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

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

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

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

Enunciado do Projecto

Enunciado do Projecto C O M P U T A Ç Ã O M Ó V E L 2 0 0 7 / 2 0 0 8 Enunciado do Projecto 17 de Março de 2008 1. Objectivos Desenvolver uma aplicação num domínio aplicacional específico que envolva replicação e sincronização

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

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

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

4 Conversor EDTV Raw. 4.1 Arquitetura

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

Leia mais

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

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

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

Capítulo 1. Linguagens e processadores

Capítulo 1. Linguagens e processadores Capítulo 1. 1. Linguagens 1.1. Definição Definição : Uma linguagem L sobre um alfabeto, também designado com frequência por vocabulário, V, é um conjunto de frases, em que cada frase é uma sequência de

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

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

Centro Atlântico, Lda., 2011 Ap. 413 4764-901 V. N. Famalicão, Portugal Tel. 808 20 22 21. geral@centroatlantico.pt www.centroatlantico.

Centro Atlântico, Lda., 2011 Ap. 413 4764-901 V. N. Famalicão, Portugal Tel. 808 20 22 21. geral@centroatlantico.pt www.centroatlantico. Reservados todos os direitos por Centro Atlântico, Lda. Qualquer reprodução, incluindo fotocópia, só pode ser feita com autorização expressa dos editores da obra. Microsoft Excel 2010 Colecção: Software

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

PARTE I A Linguagem C#

PARTE I A Linguagem C# PARTE I A Linguagem C# Capítulo 1, C# 3.0 e o.net 3.5 Capítulo 2, Iniciando: Hello World Capítulo 3, Fundamentos da Linguagem C# Capítulo 4, Classes e Objetos Capítulo 5, Herança e Polimorfismo Capítulo

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

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

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

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática Programação Orientada a Objectos - 28/29; P. Prata, P. Fazendeiro 2 A tecnologia Java Uma ideia base da linguagem JAVA é a de que um programa em JAVA deve poder ser executado em qualquer tipo de computador

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

MOR: Uma Ferramenta para o Mapeamento Objeto-Relacional em Java

MOR: Uma Ferramenta para o Mapeamento Objeto-Relacional em Java MOR: Uma Ferramenta para o Mapeamento Objeto-Relacional em Java Leonardo Gresta Paulino Murta Gustavo Olanda Veronese Cláudia Maria Lima Werner {murta, veronese, werner}@cos.ufrj.br COPPE/UFRJ Programa

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

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

OCL: Object Constraint Language

OCL: Object Constraint Language OCL: Amílcar Domingos Rodrigues Santy Fernandes, Girson César Silva Monteiro, Rui Sá Guerra, Simão Castro Faculdade de Engenharia da Universidade Do Porto, Rua Dr. Roberto Frias, s/n 4200-465 Porto, Portugal

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

Codificação da informação. Execução do programa. Codificação binária. Representação de inteiros positivos. Representação binária

Codificação da informação. Execução do programa. Codificação binária. Representação de inteiros positivos. Representação binária Execução do a calcula-se determinada solução (output) para determinado problema (input) usando um a que é executado no dados do problema (informação de entrada) a solução (informação resultante) Codificação

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

Relatório de Segurança em Sistemas Informáticos

Relatório de Segurança em Sistemas Informáticos Relatório de Segurança em Sistemas Informáticos Autenticação em cartões electrónicos Cartão do Cidadão Bruno Duarte ei07136 Pedro Barbosa ei08036 Rúben Veloso ei11001 Índice Índice...2 Introdução...1 Cartão

Leia mais

Programação com Objectos. Processamento de Dados I. 5. Excepções

Programação com Objectos. Processamento de Dados I. 5. Excepções Programação com Objectos Processamento de Dados I 5. Excepções 1 O que é uma excepção? Tratamento de excepções: Try e Catch Lançamento de excepções: Throw e Throws Classes de excepção Programação com Objectos

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

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários.

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários. Os sistemas computacionais atuais permitem que diversos programas sejam carregados na memória e executados simultaneamente. Essa evolução tornou necessário um controle maior na divisão de tarefas entre

Leia mais

geral@centroatlantico.pt www.centroatlantico.pt Impressão e acabamento: Inova 1ª edição: Outubro de 2003 ISBN: 972-8426-76-3 Depósito legal: 202574/03

geral@centroatlantico.pt www.centroatlantico.pt Impressão e acabamento: Inova 1ª edição: Outubro de 2003 ISBN: 972-8426-76-3 Depósito legal: 202574/03 FICHEIROS COM EXEMPLOS Envie um e-mail* para software@centroatlantico.pt para conhecer os endereços de Internet de onde poderá fazer o download dos ficheiros com os exemplos deste livro. * O leitor consente,

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

Definições. Parte 02. Java Conceitos e. Desenvolvimento de Programação Orientada a Objetos. Prof. Pedro Neto

Definições. Parte 02. Java Conceitos e. Desenvolvimento de Programação Orientada a Objetos. Prof. Pedro Neto Java Conceitos e Definições Parte 02 Prof. Pedro Neto Aracaju Sergipe - 2011 Conteúdo 2 O que é Java i. Java ii. Máquina Virtual iii. Java lento? Hotspot e JIT iv. Versões do Java e a confusão do Java2

Leia mais

Sistemas Operativos I

Sistemas Operativos I Componentes de um Sistema Operativo Maria João Viamonte / Luis Lino Ferreira Fevereiro de 2006 Sistema Operativo Um Sistema Operativo pode ser visto como um programa de grande complexidade, responsável

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

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

CAPÍTULO 4 Implementação do modelo num programa de cálculo automático

CAPÍTULO 4 Implementação do modelo num programa de cálculo automático CAPÍTULO 4 Implementação do modelo num programa de cálculo automático Neste capítulo, será feita a demonstração da aplicação do modelo num programa de cálculo automático, desenvolvido em linguagem de programação

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

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

Porque as suas regras de negócio são específicas, precisa de uma sua solução de gestão que permite gerir essa diferença.

Porque as suas regras de negócio são específicas, precisa de uma sua solução de gestão que permite gerir essa diferença. Porquê NEXT Vision Porque as suas regras de negócio são específicas, precisa de uma sua solução de gestão que permite gerir essa diferença.... Poder de adaptação Porque cabe a si decidir como pretende

Leia mais

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos:

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos: Estruturas de Sistemas Operacionais Podemos analisar um sistema operacional sob diversos aspectos: Os serviços que o sistema operacional oferece. A interface que o sistema operacional torna disponível

Leia mais

Laboratório I Aula 2

Laboratório I Aula 2 Laboratório I Aula 2 Prof. Msc. Anderson da Cruz Fases da Programação Implementação de Linguagens de Programação Compilação geração de código executável dependente da plataforma de execução tradução lenta

Leia mais

A interface do Microsoft Visual Studio 2005

A interface do Microsoft Visual Studio 2005 Tarefa Orientada 1 A interface do Microsoft Visual Studio 2005 Objectivos: Introdução à framework.net Iniciar o Visual Studio 2005. Criar um novo projecto de Windows Forms em Visual Basic Introdução à

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

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

Leia mais

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas Linguagem de Programação JAVA Professora Michelle Nery Nomeclaturas Conteúdo Programático Nomeclaturas JDK JRE JEE JSE JME JVM Toolkits Swing AWT/SWT JDBC EJB JNI JSP Conteúdo Programático Nomenclatures

Leia mais

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

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

Leia mais

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

PADI 2015/16. Aula 1 Introdução à Plataforma.NET PADI 2015/16 Aula 1 Introdução à Plataforma.NET 1 Sumário 1. Framework.NET Arquitectura 2. Linguagem C# 2.0 Sintaxe C# vs. Java vs. C++ 3. IDE: MS Visual Studio 2005 ou superior Ferramentas Console/Win

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

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

Programação Externa. capítulo 3.

Programação Externa. capítulo 3. capítulo 3. Programação Externa A partir da versão 2.0, o VRML possui capacidade de adicionar alguns comportamentos aos objectos, tais como animação, detecção de acções do utilizador, execução de clips

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

Arquitectura de Computadores II. Máquinas Virtuais

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

Leia mais

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

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

Uma Base de Dados é uma colecção de dados partilhados, interrelacionados e usados para múltiplos objectivos.

Uma Base de Dados é uma colecção de dados partilhados, interrelacionados e usados para múltiplos objectivos. 1. Introdução aos Sistemas de Bases de Dados Uma Base de Dados é uma colecção de dados partilhados, interrelacionados e usados para múltiplos objectivos. O conceito de base de dados faz hoje parte do nosso

Leia mais

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa ARQUITETURA DE COMPUTADORES 1 Rogério Spindula Rosa 2 EXECUÇÃO DE PROGRAMAS PROGRAMA 3 4 INTRODUÇÃO Hoje é raro escrever um programa diretamente em linguagem de computador em virtude da enorme dificuldade

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

1.1 A abordagem seguida no livro

1.1 A abordagem seguida no livro 1- Introdução A área de administração de sistemas e redes assume cada vez mais um papel fundamental no âmbito das tecnologias da informação. Trata-se, na realidade, de uma área bastante exigente do ponto

Leia mais

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

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

Leia mais

Documentação sobre a Tecnologia RAID

Documentação sobre a Tecnologia RAID Documentação sobre a Tecnologia RAID Enquanto especialista no armazenamento de dados, a LaCie reconhece que quase todos os utilizadores de computadores irão necessitar de uma solução de cópia de segurança

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

Principais características

Principais características .Net Framework O que é.net? Proprietário da Microsoft Versão simplificada para Linux Versão compacta para dispositivos móveis Plataforma de desenvolvimento e execução Interface com usuário, conectividade

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

.Net Remoting Pizzaria

.Net Remoting Pizzaria .Net Remoting Pizzaria 1º Trabalho Prático Tecnologias de Distribuição e Integração 4º Ano do Mestrado Integrado em Engenharia Informática e Computação João Carlos Figueiredo Rodrigues Prudêncio ei07111@fe.up.pt

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

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

Conhecendo o Visual FoxPro 8.0 Parte 3

Conhecendo o Visual FoxPro 8.0 Parte 3 AULA Conhecendo o Visual FoxPro 8.0 Parte 3 Continuando nossa saga pelas ferramentas do Visual FoxPro 8.0, hoje vamos conhecer mais algumas. A Ferramenta Class Designer A Class Designer é a ferramenta

Leia mais

FERRAMENTAS PARA DESENVOLVIMENTO EM C#

FERRAMENTAS PARA DESENVOLVIMENTO EM C# FERRAMENTAS PARA DESENVOLVIMENTO EM C# Camila Sanches Navarro 1,2, Wyllian Fressatti 2 ¹Universidade paranaense (Unipar) Paranavaí PR Brasil sanchesnavarro@gmail.com wyllian@unipar.br Resumo. Este artigo

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

Capítulo 3. Programação por objectos em Java

Capítulo 3. Programação por objectos em Java Capítulo 3. Programação por objectos em Java 1/46 Índice Indice 3.1 - Qualificadores de visualização 3.2 - Classe 3.3 - Objecto 3.4 - Métodos 3.5 - Herança 3.6 - Reescrita de métodos 3.7 - Classes abstractas

Leia mais