2 Ferramentas Utilizadas



Documentos relacionados
BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

3 SCS: Sistema de Componentes de Software

Casos de uso Objetivo:

Computador Digital Circuitos de um computador (Hardware)

Sistemas Operacionais. Prof. André Y. Kusumoto

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

agility made possible

Resolução da lista de exercícios de casos de uso

3.1 Definições Uma classe é a descrição de um tipo de objeto.

4 Arquitetura do middleware

Implementando uma Classe e Criando Objetos a partir dela

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE

UML: Diagrama de Casos de Uso, Diagrama de Classes

Arquitetura dos Sistemas Operacionais

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

TRANSMISSÃO DE DADOS Prof. Ricardo Rodrigues Barcelar

1 Introdução. Componentes Usuários. Provedor de Serviços. Figura 1.1 Ambiente de oferecimento de serviços

Computação II Orientação a Objetos

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

da Qualidade ISO 9001: 2000

DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS

MODELAGEM E SIMULAÇÃO

3 Qualidade de Software

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

UNIVERSIDADE. Sistemas Distribuídos

Diagrama lógico da rede da empresa Fácil Credito

Gerenciamento da Integração (PMBoK 5ª ed.)

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

Gerenciamento de Projetos Modulo VIII Riscos

MANUAL MOODLE - PROFESSORES

Sistemas Distribuídos Processos I. Prof. MSc. Hugo Souza

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 16 PROFª BRUNO CALEGARO

Exercícios Teóricos Resolvidos

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

3 A Biblioteca para Implementação de Máquinas Virtuais

Redes de Computadores II

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Oficina de Manipulação e Edição de Fotografia e Imagem Digital GIMP

Descrição do Produto. Altus S. A. 1

Processos de gerenciamento de projetos em um projeto

Orientação a Objetos

Bem-vindo ao tópico sobre administração de listas de preços.

5.1 Exemplos de uso Mediante a instanciação de componentes específicos, o OiL pode ser configurado

Cadernos do CNLF, Vol. XVI, Nº 04, t. 3, pág. 2451

6 Considerações finais

ADMINISTRAÇÃO DE BANCOS DE DADOS MÓDULO 13

Análise e Projeto Orientados a Objeto

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

Manual Rápido de Registro e Configuração do DJPDV

Eventos independentes

4 Aplicativo para Análise de Agrupamentos

Diagrama de Estrutura Composta

Aula 03-04: Modelos de Sistemas Distribuídos

5 Mecanismo de seleção de componentes

Realização. Conselho Brasileiro de Manejo Florestal FSC Brasil.

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Introdução. Uso do disco Vantagens Desvantagens Baixo custo, facilidade de manutenção do software e do hardware, simetria e flexibilidade

Manual do Usuário. Protocolo

Introdução a Banco de Dados Aula 03. Prof. Silvestri

Estudo de Viabilidade. GMon Sistema de Gerenciamento de Monitores. Curso: Ciências da Computação Professora: Carla Silva

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Metadados. 1. Introdução. 2. O que são Metadados? 3. O Valor dos Metadados

CEDERJ - CENTRO DE EDUCAÇÃO SUPERIOR A DISTÂNCIA DO ESTADO DO RIO DE JANEIRO

Linguagens de Programação Aula 10

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

UML (Unified Modelling Language) Diagrama de Classes

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO TÓPICOS AVANÇADOS EM SISTEMAS INTEGRADOS E DISTRIBUÍDOS II

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

CAPÍTULO 2. Grafos e Redes

Montagem e Manutenção. Luís Guilherme A. Pontes

Introdução à Engenharia de Computação

O mecanismo de alocação da CPU para execução de processos constitui a base dos sistemas operacionais multiprogramados.

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

DAS5102 Fundamentos da Estrutura da Informação

NORMA BRASILEIRA DE CONTABILIDADE NBC TSC 4410, DE 30 DE AGOSTO DE 2013

Conflito de Interesses e Imparcialidade dos Auditores dos Organismos Certificadores

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

18º Congresso de Iniciação Científica IMPLEMENTAÇÃO DE UM MODELO DE TESTE DE APLICAÇÕES WEB

Distribuição de probabilidades

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

UNIVERSIDADE FEDERAL DO PARANÁ SETOR DE CIÊNCIAS BIOLÓGICAS Departamento de Patologia Básica Pós-Graduação em Microbiologia, Parasitologia e Patologia

PORTABILIDADE NUMÉRICA UMA SOLUÇÃO ORIENTADA PELA SIMPLICIDADE, QUALIDADE E BAIXO CUSTO

Sistema de Reserva de Laboratório Trabalho Semestral Versão 1.0

Sistemas Distribuídos: Conceitos e Projeto Java RMI

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

Capítulo 2. Processos de Software Pearson Prentice Hall. Todos os direitos reservados. slide 1

Curvas em coordenadas polares

RELACIONAMENTOS ENTRE CLASSES

Requisitos de Software

Transcrição:

2 Ferramentas Utilizadas Esta dissertação utiliza vários outros trabalhos para implementar os mecanismos de adaptação abordados. Essas ferramentas são descritas nas seções seguintes. 2.1 Lua Lua [7, 8] é uma linguagem interpretada desenvolvida na PUC-Rio. Seus principais focos são o da simplicidade e o da portabilidade; apesar disso, sua eficiência é muito boa se comparada à de outras linguagens similares. Uma característica da linguagem consiste em as variáveis não possuirem tipos, apesar de os valores que elas assumem serem tipados dinamicamente em números, strings, tabelas, funções (em Lua, funções são valores de primeira ordem, o que permite ao programador passar funções como argumentos e valores de retorno de outras funções), etc. Dessa forma, uma mesma variável pode assumir, em momentos diferentes, valores de tipos diferentes. Dentre esses tipos, a tabela é de especial importância. Ela implementa um vetor associativo, ou seja, uma estrutura de dados que armazena valores quaisquer (também chamados de campos da tabela) indexados por chaves de tipo arbitrário (exceto nil). Assim sendo, uma mesma tabela pode conter uma função indexada por uma string e uma outra tabela indexada por um número. A biblioteca-padrão de Lua define algumas funções que manipulam tabelas e facilitam a implementação de filas, pilhas, heaps, etc. Além disso, tabelas podem ter meta-tabelas associadas a elas, o que permite a redefinição dos seus comportamentos em determinados eventos.

Ferramentas Utilizadas 13 Para tanto, as meta-tabelas definem certos campos chamados meta-métodos. Eles contêm as funções a serem chamadas quando o evento correspondente ocorrer. Por exemplo, quando se tenta acessar um campo inexistente em uma tabela, o meta-método index é chamado, recebendo como argumentos a tabela em questão e o campo procurado. Uma possível aplicação desse meta-método é a emulação do mecanismo de herança encontrado nas linguagens de programação orientadas a objeto: escreve-se uma função index que busque o campo solicitado na tabela da qual se está herdando. Naturalmente, caso esta também não possua o campo em questão, o meta-método index dessa tabela será chamado, e assim sucessivamente. Outra utilidade consiste em retornar valores default para campos inexistentes. Por exemplo, uma implementação de matriz esparsa pode retornar zero em vez de nil para campos que não foram inicializados explicitamente. Como último exemplo, o LuaOrb (Seção 2.2) usa esse meta-método para interceptar o acesso aos campos de um objeto remoto, de modo a permitir sua utilização como se fosse uma tabela local. 2.2 LuaOrb O LuaOrb [9] é um binding de CORBA em Lua, oferecendo ao usuário o poder de CORBA com a simplicidade de Lua. Em sua versão atual (3.0), o LuaOrb não é um ORB por si só: ele foi projetado para rodar sobre outro ORB, como um intermediário. Nessa dissertação foi utilizado o MICO [10] versão 2.3.8, um ORB gratuito, de código aberto, implementado em C++. Com o LuaOrb, a tarefa de escrever um servant (objetos que implementam uma interface IDL) se reduz a definir uma tabela que contenha os campos correspondentes aos atributos e métodos da interface sendo usada. Em outras palavras, observadas as regras de mapeamento CORBA-Lua, para cada atributo da interface em IDL deve haver um campo com o mesmo nome e tipo correspondente na tabela que representa o servant; analogamente, ela também deve conter um campo para cada método da interface, com o mesmo nome e contendo uma função com assinatura compatível. Servants normalmente são criados pela função luaorb.createservant, cujos argumentos são a tabela que implementa o servant e a sua interface. Esse

Ferramentas Utilizadas 14 procedimento também pode ser feito implicitamente, quando um método retorna um valor ou recebe um argumento que não é um servant, mas uma tabela comum. Nesse caso, o LuaOrb tenta criar o servant baseado nessa tabela e na interface esperada para ele. Essa informação é obtida do repositório de interfaces em tempo de execução, por reflexividade. Do lado cliente, para se criar um proxy, usa-se a função luaorb.createproxy, que recebe como argumentos uma referência para o servant (tipicamente uma string com seu IOR) e o nome da interface sendo usada. Um proxy nada mais é do que uma tabela que usa o meta-método index (descrito na Seção 2.1) para abstrair a comunicação com o objeto remoto. Especificamente, quando se acessa um campo ou método em um proxy, o metamétodo busca esse dado no objeto remoto, retornando-o ao cliente de maneira transparente. 2.3 LuaTrading Dentre os serviços CORBA existentes, o de trading desempenha papel importante neste trabalho, pois permite a um cliente encontrar um servidor adequado às suas necessidades. Para tanto, esse cliente solicita ao trader uma lista de ofertas de serviço que lhe interessem. Esse procedimento se chama importação. Uma oferta de serviço, por sua vez, consiste em uma referência para o servidor que a implementa, bem como um conjunto de propriedades que descrevem as características desse servidor. Tais propriedades podem especificar, por exemplo, a quantidade de recursos computacionais disponíveis (como CPU, espaço em disco, etc.), de modo que um cliente possa optar por servidores menos carregados. Para especificar as ofertas que lhe interessam, o cliente usa uma string que descreve as restrições sobre as propriedades em questão. Por exemplo, se um cliente quer importar ofertas cuja propriedade custo seja inferior a 30, ele passaria a string custo < 30 como argumento do método query, responsável pela importação. Em contrapartida, pelo procedimento de exportação, um servidor pode anunciar suas ofertas de serviço ao trader, passando a lista de propriedades

Ferramentas Utilizadas 15 ServiceTypesRep.servicetypes ["NovoTipo"] = { interface = "Demo::Pessoa", props = {nome = "string", idade = "short"} } Figura 2.1: Criando um tipo de serviço com o LuaTrading. traderrep:add_type ("NovoTipo", "Demo::Pessoa", { { name = "nome", value_type = luaorb.createtypecode ("tk_string"), mode = "PROP_NORMAL" }, { name = "idade", value_type = luaorb.createtypecode ("tk_short"), mode = "PROP_NORMAL" } }, {}) Figura 2.2: Criando um tipo de serviço sem o LuaTrading. como argumento. Todas as ofertas de serviço pertencem a um determinado tipo de serviço. A descrição de um tipo de serviço define se suas propriedades são somente-leitura, opcionais, etc. e os tipos das mesmas (string, long, float, etc.). Assim, antes de exportar uma oferta, é necessário criar o tipo de serviço correspondente caso ele ainda não exista. Apesar de aqui expostas de maneira simplificada, as tarefas de importar e exportar ofertas de serviço envolvem o uso de vários métodos e estruturas de dados. O LuaTrading [5] é uma camada de abstração desenvolvida em Lua que facilita consideravelmente o acesso ao serviço de trading. Uma dessas facilidades consiste em reduzir o fardo da criação de tipos de serviço a simples atribuições. Especificamente, para definir um tipo de serviço, basta escrever na tabela global ServiceTypesRep um campo contendo a descrição do tipo a ser criado; o nome do campo precisa ser igual ao nome do tipo a ser criado. As Figuras 2.1 e 2.2 ilustram esse procedimento, com e sem o uso do LuaTrading, respectivamente. Nesse momento, um meta-método intercepta a operação e se encarrega de repassar a requisição ao trader. Conseqüentemente, a criação do tipo de serviço é feita de maneira totalmente transparente. A funcionalidade correspondente para exportar ofertas de serviço é oferecida pela tabela global

Ferramentas Utilizadas 16 ServiceOffersRep. Finalmente, para simplificar a importação de ofertas, o LuaTrading define a função importserviceoffers, que recebe seus argumentos por meio de uma tabela. Caso essa tabela não defina algum argumento, o LuaTrading usará um default aceitável para a maioria das situações. 2.4 LuaMonitor O LuaMonitor [6] provê um conjunto de ferramentas para monitorar variáveis de interesse do programador. Seu principal componente é o monitor de eventos (EventMonitor), que observa uma variável em intervalos de tempo regulares. Para se criar um, chama-se a função EventMonitor.new, passando-se como argumentos o período com que a variável será monitorada, uma função para obter seu valor (get) e, opcionalmente, outra para modificá-lo (set). O resultado é um monitor de eventos parametrizado de acordo com a necessidade, pois cada monitor tem períodos de verificação independentes. Assim, variáveis que mudam raramente podem ser monitoradas com um período maior, enquanto as que mudam constantemente podem precisar de períodos mais curtos. Os monitores de evento também permitem a definição de aspectos, que são valores auxiliares derivados da variável sendo monitorada. Exemplos típicos de aspectos são funções estatísticas como média e variância. Os aspectos de um monitor também são atualizados periodicamente. Talvez a maior utilidade de um monitor de eventos seja o de suportar observadores de eventos. São objetos interessados em condições específicas sobre a variável sendo observada e/ou seus aspectos. Caso tais condições sejam satisfeitas, a função que as avalia sinaliza isso ao monitor, que por sua vez chama a função notifyevent do observador. Por exemplo, suponhamos que um monitor esteja associado à saída de um termômetro digital. Se uma aplicação estiver interessada em ser notificada sobre um aumento excessivo de temperatura, ela pode registrar um observador no monitor, juntamente com uma função que verifica se a temperatura ultrapassou o limite desejado. No momento em que isso acontecer, o observador será notificado e poderá, por exemplo, acionar um mecanismo de resfriamento.

Ferramentas Utilizadas 17 Alternativamente, a aplicação descrita acima poderia monitorar a temperatura por si mesma. Uma possibilidade seria criar uma thread para ler a temperatura continuamente, e reagir de acordo com o valor obtido. Além de tornar a aplicação mais complexa, essa proposta consumiria recursos da rede com as mensagens de verificação periódica. Em contrapartida, a arquitetura do LuaMonitor testa as condições dos observadores localmente ao monitor, o que simplifica o cliente e não requer mensagens adicionais pela rede. Isso é possível graças à natureza interpretada da linguagem Lua, pois o código que testa as condições é passado para o monitor na forma de uma string. Esta dissertação aplica esse mecanismo na implementação de um proxy inteligente, descrito no Capítulo 3. Especificamente, esse proxy monitora o valor de uma lista de parâmetros de QoS e, quando esses parâmetros extrapolam certos limites, o proxy é notificado para se adaptar em resposta a tais mudanças.