905 resultados para Linguagem de Programação.
Resumo:
Este trabalho relata as atividades de estudo, projeto e implementação de uma aplicação distribuída que explora mecanismos básicos empregados em comunicação de grupo. O estudo é focado no desenvolvimento e uso dos conceitos de sincronismo virtual e em resultados aplicáveis para tolerância a falhas. O objetivo deste trabalho é o de demonstrar as repercussões práticas das principais características do modelo de sincronismo virtual no suporte à tolerância a falhas. São preceitos básicos os conceitos e primitivas de sistemas distribuídos utilizando troca de mensagens, bem como as alternativas de programação embasadas no conceito de grupos. O resultado final corresponde a um sistema Cliente/Servidor, desenvolvido em Java RMI, para simular um sistema distribuído com visões de grupo atualizadas em função da ocorrência de eventos significativos na composição dos grupos (sincronismo virtual). O sistema apresenta tratamento a falhas para o colapso (crash) de processos, inclusive do servidor (coordenador do grupo), e permite a consulta a dados armazenados em diferentes servidores. Foi projetado e implementado em um ambiente Windows NT, com protocolo TCP/IP. O resultado final corresponde a um conjunto de classes que pode ser utilizado para o controle da composição de grupos (membership). O aplicativo desenvolvido neste trabalho disponibiliza seis serviços, que são: inclusão de novos membros no grupo, onde as visões de todos os membros são atualizadas já com a identificação do novo membro; envio de mensagens em multicast aos membros participantes do grupo; envio de mensagens em unicast para um membro específico do grupo; permite a saída voluntária de membros do grupo, fazendo a atualização da visão a todos os membros do grupo; monitoramento de defeitos; e visualização dos membros participantes do grupo. Um destaque deve ser dado ao tratamento da suspeita de defeito do coordenador do grupo: se o mesmo sofrer um colapso, o membro mais antigo ativo é designado como o novo coordenador, e todos os membros do grupo são atualizados sobre a situação atual quanto à coordenação do grupo.
Resumo:
Uma etapa fundamental no desenvolvimento de sistemas tolerantes a falhas é a fase de validação, onde é verificado se o sistema está reagindo de maneira correta à ocorrência de falhas. Uma das técnicas usadas para validar experimentalmente um sistema é injeção de falhas. O recente uso de sistemas largamente distribuídos para execução dos mais diversos tipos de aplicações, faz com que novas técnicas para validação de mecanismos de tolerância a falhas sejam desenvolvidas considerando este novo cenário. Injeção de falhas no sistema de comunicação do nodo é uma técnica tradicional para a validação de aplicações distribuídas, para forçar a ativação dos mecanismos de detecção e recuperação de erros relacionados à troca de mensagens. A condução de experimentos com injetores de comunicação tradicionais é feita pelo uso do injetor em uma máquina do sistema distribuído. Se o cenário desejado é de múltiplas falhas, o injetor deve ser instanciado independentemente nas n máquinas que as falhas serão injetadas. O controle de cada injetor é individual, o que dificulta a realização do experimento. Esta dificuldade aumenta significativamente se o cenário for um sistema distribuído de larga escala. Outro problema a considerar é a ausência de ferramentas apropriadas para a emulação de determinados cenários de falhas. Em aplicações distribuídas de larga escala, um tipo comum de falha é o particionamento de rede. Não há ferramentas que permitam diretamente a validação ou a verificação do processo de defeito de aplicações distribuídas quando ocorre um particionamento de rede Este trabalho apresenta o estudo de uma abordagem para injeção de falhas que permita o teste de atributos de dependabilidade de aplicações distribuídas de pequena e larga escala implementadas em Java. A abordagem considera a não obrigatoriedade da alteração do código da aplicação sob teste; a emulação de um cenário de falhas múltiplas que ocorrem em diferentes nodos, permitindo o controle centralizado do experimento; a validação de aplicações que executem em sistemas distribuídos de larga escala e consideram um modelo de falhas realista deste tipo de ambiente, incluindo particionamentos de rede. A viabilidade da abordagem proposta é mostrada através do desenvolvimento do protótipo chamado FIONA (Fault Injector Oriented to Network Applications), o qual atualmente injeta falhas em aplicações desenvolvidas sob o protocolo UDP.
Resumo:
Esta dissertação apresenta duas implementações de algoritmos para gerência dinâmica de memória em software, as quais foram desenvolvidas utilizando como alvo uma plataforma embarcada Java. Uma vez que a plataforma utilizada pertence a uma metodologia para geração semi-automática de hardware e software para sistemas embarcados, os dois algoritmos implementados foram projetados para serem integrados ao contexto desta mesma metodologia. Como forma de estabelecer comparações detalhadas entre as duas implementações desenvolvidas, foram realizadas diversas estimativas em desempenho, uso de memória, potência e energia para cada implementação, utilizando para isto duas versões existentes da plataforma adotada. Através da análise dos resultados obtidos, observou-se que um dos algoritmos desenvolvidos obteve um desempenho melhor para realização da gerência dinâmica da memória. Em contrapartida, o outro algoritmo possui características de projeto que possibilitam sua utilização com aplicações de tempo-real. De um modo geral, os custos adicionais resultantes da utilização do algoritmo de tempo-real, em relação ao outro algoritmo também implementado, são de aproximadamente 2% para a potência média dissipada, 16% para o número de ciclos executados, 18% para a energia consumida e 10% sobre a quantidade de total memória utilizada. Isto mostra que o custo extra necessário para utilização do algoritmo de tempo real é razoavelmente baixo se comparado aos benefícios proporcionados pela sua utilização. Como impactos finais produzidos por este trabalho, obteve-se um acréscimo de 35% sobre o número total de instruções suportadas pela arquitetura utilizada. Adicionalmente, 12% das instruções que já existiam no conjunto desta arquitetura foram modificadas para se adaptarem aos novos mecanismos implementados. Com isto, o conjunto atual da arquitetura passa a corresponder a 44% do total de instruções existentes na arquitetura da máquina virtual Java. Por último, além das estimativas desenvolvidas, foram também realizadas algumas sugestões para melhoria global dos algoritmos implementados. Em síntese, alguns pontos cobertos por estas sugestões incluem: a migração de elementos do processamento do escopo dinâmico para o estático, o desenvolvimento de mecanismos escaláveis para compactação de memória em tempo-real, a integração de escalonadores ao processo de gerência de memória e a extensão do processo de geração semi-automática de software e hardware para sistemas embarcados.
Resumo:
Sistemas produtivos industriais podem combinar, em células de manufatura, diferentes características de automação de processos permitindo interfaceamento e possibilitando a flexibilização e otimização da manufatura. Nos processos de fabricação, as dificuldades para a execução de processos de usinagem convencional ou mesmo através de comando numérico, quando se dispõe de máquinas adequadas para a fabricação de peças de geometrias complexas, podem limitar a criatividade, bem como dificultar o desenvolvimento do processo produtivo de forma otimizada. As dificuldades encontradas vão desde fixação das peças, necessidades de dispositivos especiais, restrições nos volumes de trabalho de máquinas CNC e mesmo a geração de trajetórias complexas para máquinas com limitações de eixos. Este trabalho propõe uma metodologia alternativa para usinagem, especialmente fresamento, com desenvolvimento de um algoritmo capaz de, através da utilização de recursos de sistemas CAD/CAM, traduzir arquivos gráficos para uma linguagem de programação utilizada em robôs. Na aplicação utilizam-se recursos dos sistemas CAD/CAM para gerar, numa primeira etapa, o código de programação para máquinas-ferramenta de comando numérico e posterior adaptação, para aplicação em sistemas robóticos. Informações de caminhos de ferramenta para usinagem em máquinas CNC são convertidos, através de uma interface computacional, em trajetórias a serem seguidas por uma ferramenta guiada por um manipulador de robô industrial. Os parâmetros de processo são também adequados as restrições dos sistemas robotizados. A viabilidade do sistema proposto é confirmada através de testes realizados em modelos de superfícies complexas, onde o objetivo do referido trabalho foi alcançado.
Resumo:
Mandelbrot (1971) demonstrou a importância de considerar dependências de longo prazo na precificação de ativos - o método tradicional para mensurá-las, encontrado em Hurst (1951), faz uso da estatística R/S. Paralelamente a isso, Box e Jenkins (1976; edição original de 1970) apresentaram sua famosa metodologia para determinação da ordem dos parâmetros de modelos desenvolvidos no contexto de processos com memória de curto prazo, conhecidos por ARIMA (acrônimo do inglês Autoregressive Integrated Moving Average). Estimulados pela percepção de que um modelo que pretenda representar fielmente o processo gerador de dados deva explicar tanto a dinâmica de curto prazo quanto a de longo prazo, Granger e Joyeux (1980) e Hosking (1981) introduziram os modelos ARFIMA (de onde o F adicionado vem de Fractionally), uma generalização da classe ARIMA, nos quais a dependência de longo prazo estimada é relacionada ao valor do parâmetro de integração. Pode-se dizer que a partir de então processos com alto grau de persistência passaram a atrair cada vez mais o interesse de pesquisadores, o que resultou no desenvolvimento de outros métodos para estimá-la, porém sem que algum tenha se sobressaído claramente – e é neste ponto que o presente trabalho se insere. Por meio de simulações, buscou-se: (1) classificar diversos estimadores quanto a sua precisão, o que nos obrigou a; (2) determinar parametrizações razoáveis desses, entendidas aqui como aquelas que minimizam o viés, o erro quadrático médio e o desvio-padrão. Após rever a literatura sobre o tema, abordar estes pontos se mostrou necessário para o objetivo principal: elaborar estratégias de negociação baseadas em projeções feitas a partir da caracterização de dependências em dados intradiários, minuto a minuto, de ações e índices de ações. Foram analisadas as séries de retornos da ação Petrobras PN e do Índice Bovespa, com dados de 01/04/2013 a 31/03/2014. Os softwares usados foram o S-Plus e o R.
Resumo:
Versão com menu acessível para leitores de tela e vídeo com audiodescrição.
Resumo:
O professor apresenta o que é um framework através de dois exemplos de frameworks .NET e Java Runtime Environment (Java Virtual Machine - JVM). Também ilustra como é a estrutura dos dois frameworks .NET e JRE.
Resumo:
O professor faz apresentação das linguagens de programação C++ e Java. Ilustra o que são linguagens de programação e faz uma comparação entre as duas linguagens, mostrando o que cada uma disponibiliza para o desenvolvimento dos projetos.
Resumo:
O professor apresenta as funcionalidades e estrutura da linguagem de programação C++. Ilustra o que é a linguagem C++, apresenta como é a estrutura de um código da linguagem e quais são os recursos que a linguagem disponibiliza.
Resumo:
O professor apresenta as funcionalidades e estrutura de Orientação a Objeto. Ilustra como surgiu orientação a objeto, o que ela representa nas linguagens de programação e as estruturas de uma linguagem de programação orientada a objeto.
Resumo:
O professor apresenta a proteção e integridade dos dados dentro dos códigos de programação, ilustrando como esta é estruturada dentro do código e o motivo de proteger os dados contidos nos códigos.
Resumo:
O professor apresenta as funções de orientação a objeto e ilustra como podem ser acessadas e realizadas as funções de orientação a objeto.
Resumo:
Nesta aula o professor apresenta alocação de memória na linguagem de programação C++ e ilustra como podem ser acessadas e realizadas as funções de orientação a objeto.
Resumo:
O professor apresenta o que é ponteiro This na linguagem de programação C++. Ilustra como utilizar ponteiros dentro dos códigos C++ e quais são as funcionalidades do ponteiro na linguagem de programação.
Resumo:
O professor apresenta o que são vetores e matrizes na linguagem de programação Java e ilustra como utilizar vetores e matrizes na linguagem Java.