Chamada Remota de Procedimentos. Remote Procedure Call O fluxo de informações em uma implementação de clientes e servidores por passagem de mensagem requer.

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais
Advertisements

Sistemas Distribuídos
Sistemas Operacionais Aula II
Programação em Java Prof. Maurício Braga
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
Capitulo 6: Entrada e Saída
Sistemas distribuídos Metas de Projeto Prof. Diovani Milhorim
Sistemas distribuídos
UML Visões – Parte 2.
Programa de Pós-Graduação Lato Sensu MBA em Gestão de Software
Java RMI Alcides Calsavara. Objetivos Permitir que um método de uma classe Java em execução em uma máquina virtual JVM chame um método de um objeto (instância.
Comunicação Distribuída
Avaliação de Desempenho Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Marcos José
Avaliação de Desempenho
Invocação de Métodos Remotos RMI
Programação Concorrente
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
1 Arquitetura CORBA Repositório de Implementação Repositório de Interface cliente programa cliente proxy ORB Core ou invocação dinâmica servidor ORB Core.
Comunicação Inter-Processos
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
Sincronização e Comunicação entre Processos
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
JAVA: Conceitos Iniciais
Concorrência em Java Threads em Java.
Monitores.
Tópicos em redes e sistemas distribuídos B Carlos Oberdan Rolim Ciência da Computação.
Sistemas Distribuídos
Web Services Uninorte Semana de Tecnologia da Informação
Chamada Remota de Procedimentos
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 07.
Remote Method Invocation RMI
Concorrência e Java RMI
Conteúdo Processos e threads Partes do processo
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 05.
Professor: Márcio Amador
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Pilhas Profa. Nádia Félix.
Sistemas Distribuídos Introdução. Conceito Coleção de múltiplos processos que executam sobre uma coleção de processadores autônomos interligados em uma.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Interpretação de Projetos de Software Professor: Cheli dos S. Mendes.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
RMI x C# Remote Emilena Specht – 1113/01/9 2004/01
SISTEMAS OPERACIONAIS I
Java RMI João Gabriel (jggxm).
Processos.
RMI - JAVA.
Troca de Mensagens Programação concorrente
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
RMI (Remote Method Invocation) Bruno Edson Plínio Tadeu
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Capítulo 4: Processos.
1 BSP no InteGrade II WorkShop do InteGrade c. 2 Objetivo O principal objetivo é permitir que aplicações BSP sejam executadas no InteGrade sem ou com.
Java – Remote Method Invocation (RMI)
JR: Flexible Distributed Programming in an Extended Java Elmário Gomes Dutra Jr. Gustavo Romano.
Conceitos do Cliente Funcionamento Básico do Cliente Como Clientes acessam e usam Objetos Distribúidos.
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
Implementação Distribuída Escalonamento de Tempo-Real Prof. Dr. Norian Marranghello Grupo 8 Daniela Gonçalves Strozi – Sayuri Watanabe
Sistemas Operacionais IV – Gerenciamento de E/S
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Sistemas Distribuídos Prof. Marcus Rodrigues
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 33 (1) Análise de Desempenho em Programas Paralelos Tópicos: Introdução Aquisição de Dados.
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Estruturas de Sistemas Operacionais. Componentes Comuns do Sistema Administração de Processos Administração da Memória Principal Administração do Armazenamento.
SOCKET - É um canal de comunicação entre processos que estabelece uma conexão entre eles na forma de cliente-servidor. Por meio de sockets, os computadores.
Bruna Cavallero Martins Universidade Católica de Pelotas.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Capítulo 4 Estrutura do Sistema Operacional
ProgramaçãoConcorrente Glêdson Elias
Transcrição da apresentação:

Chamada Remota de Procedimentos

Remote Procedure Call O fluxo de informações em uma implementação de clientes e servidores por passagem de mensagem requer a programação de duas trocas explícitas de mensagens em dois canais diferentes de comunicação Cada cliente precisa de um canal de comunicação que leva a um grande número de canais RPC serve especialmente para programar interações cliente/servidor Combina aspectos de monitores e passagem de mensagem síncrona

Remote Procedure Call Como em monitores, um processo ou módulo exporta operações que são invocadas através da instrução call Como em um processo síncrono de envio de mensagens, a execução do call atrasa o invocador da chamada Uma operação é um canal de comunicação dupla do chamador para o processo que serve a chamada e de volta para o chamador O chamador espera até que a operação invocada seja executada e os resultados sejam retornados Um procedimento é declarado para cada operação e um processo novo é criado para tratar cada chamada

Remote Procedure Call Um procedimento é declarado para cada operação e um processo novo é criado para tratar cada chamada O chamador e o corpo do procedimento podem estar em máquinas diferentes Um módulo contém processos e procedimentos Módulos podem residir em espaços de endereçamento diferentes Processos dentro do módulo podem compartilhar variáveis e chamar procedimentos declarados dentro do módulo

Modelo de um módulo Um processo em um módulo só pode se comunicar com processos em outro módulo através da chamada de procedimentos exportados por esse módulo Forma de um módulo módulo mnome indicações das operações exportadas corpo declarações de variáveis inicialização do código procedimentos das operações exportadas procedimentos locais e processos fim mnome

Modelo de um módulo Declaração de uma operação exportada –op opnome(formais) [returns resultado] Operação implementada por uma proc –proc opnome(identificadores formais) returns identificador do resultado declarações de variáveis locais instruções fim Um processo chama um procedimento em outro módulo executando call mnome.opnome(argumentos)

Implementação da chamada entre módulos Call Processo chamador (chama procedimento opnome) Processo servidor ( executa procedimento opnome)

Sincronização dentro dos módulos Sincronização entre chamador e servidor implícita Processos dentro de um módulo, incluindo servidores e processos locais, necessitam ser sincronizados entre eles e obter acesso mutuamente exclusivo a variáveis compartilhadas Duas abordagens utilizadas: –processos executam com exclusão mútua, ou seja, um de cada vez está ativo –processos executam concorrentemente e mecanismos de exclusão mútua tem que ser utilizados

Um servidor de tempo Implementação de um módulo que provê serviços de tempo para clientes em outros módulos Duas operações visíveis: –get_time, para um cliente obter a hora do dia –delay, para bloquear o processo do cliente por interval unidades de tempo O servidor possui um processo interno que inicia continuamente um timer de hardware, que incrementa a hora do dia quando ocorre uma interrupção

Um servidor de tempo Module TimeServer op get_time() returns int; op delay (int interval); body int tod=0; # hora do dia sem m =1; # semáforo para exclusão mútua sem d[n]=([n] 0); # semáforos privados para delay queue of (int waketime, int process_id) napQ; ## quando m==1, tod < waketime para os processos atrasados proc get_time() returns time { time = tod; } proc delay (interval) { # assume interval > 0 int waketime = tod + interval; P(m); insere (waketime, myid) no lugar apropriado em napQ; V(m); P(d[myid]);# espera para ser acordado }

Um servidor de tempo process Clock { inicia o timer de hardware; while (true) { espera por interrupção, então reinicia timer; tod = tod + 1; P(m); while (tod >= menor waketime em napQ) { remove (waketime, id) de napQ; V(d[id]); # acorda processo id } V(m); } fim TimeServer

Java RMI (Remote Method Invocation) Suporte de Java a RPC Operações em objetos Java são chamados métodos, daí o nome RMI Três componentes: –uma interface que declara os headers para os métodos remotos –uma classe servidora que implementa a interface –um ou mais clientes que chamam os métodos remotos

Programação emRMI Escreva uma interface Java que estende Remote com métodos que declaram o lance de exceções remotas Escreva uma classe servidora que estende UnicastRemoteObject e implementa os métodos da interface Escreva código que cria uma instância do servidor e registre seu nome em um servidor de nomes denominado registry service Escreva uma classe cliente que interage com o servidor – O cliente deve criar um gerenciador de segurança para não carregar código errado pela rede e deve obter um objeto servidor do registry service. Após esse procedimento, o cliente pode chamar os métodos remotos do servidor.

Mecanismo de funcionamento O programa do cliente invoca os métodos do servidor como se fossem locais Quando os métodos são remotos, a interação entre cliente e servidor é gerenciada por um stub e skeleton Após a compilação do programa, o stub e skeleton são criados pelo comando rmic

Mecanismo de funcionamento Quando um cliente invoca um método remoto, ele, na verdade, invoca um método no stub O stub organiza os argumentos da chamada remota e os envia em uma única mensagem para o skeleton O skeleton recebe a mensagem com os argumentos, gera uma invocação local do método para o servidor, espera o resultado e o retorna para o stub O stub retorna o resultado para o código do cliente

Detalhes para execução Cliente e servidor são programas separados que executam em hosts separados Necessita-se de utilizar um identificador o servidor que deve ser único, pois podem existir mais de um servidor executando ao mesmo tempo Formato dos nomes de servidores –rmi://hostname:port/pathname, onde hostname é o nome do host na Internet, port é uma porta escolhida pelo usuário e pathname é um nome do diretório escolhido pelo usuário no servidor O registry service é um programa que mantém uma lista de nomes registrados de servidores em um host

Detalhes para execução O registry service é um programa que mantém uma lista de nomes registrados de servidores em um host Inicia-se o programa em background na máquina servidora através do comando “ rmiregistry port &” A interface para esse serviço é fornecida por um objeto Naming com dois métodos: bind, para registrador um nome e lookup para obter o nome de um servidor Os programas cliente e servidor são iniciados através do interpretador java –O servidor deve ser iniciado em uma máquina e os clientes em máquinas conectadas as servidor

import java.rmi.*; import java.rmi.server.*; public interface RemoteDatabase extends Remote { public int read() throws RemoteException; public void write(int value) throws RemoteException; } class Client { public static void main(String[] args) { try { System.setSecurityManager(new RMISecurityManager()); String name ="rmi://neuman:9999/database"; RemoteDatabase db = (RemoteDatabase) Naming.lookup(name); int value, rounds = Integer.parseInt(args[0]); for (int i = 0; i, rounds; i==) { value = db.read(); System.out.println("read: "+ value); db.write(value+1); } catch (Exception e) { System.err.println(e); }

class RemoteDatabaseServer extends UnicastRemoteObject implements RemoteDatabase { protected int data = 0; public int read() throws RemoteException { return data; } public void write (int value) throws RemoteException { data = value; System.out.println(”new value is : “ + data); } public RemoteDatabaseServer() throws RemoteException { super (); } public static void main(String[] args) { try { RemoteDatabaseServer server = new RemoteDatabaseServer(); String name ="rmi://neuman:9999/database"; Naming.bind(name, server); System.out.println(name + “is running”); } catch (Exception e ) { System.err.println(e); }

Ferramentas para Análise de Desempenho

Ferramentas para análise de desempenho Existem poucos padrões para ferramentas utilizadas para recolher e analisar dados relativos a desempenho de programas paralelos Utilizam abordagens, formatos de arquivos e visualizações diferentes Mas existem princípios básicos que podem ser identificados em várias ferramentas existentes

Processos de análise de desempenho Coleta de dados: –obtenção de dados sobre o desempenho de um programa que está sendo executado Transformação de dados: –transformam dados coletados objetivando reduzir o volume total de dados Visualização de dados: –oferecem meios de visualizar os dados obtidos de uma maneira mais amigável ao usuário

Coleta de dados Três técnicas básicas: –profiles: registram o tempo gasto em partes diferentes do programa. Geralmente são obtidos automaticamente –contadores: registram frequência de eventos ou tempo acumulativo. Requerem intervenção do programador –trace de eventos: registram cada ocorrência de eventos específicos. São gerados automaticamente ou com intervenção do programador

Transformação de dados Determinação de valores médios Outras estatísticas (desvio padrão) Extrair dados de arquivos de trace Transformações podem ser codificadas pelo programador

Visualização de dados Dados são multidimensionais: –tempos de execução –custos de comunicação –vários componentes do programa –processadores diferentes –tamanhos de problemas diferentes Técnicas de visualização gráfica são utilizadas

Requisitos das ferramentas Precisão –dados obtidos por amostragem são menos precisos que dados obtidos por contadores e temporizadores Simplicidade –coleta de dados automática sem intervenção do programador Flexibilidade –possibilidade de estender a ferramenta para coletar dados adicionais e prover diferentes visualizações dos mesmos dados Nível de intrusão –overhead introduzido pela ferramenta Abstração –dados devem poder ser examinados de acordo com o nível de abstração apropriado para o modelo de programação utilizado no programa paralelo

Coleta de dados- Profiles Um profile mostra a quantidade de tempo gasto em diferentes componentes do programa O valor do contador de programa é obtido em intervalos fixos de tempo e utilizado para construir um histograma de frequências de execução Essas frequências são combinadas com informações da tabela de símbolos do compilador para estimar o tempo gasto em partes diferentes do programa Dados podem ser coletados para cada processador e podem identificar tempo de execução, comunicação e idle

Coleta de dados- Profiles Podem ser obtidos automaticamente, a baixo custo Disponibilizam uma visão em alto nível do comportamento do programa Permitem a identificação de partes do programa que estão ocupando muito tempo Permitem identificação de escalabilidade do programa em relação ao número de processadores e tamanho do programa Não registram aspectos temporais da execução do programa

Coleta de dados- Contadores Consiste de um local da memória que é incrementado cada vez que ocorre um evento específico Eventos podem ser: –número de chamadas de procedimento –número total de mensagens –número de mensagens enviadas entre dois processadores Os dados podem ser gerados por código gerado pelo compilador, por código incorporado de bibliotecas de comunicação ou por inserção pelo usuário de chamadas a rotinas de contador Combinação de informações geradas pelos contadores e profiles: –contadores geram informação de número total de mensagens que podem ser combinadas com informação de tempo total de comunicação gerada pelos profiles para determinar eficiência de operações de comunicação

Coleta de dados - Traces Abordagem que provê maior detalhamento dos dados Geram arquivos de log que contêm registros de eventos com a hora marcada representando ocorrências significativas na execução do programa, como chamada de procedimento e envio de mensagens Podem ser utilizados para examinar relações entre comunicações, localizar fontes de causadores de paradas dos processadores e identificar gargalos Geram uma quantidade muito grande de dados –muda característica do programa –pós processamento difícil –programador tem que ajustar o processo de coleta de dados para registrar somente eventos relevantes

Coleta de dados - Dicas Faça uma análise de desempenho previsto do seu programa Utilize informações de profiles e contadores necessárias para a análise de desempenho Meça o tempo de execução para um número variado de processadores e tamanhos de problemas Se os valores observados são muito diferentes dos modelados, utilize informação de profiles e counters para verificar se as suposições básicas feitas no modelo ocorrem na realidade Caso existam aspectos ainda inexplicados do desempenho do seu programa, incorpore ferramentas simples para trace de dados

Transformação e visualização de dados Profile e counts: –histogramas que mostram tempo de execução, número de mensagens, volume de dados (Kbytes/s), tamanho médio de mensagem por processador –Matriz bi-dimensional que mostra comunicação entre processadores e cores indicam estado do processador (comunicação, execução, idle) Traces: –dados são reduzidos para uma, duas ou três dimensões e são visualizados com histogramas –volume de comunicação versus tempo –vistas de dependências temporais

Ferramentas disponíveis Paragraph –desenvolvida pelo Oak Ridge National Lab para programas que utilizam passagem de mensagens –gera arquivos de trace que podem ser mostrados como utilização do processador (comunicação, execução, idle), comunicação entre processadores e outros Upshot –desenvolvida pelo Argonne National Lab para programas que utilizam passagem de mensagens –coleta dados em forma de trace e os mostra em forma de histogramas –mostra o estado (início e fim de um evento) de cada processo em função do tempo

Ferramentas disponíveis Pablo –desenvolvida pela Universidade de Illinois –provê uma variedade de mecanismos para coleta, transformação e visualização de dados e pode ser estensível para que novos formatos de dados, mecanismos de coleta de dados, transformações e visualizações sejam incorporados –pode ser utilizada por programas que utilizam passagem de mensagens e paralelismo de dados –instrumentação pode ser feita interativamente pelo usuário e chamadas aso sistema podem ser incorporadas a bibliotecas e compiladores IBM Parallel Environment –desenvolvida pela IBM para o sistema SP –coleta dados através em profiles utilizando comandos prof e gprof –ferramenta VT coleta dados em forma de traces e mostra sua visualização: registro de comunicação, registro de utilização de CPU, disco, memória e partes marcadas pelo programador