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 left@cin.ufpe.br left@jingleos.org 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 srlm@cin.ufpe.br 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Leia mais

Programação Orientada a Objetos

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

Leia mais

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

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

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

Leia mais

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

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

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

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

MAGREGISTER 1.0: GERADOR DE INTERFACES DE COLETAS DE DADOS PARA PDA S. Acadêmico: Gilson Chequeto Orientador: Adilson Vahldick

MAGREGISTER 1.0: GERADOR DE INTERFACES DE COLETAS DE DADOS PARA PDA S. Acadêmico: Gilson Chequeto Orientador: Adilson Vahldick MAGREGISTER 1.0: GERADOR DE INTERFACES DE COLETAS DE DADOS PARA PDA S Acadêmico: Gilson Chequeto Orientador: Adilson Vahldick Roteiro Introdução Objetivos do trabalho Fundamentação teórica Desenvolvimento

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

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

Sistemas Operacionais. Conceitos de um Sistema Operacional

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

Leia mais

Desenvolvimento de um Simulador de Gerenciamento de Memória

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

Leia mais

Sistemas Operacionais 1/66

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

Leia mais

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

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

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

Leia mais

Programação 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

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

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

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

Sistemas Operacionais. Roteiro. Sistemas de Computadores. Os sistemas de computadores são projetados com basicamente 3 componentes: Marcos Laureano

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

Leia mais

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

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

Leia mais

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

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

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

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerência de Arquivos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Conceituação de arquivos Implementação do sistemas de arquivo Introdução Sistema de

Leia mais

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert: BRAlarmExpert Software para Gerenciamento de Alarmes A TriSolutions conta com um produto diferenciado para gerenciamento de alarmes que é totalmente flexível e amigável. O software BRAlarmExpert é uma

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

SISTEMAS OPERACIONAIS

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

Leia mais

Introdução aos Computadores

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

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

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

Análises Geração RI (representação intermediária) Código Intermediário

Análises Geração RI (representação intermediária) Código Intermediário Front-end Análises Geração RI (representação intermediária) Código Intermediário Back-End Geração de código de máquina Sistema Operacional? Conjunto de Instruções do processador? Ambiente de Execução O

Leia mais

Orientação a Objetos

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

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO.

UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO. UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO Xen Hypervisor Glauco Neves 07132022 Guilherme Pacheco 07232063 INE 5412-0432

Leia mais

Sistemas Operacionais

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

Leia mais

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

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

Um Driver NDIS Para Interceptação de Datagramas IP

Um Driver NDIS Para Interceptação de Datagramas IP Um Driver NDIS Para Interceptação de Datagramas IP Paulo Fernando da Silva psilva@senior.com.br Sérgio Stringari stringari@furb.br Resumo. Este artigo apresenta o desenvolvimento de um driver NDIS 1 para

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

Leia mais

Modelo para Documento de. Especificação de Requisitos de Software

Modelo para Documento de. Especificação de Requisitos de Software Modelo para Documento de Especificação de Requisitos de Software Prof. Dr. Juliano Lopes de Oliveira (Baseado na norma IEEE Std 830-1993 - Recommended Practice for Software Requirements Specifications)

Leia mais

Modelo para Documento de. Especificação de Requisitos de Software

Modelo para Documento de. Especificação de Requisitos de Software Modelo para Documento de Especificação de Requisitos de Software (Baseado na norma IEEE Std 830-1993 - Recommended Practice for Software Requirements Specifications) A boa organização lógica do documento

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

Organização e Arquitetura de Computadores

Organização e Arquitetura de Computadores Organização e Arquitetura de Computadores MemóriaVirtual Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Gerência de memória convencional Divide um programa em unidades menores Partes

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

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

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

Leia mais

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

Engenharia de Requisitos

Engenharia de Requisitos Engenharia de Requisitos Introdução a Engenharia de Requisitos Professor: Ricardo Argenton Ramos Aula 08 Slide 1 Objetivos Introduzir a noção de requisitos do sistema e o processo da engenharia de requisitos.

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

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

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

Leia mais

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

Adriano Reine Bueno Rafael Barros Silva

Adriano Reine Bueno Rafael Barros Silva Adriano Reine Bueno Rafael Barros Silva Introdução RMI Tecnologias Semelhantes Arquitetura RMI Funcionamento Serialização dos dados Criando Aplicações Distribuídas com RMI Segurança Exemplo prático Referências

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Faculdades SENAC Análise e Desenvolvimento de Sistemas 28 de abril de 2010 Principais suportes de Java RMI (Remote Method Invocation), da Sun Microsystems DCOM (Distributed Component Object Model), da

Leia mais

Visão Geral de Sistemas Operacionais

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

Leia mais

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

Hardware & Software. SOS Digital: Tópico 2

Hardware & Software. SOS Digital: Tópico 2 Hardware & Software SOS Digital: Tópico 2 Os objetos digitais são acessíveis somente através de combinações específicas de componentes de hardware a parte física do computador software programas para operar

Leia mais

Conceitos de Banco de Dados

Conceitos de Banco de Dados Conceitos de Banco de Dados Autor: Luiz Antonio Junior 1 INTRODUÇÃO Objetivos Introduzir conceitos básicos de Modelo de dados Introduzir conceitos básicos de Banco de dados Capacitar o aluno a construir

Leia mais

E/S PROGRAMADA E/S PROGRAMADA E/S USANDO INTERRUPÇÃO

E/S PROGRAMADA E/S PROGRAMADA E/S USANDO INTERRUPÇÃO E/S PROGRAMADA QUANDO A CPU FAZ TODO O TRABALHO RELACIONADO A UMA OPERAÇÃO DE E/S, NO CASO DO PROCESSO QUERER IMPRIMIR (NA IMPRESSORA) ABCDEFGH : ESTES CARACTERES SÃO COLOCADOS EM UMA ÁREA DE MEMÓRIA DO

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

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

Arquitetura de Computadores. Sistemas Operacionais IV

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

Leia mais

GERENCIAMENTO DE DISPOSITIVOS

GERENCIAMENTO DE DISPOSITIVOS 2 SISTEMAS OPERACIONAIS: GERENCIAMENTO DE DISPOSITIVOS E ARQUIVOS Introdução à Microinformática Prof. João Paulo Lima Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

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

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

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

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

Leia mais

Introdução aos Sistemas

Introdução aos Sistemas Introdução Introdução aos Sistemas Operacionais 1 2 3... n Ambientes Operacionais Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani Compilador Editor de texto Browser Programas

Leia mais

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio 32 3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio Este capítulo apresenta o framework orientado a aspectos para monitoramento e análise de processos de negócio

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

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

Figura 01 Kernel de um Sistema Operacional

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

Leia mais

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015 Sistemas de ficheiros: implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Objetivos da aula Descrever algunsdetalhes daimplementação deumsistema de ficheiros Discutir algoritmos

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas Operacionais Prof. Marcelo Sabaris Carballo Pinto Gerenciamento de Dispositivos Gerenciamento de Dispositivos de E/S Introdução Gerenciador de Dispositivos Todos os dispositivos

Leia mais

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve - 981648-9

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve - 981648-9 Laboratório de Computação VI JAVA IDL Fabricio Aparecido Breve - 981648-9 O que é Java IDL? Java IDL é uma tecnologia para objetos distribuídos, ou seja, objetos em diferentes plataformas interagindo através

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

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

Leia mais

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd. Apresentação Este curso tem como objetivo, oferecer uma noção geral sobre a construção de sistemas de banco de dados. Para isto, é necessário estudar modelos para a construção de projetos lógicos de bancos

Leia mais

Sistema Operacional Correção - Exercício de Revisão

Sistema Operacional Correção - Exercício de Revisão Prof. Kleber Rovai 1º TSI 22/03/2012 Sistema Operacional Correção - Exercício de Revisão 1. Como seria utilizar um computador sem um sistema operacional? Quais são suas duas principais funções? Não funcionaria.

Leia mais

Virtualização Gerencia de Redes Redes de Computadores II

Virtualização Gerencia de Redes Redes de Computadores II Virtualização Gerencia de Redes Redes de Computadores II *Créditos: baseado no material do Prof. Eduardo Zagari Virtualização - Introdução Introduzido nos anos 60 em Mainframes Em 1980 os microcomputadores

Leia mais

ISO/IEC 12207: Gerência de Configuração

ISO/IEC 12207: Gerência de Configuração ISO/IEC 12207: Gerência de Configuração Durante o processo de desenvolvimento de um software, é produzida uma grande quantidade de itens de informação que podem ser alterados durante o processo Para que

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

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção Sistemas de Arquivos Funções de um SO Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção 2 Sistemas Operacionais Necessidade de Armazenamento Grandes quantidades

Leia mais

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

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

Leia mais

Acadêmicos: Luís Fernando Martins Nagata Gustavo Rezende Vinícius Rezende Santos

Acadêmicos: Luís Fernando Martins Nagata Gustavo Rezende Vinícius Rezende Santos Acadêmicos: Luís Fernando Martins Nagata Gustavo Rezende Vinícius Rezende Santos Pilhas de Dispositivos Drivers no Windows Vista podem fazer todo trabalho sozinho; Uma requisição pode passar por uma seqüência

Leia mais