Sistema Java Para Aplicações Dedicadas
|
|
|
- Gabriel Henrique Vilaverde Amaral
- 10 Há anos
- Visualizações:
Transcrição
1 CENTRO UNIVERSITÁRIO DO TRIÂNGULO INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE CIÊNCIA DA COMPUTAÇÃO Sistema Java Para Aplicações Dedicadas Gabriel de Melo Uberlândia, Julho/2003.
2 CENTRO UNIVERSITÁRIO DO TRIÂNGULO INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE CIÊNCIA DA COMPUTAÇÃO Sistema Java Para Aplicações Dedicadas Gabriel de Melo Monografia apresentada ao Curso de Ciência da Computação do Centro Universitário do Triângulo - Unit, como requisito básico à obtenção do grau de Bacharel em Ciência da Computação, sob a orientação do Prof. Elmo B. de Faria, Dr. Uberlândia, Julho/2003.
3 Sistema Java Para Aplicações Dedicadas Gabriel de Melo Monografia apresentada ao Curso de Ciência da Computação do Centro Universitário do Triângulo - Unit, como requisito básico à obtenção do grau de Bacharel em Ciência da Computação. Elmo Batista de Faria, Dr. (Orientador ) Marcos Alberto Lopes da Silva, Msc. (Avaliador ) Edson Angoti Júnior, Msc. (Avaliador ) Marcos Ferreira de Resende, Dr. (Coordenador de Curso) Uberlândia, Julho/2003. ii
4 Dedicado a Willy Higinbotham, J.R.R. Tolkien Gary Gygax e Dave Arneson, por suas magníficas e imortais criações. iv
5 RESUMO O constante uso de aplicações dedicadas para os mais diversos fins tem permitido um amplo estudo no desenvolvimento de tais aplicações. Onde sistemas dedicados são encontrados em uso para a realização das mais diversas tarefas. Com a possibilidade de serem constituídos de arquitetura própria e específica ou mesmo hospedados em computadores completos. Porém, para seu perfeito funcionamento, há a exigência de uma plataforma previamente construída com tal objetivo. Várias plataformas prontas estão disponibilizadas pelo mercado envolvido. Assim, este trabalho apresenta, o que poderia vir a ser, uma forma de composição mais acessível e de porte mínimo, de uma plataforma para uso em aplicações dedicadas. Isso, através de um sistema operacional Linux, do qual são apresentadas descrições fundamentais para entendimento conceitual do sistema. Bem como a apresentação da finalidade de utilização do paradigma de orientação a objetos. E, através da tecnologia Java, são evidenciadas as características necessárias para fazer uso das qualidades oferecidas pelo paradigma, e mesmo pela própria tecnologia. Para tal, utilizando uma máquina virtual Java de pequeno porte, porém com grande funcionalidade. Com isso, são descritas estratégias utilizadas no estudo da implementação do sistema. Relacionando algumas distribuições Linux com o porte necessário a sua composição. Sobre as quais foram feitos testes na tentativa de validar suas capacidades para os objetivos previstos. Também são informadas as comprovações de funcionamento da máquina virtual Java escolhida. E, enfim, uma conclusão coloca as possibilidades que envolvem a proposta apresentada. v
6 SUMÁRIO 1. Introdução Introdução aos Sistemas Operacionais Conceitos de Sistemas Operacionais Processos Sistema de Arquivos Entrada e Saída (E/S) Geranciamento de Memória Controle de Concorrência Características da Família Unix Os Processos O Modelo de Memória Sistema de Arquivos O Sistema de Entrada e Saída Conclusão A Tecnologia Utilizada no Sistema Dedicado Introdução à Orientação a Objetos Classes e Objetos Encapsulamento Herança Agregação Polimorfismo Máquina Virtual Java Introdução à Máquina Virtual Java Composição da Máquina Virtual Java Conclusão A Construção de um Sistema Java para Aplicações Dedicadas Introdução ao Sistema Avaliações e Estratégias de Implementação Sistema DOS e Máquina Java Sistema Coyote e Máquina Java Sistema Tomsrtb e Máquina Java Sistema Small Linux e Máquina Java A Máquina Java no Ambiente Red Hat A Máquina Java no Ambiente Windows Conclusão...44 vi
7 5. Conclusão...46 Referências Bibliográficas...48 Bibliografia...49 Anexo A...51 vii
8 1 - Introdução O uso de aplicações com fins específicos, ditos sistemas dedicados, tem aumentado consideravelmente com aplicação da tecnologia Java. Sobretudo pelo fato de tal tecnologia possuir padrões e qualidades que conferem destaque para utilização em tais sistemas. Todavia, o desenvolvimento de um sistema dedicado que faça uso da tecnologia Java, requer uma plataforma especificamente preparada para esse fim. Plataformas nem sempre tão acessíveis e manipuláveis para estudo e desenvolvimento. Com base nisso, este projeto visa apresentar uma composição mais acessível para um sistema dedicado que faça uso de Java como foco central. Onde são apresentados mecanismos e técnicas para a formação desse sistema com o uso de dois componentes básicos, um sistema operacional reduzido e uma máquina virtual Java de porte equivalente. Construindo, portanto, a plataforma que abrigará uma aplicação correspondente à parte de uso final do sistema dedicado. O Capítulo 2 apresenta as características básicas sobre sistemas operacionais e especifica o padrão de sistema que irá compor o sistema dedicado Java. No Capítulo 3 encontram-se as tecnologias, as quais pretende-se alcançar na formação final do sistema, bem como as descrições relacionadas aos objetivos provenientes de suas utilizações. O estudo realizado na formação final e específica da plataforma do sistema 1
9 é mostrado no Capítulo 4. Contendo a descrição das estratégias utilizadas e os resultados obtidos através desse estudo de caso. Enfim, o Capítulo 5 conclui o fechamento do projeto. Relacionando os resultados obtidos com o estudo com uma apresentação geral do problema encontrado. 2
10 2 - Introdução aos Sistemas Operacionais A fim de um perfeito entendimento do projeto, faz-se necessária a apresentação dos conceitos básicos referentes aos sistemas operacionais. Isto, pelo fato de não ser objetivada nenhuma implementação de nível inferior ao sistema operacional e sim, a utilização de um sistema que adapte-se aos objetivos do projeto. E portanto, o conhecimento destes conceitos permite uma compreensão e possível análise aprofundada do sistema como um todo Conceitos de Sistemas Operacionais Um sistema operacional trás o processo como componente básico. Comumente sendo constituído de vários processos em execução. Gerando uma necessidade de tratamento para os problemas de concorrência pelos recursos da máquina. E da mesma forma, ainda, preocupando-se com a abstração objetivada com o sistema como um todo. De forma a garantir que o sistema possibilite um acesso total e eficaz ao que o hardware em questão oferece Processos "O conceito mais central em qualquer sistema operacional é o de processo: uma abstração de um programa em execução." [TANENBAUM, 2000] Todo programa em execução, incluindo o próprio sistema operacional caracteriza-se como um conjunto de processos. E são assim definidos como 3
11 entidades independentes executadas, as quais competem por recursos. Assim como o número de programas por usuário pode variar, o número de processos por programa também pode. Visto a quantidade de tarefas que os computadores podem realizar ao mesmo tempo, implicando por vezes em um grande número de processos, estes necessitam de um gerenciamento. Devido ao fato de competirem por recursos da mesma máquina. Ao mesmo tempo que um programa de usuário esteja sendo executado, a CPU pode estar acessando um arquivo em disco e imprimindo seu conteúdo. E para que este pseudoparalelismo ocorra, em sistemas monoprocessadores, é necessário o uso do recurso da multiprogramação. O que realiza uma alternância entre os processos em corrente execução na CPU, sendo esta capaz de executar um processo por vez. Porém, na faixa de um curto período de tempo é possível gerar a impressão de que vários processos se encontram em processamento simultâneo. Dando assim a ilusão de um falso paralelismo. Em um sistema operacional mais complexo, projetado para executar múltiplos aplicativos, é necessário dispor de uma maneira de criar e de destruir processos de acordo com a necessidade durante sua operação. Deve haver a possibilidade de um processo-pai criar N processos-filhos, com N maior ou igual a zero. E esses processos-filhos também devem ter a possibilidade de criação de novos filhos [TANENBAUM, 2000], dando origem à uma grande árvore de processos que caracteriza o sistema operacional em execução, exemplificado na Figura 2.1. Figura 2.1 Uma árvore de processos [TANENBAUM, 2000] 4
12 Várias vezes processos precisam comunicar-se com outros processos. Essa comunicação deve se realizar de maneira estruturada de forma a não utilizar-se de interrupções. Isto define o conceito de comunicação. Onde três fatores devem ser cuidadosamente observados. São eles: de que forma um processo pode passar informações para outro; como certificar-se que dois ou mais processos não interfiram um com outro quando envolvidos em atividades críticas; resolução de problemas com relação ao seqüencialmente adequando quando estão presentes dependências entre dois ou mais processos. Como mostrado pela Figura 2.2, um processo pode assumir três diferentes estados: executando, pronto e bloqueado. Nos dois primeiros estados o processo se encontra pronto para executar, porém somente no primeiro há CPU disponível para execução. Já no último estado, o processo está impedido de executar, mesmo que haja CPU disponível para tal. Figura 2.2 Estados e transições de um processo [TANENBAUM, 2000] São possíveis quatro transições entre estes três estados. Onde uma transição ocorre do estado de executando para bloqueado, onde um processo descobre que não pode mais continuar sua execução. Uma segunda transição se dá do estado de executando para o estado de pronto, indicando que o escalonador do sistema decidiu que o processo que se encontra em execução já atuou por tempo suficiente na CPU. Do estado de pronto para o estado de executando ocorre uma transição, onde é cedida a CPU ao processo que se encontra em tal estado. Em último caso, uma transição do processo, do estado de bloqueado para o estado de pronto, define o acontecimento de algum evento externo, pelo qual o processo estava esperando. 5
13 Sistema de Arquivos Uma das funções do sistema operacional é oferecer um modelo abstrato de arquivos. Escondendo, assim, peculiaridades de dispositivos, e apresentando dessa forma, uma independência com relação aos mesmos. Portanto, sendo necessárias maneiras de se criar, remover, ler e escrever arquivos. E com evidência no fato de que um arquivo deve ser aberto antes de ser lido ou escrito, e fechado em seguida, devem ser oferecidas chamadas de sistema que possibilitem a realização de tais tarefas. Figura 2.3 O sistema de arquivos [TANENBAUM, 2000] De uma forma estruturada e hierárquica, um sistema de arquivos deve conter uma maneira que possibilite o agrupamento de arquivos. Tal maneira é comumente denominada diretório. Por isso, também são necessárias chamadas de sistema para criar e remover diretórios, bem como inserir e remover arquivos de diretórios existentes. As entradas permitidas para diretórios são arquivos e outros diretórios, formando uma organização em árvore, tal como os processos mostrados na Figura
14 Apesar de tanto os processos quanto os arquivos estarem organizados em árvores, a organização de ambos possui consideráveis diferenças. Freqüentemente as hierarquias de arquivos possuem mais níveis de profundidade que as de processos. E mesmo tais hierarquias, normalmente, têm ainda período de vida relativamente superior à de processos. Níveis de acesso também são diferenciados, visto que geralmente somente processos-pais podem controlar ou acessar processos-filhos. Ao passo que arquivos podem ser lidos por um número consideravelmente maior de indivíduos, que somente seu proprietário. A estrutura de um arquivo e os métodos de acesso variam desde a forma seqüencial até indexada, utilizando para isso uma hierarquia complexa de valores de índice. Arquivos seqüenciais requerem pouco processamento, mas possibilitam poucas opções de acesso. Já arquivos diretos, permitem que um usuário solicite qualquer registro apenas especificando sua posição relativa. Embora envolva mais recursos e processamento, alguns sistemas permitem que um usuário acesse um registro especificando o conteúdo de uma chave ou campo de índice. Quanto ao armazenamento de arquivos, dispositivos geralmente tratam os dados como blocos de tamanho fixo ou registros físicos. Porém, deve ser possível definir o tipo e o tamanho de registro mais adequado para uma aplicação particular. Um disco é constituído de trilhas concêntricas, formando então, setores. Onde em um único setor, pode-se armazenar vários registros lógicos. Sendo o número exato dependente da capacidade do setor e do tamanho do registro. A eficiência do sistema pode ser afetada pelo número de solicitações recebidas pelo controlador de disco. Assim, em um processo de leitura, o controlador de disco deve mover a cabeça para a trilha correta, esperar que o setor gire e passe por ela, e só então ler. No que refere-se a tempo, no processo de busca estão envolvidos o tempo de busca, tempo de latência e tempo de transmissão. Portanto, o controlador deve minimizar o movimento da cabeça, mas não deve 7
15 chegar a ignorar certas solicitações. Para não comprometer a eficiência do sistema é adotado um método para realizar o escalonamento de acesso às trilhas Entrada e Saída (E/S) Toda vez que uma função de leitura ou escrita é referenciada, uma solicitação de leitura ou escrita é feita ao sistema operacional, pelo processo em questão. Essa solicitação é definida como uma solicitação de entrada ou saída (E/S). Em relação à CPU os dispositivos de E/S são lentos. Embora uns sejam mais rápidos do que outros. Por exemplo, a transferência dos dados é rápida quando estes são localizados em uma unidade de disco. Ao passo que em dispositivos lentos, como terminais e algumas impressoras, estes são transmitidos à base de um caractere por vez. O processo que envolve E/S se desdobra em vários níveis. Com o processo do usuário encontrando-se no nível superior da hierarquia. Este gera uma solicitação de E/S que será examinada pelas rotinas independentes de dispositivo. Tais rotinas determinam acessibilidade e estrutura do arquivo. No próximo nível são utilizadas rotinas dependentes de dispositivo, denominadas drivers de dispositivo. As rotinas dos drivers de dispositivo podem calcular endereços de disco, verificar erros de transmissão, criar comandos específicos de dispositivo e verificar o estado do dispositivo. Assim, o driver deve corresponder com exatidão às características do dispositivo. Em última instância é iniciado o controlador ou o processador de E/S, dependendo do sistema. Alguns controladores mais sofisticados assumem certas responsabilidades que pertencem, em primeira instância aos drivers, em determinados sistemas. Passando, dessa forma, alguns detalhes do processamento de E/S do software para o hardware, e portanto, agilizando o processo de E/S. 8
16 O processamento de E/S pode ser abordado de forma programada, acionada por interrupção ou acesso direto à memória. Na E/S programada, o driver transmite comandos a um controlador de dispositivo a fim de iniciar a transferência de dados escrevendo em um registrador de controlador. O controlador é informado por certos bits no registrador se devem ser transferidos dados de ou para o dispositivo. Alguns bits no registrador refletem o estado do dispositivo, necessários para que o driver determine quando uma operação de E/S foi completada. A técnica de E/S acionada por interrupção é uma maneira de evitar-se que os comandos emitidos à um controlador, bem como a verificação de registradores, consuma tempo da CPU. Tempo que poderia ser usado por outros processos. Nessa técnica, o driver ainda emite comandos ao controlador. E logo após ele se interrompe, liberando a CPU para que outros processos possam utilizá-la. Apenas quando a operação de E/S se completa, o controlador interrompe a CPU. Então, o driver reassume e termina a sua tarefa. Para isso a CPU deve ser capaz de detectar interrupções e identificar o dispositivo que seja responsável pela chamada da mesma. Existindo, para isso, várias maneiras de fazê-lo. Os manipuladores de interrupção podem chamar dispositivos, ou uma linha de reconhecimento de interrupção pode ser ligada da CPU à cada controlador, passando por cada um destes. O controle do barramento deve ser obtido pelos dispositivos para estes se identificarem. O driver deve executar a transferência de dados nas técnicas de E/S programada e acionada. Sendo tarefa dele mover os dados entre a memória e os registradores do controlador. Sendo razão de um novo desperdício de tempo da CPU. Problema que pode ser eliminado com o uso da técnica de acesso direto à memória. Permitindo ao controlador transferir os dados. E liberando, portanto, a CPU para outras atividades. Em alguns casos, a CPU pode tentar acessar a memória comum ao mesmo tempo que o controlador também o faz. Nesses casos, o controlador tem prioridade e obriga a CPU a esperar durante alguns ciclos do 9
17 relógio de hardware. O que é chamado de roubo de ciclo. Mesmo com os controladores utilizando-se de acesso direto à memória, é trabalho do driver ainda fornecer comandos detalhados para o controlador. Em certos casos, processadores de E/S distintos executam programas de E/S que emitem os comandos. Devendo a CPU apenas executar um comando inicial de E/S para ativar o processador de E/S. Assim, possibilitando que a CPU e o processador de E/S trabalhem simultaneamente. Onde a CPU trabalha em outros processos, e o processador de E/S trabalha no programa de E/S, da mesma forma que emite os comandos ao controlador Gerenciamento de Memória O gerenciamento de memória define solução para problemas como alocação de códigos de processos, garantias de proteção entre processos e rotinas de sistema, utilização total da memória disponível e tratamento de exceções em alocações de memória. Em uma simples solução, o sistema deve dividir a memória em partições de tamanho fixo, então armazenar o código para cada processo em uma dessas partições. O que é mostrado pela Figura 2.4. Porém tal simplicidade gera alguns problemas. Tais como fragmentação e insuficiência de memória. De maneira otimizada, a memória deve ser configurada para antecipar as necessidades de um processo. O que torna-se praticamente impossível, visto que as necessidades com relação à memória variam de processo para processo, e encontram-se em constante mudança. Reconfigurar a memória à medida em que os processos entram e saem do sistema é uma saída para o problema. Constituindo a memória de partições variáveis. Com uma partição sendo criada pelo sistema sempre que um processo inicia sua execução, onde o tamanho da partição correspondendo exatamente às 10
18 necessidades do processo, o que indica uma vantagem deste procedimento. Este esquema mostra uma desvantagem quando processos, principalmente os pequenos, deixam o sistema, obrigando o sistema a juntar os espaços livres e compactar a memória periodicamente, realizando a chamada "coleta de lixo". Nesse processo deve-se evitar partições pequenas não utilizáveis. Mesmo assim, tal técnica não resolve o problema de um processo que precisa de mais memória do que o total disponível. Figura 2.4 Divisão da memória entre os processos [TANENBAUM, 2000] Para satisfazer a necessidade do código de um processo residir em um bloco de memória adjacente, o código deve ser desmembrado em peças, denominadas páginas ou segmentos. De uma maneira geral, todas as páginas possuem o mesmo tamanho. Porém, podendo o tamanho de um segmento, variar. E ainda, podendo ser o segmento, freqüentemente caracterizado como uma coleção de páginas. Um processo estando pronto para ser executado, tem algumas de suas páginas armazenadas pelo sistema, em páginas de memória real que estejam disponíveis. Essas páginas de memória não têm a necessidade de serem adjacentes. O armazenamento secundário permanece com as páginas restantes. Caso o processo precise de alguma delas, o sistema pode acessá-la e armazená-la na memória. O sistema que apresenta a transformação dinâmica de endereços define 11
19 uma ligação entre memória virtual e memória real. Podendo ser implementado, assim como o sistema de proteção, por meio de tabelas de segmentos e páginas. Havendo a possibilidade de se usar registradores associativos com a finalidade de manter algumas das informações referentes a essas tabelas. Porém, as tabelas podem ser grandes e o custo de muitos registradores pode ser elevado. Como solução, podemos usar apenas alguns registradores associativos e conservar o restante das informações em tabelas. Com a finalidade de pesquisar os registradores associativos, a CPU se utiliza do endereço virtual. E, caso necessário, também são usadas as tabelas de segmentos e páginas. Enfim, a CPU realiza a substituição do endereço de memória virtual, pelo endereço real. O que acontece durante a execução, de forma transparente ao usuário e aos processos em execução. Quando ocorre o fato de uma instrução fazer referência a uma página ou a um segmento que não se encontre na memória, há o acontecimento denominado de falha de segmento ou falha de página. É papel do sistema, então, obter o endereço da página ou segmento no dispositivo de armazenamento secundário e carregar seu conteúdo na memória. Com a finalidade de proteção contra falhas, o número de páginas que um processo pode ter na memória deve ser freqüentemente limitado. E caso ocorra uma falha de página quando um processo esteja utilizando o número máximo de páginas que lhe é possível, o sistema deve substituir uma das páginas. Devendo ser utilizado um método de substituição para tal. Existindo diversos métodos já pré-definidos, que variam em eficácia e custo de implementação. Por fim, deve-se definir no sistema um tamanho limite de páginas. O ideal é armazenar apenas as páginas suficientes na memória para permitir que um processo seja executado por algum tempo sem gerar falhas de página [SHAY, 1996]. Sendo o conjunto de páginas denominado de conjunto de trabalho do processo. 12
20 Controle de Concorrência O código que faz referência a dados compartilhados, apresenta-se como sendo a seção crítica de um processo. Onde ocorre um controle básico de concorrência, quando procura-se garantir que processos concorrentes não executem dentro de suas seções críticas ao mesmo tempo. O que é denominado exclusão mútua. Existindo para impor o conceito de exclusão mútua, vários algoritmos. Algoritmos complexos se estendidos a mais de dois processos, e algoritmos que podem ser aplicados a vários processos e ainda garantir que um processo tentando executar sua seção crítica, nunca será retardado demasiadamente. Uma abordagem mais simplificada dá-se com o uso de semáforos e primitivas "wait" e "signal". Apresentando basicamente, quando um processo deve aguardar ou prosseguir com sua execução. Assim, caso ocorra de podermos garantir que uma primitiva não possa ser interrompida, esta primitiva pode ser facilmente utilizada para aplicar a imposição da exclusão mútua. Podendo inclusive, ser generalizada para aplicação em muitos processos. Porém, uma desvantagem do uso de semáforos, é que seu uso é voluntário. Portanto, dependendo da atenção do programador para inserir suas operações antes e depois das seções críticas. Outra abordagem para o controle de concorrências envolve o uso de monitores. Definidos como uma construção do sistema operacional que contém as seções críticas dos programas. As quais são removidas dos processos e colocadas no monitor. Os processos que necessitem acessar as seções críticas, o fazem por meio de chamadas à procedimentos do monitor. Impondo a exclusão mútua a processos que fazem referência às suas entradas. Por intermédio de variáveis de condição, os processos podem ser suspensos e sinalizados, de forma a sincronizar eventos. Solucionando diversos problemas que exigem sincronização, com o uso de monitores. 13
21 Um grande problema que associa-se ao controle de concorrência é o de paralisação. Também denominado deadlock. Ocorre quando o gerenciamento de processos concorrentes faz com que pelo menos dois processos sejam suspensos. Cada qual esperando que o outro desempenhe alguma tarefa. O impedimento de tal situação deve ser extremamente evitada, pois drasticamente, a solução para o fato geralmente requer perda de grande parte do trabalho realizado por um processo. Para impedir que o problema de deadlock venha a ocorrer, uma solução é remover uma dentre quatro condições que são necessárias ao seu acontecimento. São condições, a exclusão mútua, a retenção com requisição, a espera circular e a não-preempção. Mas, a remoção de qualquer uma dessas condições pode provocar efeitos indesejáveis. Uma outra abordagem para o impedimento de deadlock consiste em permitir que as quatro condições ocorram, porém ter implementados algoritmos de impedimento. Esses, que possibilitem ao sistema operacional examinar as solicitações feitas pelos processos concorrentes e determinar se alguma cria o risco de deadlock. Recusando-se, assim, em atendê-la. Mesmo com a ocorrência de um deadlock, ainda sim é possível a retomada de funcionamento dos processos envolvidos. Havendo necessidade de um método de detecção de paralisação. E através da abortagem do processo que ocasionou essa paralisação. De qualquer forma, ainda perde-se trabalho realizado pelo processo em questão. Perda que pode ser reduzida com o uso freqüente de checkpoints neste processo. 2.2 Características da Família Unix A família Unix caracteriza-se como um conjunto de sistemas operacionais com arquitetura e funcionalidades internas semelhantes. Todos sendo, senão os próprios, variações de um ou mais dos três modelos primários conhecidos: Unix System V, Unix BSD (Berkeley Software Distribution) e Unix OSF (Open Software Fundation). Muito embora algumas características externas ou internas, deste modelo de sistema operacional tenham mudado, permanece ainda seu 14
22 objetivo primário de utilização como plataforma de desenvolvimento. Sendo seu uso, adequado ao desenvolvimento de projetos diversos, simples ou complexos, devido a, dentre outras qualidades, sua flexibilidade Os Processos Os processos no sistema Unix, são implementados de forma similar aos processos seqüenciais clássicos. Onde cada processo é responsável por um único programa e possui uma única linha de controle, capaz de referenciar a próxima instrução a ser executada. O sistema de gerenciamento de processos implementado oferece suporte à multiprogramação. Permitindo que muitos processos executem ao mesmo tempo, em um pseudoparalelismo. Tanto podem haver múltiplos processos de sistema como de usuário. É utilizada no sistema Unix, a chamada de sistema FORK, para a criação de processos-filhos. A chamada cria uma cópia exata do processo-pai que a executou. Porém, ambos os processos são tratados de forma independente. Assim, a criação de processos-filhos resulta na geração de uma árvore, cujo controle é feito através do PID (Identificador de Processo) de cada processo. Em certo momento do processo de boot do sistema Unix, o processo "init" é montado pelo kernel. Esse processo realiza, então, a leitura de um arquivo que irá lhe informar a quantidade de terminais do sistema. Em um passo seguinte, esse processo criará um processo-filho para cada terminal encontrado, e dormirá até que um deles termine. Cada processo criado, é responsável pela execução de um programa de login para a ativação do shell de usuário. Processos no Unix se comunicam através de mensagens, por uma espécie de canal denominada pipe. Sendo possível, inclusive, a sincronização. Visto que, 15
23 um processo será bloqueado, caso tenha sido resignado para uma mensagem interprocessos, até que esta apresente-se disponível. Uma outra maneira de comunicação dos processos ocorre através de interrupções de software. Onde processos podem enviar sinais para outros processos e decidir o que fazer quando um sinal chega. As decisões são, deixar que ele mate o processo, ignorá-lo ou capturá-lo. Quando na decisão de capturá-lo, o processo deve especificar uma rotina para manipulação de tais sinais. Todavia, um processo pode apenas enviar sinais para seu grupo de processos. O qual é constituído pelo processo-pai e os descendentes deste. No sistema, cada usuário é identificado por um UID (Identificador de Usuário), um inteiro definido pelo administrador do sistema. O UID é automaticamente associado a cada processo criado por esse usuário O Modelo de Memória O sistema de modelagem da memória adotado no sistema Unix, visa a possibilidade de utilização do sistema nas mais diversas arquiteturas. Sendo um modelo simples e direto, que constitui o espaço de endereçamento de cada processo, de três segmentos. Os segmentos de código, de dados e de pilha. O código executável do programa fica contido no segmento de código, o qual possui tamanho fixo e apenas pode ser lido. Os dados necessários à execução do programa encontram-se no segmento de dados. O qual é dividido em duas partes: dados inicializados e dados não inicializados. E ao contrário do segmento de código, o segmento de dados tem seu conteúdo constantemente modificado e seu tamanho dinamicamente alterado, de acordo com as necessidades do programa. Quanto ao segmento de pilha, este contém elementos como as variáveis do shell e argumentos de linha de comando. É possível o aumento do tamanho do segmento de pilha, contudo tal processo é realizado pelo sistema operacional diretamente e não pelos programas em execução. 16
24 Embora os segmentos de pilha e dados não possam ser compartilhados, há essa possibilidade no que refere-se ao segmento de código. O que permite a vários processos compartilharem um mesmo segmento de código Sistema de Arquivos Arquivos são abertos no sistema Unix através da chamada de sistema OPEN. A qual, leva como argumentos, o caminho do arquivo a ser lido e a condição de abertura, isto é, se o arquivo vai ser aberto para leitura, escrita ou ambos. Quando a chamada OPEN, é feita o sistema verifica a existência do arquivo. Caso exista, é verificado se o processo que esta tentando utilizar o arquivo tem permissão para tal. Se for permitido ao processo, a utilização do arquivo, será retornado a ele um número positivo, denominado descritor de arquivo. O qual é usado pelas chamadas de leitura e escrita para identificar o arquivo. No entanto, será retornado ao processo o valor -1, caso não seja permitido o acesso ao arquivo. Os descritores de arquivo são distribuídos de forma que, quando um processo é iniciado, o mesmo detenha três descritores. São eles: 0 para a entrada padrão, 1 para a saída padrão, e 2 para o arquivo de erro. [TANENBAUM, 1999] Os descritores maiores que 2 são usados, seqüencialmente, para identificar cada arquivo que venha a ser aberto pelo processo. Esse descritor é apenas liberado quando o arquivo identificado por este é fechado. Arquivos em Unix podem ser especificados de duas maneiras: através de um caminho absoluto ou de um caminho relativo dentro de um diretório de trabalho. Também é permitido aos usuários, o uso de uma entrada especial denominada link. Esta define uma entrada de diretório que faz apontamento para um arquivo desejado. 17
25 O sistema Unix implementa um modelo de sistema de arquivos que permite a montagem de um dispositivo de armazenamento, na árvore de outro dispositivo. Apresentando uma única árvore de arquivos, independente de quantos dispositivos estejam montados nesta. Para solucionar o problema de concorrência no acesso de arquivos, é implementado o mecanismo de bloqueio. Podendo ocorrer como bloqueio compartilhado ou exclusivo. O que possibilita aos processos bloquearem desde um único byte, até um arquivo inteiro. Para isso, são requeridos os seguintes dados: a especificação de qual arquivo, o primeiro byte desse arquivo, e a quantidade de bytes desejada para bloqueio. Um processo, quando em tentativa falha de bloquear um arquivo, pode optar por esperar até que o arquivo seja liberado para bloqueio, ou mesmo, informado imediatamente sobre seu não sucesso de bloqueio O Sistema de Entrada e Saída Para possibilitar aos programas o acesso aos dispositivos conectados ao sistema, o Unix oferece os arquivos especiais. Estes que compõe a integração de todos os dispositivos no sistema de arquivos. Os programas podem executar ações de abertura, leitura e escrita de tais arquivos, da mesma forma que em arquivos comuns, sem a necessidade de nenhuma chamada especial. Fato que ainda propicia o mecanismo de segurança de acesso aos dispositivos, visto que o mesmo mecanismo de proteção relacionado aos arquivos comuns também é válido para os arquivos especiais. Arquivos especiais são dividos em duas categorias: arquivos de bloco e arquivos de caractere. O arquivo especial de bloco é composto por uma seqüência de blocos, os quais são numerados e podem ser endereçados e acessados individualmente. [TANENBAUM, 1999] Esse tipo de arquivo é utilizado para acesso a discos. 18
26 No entanto, quando o processo de entrada/saída dos dispositivos é realizada através de um trem de caracteres, são utilizados os arquivos especiais de caracteres. Os quais são utilizados como entrada e saída para os demais tipos de dispositivos que não discos. Para vários tipos de customização dos mecanismos de entrada/saída que são acessados por arquivos especiais de caractere, existe uma chamada de sistema que define padrões especificados pelo usuário. Porém, o uso de tal chamada é restrito a esse tipo de arquivo, não podendo ser utilizada para arquivos especiais de bloco ou mesmo arquivos comuns Conclusão Sistemas operacionais são implementados com base em um conceito geral que visa oferecer uma interface amigável com o hardware da máquina. Para isso, utilizando-se da implementação de tarefas que correspondem a conceitos comuns a todos sistemas operacionais. Contudo, implementações podem variar de acordo com os métodos escolhidos para satisfazerem os conceitos relacionados. Visto isso, e observando as particularidades relacionadas às implementações do sistema Linux e seus derivados. Tal qual o objetivo de adaptação do sistema às mais diversas arquiteturas e seu enfoque para uso em desenvolvimento. O uso de um sistema operacional relacionado à família Unix propõe praticidade e confiabilidade para composição de um modelo de sistema dedicado. Onde a flexibilidade torna-se imensamente visada, e principalmente a diversidade como efeito de um padrão amplamente difundido de sistemas operacionais. Os quais encontram-se relacionados à construção de uma enorme gama de projetos, nos mais diversos setores. 19
27 3 - A Tecnologia Utilizada no Sistema Dedicado Para uma diferenciação e proposição de atualidade de um sistema para aplicações dedicadas, a tecnologia que o envolve deve trazer consigo novos e atuais parâmetros de desenvolvimento. Assim, um sistema orientado a objetos realiza a perfeita integração com as qualidades previstas para a atual tecnologia em desenvolvimento. Como base para construção de um sistema orientado a objetos, é utilizada uma linguagem de propósito geral, fortemente enfocada no paradigma de orientação a objetos. Afim de possibilitar o uso das diversas vantagens oferecidas pelo paradigma. Com isso, a linguagem Java apresenta-se com todos os requisitos necessários, além de trazer consigo vantagens próprias. Sendo ferramenta principal para a implementação dos conceitos relacionados à composição do um sistema. Como parte do estudo para desenvolvimento do sistema, a análise da base de execução dos sistemas Java, faz-se necessária Introdução à Orientação a Objetos A orientação a objetos surgiu como um paradigma com objetivo solucionar problemas existentes no desenvolvimento de sistemas. Enfocando a diminuição do custo de desenvolvimento, sua manutenção e confiabilidade. Com forte utilização do conceito de reusabilidade, garante a reutilização dos componentes do sistema. Para isso, o paradigma utiliza-se do estudo e definição de módulos, ou objetos e seus relacionamentos na composição deste. 20
28 Classes e Objetos Em um sistema orientado a objetos, cada entidade do mundo real ou imaginário representa, de maneira única, um objeto. Este se caracteriza como uma entidade com estado mutável, o qual é, por sua vez, caracterizado pelo seu comportamento. Objetos possuem as mesmas características estruturais e comportamentais, porém identidades individuais únicas. Propriedades que formam a estrutura de um objeto, as quais são armazenadas pelo próprio, são denominadas atributos do objeto. Atributos determinam a descrição de um objeto, seu estado, definem um modelo comportamental e sua estrutura organizacional. A Figura 3.1 ilustra um objeto. Figura 3.1 Um objeto O principal aspecto relacionado à objetos, se apresenta através da interação entre eles. Realizando ações e trocando informações com o meio, em resposta às ações provocadas neste último. O processo de interação entre objetos ocorre, basicamente, pelo envio de mensagens. Sendo que, ao receber uma mensagem, um objeto, normalmente, executa um método ou uma "exceção". Este que é considerado um tipo de reação especial, que ocorre quando não há o entendimento da mensagem pelo objeto. Objetos possuem, ainda, uma característica que define seu tempo de vida, denominada persistência. Podendo variar em termos de duração, entre curto prazo e permanente. Referindo-se a um objeto específico, é utilizado o termo instância. O que define um objeto de uma determinada classe, em particular. O que leva à definição do conceito de classe como uma descrição de um conjunto de objetos com os 21
29 mesmos atributos e comportamentos, assim como os mesmos relacionamentos com outros objetos, exemplificado pela Figura 3.2. Através de uma classe é possível a criação de um ou mais objetos com uma mesma definição de métodos e atributos. A classe de um objeto é referenciada implicitamente por este, sendo sua, a informação de qual classe este pertence. Figura 3.2 Classe Genérica Uma classe pode ser caracterizada como sendo uma classe abstrata. Como uma classe que não se encontra completa, com apenas definições parciais de serviços e estruturas. E, que não possibilita a criação de objetos. Podendo ser uma classe abstrata naturalmente construída, ou ainda uma reunião de métodos e atributos para a formação de uma classe genérica Encapsulamento A aplicação do conceito de encapsulamento na orientação a objetos vem da necessidade de uma distinção entre implementação e especialização, bem como utilização de modularidade. Assim, um tipo abstrato de dado é encapsulado e mantém sua implementação oculta no módulo ao que corresponde. Havendo uma interface para apresentação das operações que trabalharão os dados encapsulados. Possuindo, então, uma parte privada e uma parte compartilhada. Portanto, objetos apresentam-se como módulos, que possuem estado e comportamento, ou seja, atributos e métodos, encapsulados sob um nome. Podendo ser reutilizados como especificação ou componente de um sistema. 22
30 Sobre o conceito de encapsulamento podem ser aplicadas definições que conduzem ao grau de encapsulamento do objeto. Não havendo, porém, uma certeza quanto ao fato do meio correto. Tais definições especificam que, um objeto que possua acesso aos seus atributos restringidos unicamente aos seus métodos, é visto como um objeto sob forte encapsulamento. Se há a possibilidade de acesso tanto aos atributos e métodos, de forma tanto privada quanto publica, o encapsulamento é dito externo. Em certas condições, é possível a definição de atributos e métodos públicos, privados ou protegidos. Onde a classificação privada torna o acesso possível somente aos métodos membros da classe. Ao passo que a classificação pública habilita o acesso a todos. Já classificando-se como protegido, obtém-se a visibilidade do item em questão, somente possível aos métodos membros da classe e suas subclasses Herança Esse princípio forma a base para uma técnica significativa de representação explícita de elementos comuns. [COAD, 1993] Em orientação a objetos, o conceito de herança significa que novas classes podem ser derivadas de uma já existente. Onde um relacionamento superclasse/subclasse é estabilizado. Com a subclasse herdando atributos e métodos da super-classe correspondente. Porém, ainda é possível para a subclasse, a definição de novos métodos e atributos. Portanto, define-se como herança a propriedade de ser possível a criação de classes que ampliam-se a partir de definições básicas. Partindo de classes mais simples e genéricas para classes mais complexas e específicas (Figura 3.3). O conceito é fundamental como visão do sistema de especialização/generalização de classes. Vendo-se instâncias de uma subclasse como especializações de instâncias referentes a uma super-classe, com estas 23
31 podendo conter estados e comportamentos adicionais. E instâncias de uma superclasse como generalizações, ou restrições, de instâncias referentes a uma subclasse. Figura 3.3 Herança simples Existem ainda, definições mais específicas relacionadas ao conceito de herança. As quais apresentam os conceitos de herança simples e herança múltipla. Caracterizado como herança simples, o fato de uma subclasse herdar atributos e métodos de somente uma super-classe. Em contrapartida, a herança múltipla define uma herança de várias super-classes por uma subclasses, conforme a Figura 3.4. Figura 3.4 Herança múltipla Aplicado sob a herança, pode-se utilizar o conceito de cancelamento. O qual permite substituir um método da super-classe por um outro na subclasse. O cancelamento poder ocorrer com o objetivo de ampliar os serviços realizados, definido como cancelamento para extensão. Havendo, ainda, o cancelamento para restrição, que visa excluir o serviço que não é mais necessário. O cancelamento para otimização, que é aplicado com a finalidade de aumento de performance. Ou, o cancelamento por conveniência, quando um cancelamento pode ser conveniente por um motivo qualquer. O que 24
32 deve ser evitado, por estar semanticamente incorreto. Ao fim, os métodos não podem ser substituídos por outros que possuam um comportamento diferente do esperado. Com a aplicação do conceito de herança na orientação a objeto, objetiva-se facilitar o compartilhamento de código e a redução da codificação em função de maior clareza na diagramação dos sistemas desenvolvidos. E por fim, definindo uma hierarquia rigorosa entre os componentes do sistema. Isto, de acordo com as características nas quais estes se assemelham Agregação A agregação indica que em um relacionamento entre classes, uma é parte, e está, por portanto, contida na outra classe. Permitindo, assim, que sejam formadas classes estruturalmente mais complexas. Havendo, ainda, tipos especiais de agregação, estas que são denominadas agregações compostas e agregações compartilhadas. É formada a agregação compartilhada quando uma das classes é uma parte, ou está contida na outra, porém podendo, esta parte, estar contida várias vezes na outra em um mesmo momento (Figura 3.5). Figura 3.5 Agregação compartilhada Uma agregação de composição ocorre quando uma classe constitui, permanentemente, uma outra (Figura 3.6). Sendo que, caso o objeto da classe que a contém seja destruído, as classes da agregação de composição serão também destruídas. Devido ao fato de serem partes integrantes da outra classe. 25
33 Figura 3.6 Agregação de composição Polimorfismo O conceito define que métodos de classes diferentes podem ser relacionados por um mesmo identificador. Um conceito em teoria de tipo no qual um nome (como uma declaração de variável) pode denotar objetos de muitas subclasses diferentes que são relacionadas por alguma super-classe comum, assim, qualquer objeto denotado por esse nome tem a capacidade de responder a algum conjunto comum de operações de modos diferentes [BOOCH, 2000]. Assim, ao receber uma mensagem com o pedido de execução de determinado serviço, o objeto tem o papel de definir qual método será executado. Portanto, uma mesma mensagem pode ativar métodos diferentes, dependendo da classe de objetos para onde a mensagem é enviada. O conceito de polimorfismo possibilita várias classes com interfaces definidas de forma idêntica, contudo, com implementações e objetos diferentes. O que faz com que uma mensagem possa ser executada de acordo com as características do objeto que está recebendo o pedido de execução do serviço Máquina Virtual Java A linguagem Java caracteriza-se como uma linguagem de propósito geral 26
34 orientada a objetos. Omite as principais características que tornam linguagens como C e C++, complexas, confusas e inseguras. O uso da linguagem Java para desenvolvimento, é feito com fins de execução sobre uma plataforma independente de arquitetura e altamente segura. Possibilitando alta portabilidade, graças à máquina abstrata sobre à qual os aplicativos são executados. Tal plataforma é denominada Máquina Virtual Java Introdução à Máquina Virtual Java A Máquina Virtual Java caracteriza-se como um componente responsável pelo hardware, sistema operacional e segurança do sistema contra programas maliciosos. Produzindo, assim, uma independência de plataforma, por ser uma máquina virtual correspondente à uma máquina real. Contendo conjuntos de instruções e manipulação de memória em tempo real. Figura 3.7 Programas multiplataforma da linguagem Java Assim, programas construídos em linguagem Java não são compilados para um nível de instruções de baixo nível, diretamente correspondente à máquina real. Mas, sim, são compilados para um nível intermediário, que será interpretado pela Máquina Virtual Java. Este nível intermediário é referido como bytecode. Sendo que, programas compilados ao nível de bytecode podem ser executados em qualquer máquina que contenha a Máquina Virtual Java, de acordo com a Figura 27
35 3.7. O código em bytecode será, então, traduzido para as instruções de baixo nível compreendidas pela máquina real. Programas construídos para rodarem sobre a Máquina Virtual Java são compilados de forma análoga ao que se fossem compilados para uma máquina real. E o programa compilado deve executar de maneira abstraída no que diz respeito à máquina em que está executando. Também apresentando-se como se executasse sobre a máquina real Composição da Máquina Virtual Java A construção de uma máquina virtual na memória, que execute tarefas semelhantes às de uma máquina real, exige uma composição complexa que satisfaça todas necessidades que um programa possa ter. Com isto, uma máquina virtual estrutura-se com componentes menores, que executam funções específicas. Componentes estes, que são, registradores, pilha, ambiente de execução, coletor de lixo, conjunto de constantes, área de métodos e o conjunto de instruções bytecode. Registradores da Máquina Virtual Java são semelhantes aos registradores da máquina real. Exceto pelo fato de não serem usados para passagem ou recepção de argumentos. O papel destes registradores é guardar o estado da máquina, e atualizá-los sempre que uma linha de bytecode seja executada. A pilha é responsável pela passar os parâmetros requeridos por métodos e operações, e receber os resultados de volta. Toda instrução bytecode retira dados da pilha, realiza o processamento, e insere os resultados de volta na pilha. Funcionando, a pilha, da forma em que a última inserção é a primeira a sair, esta espera uma ordem específica com relação aos dados que, nela, são inseridos. O ambiente de execução é mantido dentro da pilha como um conjunto de 28
36 dados. É usado para tratamento de ligação dinâmica, retorno normal de métodos e geração de exceções. Como cada programa em execução no ambiente possui seu espaço de alocação de memória correspondente, o mesmo também possui um coletor de lixo relacionado ao seu espaço de alocação de memória. Como uma ação automática, para evitar que o espaço alocado pelo programa torne-se muito grande, o coletor de lixo é ativado. O que libera a memória que estaria ocupada por objetos que não estão mais em uso. Toda classe em seu espaço de memória possui um conjunto de constantes associado a esta. As quais são definidas no momento de compilação, por serem imutáveis. No conjunto de constantes, itens, codificam todos os nomes utilizados por qualquer método de uma classe específica. Toda informação associada com uma constante segue um formato específico, baseado no tipo de constante. Similar às áreas de código compilado do ambiente de execução de outras linguagens, a área de métodos armazena instruções bytecode. Que são associadas com métodos no código compilado e à tabela de símbolos que o ambiente de execução necessita para a ligação dinâmica. O conjunto de instruções bytecode define as instruções aceitas pela Máquina Virtual Java. Assim, o código do programa é interpretado em forma de bytecode, que assemelha-se à uma codificação Assembly. Afim de obter-se uma codificação traduzida para um nível mais baixo Conclusão A maioria dos sistemas operacionais existentes não trazem sua composição de forma semelhante à organização do mundo real. Não possibilitam a construção de componentes que se assemelhem a essa mesma organização, por intermédio de 29
37 mecanismos simples. Onde a maioria de seus componentes é encapsulada em grandes aplicações, com quase ou nenhuma cooperação ou relacionamento. Esses sistemas são construídos de acordo com bases históricas de antigos sistemas. Os quais eram unicamente projetados com propósitos matemáticos e, portanto, não adequados ao propósito geral de seu uso. Para uso do paradigma de orientação a objetos na construção do sistema dedicado, a linguagem Java é peça fundamental. Devido às suas vantagens com relação a outras linguagens, bem como sua característica fundamental de plataforma de execução. Com isso, executando sobre uma plataforma independente (Máquina Virtual Java), o sistema garante, de certa forma, portabilidade e maior segurança. Enfim, essas características serão importantes na definição de sistemas dedicados, onde, objetos podem ser construídos fisicamente e interagem entre si. 30
38 4 - A Construção de um Sistema Java para Aplicações Dedicadas Com base na composição já descrita em seus funcionamentos, o estudo subseqüente pretende a descrição e análise dos diversos modelos utilizados para a formação do sistema Java para aplicações dedicadas. Por motivos de não adaptação crítica de alguns componentes, os quais também fizeram parte da análise, apenas são apresentados aqueles que obtiveram maior estabilidade e disposição aos fins do projeto Introdução ao Sistema Um sistema dedicado caracteriza-se por um sistema computacional com finalidades específicas, inserido em um sistema maior, este com fins mais abrangentes. Assim, sistemas dedicados podem alcançar diversas formas, que variam de acordo com as necessidades de suas aplicações. Tais sistemas podem estar embutidos em pequenas memórias, voláteis ou não, utilizando-se de simples processadores; ou mesmo, podem encontrar-se em sofisticados e completos computadores. Podem ser autônomos com relação ao controle de hardware, ou ainda, situarem-se integrados a um sistema operacional. Alguns sistemas dedicados assemelham-se a um computador pessoal, muitas vezes sem a presença de um ou mais periféricos. O que não nega o fato da existência de hardware próprio para sistemas dedicados. Havendo, inclusive, diversos fabricantes que disponibilizam hardware específico e simplificado para o 31
39 projeto de tais sistemas. Buscando-se atingir ao máximo os objetivos primários do sistema dedicado: implementação compacta, baixo custo, alta confiabilidade e arquitetura simplificada. Enfim, este projeto, propõe-se à utilização de um sistema altamente flexível para a implementação da plataforma do sistema dedicado. Vale ressaltar que a arquitetura apresentada no computador pessoal, é, em diversos casos utilizada, senão buscada para a implementação de um sistema dedicado. Assim, o sistema Linux, apresenta-se como um sistema com enorme flexibilidade para controle da arquitetura utilizada. Visto, sobretudo, que o objetivo final em questão é a utilização da tecnologia Java e suas qualidades. São encontradas no sistema Linux as características desejadas para o projeto, além do fato deste, realizar uma perfeita implementação dos conceitos de sistema referentes à família Unix. Em vista da flexibilidade, o sistema Linux pode ser encontrado nas mais diversas versões, adaptadas às mais diversas necessidades e facilmente acessíveis. O que contribui para a obtenção de um sistema operacional que se enquadre nas características desejadas para integrar-se à máquina virtual Java, na formação do sistema dedicado. As diversas distribuições, ou pacotes Linux, são apresentados de forma a variar com seu conteúdo. Conteúdo o qual, dispõe-se de variações por demais para serem descritas em um único tópico. Porém, os interesses do projeto visam uma distribuição mínima. Com o menor número possível de aplicativos de usuário, bibliotecas de sistema simplificadas e kernel mínimo. Por se tratar de um sistema dedicado, um dos objetivos padrão é, portanto, adequar a base do sistema a um espaço mínimo, com um custo igual de necessidades computacionais. Permitindo que uma maior parte de recursos esteja disponível e possa, portanto ser utilizada durante a execução da aplicação específica. 32
40 4.2 - Avaliações e Estratégia de Implementação Embora, outras distribuições Linux tenham sido testadas, apenas três foram suficientemente capazes de apresentar os requisitos necessários de estabilidade, robustez e tamanho. São elas: Coyote Linux (versão 2.0.4), Tomsrtbt Linux (versão ) e Small Linux (versão 0.81). Assume-se como versões apresentadas, as últimas até a realização deste projeto. Não obstante do fato de que outras versões anteriores também foram testadas. Porém, a consideração final dos testes é resultado das versões aqui apresentadas, em vista das anteriores não serem suficientemente completas. Fora definido o espaço máximo para implementação do projeto como oito megabytes (8 Mb). Sendo que os tamanhos exatos das distribuições Linux escolhidas são: Coyote Linux, um disquete (3/4); Tomsrtbt Linux, um disquete (3/4); Small Linux, dois disquetes (3/4). São também descritos os testes para implementação do projeto utilizandose do sistema operacional DOS. O que é feito apenas para contraprova e relacionamento com o teste de funcionalidade da implementação da máquina virtual Java escolhida, em versão DOS/Windows. Com relação à máquina virtual Java, a escolhida para o projeto é denominada Kaffe. As características que a definem como ideal para o projeto são: tamanho reduzido, estabilidade, flexibilidade, compatibilidade com a máquina Java (Sun Microsystems, Inc.), biblioteca de classes amplamente implementada e grande suporte oferecido. Por razões claras de necessidades de execução, como espaço ocupado, a máquina Java (Sun), de forma alguma, apresenta-se ideal para o projeto. A plataforma Kaffe é apresentada como uma versão simplificada, não licenciada da máquina virtual Java original. Trata-se de um esforço de 33
41 implementação de uma versão livre e de código aberto da máquina virtual Java. O que é feito sem nenhuma utilização do código fonte correspondente à máquina Java (Sun). Fato que seus criadores fazem questão de denotar Sistema DOS e Máquina Java Mesmo não sendo foco do projeto, a utilização do sistema DOS integrado à máquina virtual Java também foi testada. E por motivos já especificados, é dedicado um tópico específico para descrição do método. A máquina virtual Java escolhida para o projeto, Kaffe, não possui uma implementação DOS oficial, reconhecida pela comunidade Kaffe. Embora não reconhecida, há uma versão correspondente, produzida com base no código fonte da versão Linux. A máquina é denominada de forma ligeiramente diferente da máquina Kaffe, sendo chamada KaffePC. Para a construção da máquina, seu desenvolvedor utilizou-se de modificações que foram feitas no código fonte original para Linux. Sua compilação foi realizada pelo compilador DJGPP, versão compatível com DOS/Windows. E em última nota, o desenvolvedor declara que modificações também foram feitas no módulo servidor DPMI (DOS Protected Mode Interface) original do compilador DJGPP. Trata-se do arquivo cwsdpmi.exe, e segundo nota, as modificações foram feitas para corrigir erros do mecanismo de interrupção de hardware. Testes foram realizados com todas versões existentes da máquina KaffePC, contudo as descrições partem dos testes realizados com a última versão: 1.0.b3. Devido à falta de características necessárias a uma execução mais completa. Com relação às versões DOS aplicadas, são elas: 4.1, 5.0, 6.22 e 7.0, 34
42 devidamente excluídas de aplicativos maiores relacionados ao usuário final. Convém observar que a configuração da máquina KaffePC realizada, foi a única possível e demostrada pelo desenvolvedor. Todos os testes tiveram resultados semelhantes senão exatamente iguais em todas as versões testadas. Por tal motivo, é feita uma descrição geral dos problemas encontrados em cada teste realizado. Dois programas testes previamente executados na máquina virtual Java (Sun), foram implementados especificamente com intuito de realizar o uso de capacidades computacionais mais complexas. Tais como chamadas recursivas, e manipulação de alocações de estruturas de dados. Isso, para reforçar os testes sobre a máquina. Os programas são chamados Nfib.class e Lista.class. O primeiro obtém a seqüência de Fibbonaci, conforme a entrada da posição desejada. Enquanto o segundo oferece opções de manipulação para uma lista encadeada com estruturas de dados do tipo String. Os códigos foram compilados de acordo com especificações da comunidade Kaffe e do próprio desenvolvedor da máquina KaffePC. Sendo utilizados para isso, os compiladores: javac do pacote JSDK (Java Standard Development Kit) versões 1.3 e 1.4; kjc, versão 2.1b; IBM jikes, versões 1.13 e Segundo notas da própria comunidade Kaffe, os compiladores javac do pacote JSDK 1.4 e IBM jikes 1.18, devem sem usados com os parâmetros target 1.1 e -source 1.1, respectivamente. Afim de evitar-se uma série de mensagens warning. Um exemplo é mostrado na Figura 4.1, do código utilizado Nfib.class. Estando o restante, disponível no anexo A. O desenvolvedor máquina KaffePC afirma a compatibilidade da mesma com todas as versões DOS iguais ou superiores à versão 4.1. Testado na versão 4.1 e 5.0, o programa teste executou uma falha de segmento na memória, culminando no término de sua execução. Fato que ocorre na versão 4.1, mesmo 35
43 quando executado sem que um programa seja especificado. //Programa: Nfib.class //Função: Apresenta o número da seqüência de Fibbonaci conforme a posição especificada import java.io.*; class Nfib public int fibpos(int number) if(number == 1) return (1); else if(number == 2) return (2); else return (fibpos(number-1)+fibpos(number-2)); public static void main(string[] args) Nfib app = new Nfib(); int result, number = 1; BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); while(number!= 0) try System.out.println("\nNumero Fibbonaci na posição (n) [0 - Sair]: "); number = Integer.parseInt(stdin.readLine()); catch (IOException e) System.out.println("Erro de leitura!"); if (numero!= 0) result = app.fibpos(number); System.out.println("O número é: "+result); System.out.println("***************************** **********"); Figura Exemplo da série de Fibbonaci 36
44 Nas versões 6.22 e 7.0, na tentativa de executar o código dos programas teste, a máquina gerou a seguinte exceção : java.lang.classnotfoundexception: Nfib e java.lang.classnotfoundexception: Lista. O que evidenciou a incapacidade da máquina em localizar as classes principais, referentes aos programas testados. E por isso, mostrando-se também, incapaz de instanciar objetos das classes referidas. Para tentativa de resolução do erro, foi realizada especificação direta do diretório da classe do programa no classpath da máquina. Ou mesmo a inclusão da classe na biblioteca de classes Klasses.jar. Porém, resultando sempre no mesmo erro. //Programa: Eco.class //Função: apresenta um prompt onde retornará eco de tudo que for digitado //até que seja digitada a palavra "sair" class Eco public static void main(string[] args) BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String in = ""; while(!in.equals("sair")) try System.out.println("-Prompt-"); in = stdin.readline(); catch (IOException e) System.out.println("Erro de leitura!"); if (!in.equals("exit")) System.out.println("Eco: "+in); System.out.println("\n"); Figura 4.2 O programa Eco.class 37
45 Com o teste de um simples programa que conservasse a utilização das mesmas classes importadas, foi detectado o erro referente à execução da máquina Java no ambiente DOS. Visto na Figura 4.2, o código do programa, denominado Eco.class. Assim, foi constatado que a máquina virtual Java KaffePC não é capaz de realizar instanciação direta dos objetos criados no programa, com exceção daqueles já constados em sua biblioteca de classes. Tornando-se, portanto, capaz de executar apenas código implementado internamente em seu método estático main. Mesmo que somente referenciado, o modelo máquina Java/DOS, para relacionamento de funcionalidade com outra plataforma compatível, para execução da máquina virtual escolhida, o modelo se mostra incapaz na composição do sistema dedicado visado Sistema Coyote e Máquina Java A distribuição Coyote Linux trata-se de um sistema Linux de um único disquete (3/4), designado primeiramente para distribuir uma conexão com a Internet. Foi criado especialmente para baixa dependência de requerimentos com relação a hardware. Sendo capaz de oferecer boa performance, além das características visadas nos sistemas Linux. O sistema tem por base o kernel Linux série 2.2. Não possui requisições de disco, sendo que sua árvore de arquivos se encontrará montada em memória volátil (RAM). Proporcionando um alto desempenho em execuções que exijam trabalho com arquivos. Seus requerimentos mínimos são: 486/DX25, 12 Mb RAM, drive de disquete(3/4), adaptador padrão VGA (Video Graphics Array). 38
46 Por possibilitar compartilhamento de conexão com Internet com vários usuários e ser capaz de implementar recursos de firewall avançados, o sistema Coyote apresentou um porte satisfatório para o projeto. Suas características de finalidade específica e necessidades mínimas o caracterizam como um sistema dedicado. Portanto, a base do sistema Coyote poderia ser especificamente modificada para a construção de outro sistema dedicado, porém com propósito distinto. Abrigando, portanto, a máquina Java já citada, Kaffe. Para realização dos testes referentes ao projeto foram criados: um disquete Coyote Linux, contendo o sistema Coyote sem modificações iniciais; um disquete com a máquina Java Kaffe. A máquina foi extraída do pacote de instalação RPM. Devido ao fato claro, da distribuição não possuir o pacote de instalação RPM, nem mesmo de oferecer suporte a desenvolvimento, impossibilitando a compilação do código fonte referente à máquina Kaffe. Foram excluídos os mecanismos de conexão de rede, com a finalidade de saltar o processo de inicialização do programa de compartilhamento de rede. Os quais podem ser saltados mesmo em execução. Não sendo exatamente necessária sua exclusão. Foram feitas modificações no arquivo "syslinux.cfg" no conteúdo do disquete. Onde o parâmetro RAM_SIZE foi certificado em 8 Mb. Com valor real O disco Kaffe composto pelos arquivos extraídos do pacote de instalação da máquina Kaffe. Com exceção do compilador "kcj" localizado no diretório "share/kaffe". O qual não é necessário à execução do sistema. O disco Kaffe foi compactado no formato "Kaffe.tgz", através dos programas Linux "tar" e "gunzip". O arquivo compactado possui o diretório "/usr" e seu segundo nível de diretórios, assim como na árvore de diretórios padrão Linux. Com o sistema Coyote Linux inicializado, foi realizada a montagem do disco Kaffe sobre o mesmo. A máquina Java é, então, descompactada 39
47 internamente ao diretório padrão "/usr". Executando a mesma, a necessidade de uma biblioteca para execução de funções de gerenciamento de memória é detectada. Fato que é possível contornar, migrando a biblioteca de gerenciamento "libm.so.6" de um sistema Linux compatível. Por constatado em teste, diferentemente dos outros aplicativos referentes à máquina Java, o programa "kaffeh" é executado perfeitamente. Programa que é responsável pela composição de arquivos de cabeçalho de código nativo. Sendo apenas parte integrante das ferramentas do pacote Kaffe. O qual é completamente dispensável para a execução da máquina Java. Enfim, a máquina em si, não consegue realizar a execução do programa teste já citado no tópico anterior: "Nfib.class". Ou mesmo de nenhum outro. Onde, em todos os casos, são verificados erros de "Falha de Segmento" Sistema Tomsrtbt e Máquina Java O sistema Linux Tomsrtbt foi criado como uma versão Linux de um disquete, para um propósito geral. Contendo um sistema de arquivos completo e inicializável. Este sistema oferece grande versatilidade por conter um grande número de aplicativos. Proporciona sobretudo, a capacidade de suporte e customização do sistema estando dentro do mesmo. Outra grande qualidade do sistema é o fato de ser possível desempacotar o sistema e moldar diretamente a distribuição de acordo com as necessidades. Fato crucial para os testes na composição da arquitetura do sistema dedicado Java. Foi criado o disco de inicialização sistema Tomsrtbt, e utilizado o mesmo disco Kaffe utilizado nos testes com o sistema Coyote. Porém, com algumas modificações. Os arquivos "shell script" do diretório "/usr/bin" foram editados 40
48 para referenciarem o caminho do diretório "/tmp". Isto para efeitos de aproveitar o espaço livre já alocado do diretório "/tmp", visto que os demais encontram-se cheios, por default. Em essencial, foram modificadas as variáveis "prefix" dos arquivos "shell script". Sendo editadas como: prefix="/tmp/usr". Todavia, o script "kaffe" necessita que outra modificação seja feita, da seguinte forma: : $KAFFE_LIBEXECDIR="/usr/lib/kaffe/bin" Mas, quando realizada a execução da máquina Kaffe, com o programa teste "Nfib.class", o sistema termina por apresentar uma mensagem de erro. Indicando não haver encontrado o arquivo "/tmp/usr/lib/kaffe/bin/kaffe". Programa que trata-se do executável principal da máquina Kaffe. Mesmo sendo executado diretamente em seu diretório de trabalho, através do comando "./Kaffe", o sistema à mesma apresentação de erro. Relatando não existir o arquivo. Afim, de evitar-se a possibilidade de erro provocada pelo sistema de arquivos utilizado. Foi montado, nos mesmos moldes citados, um disco com o sistema de arquivos exato, utilizado pelo Tomsrtbt Linux. O sistema de arquivos Minix. No entanto, o sistema apresenta o mesmo erro. E apresenta-se incapaz de executar a máquina Java Sistema Small Linux e Máquina Java Segundo descrição do próprio desenvolvedor, a distribuição Small Linux é uma distribuição de dois disquetes. Que objetiva ser inicializável com um tamanho mínimo e funcional, em um requerimento mínimo de um processador 386 com 2 Mb de memória RAM. Diferentemente dos outros sistemas citados, essa distribuição realiza a inicialização do sistema através de um disquete, e faz o 41
49 carregamento do sistema de arquivos de um segundo. Uma particularidade do sistema Small Linux é sua capacidade de rodar um ambiente gráfico reduzido, chamado "Tiny X". O que assegura, ser o mesmo, um sistema mais robusto em relação aos demais. Dessa forma, o sistema Small Linux, a princípio, confere uma boa confiabilidade para hospedar a máquina Java na composição do sistema dedicado. Mesmo sendo um sistema robusto e compacto, o Small Linux, após vários testes, provou ser incapaz de executar a máquina Java Kaffe. Nos testes realizados sobre tal sistema, não foram necessárias utilizações do programa teste, previamente citado. Isso, devido ao sistema não ser capaz de hospedar a máquina Java em nenhuma condição. O que, por sua vez, deve-se ao fato de incapacitações referentes à biblioteca de funções C padrão (libc). O sistema Small Linux apresenta suporte aparente para configuração da memória presente no mesmo. Contudo, mesmo feitas alterações na configuração de memória, estas não apresentam-se efetivadas. Assim, a quantidade de memória inicial do sistema, cerca de 2 Mb, encontra-se totalmente ocupada, e não se faz suficiente para abrigar o sistema internamente. Testes para execução da máquina Java foram feitos, portanto, a partir do disquete. Formatado em capacidade de 1.72 Mb e abrigando a arvore de arquivos referente à máquina Kaffe. Porém sem a presença dos arquivos: tools.jar, servlet.jar, rmi.jar, pjava.jar, microsoft.jar, comm.jar, kaffeh; e diretórios: man e include. Constituindo o disquete de uma versão reduzida com os arquivos essenciais a execução da máquina Kaffe. Todavia, sendo o sistema robusto suficiente para diversas aplicações como um ambiente gráfico, este apresentou-se pouco flexível. E sendo incapaz de executar a máquina Java, por suas funções internas serem, de uma forma geral, 42
50 incompatíveis com as necessárias A Máquina Java no Ambiente Red Hat Afim de testar a execução da máquina Kaffe em um sistema Linux completo, o sistema Red Hat foi escolhido por ser um padrão em termos de distribuição Linux. Apresentando uma composição de sistema Linux já conceituada, completa e, em geral, ausente de maiores defeitos. O sistema Red Hat, versão 7.3, foi utilizado para hospedar a máquina Java. Durante o processo de instalação foi possível a obtenção de um sistema instalado que ocupasse cerca de 340 Mb de disco. Pacotes referentes a grandes aplicativos desnecessários ao sistema foram excluídos. Mantendo apenas o sistema e suas ferramentas necessárias, bem como suas dependências. Testes foram realizados com a máquina Kaffe em diversos modelos de hospedagem no sistema. Com finalidade de comprovar a capacidade de execução dos testes realizados sobre as versões compactas do sistema Linux. Foram testadas todas as estratégias anteriormente descritas, referentes aos sistemas Linux. Os quais foram: instalação direta de seu pacote de instalação; descompactação da máquina Kaffe no diretório padrão ("/usr"); descompactação da máquina em diretórios diversos, como "/tmp", modificação dos arquivos "shell script"; execução direta em disquete contendo a máquina Kaffe; e execução em disco rígido da máquina reduzida, conforme testes realizados sobre a versão Small Linux. Todos os testes realizados obteram êxito na execução dos programas testados. Sem que nenhum erro fosse apresentado. Comprovando, portanto, a funcionalidade da máquina Java Kaffe no sistema Linux, para a execução de programas Java. 43
51 A Máquina Java no Ambiente Windows Os testes realizados sobre o ambiente Windows, com a máquina Java, respeitaram os mesmos padrões seguidos para a realização dos testes sobre o ambiente DOS. Com utilização da máquina Java Kaffe versão DOS/Windows, KaffePC. Sendo, enfim, o ambiente Windows perfeitamente capaz de executar a máquina Java. Que por sua vez, foi capaz de executar todos os programas testados. Prova-se, portanto, a portabilidade mínima com relação a uma aplicação Java. Seguindo, claramente, os padrões suportados pela máquina. Foi objetivo do desenvolvedor, a produção de uma máquina Java capaz de executar tanto em ambiente DOS, quanto Windows. Mas, o fato constatado foi a incapacitação da mesma em rodar completamente apenas em ambiente DOS. Apresentando defeitos, anteriormente especificados que comprovam a sua ineficácia sobre tal ambiente. Enfim, em ambiente Windows, a máquina comprova sua capacidade total de execução de programas Java, nos moldes mínimos para tal caracterização. Oferecendo claro suporte aos conceitos básicos de orientação a objetos, definidos no capítulo 3, e testados para a linguagem Java. Mas não conseguidos quando na execução em ambiente DOS Conclusão Ainda que existindo várias distribuições Linux compactas, que se adaptem aos mais diversos fins, nenhuma se mostrou capaz de hospedar a máquina virtual Java. Todos os recursos disponíveis para implementação das estratégias escolhidas não foram suficientes para obtenção de uma base para um sistema dedicado Java. Mesmo assim, foi comprovada a funcionalidade de execução da máquina Kaffe com relação a sistemas operacionais de maior porte. E mesmo não 44
52 sendo objetivo do projeto a utilização do ambiente DOS, os problemas apresentados relacionaram-se mais com a versão da máquina para o ambiente do que com o próprio. 45
53 5 - Conclusão Com este projeto permanecem as observações e provas necessárias para destacar a impossibilidade de construção de um sistema dedicado Java. Para formação de um sistema de acordo com as possibilidades mais acessíveis e diretas, tais como a escolha de um sistema operacional mínimo e uma máquina virtual Java igualmente mínima, a fim de formar a base para uma aplicação específica, nos moldes de um sistema dedicado que venha a se utilizar da tecnologia Java. Como constatado, o que ocorre é um distanciamento paralelo no desenvolvimento de ambos sistemas necessários para tal abordagem. Onde os sistemas Linux compactos desempenham perfeitamente os papéis para os quais foram propostos. Assim como a máquina Kaffe também realiza de forma eficaz e eficiente, as tarefas objetivadas em seu projeto. Com isso, chega-se a um ponto de esclarecimento que permite notar que as distribuições Linux compactas, apesar de serem por muitas vezes flexíveis, não foram projetadas com objetivo de executar uma aplicação que constitui-se uma máquina virtual Java. Em contrapartida, nem mesmo a máquina virtual Kaffe, foi desenvolvida com a finalidade de execução em um sistema que oferecesse requisitos mínimos para tal. E como provado, a máquina Java Kaffe oferece perfeito suporte para execução de aplicações Java que se enquadrem nas expectativas padrões da 46
54 linguagem. Onde é válido ressaltar que todos os testes para comprovação de sua funcionalidade foram realizados com sucesso. Isto, contudo, quando executada sobre uma plataforma para a qual foi projetada: um sistema operacional completo e com suporte a multitarefa, possibilitando a total exploração dos recursos de orientação a objetos suportados pela linguagem Java. Para compor um sistema dedicado Java de tais componentes, mais acessíveis que uma implementação em hardware por exemplo, há essa necessidade de encontro na linha de desenvolvimento de ambos. Onde, tanto uma máquina Java quanto um sistema operacional compacto, sejam desenvolvidos desde o início de forma correlacionada. Ambos com objetivos de serem capazes de prover funcionalidade suficiente para se unirem, de forma a compor um sistema maior. 47
55 Referências Bibliográficas BOOCH, Grady e RUMBAUGH, James e JACOBSON, Ivar. UML: guia do usuário. Rio de Janeiro: Campus, COAD, Peter e YOURDON, Edward. Projeto baseado em objeto. Rio de Janeiro: Campus, SHAY, William A.. Sistemas operacionais. São Paulo: Makron Books, TANENBAUM, Andrew S.. Sistemas operacionais modernos. Rio de Janeiro: LTC Livros Técnicos e Científicos S.A., TANENBAUM, Andrew S. e WOODHULL, Albert S.. Sistemas operacionais: projeto e implementação. Porto Alegre: Bookman,
56 Bibliografia BOOCH, Grady e RUMBAUGH, James e JACOBSON, Ivar. UML: guia do usuário. Rio de Janeiro: Campus, COAD, Peter e YOURDON, Edward. Projeto baseado em objeto. Rio de Janeiro: Campus, HOMEPAGE, Coyote Linux. Disponível em Acesso em abril de LEMAY, Laura e CADENHEAD, Rogers. Aprenda em 21 dias Java 2: professional reference. Rio de Janeiro: Campus, LINDHOLM, Tim e YELLIN, Frank. The Java virtual machine specification. Disponível em Acesso em outubro de PC/104 CONSORTIUM, The. PC/104 standard overview. Disponível em Acesso em abril de PRESSMAN, Roger S.. Engenharia de software. São Paulo: Makron Books, PROJECT, Linux Small Kernel. Disponível em 49
57 Acesso em abril de SHAY, William A.. Sistemas operacionais. São Paulo: Makron Books, TANENBAUM, Andrew S.. Sistemas operacionais modernos. Rio de Janeiro: LTC Livros Técnicos e Científicos S.A., TANENBAUM, Andrew S. e WOODHULL, Albert S.. Sistemas operacionais: projeto e implementação. Porto Alegre: Bookman, THE FREE ENCYCLOPEDIA, Wikipedia. Embedded Systems. Disponível em Acesso em abril de
58 ANEXO A Lista.class. Este documento apresenta o código fonte referente ao programa //Programa: Lista.cpp //Funcao: apresenta um prompt, onde podem ser entrados comandos para manipulacao //basica de uma lista encadeada de Strings. import java.io.*; class Lista private Atomo l; private int count; public Lista() l = null; count = 0; public void inserir(string s) Atomo novo = new Atomo(); Atomo aux; novo.info = s; if (l == null) l = novo; else aux = l; while (aux.next!= null) aux = aux.next; aux.next = novo; count++; 51
59 void inserirpos(string s, int pos) Atomo novo = new Atomo(); Atomo aux; novo.info = s; aux = l; if(pos == 0) novo.next = l; l = novo; else for (int i=0; i<pos-1; i++) aux = aux.next; novo.next = aux.next; aux.next = novo; count++; public void remover(string s) Atomo aux; aux = l; if (aux.info.equals(s)) l = aux.next; else while (aux.next!= null) if (aux.next.info.equals(s)) aux.next = aux.next.next; aux = aux.next; count--; public void removerpos(int pos) Atomo aux; if (pos == 0) l = l.next; else aux = l; for (int i=0; i<pos-1; i++) aux = aux.next; aux.next = aux.next.next; count--; 52
60 public void destroilista() l = null; count = 0; public String imprimir() Atomo aux; String elementos = new String(""); aux = l; while (aux!= null) elementos += aux.info + " "; aux = aux.next; return elementos; public int busca(string s) Atomo aux; int count = 0; aux = l; while (aux.next!= null) if (aux.info.equals(s)) count++; aux = aux.next; return count; public String buscapos(int pos) int i = 0; Atomo aux; aux = l; while (i < pos) aux = aux.next; i++; return aux.info; public int quantidadeelementos() return count; 53
61 public static void main(string[] args) Lista lista = new Lista(); BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String in = ""; while(!in.equals("sair")) try System.out.println("\n[ LISTA ]"); in = stdin.readline(); catch (IOException e) System.out.println("Erro de leitura!"); if (in.equals("inserir")) System.out.print("\nInserir elemento: "); try lista.inserir(stdin.readline()); catch (IOException e) System.out.println("Erro de leitura!"); else if (in.equals("inserirpos")) int posicao = 0; Integer.parseInt(stdin.readLine()); lista.quantidadeelementos()) System.out.print("\nInserir elemento: "); try in = stdin.readline(); System.out.print("\nPosicao: "); posicao = catch (IOException e) System.out.println("Erro de leitura!"); if (posicao >= 0 posicao < lista.inserirpos(in, posicao); else System.out.println("Posicao invalida!"); 54
62 else else if (in.equals("remover")) System.out.print("\nRemover elemento: "); try lista.remover(stdin.readline()); catch (IOException e) System.out.println("Erro de leitura!"); if (in.equals("removerpos")) int posicao = 0; posicao: "); Integer.parseInt(stdin.readLine()); lista.quantidadeelementos()) ["+lista.imprimir()+"]"); else else "+lista.quantidadeelementos()); else System.out.print("\nRemover elemento na try posicao = catch (IOException e) System.out.println("Erro de leitura!"); if (posicao >= 0 posicao < lista.removerpos(posicao); else System.out.println("Posicao invalida!"); if (in.equals("imprimir")) System.out.println("\nElementos: if (in.equals("quantidade")) System.out.println("\nQuantidade de elementos: if (in.equals("buscapos")) int posicao = 0; System.out.println("\nElemento na posicao: "); try 55
63 posicao = Integer.parseInt(stdin.readLine()); catch (IOException e) System.out.println("Erro de leitura!"); lista.quantidadeelementos()) if (posicao > 0 posicao < System.out.println("["+lista.buscaPos(posicao)+"]"); else System.out.println("Posicao invalida!"); else if (in.equals("busca")) int quantidade = 0; lista.busca(stdin.readline()); quantidade + " vezes."); System.out.print("\nBuscar elemento: "); try quantidade = catch (IOException e) System.out.println("Erro de leitura!"); System.out.print("\nElemento encontrado " + else if (in.equals("nova")) lista.destroilista(); System.out.println("Lista sem elementos!"); else if (in.equals("ajuda")) System.out.println("\n[Comandos: inserir, inserirpos, busca, buscapos, remover, " +"removerpos, imprimir, quantidade, nova, ajuda, sair]"); class Atomo public String info; public Atomo next; 56
64 Public Atomo() info = new String(); next = null; 57
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.
SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA
SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA 1. INTRODUÇÃO O conceito de concorrência é o princípio básico para o projeto e a implementação dos sistemas operacionais multiprogramáveis. O sistemas multiprogramáveis
SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com
- Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as
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
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,
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
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
Processos e Threads (partes I e II)
Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa
Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB
Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha
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
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,
Sistemas Operacionais Processos e Threads
Sistemas Operacionais Processos e Threads Prof. Marcos Monteiro, MBA http://www.marcosmonteiro.com.br [email protected] 1 Estrutura de um Sistema Operacional 2 GERÊNCIA DE PROCESSOS Um processo
EXEMPLO: Processo para atualização da hora Processo para monitoramento da necessidade de proteção de tela. Figura 4-1 - Exemplo
4 PROCESSOS Os primeiros sistemas operacionais permitiam que apenas um processo fosse executado por vez. Dessa maneira, este processo tinha todo o sistema computacional a sua disposição. Os atuais sistemas
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.
Sistemas Operacionais
Sistemas Operacionais Aula 13 Gerência de Memória Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso Sumário
Prof.: Roberto Franciscatto. Capítulo 1.1 Introdução
Sistemas Operacionais Prof.: Roberto Franciscatto Capítulo 1.1 Introdução Tipos de Sistemas Operacionais Sistemas Monoprogramáveis / Monotarefa Voltados tipicamente para a execução de um único programa.
Sistemas Operacionais
Sistemas Operacionais Gerência de Arquivos Edson Moreno [email protected] http://www.inf.pucrs.br/~emoreno Sumário Conceituação de arquivos Implementação do sistemas de arquivo Introdução Sistema de
Sistemas Operacionais Gerência de Dispositivos
Universidade Estadual de Mato Grosso do Sul UEMS Curso de Licenciatura em Computação Sistemas Operacionais Gerência de Dispositivos Prof. José Gonçalves Dias Neto [email protected] Introdução A gerência
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,
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
Engenharia de Software III
Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf ([email protected]) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,
Sistemas Operacionais
Sistemas Operacionais Gerência de processos Controle e descrição de processos Edson Moreno [email protected] http://www.inf.pucrs.br/~emoreno Sumário Representação e controle de processos pelo SO Estrutura
7 Processos. 7.1 Introdução
1 7 Processos 7.1 Introdução O conceito de processo é a base para a implementação de um sistema multiprogramável. O processador é projetado apenas para executar instruções, não se importando com qual programa
Organização e Arquitetura de Computadores
Organização e Arquitetura de Computadores Entrada e saída Alexandre Amory Edson Moreno Nas Aulas Anteriores Foco na Arquitetura e Organização internas da Cleo Modelo Von Neuman Circuito combinacional Circuito
Everson Scherrer Borges João Paulo de Brito Gonçalves
Everson Scherrer Borges João Paulo de Brito Gonçalves 1 Tipos de Sistemas Operacionais Os tipos de sistemas operacionais e sua evolução estão relacionados diretamente com a evolução do hardware e das
Sistemas Operacionais. Prof. André Y. Kusumoto [email protected]
Sistemas Operacionais Prof. André Y. Kusumoto [email protected] Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,
Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger
Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger O controle da entrada e saída (E/S ou I/O, input/output) de dados dos dispositivos é uma das funções principais de um sistema operacional.
2 Diagrama de Caso de Uso
Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa
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
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Professor: João Fábio de Oliveira [email protected] (41) 9911-3030 Objetivo: Apresentar o que são os Sistemas Operacionais, seu funcionamento, o que eles fazem,
3. Arquitetura Básica do Computador
3. Arquitetura Básica do Computador 3.1. Modelo de Von Neumann Dar-me-eis um grão de trigo pela primeira casa do tabuleiro; dois pela segunda, quatro pela terceira, oito pela quarta, e assim dobrando sucessivamente,
Arquitetura dos Sistemas Operacionais
Arquitetura dos Sistemas Operacionais Arquitetura de um Sistema Operacional Basicamente dividido em shell é a interface entre o usuário e o sistema operacional é um interpretador de comandos possui embutido
Programação Concorrente Processos e Threads
Programação Concorrente Processos e Threads Prof. Eduardo Alchieri Processos O conceito mais central em qualquer sistema operacional é o processo Uma abstração de um programa em execução Um programa por
Prof.: Roberto Franciscatto. Capítulo 1.2 Aspectos Gerais
Sistemas Operacionais Prof.: Roberto Franciscatto Capítulo 1.2 Aspectos Gerais Estrutura do Sistema Operacional Principais Funções do Sistema Operacional Tratamento de interrupções e exceções Criação e
Sistemas Operacionais 3º bimestre. Dierone C.Foltran Jr. [email protected]
Sistemas Operacionais 3º bimestre Dierone C.Foltran Jr. [email protected] Sistema de Arquivos (1) Todas as aplicações precisam armazenar e recuperar informações. Considerações sobre os processos: Espaço
Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani [email protected] www.inf.pucrs.br/~stoscani
Sistema de Arquivos Ambientes Operacionais Prof. Simão Sirineo Toscani [email protected] www.inf.pucrs.br/~stoscani Gerência de Arquivos É um dos serviços mais visíveis do SO. Arquivos são normalmente
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
SISTEMAS OPERACIONAIS
SISTEMAS OPERACIONAIS Tópico 4 Estrutura do Sistema Operacional Prof. Rafael Gross [email protected] FUNÇÕES DO NUCLEO As principais funções do núcleo encontradas na maioria dos sistemas
Arquitetura e Organização de Computadores I
Arquitetura e Organização de Computadores I Interrupções e Estrutura de Interconexão Prof. Material adaptado e traduzido de: STALLINGS, William. Arquitetura e Organização de Computadores. 5ª edição Interrupções
Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064
Sistemas Distribuídos Professora: Ana Paula Couto DCC 064 Processos- Clientes, Servidores, Migração Capítulo 3 Agenda Clientes Interfaces de usuário em rede Sistema X Window Software do lado cliente para
PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. [email protected]
PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS Prof. Angelo Augusto Frozza, M.Sc. [email protected] ROTEIRO 1. Conceitos de Orientação a Objetos Introdução O paradigma da POO Classes
SISTEMAS OPERACIONAIS 2007
SISTEMAS OPERACIONAIS 2007 VISÃO GERAL Sumário Conceito Máquina de Níveis Conceituação de SO Componentes do SO Visões do SO Conceito de Sistemas O que se espera de um sistema de computação? Execução de
Organização de Computadores 1
Organização de Computadores 1 4 SUPORTE AO SISTEMA OPERACIONAL Prof. Luiz Gustavo A. Martins Sistema Operacional (S.O.) Programa responsável por: Gerenciar os recursos do computador. Controlar a execução
Sistemas Operacionais. Prof. André Y. Kusumoto [email protected]
Sistemas Operacionais Prof. André Y. Kusumoto [email protected] Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação
Algoritmos e Programação (Prática) Profa. Andreza Leite [email protected]
(Prática) Profa. Andreza Leite [email protected] Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução
Sistemas Operacionais [email protected] [email protected] [email protected]
Sistemas Operacionais [email protected] [email protected] [email protected] INTRODUÇÃO O que é um sistema operacional? História dos sistemas operacionais Conceitos dos Sistemas Operacionais Estrutura
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
3 SCS: Sistema de Componentes de Software
3 SCS: Sistema de Componentes de Software O mecanismo para acompanhamento das chamadas remotas se baseia em informações coletadas durante a execução da aplicação. Para a coleta dessas informações é necessário
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,
Apresentação. Ementa da Disciplina. Objetivo da Disciplina. DCA-108 Sistemas Operacionais
DCA-108 Sistemas Operacionais Luiz Affonso Guedes www.dca.ufrn.br/~affonso [email protected] Apresentação Disciplina básica do curso de Engenharia de Computação Carga-horária: 60h teóricas Associadas
5 Mecanismo de seleção de componentes
Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações
Introdução ao Modelos de Duas Camadas Cliente Servidor
Introdução ao Modelos de Duas Camadas Cliente Servidor Desenvolvimento de Sistemas Cliente Servidor Prof. Esp. MBA Heuber G. F. Lima Aula 1 Ciclo de Vida Clássico Aonde estamos? Page 2 Análise O que fizemos
1 http://www.google.com
1 Introdução A computação em grade se caracteriza pelo uso de recursos computacionais distribuídos em várias redes. Os diversos nós contribuem com capacidade de processamento, armazenamento de dados ou
Tipos de sistemas operacionais
Tipos de sistemas operacionais Sistemas Operacionais de Computadores de Grande Porte Sistemas Operacionais para Servidores Sistemas Operacionais de Multiprocessadores Sistemas Operacionais para Computadores
Sistemas Operacionais
Sistemas Operacionais O que se espera de um sistema de computação? Execução de programas de usuários Permitir a solução de problemas Sistema Operacional (SO) é um programa colocado entre o hardware do
Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados
Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Um Sistema Gerenciador de Banco de Dados (SGBD) é constituído por um conjunto de dados associados a um conjunto de programas para acesso a esses
BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia
O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos
Introdução aos Sistemas Operativos
Introdução aos Sistemas Operativos Computadores e Redes de Comunicação Mestrado em Gestão de Informação, FEUP 06/07 Sérgio Sobral Nunes mail: [email protected] web: www.fe.up.pt/~ssn Sumário Definição
A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande
A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada
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.
CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA
8 CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA A porta paralela, também conhecida por printer port ou Centronics e a porta serial (RS-232) são interfaces bastante comuns que, apesar de estarem praticamente
6 - Gerência de Dispositivos
1 6 - Gerência de Dispositivos 6.1 Introdução A gerência de dispositivos de entrada/saída é uma das principais e mais complexas funções do sistema operacional. Sua implementação é estruturada através de
Sistema Operacional. Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais
Sistema Operacional Processo e Threads Introdução a Processos Todos os computadores modernos são capazes de fazer várias coisas ao mesmo tempo. Enquanto executa um programa do usuário, um computador pode
AULA 5 Sistemas Operacionais
AULA 5 Sistemas Operacionais Disciplina: Introdução à Informática Professora: Gustavo Leitão Email: [email protected] Sistemas Operacionais Conteúdo: Partições Formatação Fragmentação Gerenciamento
MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos
MÓDULO 7 Modelo OSI A maioria das redes são organizadas como pilhas ou níveis de camadas, umas sobre as outras, sendo feito com o intuito de reduzir a complexidade do projeto da rede. O objetivo de cada
Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 04 - Concorrência. Cursos de Computação
Cursos de Computação Sistemas Operacionais Prof. M.Sc. Sérgio Teixeira Aula 04 - Concorrência Referência: MACHADO, F.B. ; MAIA, L.P. Arquitetura de Sistemas Operacionais. 4.ed. LTC, 2007. Mono x Multiprogramaçã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
Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron [email protected]
Sistemas Operacionais 2014 Introdução Alexandre Augusto Giron [email protected] Roteiro Sistemas Operacionais Histórico Estrutura de SO Principais Funções do SO Interrupções Chamadas de Sistema
Fundamentos de Sistemas Computacionais Introdução
Fundamentos de Sistemas Computacionais Introdução Prof. Eduardo Alchieri Sistema Computacional Hardware Software Usuários Um ou mais processadores, memória, discos, impressoras, teclado, mouse, monitor,
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
Introdução aos Sistemas
Introdução Introdução aos Sistemas Operacionais 1 2 3... n Ambientes Operacionais Prof. Simão Sirineo Toscani [email protected] www.inf.pucrs.br/~stoscani Compilador Editor de texto Browser Programas
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
BARRAMENTO DO SISTEMA
BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade
1.6. Tratamento de Exceções
Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER
Especificação do 3º Trabalho
Especificação do 3º Trabalho I. Introdução O objetivo deste trabalho é abordar a prática da programação orientada a objetos usando a linguagem Java envolvendo os conceitos de classe, objeto, associação,
Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul
QUESTÃO: 29 Além da alternativa a estar correta a alternativa e também pode ser compreendida como correta. Segundo a definição de diversos autores, a gerência de falhas, detecta, isola, notifica e corrige
Entrada e Saída. Prof. Leonardo Barreto Campos 1
Entrada e Saída Prof. Leonardo Barreto Campos 1 Sumário Introdução; Dispositivos Externos; E/S Programada; E/S Dirigida por Interrupção; Acesso Direto à Memória; Bibliografia. Prof. Leonardo Barreto Campos
Sistemas Operacionais
Sistemas Operacionais Sistemas de Entrada/Saída Princípios de Software Sistema de Entrada/Saída Princípios de Software Tratadores (Manipuladores) de Interrupções Acionadores de Dispositivos (Device Drivers)
Sistemas Operacionais
7 Sistemas Operacionais 7.1 Fundamentos da ciência da computação Cengage Learning Objetivos 7.2 Compreender o papel do sistema operacional. Compreender o processo de inicialização para carregar o sistema
TRABALHO DE DIPLOMAÇÃO Regime Modular ORIENTAÇÕES SOBRE O ROTEIRO DO PROJETO FINAL DE SISTEMAS DE INFORMAÇÕES
TRABALHO DE DIPLOMAÇÃO Regime Modular ORIENTAÇÕES SOBRE O ROTEIRO DO PROJETO FINAL DE SISTEMAS DE INFORMAÇÕES [Observação: O template a seguir é utilizado como roteiro para projeto de sistemas orientado
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.
SISTEMAS OPERACIONAIS. Apostila 01 Assunto: Tipos de Sistemas Operacionais UNIBAN
SISTEMAS OPERACIONAIS Apostila 01 Assunto: Tipos de Sistemas Operacionais UNIBAN 2.0 - INTRODUÇÃO Os tipos de sistemas operacionais e sua evolução estão intimamente relacionados com a evolução do hardware
Sistemas Operacionais. INTRODUÇÃO Prof. Rafael Alberto Vital Pinto FACSUL/CESUR
Sistemas Operacionais INTRODUÇÃO Prof. Rafael Alberto Vital Pinto FACSUL/CESUR 1 Introdução O que se espera de um sistema de computação? Execução de programas de usuários Permitir a solução de problemas
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,
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
Sistemas Distribuídos
Sistemas Distribuídos Modelo Cliente-Servidor: Introdução aos tipos de servidores e clientes Prof. MSc. Hugo Souza Iniciando o módulo 03 da primeira unidade, iremos abordar sobre o Modelo Cliente-Servidor
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Sistema de Arquivos - II Prof. Galvez Implementação de Arquivos Arquivos são implementados através da criação, para cada arquivo no sistema, de uma estrutura de dados
04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS. Aula 1. Prof. Rafael Dias Ribeiro. M.Sc.
MODELAGEM DE DADOS PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS Aula 1 Prof. Rafael Dias Ribeiro. M.Sc. @ribeirord 1 Objetivos: Apresenta a diferença entre dado e informação e a importância
SISTEMAS OPERACIONAIS
SISTEMAS OPERACIONAIS Arquitetura Sistemas Operacionais Andreza Leite [email protected] Plano de Aula Sistemas monolíticos Sistemas em camadas Sistemas micro-núcleo Modelo Cliente-Servidor Máquinas
Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)
Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS) Definição Geral: Disciplina de Compiladores Prof. Jorge Bidarra (UNIOESTE) A especificação de requisitos tem como objetivo
IW10. Rev.: 02. Especificações Técnicas
IW10 Rev.: 02 Especificações Técnicas Sumário 1. INTRODUÇÃO... 1 2. COMPOSIÇÃO DO IW10... 2 2.1 Placa Principal... 2 2.2 Módulos de Sensores... 5 3. APLICAÇÕES... 6 3.1 Monitoramento Local... 7 3.2 Monitoramento
Disciplina: Introdução à Informática Profª Érica Barcelos
Disciplina: Introdução à Informática Profª Érica Barcelos CAPÍTULO 4 1. ARQUITETURA DO COMPUTADOR- HARDWARE Todos os componentes físicos constituídos de circuitos eletrônicos interligados são chamados
Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:
1 Introdução A utilização de frameworks como base para a construção de aplicativos tem sido adotada pelos desenvolvedores com três objetivos básicos. Primeiramente para adotar um padrão de projeto que
FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES
FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos [email protected] www.oficinadapesquisa.com.br Conceito de Computador Um computador digital é
SO - Conceitos Básicos. Introdução ao Computador 2010/01 Renan Manola
SO - Conceitos Básicos Introdução ao Computador 2010/01 Renan Manola Definição de SO É uma camada de software que opera entre o hardware e os programas aplicativos voltados ao usuário final. É uma estrutura
