JingleOS: An operating system to embedded devices with language-based protection

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

Download "JingleOS: An operating system to embedded devices with language-based protection"

Transcrição

1 JingleOS: An operating system to embedded devices with language-based protection Luiz Eugênio Fernandes Tenório Centro de Informática (CIn) Universidade Federal de Pernambuco (UFPE) Av. Jornalista Anibal Fernandes, s/n - Cidade Universitária Recife - PE - Brasil Silvio Romero de Lemos Meira Centro de Informática (CIn) Universidade Federal de Pernambuco (UFPE) Av. Jornalista Aníbal Fernandes, s/n - Cidade Universitária Recife - PE - Brasil Abstract Language based protection and high-level language virtual machines (JVM, CLR) have solved many problems of portability and dependability. Development of operating systems with these characteristics for embedded systems could enjoy these benefits with the solution of basic problems related to resource consumption and performance. This paper presents the JingleOS, an operating system designed on these concepts for devices with a few kibibytes of RAM and 8 bits microcontrollers. To support the system design, advanced compiler techniques and extensions of the Java programming language were used, in order to allow low-level hardware access and bare metal execution. Resumo Proteção baseada em linguagens e máquinas virtuais para linguagens de alto nível (JVM, CLR) tem solucionado diversos problemas de portabilidade e confiabilidade. O desenvolvimento de sistemas operacionais com estas características para sistemas embarcados poderiam usufruir destes benefícios com a solução de alguns problemas básicos relacionados a consumo de recursos e desempenho. Este artigo apresenta o JingleOS, um sistema operacional projetado sobre estes conceitos para dispositivos com poucos kibibytes de RAM e microcontroladores de 8 bits. Para suportar o projeto do sistema, foram utilizadas técnicas avançadas de compilação e extensões da linguagem de programação Java a fim de permitir acesso e execução direta sobre o hardware. I. INTRODUÇÃO Sistemas desenvolvidos para execução na Internet das Coisas sofrem maiores restrições de recursos devido ao tamanho reduzido dos dispositivos [1]. Sendo os recursos limitados, o desenvolvimento tem como base decisões e otimizações que podem comprometer a confiabilidade na presença de defeitos escapados. A manipulação incorreta do hardware e uso de ponteiros inválidos são causas comuns destes defeitos. Uma solução conhecida é o uso de máquinas virtuais para linguagens de alto nível (ex. Java Virtual Machine - JVM, Common Language Runtime CLR). Este tipo de máquina virtual tem capacidade de controle e contenção através da abstração de acesso direto ao hardware, gerenciamento automático de memória e suporte a proteção baseada em linguagens. Devido à quantidade limitada de recursos de processamento e armazenamento nos dispositivos, estas soluções normalmente são consideradas inadequadas principalmente por causar impacto no desempenho geral do sistema e ter um consumo excessivo de memória. Este artigo apresenta uma solução para utilização de máquinas virtuais nestes dispositivos através de um método alternativo de mapeamento entre o hardware e elementos básicos da linguagem de programação combinado a compilação estática (ahead-of-time) do sistema. O mapeamento para o hardware acontece através de metadados nos elementos da linguagem (atributos e classes), permitindo o acesso ao hardware através de alteração de variáveis ou vetores, enquanto que a compilação adiantada evita o impacto no desempenho. O estudo de caso apresenta um sistema operacional baseado em uma máquina virtual metacircular que foi desenvolvida para execução em um microcontrolador ATmega328 (16MHz) com 2KiB de memória SRAM e 32KiB de memória flash e execução em processadores compatíveis com x86, como o Intel Atom. Além da máquina virtual, um compilador específico efetua a tradução antecipada entre instruções virtuais e nativas, e otimização para alocação simples de registradores com o intuito de minimizar o impacto da arquitetura baseada em pilha na máquina virtual. II. MOTIVAÇÃO Sistemas embarcados tem uma dependência intrínseca do hardware [2]. O desenvolvimento destes sistemas deve considerar esta necessidade durante a definição da plataforma e da linguagem de programação. Diante deste cenário, linguagens de montagem e a linguagem C são escolhas usuais por permitir uma sintonia maior nos recursos utilizados, fato este que permite reduzir a necessidade de recursos para armazenamento e processamento. Contudo, estas linguagens não tem objetivo de abstrair o hardware, permitindo a um desenvolvedor realizar otimizações que, algumas vezes não propositalmente, causam falhas [3]. A utilização de máquinas virtuais para linguagens de alto nível se consolidou no desenvolvimento de aplicações para dispositivos móveis, desktop e Web após as especificações da Java Virtual Machine (JVM) [4] [5] e Common Language Infrastructure (CLI) [30]. Máquinas virtuais definem

2 abstrações do ambiente de execução para permitir a portabilidade sem recompilação e fornece gerenciamento automático de memória, reduzindo a necessidade de manipulação de ponteiros e as ocorrências de referências nulas, conhecidos causadores de falhas [6]. As abstrações fornecidas por estas máquinas virtuais necessitam de mais recursos [7] e, sendo a execução virtualizada, podem reduzir o desempenho geral do sistema. Além disso, não foram projetadas para execução direta no hardware, necessitando de um sistema operacional e bibliotecas. Para alcançar portabilidade, estas máquinas virtuais [8] definem instruções intermediárias que são interpretadas em tempo de execução, evitando assim, a dependência de um determinado conjunto de instruções nativas. O compromisso com a portabilidade têm o efeito colateral de diminuição do desempenho e da eficiência em um sistema interpretado. A compilação dinâmica (just-in-time) [9] minimiza esta perda através da tradução da instruções intermediárias para instruções nativas. Contudo, mesmo utilizando estes métodos de compilação, as máquinas virtuais ainda são consideradas inadequadas para o contexto de sistemas embarcados, principalmente em plataformas de hardware com poucos kibibytes de memória e microcontroladores 8 ou 16 bits [10]. Em uma avaliação dos principais problemas, estes podem ser caracterizados em: A. Problema 1: Minimizar o uso de recursos em tempo de execução Máquinas virtuais necessitam de estruturas adicionais na memória para fornecer suporte as abstrações de uma linguagem orientada a objetos e ao gerenciamento automático da memória. Cada objeto criado necessita de um cabeçalho para indicar o seu tipo, monitores associados ao objeto, um código hash, campos para o coletor de lixo e tamanho de um vetor (array). Considerando o tamanho médio de 36 bytes por objeto somado ao cabeçalho de 12 bytes [11], um microcontrolador com 2 kibibytes de SRAM poderia armazenar aproximadamente 43 objetos. Isto representa um custo adicional de 516 bytes (25% da SRAM) apenas para armazenar dados sobre os objetos. Além dos cabeçalhos, a máquina virtual necessita de objetos adicionais (metaobjetos) para descrever as estruturas das classes. Estas estruturas contém a localização dos atributos de um objeto, com seu respectivo tipo, e a tabela de métodos virtuais para suportar ligação dinâmica. Quando um objeto é instanciado, deve existir pelo menos outro objeto descrevendo sua classe e uma tabela de métodos, sendo este o custo adicional intrínseco do suporte a orientação a objetos na máquina virtual. Aplicações Java ou.net utilizam uma tabela de símbolos nas classes compiladas para realizar referências a constantes indispensáveis no suporte a ligação dinâmica. Como exemplo, após a compilação, as instruções geradas para invocação de um método tem referência para uma estrutura contendo o nome da classe, nome do método e sua a descrição. Isto permite à máquina virtual efetuar as ligações entre o chamador e chamado tardiamente em tempo de execução [14]. Estas constantes, armazenadas em uma área denominada constant pool, ocupam mais de 50% do espaço de uma classe após a compilação [31] e aumentam consideravelmente o footprint das aplicações. B. Problema 2: Execução de código intermediário na máquina virtual ou tradução para código nativo Para permitir a portabilidade entre diferentes plataformas, as aplicações são compiladas em código intermediário. Desta maneira a máquina virtual deve interpretar ou traduzir em tempo de execução código da aplicação para código nativo. Máquinas virtuais modernas utilizam uma estratégia híbrida [12]. Os métodos são interpretados até alcançar certa quantidade de execuções, o que justifica o custo da tradução dinâmica, evitando o consume de recursos na compilação de métodos pouco utilizados. As estratégias acima devem ser reavaliadas no contexto de microcontroladores. A interpretação requer mais processamento e resulta em menor desempenho se comparado à execução nativa enquanto que a tradução dinâmica requer execução de código gerado em tempo de execução. Contudo, a arquitetura Harvard [32] não permite a execução de código na SRAM. Uma solução é escrever o resultado da compilação dinâmica na memória EEPROM, todavia o acesso a esta memória é mais lento e tem impacto significativo no tempo de compilação [33]. C. Problema 3: Acesso ao hardware sem comprometer as abstrações da máquina virtual Considerando que uma aplicação embarcada tem a maioria de suas funcionalidades dependentes do hardware, o mecanismo de acesso deve considerar esta premissa e realizar o controle suficiente para minimizar o impacto no estado da máquina virtual na ocorrência de falhas. A aplicação executada sobre a máquina virtual necessita de suporte para comunicação com dispositivos, execução de operações nativas não mapeadas nas instruções intermediárias e o tratamento de interrupções. Com a execução de instruções nativas, uma aplicação pode realizar desvios de execução, manipular a pilha de operadores e a memória alocada para a máquina virtual. Isto permite a alteração indiscriminada do estado da máquina virtual, comprometendo as abstrações fornecidas e verificações. Uma alternativa para permitir este acesso sem comprometer completamente a máquina virtual é a utilização de métodos nativos [13], ou seja, funções de uma biblioteca nativa mapeadas em métodos da aplicação. Ao invocar um destes métodos, a máquina virtual cria uma nova pilha para execução da função em questão. Isto evita alterações diretamente na pilha da máquina virtual, contudo, ainda permite o acesso a qualquer região da memória, incluindo as estruturas internas da máquina virtual através da manipulação direta de ponteiros. De qualquer forma, a criação de uma pilha adicional é impeditivo em um sistema com poucos kibibytes de memória, o que descarta esta alternativa.

3 III. SISTEMA OPERACIONAL JINGLEOS JingleOS é um sistema operacional orientado a objetos com proteção baseada em linguagem para sistemas embarcados, composto por uma máquina virtual metacircular e extensões da linguagem Java. A máquina virtual foi projetada seguindo a especificação da máquina virtual Java 7 [14] e restrições definidas no CLDC 1.0 [15]. Está sendo desenvolvida inteiramente em Java para execução de aplicações Java. Um compilador estático (aheadof-time) traduz o código intermediário da máquina virtual para código de montagem. Aplicações e módulos do sistema operacional seguem a mesma estratégia de compilação. O código resultante da tradução é ligado através do GNU LD [16]. O compilador estático, denominado jinglec, foi desenvolvido especificamente para o sistema, utilizando a arquitetura clássica de compiladores [17] para permitir a adoção de novas plataformas através da especialização de uma classe para geração de código nativo. A estratégia para tradução do código intermediário pode ser customizada, independente do gerador de código nativo. O compilador também foi desenvolvido na linguagem Java, sendo isto necessário para utilização do mesmo código na compilação dinâmica e estática. Ao utilizar código intermediário, o sistema pode ser portado para uma nova plataforma através de recompilação, necessitando apenas do mapeamento de elementos (atributos e métodos) da linguagem para o novo hardware. Metadados [18] indicam os recursos de hardware que devem ser mapeados e o compilador emite o código necessário para acesso a estes recursos. Nas próximas secções serão apresentadas as estratégias definidas no projeto do JingleOS para solucionar os problemas citados. A. Solução 1: Minimizar o uso de recursos em tempo de execução Para reduzir o custo de cabeçalho, os objetos do JingleOS utilizam atributos da classe java.lang.object para armazenar as informações sobre o objeto. Não existe nenhum cabeçalho implícito da máquina virtual. O mesmo mecanismo utilizado para acesso a um atributo (instruções getfield, setfield [14]) é utilizado para obter informações do cabeçalho, o que evita a existência de código duplicado para ler um atributo e manipular o cabeçalho do objeto. Um efeito positivo da representação explícita do cabeçalho do objeto é a facilidade para definição de novos modelos. Para definir um novo modelo, é necessária apenas a criação de uma nova classe java.lang.object com os atributos representando os campos desejados no cabeçalho do objeto. Alguns objetos são imutáveis, ou seja, suas classes não permitem alteração do estado do objeto. Nestes casos, o compilador armazena estes objetos na área de código (EEPROM), economizando assim a memória SRAM. Além dos objetos, também são armazenadas constantes das classes compiladas. A máquina virtual necessita de alguns objetos para executar uma aplicação. Objetos que realizam o gerenciamento de memória, threads e carga de classes devem existir para fornecer a uma aplicação estes serviços básicos. Considerando que estes objetos sempre serão instanciados ao iniciar a máquina virtual, o compilador realiza uma otimização e serializa estes objetos, armazenando na área de dados do executável. Quando a máquina virtual é iniciada, não existe nenhum custo para instanciar estes objetos, pois uma imagem deles já existe na memória. Para economizar na quantidade de objetos na memória heap, instâncias de java.lang.string não são representadas como objetos. Vetores de bytes localizados na área de código contêm os bytes dos caracteres e, durante a compilação, qualquer invocação de método em uma instância será convertida em um acesso a esta área de memória. A biblioteca Java adotada é uma versão reduzida da CLDC 1.0. Esta biblioteca contém o mínimo necessário para execução de uma aplicação Java (classes dos pacotes java.lang e java.io), contudo pode ser estendida ou substituída por uma versão mais completa. Outra biblioteca, específica do JingleOS, contém as anotações e classes de suporte a instruções Java que não podem ser traduzidas diretamente para instruções nativas. Durante a compilação, o constant pool das classes são analisados para permitir a criação eficiente do runtime constant pool com quantidade mínima de memória e sem redundâncias. Literais numéricos são utilizados diretamente quando o código nativo é gerado a partir de instruções Java. Logo, constantes dos tipos Integer 1, Float, Long e Double [14] não são necessárias em tempo de execução. Outras constantes são evitadas com ligações resolvidas na compilação estática. O JingleOS utiliza metaobjetos para descrição de classes, atributos e métodos através de instâncias das classes Field, Klass e Method, presentes no pacote org.jingleos.core.runtime. Estas instâncias são criadas após a leitura dos arquivos de classe (.class) e serializadas para a área de dados do executável na compilação estática. Quando uma constante de tipo Class, Fieldref, Methodref, InterfaceMethodref [14] é encontrada, a referência simbólica é transformada em uma referência para um metaobjeto. A classe java.lang.string, por exemplo, é descrita através de uma instância de Klass e a ligação com a sua superclasse é representada como uma referência a instância de Klass que descreve java.lang.object. Para as constantes do tipo String, a referência do vetor de caracteres será mantido no runtime constant pool. Os caracteres são obtidos da entrada do constant pool apontada no campo string_index da estrutura CONSTANT_String_info [14]. No caso da mesma string ser utilizada por mais de uma classe, apenas uma referência será mantida. Ao final da compilação, as constantes do tipo Utf8 não precisam ser mantidas pois seu conteúdo foi copiado para instâncias de java.lang.string referenciadas nos metaobjetos ou 1 O prefixo CONSTANT_ foi omitido da descrição das constantes para facilitar a leitura.

4 no runtime constant pool. Constantes do tipo NameAndType são resolvidas ao gerar código a partir de instruções Java e, consequentemente, não precisam ser mantidas. Como o CLDC 1.0 não contempla a invocação dinâmica, constantes do tipo MethodHandle, MethodType e InvokeDynamic não são suportadas. Após a análise do constant pool de todas as classes, as constantes restantes estão referenciadas em um único vetor com elementos do tipo java.lang.object. Como o vetor de constantes não é alterado em tempo de execução, o vetor e objetos referenciados são armazenados na EEPROM, deixando a memória SRAM para objetos criados pela aplicação. Ao compilar estaticamente a classe java.lang.class, o compilador faz referência ao vetor de constantes em um atributo estático desta classe. Desta maneira, instruções e classes do JingleOS tem acesso as constantes em tempo de execução. B. Solução 2: Execução de código intermediário na máquina virtual ou tradução para código nativo O compilador jinglec foi desenvolvido em Java para permitir reuso de código para compilação dinâmica e estática. Durante o projeto do compilador, foram definidas interfaces para permitir adicionar otimizações de acordo com o ambiente de execução. No caso de uma compilação estática, uma classe realizando a interface BytecodeHandler pode executar otimizações que demandam mais recursos [19] e compilação multipasso, enquanto que na compilação dinâmica, outra classe realiza a mesma interface e utiliza uma estratégia de mapeamento direto entre as instruções intermediárias e nativas. Estes cenários demonstram a flexibilidade na estrutura do compilador para permitir a alteração na estratégia de compilação com apenas a substituição de nova classe. A diferença, neste caso, vai ser a escolha da biblioteca de compilação, durante a compilação do próprio compilador. Para complementar a customização das otimizações, existe a independência da plataforma alvo. As interfaces CodeEmitter e DataEmitter definem o contrato para geradores de código e dados. Classes realizando estas interfaces fornecem serviços para os tratadores de instruções intermediárias. A definição de uma nova plataforma acontece através da realização destas interfaces. Na versão atual, o compilador tem suporte para as arquiteturas x86 (Intel Atom) e Atmel AVR (ATmega328). C. Solução 3: Acesso ao hardware sem comprometer as abstrações da máquina virtual Através do mapeamento entre os recursos de hardware e elementos da linguagem de programação (atributos e classes), uma aplicação pode ter acesso a um determinado recurso, sem violar a semântica definida na linguagem Java. Um vetor pode ser mapeado explicitamente em uma região de memória vinculada a um dispositivo, permitindo a aplicação se comunicar com este dispositivo através de I/O mapeado em memória. Entretanto, qualquer tentativa de acesso a um vetor em Java resulta em uma verificação de limites neste vetor. Quando uma aplicação realiza um acesso a uma posição menor que zero ou maior do que o tamanho definido para o vetor, uma exceção é lançada. Considerando que o acesso a memória acontece através de um vetor, a aplicação não poderá realizar acesso utilizando um índice inválido, evitando acessos indevidos que resultariam na escrita ou leitura de áreas indevidas. O mapeamento acontece através de metadados (anotações) nos atributos e métodos de uma classe. Ao encontrar instruções intermediárias que utilizam elementos anotados, o compilador emite um código específico ao invés de traduzir as instruções. O código emitido é apenas um mecanismo de acesso aos recursos de hardware (registradores e memória), não realizando nenhum controle de acesso quando o recurso é compartilhado por mais de uma classe. Esta premissa mantém as características existentes dos elementos da linguagem e permite a customização das políticas de acesso de acordo com as necessidades da aplicação. O desenvolvedor deve providenciar os controles necessários (visibilidade restrita, blocos sincronizados) de acordo com sua necessidade para evitar inconsistências no uso destes recursos. Ao realizar o mapeamento direto entre os elementos da linguagem e os recursos de hardware, a portabilidade da aplicação pode ser comprometida. A utilização dos mapeamentos é recomendada apenas nas classes da plataforma (API do Java e JingleOS), estratégia essa comum em outras máquinas virtuais [13][21]. Sendo assim, o esforço de portabilidade está concentrado na implementação destas APIs para outra arquitetura, onde os recursos de hardware são isolados das aplicações através da utilização de alguns padrões de projeto [34]. Na versão corrente, o JingleOS suporta os seguintes metadados: <r> ): Realiza o mapeamento entre um atributo de classe e um registrador <r> do microcontrolador. Somente os tipos primitivos inteiros byte, short e int são suportados. O registrador mapeado deve ter o mesmo tamanho do tipo. Em um microcontrolador Atmel AVR, os registradores R0-R31 podem ser mapeados em atributos do tipo byte e os registradores R26-R31, utilizados para endereçamento indireto, podem ser mapeados no tipo short. O tipo int (32 bits) não é suportado. No caso do Atom, atributos podem ser mapeados em qualquer registrador (ex. AH, AX, EAX) (Figure 1). Ao encontrar instruções getstatic e setstatic com referência para um atributo anotado, o código nativo gerado utiliza o registrador informado, ao invés de acessar os atributos reais do objeto (a área de memória para estes atributos não é considerada no objeto quando esta anotação é utilizada). Anotações em atributos de instância não são permitidas e as restrições de visibilidade seguem o especificado na linguagem. Figura 1. Registrador ponteiro de pilha mapeado em um atributo.

5 <b>, size= <s> ): Realiza o mapeamento entre atributos de classe e uma região de memória iniciada no endereço <b> e com tamanho opcional <s> (Figure 2). Para utilização com tipos primitivos ou objetos, deve ser informado apenas o endereço. Qualquer tipo é suportado. No caso de vetores, o tamanho deve ser informado para permitir a verificação de limites como especificado nas instruções <x>aload e <x>astore. Os elemento do vetor também podem ser de qualquer tipo. Figura 2. Buffer de vídeo (Intel Atom em modo real) mapeado em um vetor sendo utilizado em um método para limpar o console. <ins> <{op}> ): Esta anotação indica o mapeamento entre um método de classe nativo e uma instrução nativa <ins> em linguagem de montagem (Figura 3). As marcações {op} serão substituídas por parâmetros do método. Apenas tipos primitivos inteiros são suportados como parâmetro. Ao encontrar este meta-dado em um método invocado (instrução intermediária invokestatic), o compilador emite um pop na pilha de operandos para cada parâmetro, na ordem indicada no método, e emite a instrução indicada com os parâmetros. As únicas validações realizadas na invocação destes métodos são dos tipos de parâmetro. Por não ter nenhum controle sobre a instrução indicada, o uso desta anotação é recomendado apenas para I/O, interrupções e instruções nativas sem correspondente no código intermediário da máquina virtual. Figura 3. Métodos nativos mapeados nas instruções in e out (Atmel AVR). O método in utiliza a notação {ret} para indicar que o conteúdo do registrador deverá ser o retorno do método. <n> ): Anotação utilizada para indicar que um determinado método de classe deve ser preparado e registrado como um tratador de interrupção. Ao encontrar esta anotação, o compilador deve emitir código para armazenar e restaurar o contexto, antes e depois da execução do método. Além disso, deve ser emitido código para registrar o método como tratador da interrupção indicada <n>. IV. TRABALHOS RELACIONADOS Existem outras máquinas virtuais para sistemas embarcados, conforme apresentado nesta seção. Contudo, no geral, os requisitos mínimos para execução estão acima do esperado para dispositivos na Internet das Coisas [1]. Além disso, os sistemas operacionais com proteção baseada em linguagem têm sistemas desktop ou dispositivos móveis como alvo. A K Virtual Machine (KVM) [20] é uma máquina virtual da Oracle projetada para dispositivos limitados e utilizada principalmente em telefones celulares. Desenvolvida na linguagem C, esta máquina virtual é a implementação de referencia da especificação CLDC [15]. Tem como requisitos mínimos para execução 40KiB de memória RAM e processadores 16 bits. As aplicações (denominadas MIDlets) são executadas através de um interpretador. Na versão 1.0, não existe uma interface definida para acesso ao código nativo. Bibliotecas nativas precisavam utilizar estruturas internas da máquina virtual. Em versões posteriores (1.1 e 1.1.1), uma interface denominada K Native Interface (KNI) [20] foi definida para permitir a interação entre bibliotecas nativas e a KVM. Para contornar as limitações de desempenho da KVM, uma nova máquina virtual denominada CLDC HotSpot [21] foi projetada. As especificações mínimas para execução consideraram os celulares mais recentes da época, com memória RAM entre 1-4MiB e processadores ARM 32 bits, incluindo a extensão Jazelle [22] que realiza execução das instruções Java. Com um hardware não tão limitado, a CLDC HotSpot utiliza técnicas de compilação adaptativa e dinâmica. O acesso a bibliotecas nativas continua utilizando KNI, assim como na KVM. JavaCard [23] é uma especificação de máquinas virtuais para dispositivos com memória RAM na ordem de 1.2KiB e 16KiB de EEPROM ou Flash. Projetada para utilização em cartões inteligentes, executa aplicações através de interpretação de instruções específicas. Aplicações, denominadas applets, necessitam conversão para um formato CAP (Converted APplet) antes da execução. Por questões de segurança, não existe uma interface para permitir acesso ao hardware. Squawk [24] foi projetada para uso em redes sensores sem fio, mais especificamente no dispositivo Sun SPOT. Também foi desenvolvida em Java e conta com um módulo para tradução de código intermediário para C. O núcleo da máquina virtual requer 80KiB de RAM e também suporta execução interpretada. Uma biblioteca de I/O com funções desenvolvidas em C permitem o acesso ao hardware. JamaicaVM [25] e PERC Pico [26] são máquinas virtuais com suporte para sistemas de tempo real, contudo ambas são compatíveis com Java Standard Edition [14] e não permitem o uso em uma plataforma com recursos limitados. A JamaicaVM necessita de um sistema operacional Linux, enquanto que a PERC Pico pode ser executada com um SO ou direto no metal. Singularity [27], JX [28] e JNode [29] são sistemas operacionais desenvolvidos com proteção baseada em linguagem. O primeiro foi desenvolvido em C# enquanto que os outros em Java. Todos tem capacidade para execução em

6 arquitetura x86 e tem como objetivo sistemas desktop, contudo apenas o JX permite execução em telefones celulares. Compilação estática é utilizada em todos os sistemas e o acesso ao hardware é realizado através de métodos nativos. V. CONCLUSÕES JingleOS é um sistema operacional desenvolvido em Java para sistemas embarcados com poucos kibibytes de memória RAM. A proteção do sistema tem como base a linguagem de programação e acesso ao hardware através de mapeamento entre recursos de hardware e elementos da linguagem. A compilação do sistema acontece estaticamente (ahead-oftime) através de tradução de código intermediário para código nativo, permitindo a portabilidade através da recompilação. O projeto do compilador permite o reuso do código para compilação dinâmica e estática apenas com a especialização de algumas classes. REFERENCES [1] L. Atzori, A. Iera, and G. Morabito. The Internet of Things: A survey. Computer Networks, 54(15): , [2] T. Noergaard. Embedded Systems Architecture: A Comprehensive Guide for Engineers and Programmers. Newnes, [3] J. N. Herder, H. Bos, B. Gras, P. Homburg, A. S. Tanenbaum: Fault isolation for device drivers. In Proceedings of the 2009 IEEE/IFIP International Conference on Dependable Systems and Networks (DSN 2009). IEEE Computer Society, Junho [4] Z. Mednieks, L. Dornin, G. B. Meike, M. Nakamura. Programming Android. O'Reilly Media, [5] Brett McLaughlin. Building Java Enterprise Applications. O'Reilly Media, [6] J. N. Herder, H. Bos, B. Gras, P. Homburg, A. S. Tanenbaum. Construction of a Highly Dependable Operating System. In Proceedings of the 6th European Dependable Computing Conference (EDCC-6), pages IEEE Computer Society, Outubro [7] L. R. Clausen, U. P. Schultz, C. Consel, G. Muller. Java bytecode compression for low-end embedded systems. ACM Transactions on Programming Languages and Systems (TOPLAS), 22(3): , Maio [8] T. Downing, J. Meyer. Java Virtual Machine. O'Reilly Media, [9] J. Aycock. A brief history of just-in-time. ACM Computing Surveys (CSUR), 35(2): , Junho [10] J. Caska, M. Schoeberl: Java dust: how small can embedded Java be?. Em Proceedings of the 9th International Workshop on Java Technologies for Real-time and Embedded Systems (JTRES '11), páginas ACM, Setembro [11] D. F. Bacon, S. J. Fink, D. Grove. Space- and Time-Efficient Implementation of the Java Object Model. Em Proceedings of the 16th European Conference on Object-Oriented Programming (ECOOP '02), páginas Springer-Verlag, [12] D. Griswold. The Java HotSpot virtual machine architecture. Sun Microsystems Whitepaper, 1998 [13] S. Liang. Java Native Interface: Programmer's Guide and Specification. Prentice Hall, [14] T. Lindholm, F. Yellin, G. Bracha, A. Buckley. The Java Virtual Machine Specification Java SE 7 Edition, Julho [15] Connected Limited Device Configuration Specification, Sun Microsystems, Março [16] GNU Binutils. August, [17] A. V. Aho, M. S. Lam, R. Sethi, J. D. Ullman. Compilers: Principles, Techniques, and Tools. Prentice Hall, 2006 [18] J. Gosling, B. Joy, G. Steele, G. Bracha, A. Buckley. The Java Language Specification Java SE 7 Edition. Fevereiro, [19] M. D. Smith, N. Ramsey, G. Holloway. A generalized algorithm for graph-coloring register allocation. Em Proceedings of the ACM SIGPLAN 2004 conference on Programming language design and implementation (PLDI 04), páginas ACM, [20] J2ME Building Blocks for Mobile Devices - Whitepaper on KVM and the Connected, Limited Device Configuration CLDC. Sun Microsystems, Maio [21] The CLDC HotSpot Implementation Virtual Machine. Sun Microsystems, Fevereiro [22] ARM Jazelle DBX. ARM Holdings. [23] Java Card Platform, Version 2.2.2, Sun Microsystems, Março [24] D. Simon, C. Cifuentes. The squawk virtual machine: Java on the bare metal. Em Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA '05), páginas ACM, Outubro [25] F. Siebert, A. Walter. Deterministic execution of Java s primitive bytecode operations. Em Proceedings of the Java Virtual Machine Research and Technology Symposium (JVM 01), páginas USENIX, [26] Aonix. Perc pico 1.1 user manual. [27] G. C. Hunt, J. R. Larus. Singularity: rethinking the software stack. ACM SIGOPS Operating Systems Review - Systems work at Microsoft Research, 41(2):37-49, Abril [28] M. Golm, J. Kleinöder, F. Bellosa. Beyond Address Spaces -Flexibility, Performance, Protection, and Resource Management in the Type-Safe JX Operating System. Em Proceedings of the Eighth Workshop on Hot Topics in Operating Systems (HOTOS 01), página 3. IEEE Computer Society, [29] Jnode.org, JNode: Java New Operating System Design Effort. [30] Common Language Infrastructure (CLI), 6 a Edição, Junho [31] C. Rippert, A. Courbot, and G. Grimaud. A low-footprint class loading mechanism for embedded Java virtual machines. Em Proceedings of the 3rd international symposium on Principles and practice of programming in Java (PPPJ '04), páginas ACM, [32] ATMEL. ATmega328P datasheet, doc 8161: 8-bit AVR Microcontroller with 4/8/16/32K Bytes In-System Programmable Flash. [33] D. Deville, A. Galland, G. Grimaud, S. Jean. Smart Card Operating Systems: Past, Present and Future. Em Proceedings of the 5 th NORDU/USENIX Conference. USENIX, [34] E. Gamma, R. Helm, R. Jonhson, J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional, 1994.

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

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

Leia mais

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

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

4 Estrutura do Sistema Operacional. 4.1 - Kernel

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

Leia mais

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

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

Leia mais

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

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

Leia mais

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

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

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

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

Leia mais

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

Arquitetura da Máquina Virtual.NET

Arquitetura da Máquina Virtual.NET Arquitetura da Máquina Virtual.NET Marcelo Coutinho Cordeiro RA002092 Instituto de Computação Unicamp ra002092@ic.unicamp.br RESUMO Esse texto apresenta uma visão geral da arquitetura da máquina virtual

Leia mais

Aspectos de Segurança em Programação com Java

Aspectos de Segurança em Programação com Java Aspectos de Segurança em Programação com Java Marcos Alexandre de Melo Medeiros Paulo Sérgio Motta Pires Departamento de Engenharia de Computação e Automação DCA UFRN marcosam@info.ufrn.br, pmotta@dca.ufrn.br

Leia mais

a Baseado no Capítulo 5 de Inside the Virtual Machine, por Bill Vernners.

a Baseado no Capítulo 5 de Inside the Virtual Machine, por Bill Vernners. Arquitetura da Máquina Virtual Java a 1. Principais subsistemas máquina virtual Java (JVM): Carregador de classes ( class loader ): carrega classes e interfaces a partir de nomes completamente qualificados.

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS EM JAVA*

PROGRAMAÇÃO ORIENTADA A OBJETOS EM JAVA* PROGRAMAÇÃO ORIENTADA A OBJETOS EM JAVA* Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR Fev/2014 *Adaptado de PACHECO, R C S & RIEKE, R N INE UFSC Disponível em: http://wwwstelaufscbr/~pacheco/dsoo/htm/downloadshtm

Leia mais

Marco Aurélio malbarbo@din.uem.br. Uma Visão Geral Sobre Plataforma Java

Marco Aurélio malbarbo@din.uem.br. Uma Visão Geral Sobre Plataforma Java RedFoot J Dukes Uma Visão Geral Sobre Plataforma Java Marco Aurélio malbarbo@din.uem.br 1 Roteiro Objetivos Plataforma Java Linguagem de Programação Maquina Virtual Tecnologias Conclusão 2 Objetivos Geral

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Engenharia da Computação Professor: Rosalvo Ferreira de Oliveira Neto Dados Pessoais Rosalvo Ferreira de Oliveira Neto MSc. em ciência da computação (UFPE) rosalvo.oliveira@univasf.edu.br

Leia mais

AULA 02. 1. Uma linguagem de programação orientada a objetos

AULA 02. 1. Uma linguagem de programação orientada a objetos AULA 02 TECNOLOGIA JAVA O nome "Java" é usado para referir-se a 1. Uma linguagem de programação orientada a objetos 2. Uma coleção de APIs (classes, componentes, frameworks) para o desenvolvimento de aplicações

Leia mais

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

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

Leia mais

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

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

Leia mais

JAVA VIRTUAL MACHINE (JVM)

JAVA VIRTUAL MACHINE (JVM) JAVA VIRTUAL MACHINE (JVM) Por Leandro Baptista, Marlon Palangani e Tiago Deoldoto, 11 de Abril de 2009 A linguagem de programação Java proporciona o desenvolvimento aplicações que podem ser executadas

Leia mais

Conceitos de Linguagens de Programação

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

Leia mais

Estudo comparativo entre tecnologias Java: Applet e JWS.

Estudo comparativo entre tecnologias Java: Applet e JWS. Estudo comparativo entre tecnologias Java: Applet e JWS. Clara Aben-Athar B. Fernandes¹, Carlos Alberto P. Araújo¹ 1 Centro Universitário Luterano de Santarém Comunidade Evangélica Luterana (CEULS/ULBRA)

Leia mais

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

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel A linguagem JAVA A linguagem Java O inicio: A Sun Microsystems, em 1991, deu inicio ao Green Project chefiado por James Gosling. Projeto que apostava

Leia mais

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico Fundamentos de Java Prof. Marcelo Cohen 1. Histórico 1990 linguagem Oak; desenvolvimento de software embutido para eletrodomésticos S.O. para o controle de uma rede de eletrodomésticos o surgimento da

Leia mais

Marcus Vinicius Cruz Xavier. Rascunho do trabalho de conclusão de curso

Marcus Vinicius Cruz Xavier. Rascunho do trabalho de conclusão de curso Universidade Federal de Santa Catarina Departamento de Informática e Estatística Curso de Bacharelado em Ciências da Computação Marcus Vinicius Cruz Xavier Rascunho do trabalho de conclusão de curso Título

Leia mais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

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

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

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

Programação para Dispositivos Móveis. Prof. Wallace Borges Cristo

Programação para Dispositivos Móveis. Prof. Wallace Borges Cristo Programação para Dispositivos Móveis Prof. Wallace Borges Cristo Acesso a informação Notícias, Ringtones, Vídeos Messenger/Chat Jogos Acesso a instituições financeiras M-commerce (Mobile Commerce) Aplicações

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

Prof. M.Sc. Fábio Procópio Prof. M.Sc. João Maria Criação: Fev/2010

Prof. M.Sc. Fábio Procópio Prof. M.Sc. João Maria Criação: Fev/2010 Prof. M.Sc. Fábio Procópio Prof. M.Sc. João Maria Criação: Fev/2010 Primeira Dica Afirmação O que é Java? Características do Java Como Java Funciona Plataforma Java Edições Java Java SE Java EE Java ME

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

Estudo de Caso 2: Windows Vista

Estudo de Caso 2: Windows Vista Faculdades Integradas de Mineiros Curso de Sistemas de Informação Sistemas Operacionais II Estudo de Caso 2: Windows Vista Grupo 4 Helder / Wagner / Frantyeis Junho/2010 O Windows usa uma estratégia Just-In-Time

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

ESTUDO DE CASO WINDOWS VISTA

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

Leia mais

Desenvolvimento Web TCC-00.226 Turma A-1

Desenvolvimento Web TCC-00.226 Turma A-1 Desenvolvimento Web TCC-00.226 Turma A-1 Conteúdo Introdução ao Ambiente de Desenvolvimento Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.2/tcc-00.226

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

Table 1. Dados do trabalho

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

Leia mais

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

Software Básico (INF1018)

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

Leia mais

UM FRAMEWORK PARA DESENVOLVIMENTO DE

UM FRAMEWORK PARA DESENVOLVIMENTO DE UNIVERSIDADE FEDERAL DE PERNAMBUCO GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO CENTRO DE INFORMÁTICA UM FRAMEWORK PARA DESENVOLVIMENTO DE APLICATIVOS EM WINDOWS MOBILE. PROPOSTA DE TRABALHO DE GRADUAÇÃO Aluno:

Leia mais

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

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

Leia mais

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da Java Laboratório Aula 1 Programação orientada a objetos Profa. Renata e Cristiane Introdução a Plataforma Java O que é Java? Tecnologia Linguagem de Programação Ambiente de Execução (JVM) Tudo isso é a

Leia mais

J2ME PLATAFORMA DE DESENVOLVIMENTO JAVA PARA DISPOSITIVOS MÓVEIS

J2ME PLATAFORMA DE DESENVOLVIMENTO JAVA PARA DISPOSITIVOS MÓVEIS J2ME PLATAFORMA DE DESENVOLVIMENTO JAVA PARA DISPOSITIVOS MÓVEIS Ana Paula Carrion 1, Késsia Rita da Costa Marchi 1, Jaime Willian Dias 1 1 Universidade Paranaense (Unipar) Paranavaí PR Brasil anapaulacarrion@hotmail.com,

Leia mais

4 Avaliação do Código Gerado

4 Avaliação do Código Gerado Referencial Teórico 4 Avaliação do Código Gerado Nós fizemos alguns exemplos para avaliar a eficiência da especificação proposta, tanto em termos de velocidade de execução quanto de diminuição do tamanho

Leia mais

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

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

Leia mais

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

SO Sistemas Operacionais

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

Leia mais

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

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

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

Leia mais

Java. Guia do Programador. Peter Jandl Junior. Novatec

Java. Guia do Programador. Peter Jandl Junior. Novatec Java Guia do Programador Peter Jandl Junior Novatec Capítulo 1 Introdução Este capítulo apresenta a plataforma Java, seu histórico resumido, suas principais características e aplicações. Também são indicados

Leia mais

Introdução a Linguagem

Introdução a Linguagem Introdução a Linguagem Prof. Edwar Saliba Júnior Fevereiro de 2011 Unidade 03 Introdução a Linguagem Java 1 Conteúdo Máquina Virtual (JVM) Histórico de Java Case Sensitive Tipos Primitivos Tipo String

Leia mais

DOCUMENTOS E DINHEIRO ELETRÔNICO COM SMART CARDS UTILIZANDO A TECNOLOGIA JAVA CARD. Cleber Giovanni Suavi Orientador: Marcel Hugo

DOCUMENTOS E DINHEIRO ELETRÔNICO COM SMART CARDS UTILIZANDO A TECNOLOGIA JAVA CARD. Cleber Giovanni Suavi Orientador: Marcel Hugo DOCUMENTOS E DINHEIRO ELETRÔNICO COM SMART CARDS UTILIZANDO A TECNOLOGIA JAVA CARD Cleber Giovanni Suavi Orientador: Marcel Hugo Roteiro introdução objetivos relevância fundamentação teórica smart cards

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

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas de Entrada/Saída Princípios de Hardware Sistema de Entrada/Saída Visão Geral Princípios de Hardware Dispositivos de E/S Estrutura Típica do Barramento de um PC Interrupções

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 Introdução ao. Computação Móvel (MAC5743/MAC330) Prof. Alfredo Goldman Monitores: Rodrigo Barbosa Daniel Cordeiro

Uma Introdução ao. Computação Móvel (MAC5743/MAC330) Prof. Alfredo Goldman Monitores: Rodrigo Barbosa Daniel Cordeiro Uma Introdução ao J2ME Computação Móvel (MAC5743/MAC330) DCC-IME-USP Prof. Alfredo Goldman Monitores: Rodrigo Barbosa Daniel Cordeiro Visão Geral do Java 2 (1) A plataforma Java 2 engloba três elementos:

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

VERIFICAR PORTABILIDADE DE APLICAÇÕES. NET QUANDO EXECUTADAS EM AMBIENTES DIVERSOS (WINDOWS, WEB E MOBILE)

VERIFICAR PORTABILIDADE DE APLICAÇÕES. NET QUANDO EXECUTADAS EM AMBIENTES DIVERSOS (WINDOWS, WEB E MOBILE) VERIFICAR PORTABILIDADE DE APLICAÇÕES. NET QUANDO EXECUTADAS EM AMBIENTES DIVERSOS (WINDOWS, WEB E MOBILE) Alexandre Coutinho Evangelista 1 Luiz Gustavo Galves Mählmann 2 Newton Cunha Muller 3 RESUMO Este

Leia mais

Gerência de Memória RAM em Computadores com Mais de 4GB O sistema Windows x86 (32bits) não tem capacidade de reconhecer, fisicamente, mais que 3,X GB de RAM, a não ser que seja ativado, manualmente, o

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

ATIVIDADE 1 MÁQUINAS VIRTUAIS. 1.1 Arquiteturas não virtualizadas

ATIVIDADE 1 MÁQUINAS VIRTUAIS. 1.1 Arquiteturas não virtualizadas ATIVIDADE 1 MÁQUINAS VIRTUAIS Existem hoje diversas tecnologias e produtos para virtualização de computadores e ambientes de execução, o que pode gerar uma certa confusão de conceitos. Apesar disso, cada

Leia mais

Introdução Dalvik Linux 2.6. Android. Diogo de Campos, João Paulo Pizani Flor, Maurício Oliveira Haensch, Pedro Covolan Bachiega

Introdução Dalvik Linux 2.6. Android. Diogo de Campos, João Paulo Pizani Flor, Maurício Oliveira Haensch, Pedro Covolan Bachiega Android Diogo de Campos, João Paulo Pizani Flor, Maurício Oliveira Haensch, Pedro Covolan Bachiega Universidade Federal de Santa Catarina November 18, 2008 Agenda 1 Introdução 2 Dalvik 3 Linux 2.6 Introdução

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

Programação de Computadores II TCC-00.309 Turma A-1

Programação de Computadores II TCC-00.309 Turma A-1 Material elaborado pelo prof. Leandro A. F. Fernandes com contribuições dos profs. Anselmo A. Montenegro e Marcos Lage Programação de Computadores II TCC-00.309 Turma A-1 Conteúdo Introdução ao Ambiente

Leia mais

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 8: 04 de maio de 2010 1 Formatos de instruções MIPS 2 Endereçamento de operandos imediatos de 32 bits Endereçamento em desvios Modos de endereçamento do MIPS 3

Leia mais

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

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

Leia mais

1.1. Java como plataforma, além da linguagem

1.1. Java como plataforma, além da linguagem Capítulo 1 A plataforma Java Diversas plataformas de desenvolvimento possuem grande penetração no mercado. A plataforma Java atingiu a liderança devido a algumas características relacionadas ao seu processo

Leia mais

Capítulo 8: Gerenciamento de Memória

Capítulo 8: Gerenciamento de Memória Capítulo 8: Gerenciamento de Memória Sobre a apresentação (About( the slides) Os slides e figuras dessa apresentação foram criados por Silberschatz, Galvin e Gagne em 2005. Esse apresentação foi modificada

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

Hypervisor. Diego Souza Gomes 3 de maio de 2007

Hypervisor. Diego Souza Gomes 3 de maio de 2007 Hypervisor Diego Souza Gomes 3 de maio de 2007 Resumo As máquinas virtuais envolvem a criação de um sistema de computador totalmente em software. Usando-as, é possível hospedar vários computadores virtuais

Leia mais

Sistemas Operacionais

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

Leia mais

Java Linguagem de programação

Java Linguagem de programação 1 Linguagem Java O que é o Java? Java é uma linguagem de programação, apresentada ao mercado em 1995, pela Sun Microsystems, que provocou e ainda provoca excitação e entusiasmo em programadores, analistas

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

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

Como construir um compilador utilizando ferramentas Java

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

Leia mais

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

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores SISTEMAS OPERACIONAIS Maquinas Virtuais e Emuladores Plano de Aula Máquinas virtuais Emuladores Propriedades Benefícios Futuro Sistemas de Computadores Os sistemas de computadores são projetados com basicamente

Leia mais

Projeto de Sistemas de Tempo Real

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

Leia mais

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

Introdução a Threads Java

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

Leia mais

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

Pós-Graduação, Maio de 2006 Introdução aos Sistemas Operacionais. Prof. Dr. Ruy de Oliveira CEFET-MT

Pós-Graduação, Maio de 2006 Introdução aos Sistemas Operacionais. Prof. Dr. Ruy de Oliveira CEFET-MT Pós-Graduação, Maio de 2006 Introdução aos Sistemas Operacionais Prof. Dr. Ruy de Oliveira CEFET-MT O que é um Sistema Operacional? Um software que abstrai as complexidades do hardware de um usuário/programador

Leia mais

O que significa programar e a razão da sua importância. os sistemas informáticos dependem da interacção de inúmeros programas

O que significa programar e a razão da sua importância. os sistemas informáticos dependem da interacção de inúmeros programas Capítulo 1 Introdução Enquadramento da disciplina O que significa programar e a razão da sua importância basilar em qualquer curso de computação os sistemas informáticos dependem da interacção de inúmeros

Leia mais

Infraestrutura de Hardware. Memória Virtual

Infraestrutura de Hardware. Memória Virtual Infraestrutura de Hardware Memória Virtual Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido e executado pelo HW? Qual é a interface

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

Validando Sistemas Distríbuidos em Java com RMI Utilizando Injeção de Falhas

Validando Sistemas Distríbuidos em Java com RMI Utilizando Injeção de Falhas Validando Sistemas Distríbuidos em Java com RMI Utilizando Injeção de Falhas Vieira, Marcio. J. 1 1 Departamento de Informática Universidade Federal do Paraná (UFPR) Curitiba PR Brasil marciojv@inf.ufpr.br

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA. André Quintino Kuhnen

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA. André Quintino Kuhnen UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA André Quintino Kuhnen UMA MÁQUINA VIRTUAL JAVA MULTI-THREAD PARA SISTEMAS EMBARCADOS Florianópolis 2012 André Quintino

Leia mais

BrokerCell: programando celular com J2ME para cotar papéis na Bovespa

BrokerCell: programando celular com J2ME para cotar papéis na Bovespa BrokerCell: programando celular com J2ME para cotar papéis na Bovespa Nairon Neri Silva 1, Luís Augusto Mattos Mendes(Orientador) 1 1 Ciência da Computação - Universidade Presidente Antônio Carlos (UNIPAC)

Leia mais

Algoritmos e Programação 2. Introdução à Programação Orientada a Objetos. Orientação a Objetos. O que é um paradigma de programação?

Algoritmos e Programação 2. Introdução à Programação Orientada a Objetos. Orientação a Objetos. O que é um paradigma de programação? Algoritmos e Programação 2 Baseado no material do Prof. Júlio Pereira Machado Introdução à Programação Orientada a Objetos O que é um paradigma de programação? É um padrão conceitual que orienta soluções

Leia mais

Como dito anteriormente, a JCP especificou dois grupos para a J2ME conforme as necessidades dos dispositvos, chamadas Configurações:

Como dito anteriormente, a JCP especificou dois grupos para a J2ME conforme as necessidades dos dispositvos, chamadas Configurações: 1 TECNOLOGIA J2ME A J2ME, Java Micro Edition, é uma tecnologia que permite o desenvolvimento de aplicações Java para dispositivos com poder de processamento, vídeo e memória limitados. Possui uma coleção

Leia mais

Virtualização de Software

Virtualização de Software UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA CURSO DE BACHARELADO DE SISTEMAS DE INFORMAÇÃO Virtualização de Software Luana Sandrini Saft Trabalho de conclusão de curso

Leia mais

Java de missão crítica. Um artigo técnico da Oracle

Java de missão crítica. Um artigo técnico da Oracle Java de missão crítica Um artigo técnico da Oracle Java de missão crítica A família de produtos Oracle JRockit é um portfólio abrangente de soluções de tempo de execução de Java que aproveita a JVM básica

Leia mais

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

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

Leia mais

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

ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS. Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms.

ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS. Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms. ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms. Mauricio Duarte 2 Centro Universitário Euripides de Marilia UNIVEM FATEC Faculdade de

Leia mais

28/3/2011. Família Intel 80x86. Arquitetura dos Processadores Intel 80x86

28/3/2011. Família Intel 80x86. Arquitetura dos Processadores Intel 80x86 Arquitetura de Computadores Arquitetura dos Processadores Intel 80x86 Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO Família Intel 80x86 Ao se falar

Leia mais

Resumo até aqui. Gerenciamento Proteção Compartilhamento. Infra-estrutura de Software

Resumo até aqui. Gerenciamento Proteção Compartilhamento. Infra-estrutura de Software Resumo até aqui Complexidade do computador moderno, do ponto de vista do hardware Necessidade de abstrações software Sistema computacional em camadas SO como uma máquina estendida abstrações SO como um

Leia mais