Buscar

Arquitetura de sistemas distribuidos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 116 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 116 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 116 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

- -1
ARQUITETURA DE SISTEMAS 
DISTRIBUÍDOS
EVOLUÇÃO DA COMPUTAÇÃO E 
INTRODUÇÃO AOS SISTEMAS 
DISTRIBUÍDOS
- -2
Olá!
Objetivo desta aula
Ao final desta aula, o aluno será capaz de:
1- Entender as características da computação centralizada e da computação distribuida;
2- Conhecer as vantagens e desvantagens de cada arquitetura e a motivação para esta evolução
3- Identificar o conceito de sistemas distribuídos.
Introdução
O profissional da área de tecnologia da informação atua diretamente no planejamento, na implementação e na
implantação de soluções de TI nas organizações. Dessa forma, é importante que compreenda os conceitos, os
benefícios, as características e as restrições de cada arquitetura. Nesta aula abordaremos esses tópicos, com
alguns exemplos.
1 Histórico
Primeiros computadores: grandes e caros.
Anos 50-60: spooling, multiprogramação.
Início dos anos 60: sistemas time sharing.
Final dos anos 60 e início dos anos 70: surgimento de redes de computadores.
A partir dos anos 70: inicia-se a pesquisa em sistemas distribuídos.
Desde seu início, a indústria de computadores tem se voltado para uma pesquisa interminável, em busca de
ampliar, cada vez mais, seu poder no âmbito computacional. O Eniac podia executar 300 operações por segundo,
sendo, tranquilamente, mil vezes mais rápido do que qualquer calculadora anterior a ele, e, mesmo assim, as
pessoas ainda não estavam satisfeitas. Hoje temos máquinas um milhão de vezes mais rápidas do que o Eniac e,
contudo, existe demanda para um poder computacional maior.
Não importa quanto poder computacional exista: ele nunca será suficiente.
No passado, a solução era fazer com que o relógio do processador fosse executado mais rápido (overclocking).
Infelizmente, estamos começando a atingir alguns limites fundamentais na frequência do clock. De acordo com a
teoria da relatividade de Einstein, nenhum sinal elétrico pode propagar mais rápido do que a velocidade da luz.
Construir computadores com tamanho reduzido pode ser possível, mas, logo surge outro problema fundamental:
a dissipação de calor. Quanto maior a frequência do relógio do processador, maior será a produção de calor
- -3
produzida por ele; e quanto menor o computador, maiores serão os problemas associados à dissipação desse
calor.
Uma maneira de aumentar a velocidade é fazer uso de computadores altamente paralelos. Essas máquinas são
construídas com muitas CPUs (unidade central de processamento), objetivando processar, coletivamente, com
muito mais poder computacional do que com apenas uma única CPU.
Por outro lado, com a evolução da internet, podemos analisar que um sistema com centenas de computadores
espalhados pelo mundo não difere de um sistema de centenas de computadores em uma única sala, embora a
latência e outras características técnicas sejam diferentes.
Neste contexto, colocar uma quantidade representativa de computadores em uma sala é até fácil, desde que se
tenham recursos financeiros, espaço físico e uma infraestrutura mínima. O espaço deixará de ser um problema,
se esses computadores estiverem espalhados ao redor do mundo. A preocupação surge quando queremos que
eles se comuniquem uns com os outros para trabalhar em conjunto na solução de um único problema.
Os sistemas com múltiplos processadores caracterizam-se por possuir mais de uma CPU, interligadas,
trabalhando em conjunto. Múltiplos processadores podem ser utilizados, simultaneamente, por diversos
processos diferentes, e, com eles, novos problemas de concorrência são introduzidos, porque vários processos
podem querer acessar um dispositivo ao mesmo tempo.
Esses sistemas podem ser divididos em:
Fortemente acoplados - quando os processadores compartilham uma mesma memória principal.
Fracamente acoplados – os diversos processadores/estações presentes no sistema utilizam sua memória local
individualmente.
Sistemas centralizados - Multiprocessador de memória compartilhada é um sistema de computador no qual
duas ou mais CPUs compartilham acesso total a uma memória principal comum. Multiprocessadores são
populares e atrativos, porque oferecem um modelo de comunicação simples, e a sincronização é possível
mediante o emprego de diversas técnicas bem definidas. Uma desvantagem é que os multiprocessadores de
grande porte são difíceis de construir e, por isso, são caros.
Sistemas distribuídos - Uma solução alternativa que tem sido empregada com sucesso para solucionar esse
problema é a utilização de multicomputadores, que são CPUs que não compartilham memória principal. Cada
CPU tem sua própria memória e é gerenciada por um sistema operacional individualmente. Esses sistemas
também são conhecidos como cluster – COWS (cluster of workstations - aglomerados de estações de trabalho).
- -4
2 POR QUE COMPUTAÇÃO DISTRIBUÍDA?
Com a melhoria das tecnologias, o que se conseguia executar, algumas décadas atrás, somente com
computadores que custavam milhões de dólares, hoje se consegue executar com computadores de baixo custo.
O segundo fator é o surgimento de redes de computadores de alta velocidade, em que informações podem ser
transferidas entre computadores na faixa de microssegundos.
Como resultado, é possível conectar diversos computadores por meio de uma rede de alta velocidade para
executar um sistema de computação colaborativo. Estes sistemas são geralmente chamados de sistemas
distribuídos (SD).
•Sistema distribuído permite uma nova forma de fazer ciência
–Teoria -> experimentos
–Teoria -> simulações
•Computação usada para modelar sistemas físicos
•Vantagens
–Possibilidade de repetição de eventos
–Manipulação de parâmetros
–Estudo de sistemas onde não há teorias exatas
•Problemas
– modelagem da terra/clima, simulações de reservatórios de petróleo, problemas com grandesMuito grandes:
escalas (cosmologia).
– : projeto de remédios, projetos de chips, biologia estrutural, física de partículas.Muito pequenos
– física de partículas, dinâmica de fluidos, modelagem de comportamento de pessoas.Muito complexos:
– produção e exploração de petróleo, simulação de acidentes.Muito caros:
– tolerância a falhas em aviões, teste de dispositivos nucleares, simulação de estratégias deMuito perigosos:
defesa.
•Problemas que requerem alto desempenho computacional
Modelagem climática
Mapeamento do genoma
Modelagem de semicondutores
Dispersão de poluição
Projetos farmacêuticos
- -5
Modelagem de reatores nucleares
Renderização de imagem
Aumento de desempenho
• Limites físicos
–Velocidade da luz.
–Miniaturização dos componentes.
–Isolamento e dissipação de calor.
Até meados de 1965 não havia nenhuma previsão real sobre o futuro do hardware, quando o então presidente
da Intel, Gordon E. Moore, fez sua profecia, na qual o número de transistores dos chips teria um aumento de
100%, pelo mesmo custo, a cada período de 18 meses. Essa profecia tornou-se realidade e acabou ganhando o
nome de Lei de Moore.
• Solução: Paralelismo
– Execução simultânea de operações.
– Solução com melhor custo/benefício.
3 EVOLUÇÃO DO PROCESSAMENTO
Anos 70
Primeiras máquinas paralelas - Illiac IV (64 processadores) foi um supercomputador construído pela
Universidade de
Hlinois e financiado pelo governo dos EUA, Sua construção custou US$ 31 milhões.
- -6
Fonte: Illiac IV Fonte: htttp://pt.wikipedia.org/wiki/Ficheiro:ILLIAC_4_ parallel_computer.Jpg
Anos 80
-computadores vetoriais (Cray);
- máquinas paralelas comerciais para aplicações científicas (meteorologia, petróleo...);
-Alto custo de desenvolvimento;
- pequena escala, dificuldade de programação.
Fonte: Cray 1 - A Cray Research, empresa de Seymour Cray, o primeiro supercomputador vetorial (Cray), com 
altíssima velocidade de processamento e grande capacidade de memória, empregado em pesquisas cientificas e 
militares. Fonte: http://museudoscomputadores.blogspot.com/
- -7
Anos 90 dias de hoje
-multiprocessadores escaláveis;
-redes de estações de trabalho;
-computação distribuída;
-aplicaçõescliente/servidor;
-objetos distribuídos;
-clusters;
-grids.
Com o surgimento de malhas computacionais (grids), em que as aplicações executam em ambientes distribuídos,
compostos por um grande número de máquinas heterogêneas, administradas por diferentes instituições e
conectadas à internet.
Fonte: Computação em grade (grid computing) Fonte: http://www.adarshpatil.com/newsite/grid.htm
4 PARALELISMO X COMPUTAÇÃO PARALELA
Paralelismo
–Projeto de uma CPU
–Projeto de uma arquitetura paralela
–E/S sobreposta ao processamento
Computação paralela
- -8
–Coleção de elementos de processamento
–Trabalhando em conjunto para a realização de uma tarefa
Paralelismo
Dentro de um processador
Figura 1 - Arquiteturas sequenciais
- -9
Figura 2 - Arquiteturas pipeline
Figura 3 - Arquiteturas superescalares
- -10
Figura 4 - Arquiteturas VLIW
Arquiteturas SMT
· SMT = Simultaneous Multithreading
· Múltiplos threads despacham múltiplas instruções no mesmo ciclo
· Aumenta a possibilidade de manter todas as unidades funcionais ocupadas
Por que clusters?
· Custo/benefício - redução de custo para se obter processamento de alto desempenho, utilizando máquinas de
baixo custo.
- -11
· Escalabilidade - possibilidade de inclusão de novos componentes, que sejam adicionados à medida que cresça a
carga de trabalho.
· Alto desempenho - possibilidade de resolver problemas complexos através de programação e processamento
paralelo, reduzindo o tempo para a solução do problema.
· Independência de fornecedores - utilização de hardware aberto, software de uso livre e independência de
fabricantes e licenças de uso.
· Tolerância a falhas - o aumento de confiabilidade do sistema como um todo, caso alguma parte falhe.
Cluster Beowulf
· Em 1994, o Projeto Earth and Space Sciences (ESS) da NASA construiu o primeiro cluster paraBeowulf
fornecer computação paralela com o intuito de resolver problemas envolvidos em aplicações da ESS.
· Uma característica desta arquitetura é que é constituída por diversos nós escravos e gerenciada por um só
computador.
O primeiro cluster de PC's (Beowulf) foi construído em 1994 por dois pesquisadores do Goddard Space Flight
Center (NASA) Thomas Sterling e Don Becker. Naquele momento esses pesquisadores necessitavam de uma
solução de baixo custo e que processasse na ordem de 1 Gflop, o que significa um bilhão de operações em ponto
flutuante por segundo, já que preço de um supercomputador com este nível de desempenho era de
aproximadamente um milhão de dólares. A idéia original era utilizar processadores mais baratos, para tanto,
este cluster foi configurado inicialmente com 16 máquinas utilizando processadores 486DX4, placas de rede
- -12
Ethernet e sistema operacional Linux. Este primeiro cluster atingiu a marca de 70 Mflops, com um custo
estimado em 10% do valor de mercado para uma máquina de desempenho similar. Este projeto obteve tanto
sucesso que o termo Beowulf é utilizado até hoje como uma classe de clusters.
Estas máquinas foram montadas e programadas de forma que possibilitassem a paralelização/ divisão das
tarefas, buscando atingir um poder de processamento equivalente a um supercomputador da época, por uma
fração do preço. Este primeiro cluster chegou 70 Mflops, com um custo estimado em 1/10 do valor cobrado pelo
mercado para um sistema de desempenho similar. Tal projeto fez tanto sucesso que o termo Beowulf foi
estendido a uma classe de clusters que são utilizados ainda hoje.
- -13
1.Computação centralizada
– Mainframe: termo utilizado para se referenciar a um grande computador, normalmente produzido por uma
grande empresa. O nome tem origem na forma com que estes computadores eram construídos. Todos os
componentes (processador, memória...) do computador principal (main) são colocados em uma única estrutura
(frame).
– Características
– Sistemas multiusuários
– Sistemas proprietários -> hardware, software, rede
– Instalação e manutenção feita pelo fabricante -> confiabilidade X custo
2.Microcomputadores e redes de computadores
Ampliação do parque computacional, em função de:
• Processadores mais rápidos e mais baratos.
• Redes mais rápidas e acessíveis.
• Liberdade de escolha.
• Menor custo de manutenção.
• Necessidade inerente de conectividade.
• Aplicação básica: compartilhamento de recursos.
Evolução: Os terminais foram sendo substituídos pelos primeiros microcomputadores que começavam a ficar
obsoletos. Em geral, o uso de um programa emulador de terminais e de uma unidade de disquete era suficiente
para que um simples PC-XT executasse essa tarefa, uma vez que só precisaria executar o emulador. A partir deste
ponto, o micro passaria a se comportar como um terminal. Em alguns casos, era necessário o uso de uma placa
que compatibilizasse a forma de comunicação serial entre os dois computadores.
3.Sistemas distribuídos
Utilização das redes de computadores (locais e de longa distância) para execução colaborativa e cooperativa de
aplicações e não somente para compartilhamento de recursos.
Sistema distribuído = computadores + rede + aplicação
Conceito: É um sistema em que os computadores estão conectados em rede e coordenam suas ações através de
troca de mensagens.
- Definições de sistemas distribuídos
Colouris: “Um sistema no qual os componentes de hardware ou software, localizados em computadores
interligados em rede, se comunicam e coordenam suas ações apenas enviando mensagens entre si,”
- -14
Tanenbaum: “Um sistema distribuído é um conjunto de computadores independentes que se apresenta a seus
usuários como um sistema único e coerente.”
Silberschatz: “Coleção de processadores que não compartilham memória ou relógio.”
4.Comparação com sistemas centralizados
Vantagens:
• Melhor relação preço/desempenho
• Capacidade de crescimento incremental (escalabilidade)
• Tolerância a falhas
Desvantagens:
• Falta de padronização para desenvolvimento de software
• Falta de uma divisão clara entre sistema/aplicação
• Latência e possibilidade de congestionamento na rede
• Redução da segurança
5.Desafios da computação distribuida
· Ausência de fonte comum de tempo (relógio global)
· Ausência de memória compartilhada
· Compartilhamento de recursos
O que vem na próxima aula
Na próxima aula, você vai estudar:
· Identificar o uso de aplicações distribuídas;
· Conhecer as principais aplicações atuais;
· Compreender como a computação distribuída pode contribuir para TI verde.
CONCLUSÃO
Nesta aula, você:
• Entendeu a necessidade da utilização da computação de alto desempenho nos ambientes corporativos;
• Conheceu as características da computação centralizada e da computação distribuída;
• Identificou as vantagens e desvantagens de cada arquitetura e a motivação para esta evolução.
•
•
•
- -1
ARQUITETURA DE SISTEMAS 
DISTRIBUÍDOS
APLICAÇÕES DISTRIBUÍDAS E TI VERDE
- -2
Olá!
Objetivo desta aula
Ao final desta aula, o aluno será capaz de:
1- Identificar o uso de aplicações distribuídas;
2- Reconhecer as principais aplicações atuais;
3- Avaliar a contribuição da computação distribuída para a TI verde.
Introdução
Nesta aula, você estudará a importância das aplicações distribuídas e da TI verde.
Para as empresas, o valor da informação é considerado, na atualidade, como algo imensurável, e a velocidade
para adquiri-la têm fomentado investimentos no desenvolvimento da computação de alto desempenho.
Para compreendermos melhor essa questão, vamos ampliar nosso estudo sobre a necessidade e as dificuldades
de se implementar um sistema distribuído.
1 Surgimento dos sistemas distribuídos
À medida que a velocidade e a confiabilidade das redes de computadores aumentam, computadores do mundo
inteiro estão cada vez mais interconectados.
A comunicação remota via rede, originalmente reservada para grandes instalações de computadores e ambientes
acadêmicos, tem sido amplamente empregada.
Em sistemas distribuídos, computadores remotos trabalham cooperativamente por meio da rede, de modoque
seja visto como uma única máquina local.
As aplicações de sistemas distribuídos podem ser executadas em máquinas locais e remotas, além de permitir o
compartilhamento de dados, arquivos e outros recursos entre diversas máquinas.
Os sistemas distribuídos quase sempre surgem da necessidade de melhorar a capacidade e a confiabilidade de
uma única máquina (como, por exemplo, a capacidade de processamento e o tamanho de armazenamento dessa
máquina).
2 Limitação das Máquinas
Fatores econômicos podem limitar a capacidade de um sistema!
- -3
Sendo assim, ao implementar um sistema com máquinas de baixo custo, é possível projetar um poderoso sistema
sem a utilização de equipamentos dispendiosos.
Embora ofereçam muitas vantagens em relação a sistemas centralizados, os sistemas distribuídos podem ser
complexos e de difícil implementação e gerenciamento.
Por exemplo, os sistemas distribuídos têm de manipular atrasos de comunicação e problemas de confiabilidade.
É muito difícil gerenciar falhas de máquinas!
Mais difícil ainda é gerenciar sistemas distribuídos compostos por diversas máquinas, já que estão mais
propensos a sofrer queda de sistema do que os sistemas de apenas uma única máquina.
Concorrência
A execução concorrente é uma característica intrínseca de um sistema distribuído, na qual os processos
disputam pelos recursos compartilhados.
Inexistência de relógio global
A coordenação dos processos depende de uma noção compartilhada do tempo em que as ações dos programas
ocorrem.
Falhas independentes
Falhas na rede, nos sistemas ou nos processos demoram a ser percebidas nos sistemas distribuídos.
(COULOURIS; DOLLIMORE; KINDBERG, 2007).
Falácias da computação distribuída
Os sistemas distribuídos são diferentes dos softwares tradicionais, porque seus componentes estão dispersos em
uma rede.
Não levar essa dispersão em conta durante o projeto torna muitos sistemas desnecessariamente complexos, o
que resulta em erros que precisam ser corrigidos mais tarde (o que chamamos de retrabalho).
Peter Deustch formulou esses erros como as seguintes premissas falsas que todos adotam ao desenvolver uma
aplicação distribuída pela primeira vez:
· A rede é confiável
· A rede é segura
· A rede é homogênea
· A topologia não muda
· A latência é zero
· A largura de banda é infinita
· O custo do transporte é zero
· Há somente um administrador
- -4
Atributos dos Sistemas Distribuídos
Vamos conhecer alguns atributos dos sistemas distribuídos:
Latência – Tempo decorrido entre o início de uma operação e seu término. O termo latência é usado,
normalmente, para comunicações entre partes de um sistema.
Taxa de transmissão – Taxa que mede a capacidade de transmissão/recepção de informações por unidade de
tempo.
Speedup – Termo que significa ganho relativo de velocidade ou desempenho. Como exemplo de, speedup
podemos citar a razão dos tempos de execução sequencial e o paralelo.
Bottleneck – Termo que significa (um elemento de um sistema é o gargalo quando limita seugargalo 
desempenho, embora o resto do sistema ainda tenha folga para trabalhar. É desejável que não haja gargalos no
sistema e que todos os elementos alcancem seus limites juntos.
Escalabilidade – Capacidade de melhoria do desempenho do sistema distribuído conforme cresce o número de
elementos processadores (de acordo com Neuman (1994), a escalabilidade pode ser medida, a princípio, por três
dimensões, quais sejam: – o que significa que é fácil adicionar mais usuários eEm relação a seu tamanho
recursos ao sistema; – trata-se de um sistema nos quais usuários e recursos podemEm termos geográficos
estar longe uns dos outros; – o que significa que o sistema ainda pode ser fácil deEm termos administrativos
gerenciar, mesmo que seja abrangente).
Balanceamento de Carga – Característica que permite ao sistema distribuído dividir, adequadamente, suas
tarefas, de modoque um elemento processador não fique mais sobrecarregado que os outros.
Throughput – Medida de produtividade de um sistema. Essa medida exprime, por unidade de tempo, a
produção efetiva do sistema em termos de tarefas, transações, operações, etc.
Confiabilidade – Característica do sistema que dá maior ou menor certeza de que vai funcionar a contento.
Tolerância a falhas – Capacidade de o sistema sobreviver à falha de alguns de seus elementos. 
Disponibilidade – Característica que indica quanto tempo o sistema funcionará ininterruptamente sem ser
afetado por falhas, manutenção preventiva ou corretiva, etc.
Segurança – Garantia de o sistema fazer, de maneira correta e para os usuários corretos, aquilo para o qual foi
projetado (em outras palavras, usuários ou programas não autorizados não devem ter acesso aos recursos do
sistema. O sistema deve ser capaz de garantir que essa diretriz seja cumprida. Caso contrário, esse mesmo
sistema deve detectar como, quando e por que não se cumpriu o estabelecido).
Migração de tarefas – Transferência de responsabilidade de execução de uma tarefa de um elemento para
outro. A migração de tarefas de ser de processos ou de computação.
Migração de dados – Transferência de dados de um elemento processador para outro.
- -5
Replicação- Duplicação de recursos de um elemento processador em outro.
Transparência – Característica que esconde de usuários ou aplicativos detalhes de funcionamento do sistema
distribuído, de tal forma que se tenha a impressão de que esse sistema é centralizado .
Veja agora alguns aspectos de transparência (ISO, 1995):
Acesso – oculta diferenças na representação de dados e no modo de acesso a um recurso;
Localização – oculta o lugar em que um recurso está localizado;
Migração – oculta que um recurso pode ser movido para outra localização;
Relocação – oculta que um recurso pode ser movido para outra localização durante o uso;
Replicação – oculta que um recurso é replicado;
Concorrência – oculta que um recurso pode ser compartilhado por diversos usuários concorrentes;
Falha – oculta a falha e a recuperação de um recurso.
Imagem Única do Sistema (SSI)
Um Sistema de Imagem Única (SS!) é a propriedade de se ocultar a complexidade envolvida em uma natureza
distribuida e heterogênea de recursos disponíveis para os usuários e aplicações, de tal forma que estes
visualizem o sistema como um recurso único. (PITANGA, 2004)
Veja, a seguir, alguns beneficios do SSI:
Os serviços podem ser requisitados a partir de qualquer nó do sistema;· 
A localização de dispositivos fisicos pode ser totalmente transparente para o usuário;· 
O sistema apresenta disponibilidade em seus serviços;· 
O sistema permite ao usuário trabalhar com uma interface simplificada, com comandos que ajudem a· 
administrar o cluster por inteiro, como se fosse uma única máquina;
O sistema reduz riscos em erros operacionais e apresenta maior disponibilidade;· 
O sistema permite a localização independente para a comunicação das mensagens, unificando o espaço de· 
comunicação entre processos;
O sistema permite um modelo de processos com espaço globalizado para balanceamento de carga;· 
O sistema permite que diversos componentes de uma aplicação trabalhem, de forma cooperativa, para criar a· 
imagem de uma única aplicação no sistema;
Quanto à concorrência, os usuários não devem notar que existem outras pessoas utilizando o sistema.· 
- -6
3 Máquinas mais velozes
Desde 1993, o site publica, semestralmente, um ranking dos 500 computadores com maior TOP500
desempenho no mundo.
Na lista do , são obtidos pelo benchmark os seguintes resultados: ranking*
Rmax – performance para o maior problema executado em uma máquina (em Gflop/s);
Nmax – tamanho do maior problema executado em uma máquina;
N1/2 – tamanho quando metade de Rmax é executado;
Rpeak – pico de performance teórico para a máquina (em Gflop/s).
https://top500.org
*Esse ranking é baseado nas informações do programa utilizado para a análise de performance: o LINPACK
benchmark. Sua atualização ocorre no mês de junho, coincidindo com a InternationalSupercomputer
Conference, e no mês de novembro, na IEEE Supercomputer Conferente.
Um computador japonês conquistou o 1º lugar no ranking de junho de 2011, com desempenho medido em 8.16
petaflops.
O K computer é mais poderoso que os próximos cinco sistemas da lista combinados.
O desempenho foi medido com 68.554 processadores SPARC64VIIIfx, cada um com oito núcleos, em um total de
548.352 núcleos (quase o dobro de qualquer outro sistema dessa lista).
Até sua conclusão, essa máquina terá mais de 80.000 processadores!
3.1 Brasil no ranking das máquinas mais velozes
O Brasil tem dois supercomputadores na lista do ranking dos computadores mais velozes do mundo:
Tupi - Operado pelo Instituto Nacional de Pesquisas Espaciais (INPE) – ocupa a 34ª posição, com 30.270
processadores AMD Opteron de 12 núcleos, cada um rodando a 2.1 GHz e com desempenho de 205.1 teraflops.
Galileu - Operado pelo Núcleo de Atendimento em Computação de Alto Desempenho (NACAD/COPPE), da
Universidade Federal do Rio de Janeiro (UFRJ) – ocupa a 167ª posição, com 6.464 processadores Intel Xeon
Nehalem de 2.8 GHz cada, e desempenho de 64.6 teraflops.
Gráfico do ranking TOP500
Veja, a seguir, gráficos fornecidos pelo ranking TOP500 que apresentam o desenvolvimento da performance dos
supercomputadores, de 1993 a 2011, e sua projeção:
https://top500.org/
https://top500.org
- -7
4 Intranet
De acordo com Marcelo (2002), a intranet consiste em:
“[...] redes corporativas que se utilizam de tecnologia e de infraestrutura de comunicação de dados da internet.
Essas redes são utilizadas na comunicação interna da própria empresa e também na comunicação com outras
empresas. [...]
Portanto, a intranet é o uso da tecnologia da internet na rede corporativa da empresa. Ela facilita a distribuição
de documentos, a transferência de arquivos, a consulta à informação e muitas outras aplicações.”
Diagrama da intranet
Veja, a seguir, um diagrama esquemático de uma intranet.
- -8
5 Computação em grade (grid computing)
A tecnologia por trás da computação em grade é um conjunto de que gerenciamsoftwares middleware*
recursos distribuidos e espalhados pela organização, disponibilizando os servidores e, eventualmente, os
desktops da empresa.
A ideia básica é combinar os recursos disponíveis com as demandas computacionais das empresas.(CHEDE,
2004, p. 16)
Computação em grade é uma maneira bastante eficiente de maximizar recursos computacionais.
Trata-se de uma consolidação virtual de servidores. (CHEDE, 2004).
*Designação utilizada para se referir ao software executado entre as aplicações distribuídas e o sistema
operacional. O middleware ajuda a fornecer portabilidade, transparência e interoperabilidade entre sistemas
distribuídos.
Exemplo de grid computing
Veja, a seguir, o Worldwide LHC Computing Grid (CERN) – uma computação em grade:
- -9
Fonte: Imagens disponíveis no link http://michaelgr.com/2008/10/03/cern-unveils-the-worldwide-lhc-
computing-grid
6 Computação oportunista - projeto SETIG
O conceito de computação oportunista consiste em usar redes de computadores para resolver problemas
computacionais. Esse conceito se popularizou com o sucesso do projeto SETIe, baseado na ideia do voluntariado,
em que um usuário toma a decisão de ceder ciclos ociosos de seu computador para contribuir com uma
determinada organização para a execução de alguma tarefa. (CHEDE, 2004, p. 57)
Veja, a seguir, figuras do projeto SETI@home:
Fonte: Imagens disponíveis nos links #1 e #2 #1 https://pt.wikipedia.org/wiki/SETI#SETI.40HOME #2 
https://boinc.berkeley.edu
- -10
7 Computação oportunista - projeto BOINC
Outro projeto que pode ser citado no campo da computação oportunista é o Berkeley Infraestructure for
Network Computing (BOINC), que tem como proposta permitir que o usuário possa operar simultaneamente
diversos projetos desse tipo de computação.
Veja, a seguir, a realização de uma previsão de clima, utilizando o projeto BOINC:
8 Sistemas distribuídos e TI verde
A virtualização é a camada de abstração entre sistemas de hardware de computador e do software que roda
nesses sistemas, proporcionando uma visão lógica dos recursos de computação.
Trata-se de uma das formas de economizar recursos e praticar TI verde!
A virtualização trata de estender ou substituir uma interface existente, de modo a imitar o comportamento de
outro sistema.
Uma das razões mais importantes para introduzir a virtualização na década de 1970 foi permitir que softwares
herdados (aplicações e sistemas operacionais) executassem em hardwares de mainframe. (TANENBAUM, 2007)
Procure, por exemplo, comparar o que é real e o que é virtual!
- -11
Algo real possui características físicas; já o virtual está vinculado à simulação.
Sendo assim, a virtualização pode ser definida como uma simulação de um ambiente real.
Virtualização e o sistema de conectividade
Atualmente, grande parte dos computadores está conectada por redes de computadores!
Essa conectividade exige dos administradores que um conjunto grande e heterogêneo de computadores
servidores execute (cada um) diferentes aplicações utilizando diferentes recursos, que podem ser acessadas por
diversos clientes.
A virtualização pode contribuir muito nesse sentido!
Em primeiro lugar, porque a diversidade de plataformas e máquinas pode ser reduzida.
Em segundo lugar, porque cada aplicação pode executar em sua própria máquina virtual, incluindo,
possivelmente, suas bibliotecas e o sistema operacional (ambos relacionados), que estariam executando em uma
plataforma comum.
Diagrama esquemático da máquina virtual
Veja, a seguir, um diagrama esquemático de uma máquina virtual:
Supercomputadores e TI verde
- -12
Desde abril de 2005, o site Green500 fornece um ranking dos mais eficientes supercomputadores do mundo em
termos energéticos. Por décadas, a noção de performance tem sido sinônimo de velocidade.
Esse enfoque especial levou ao surgimento de supercomputadores que consomem grandes quantidades de
energia elétrica e produzem tanto calor que exigem enormes instalações de refrigeração.
Alguns supercomputadores têm liderado essas listas que são publicadas semestralmente, como as do ranking
TOP500. Um deles aparece no ranking Green500 de junho de 2011: o Cluster DEGIMA, da Universidade de
Nagasaki, no Japão. Outro máquina que obteve destaque no mesmo mês e ano é o IBM Blue Gene (protótipo/Q),
que possui eficiência energética de 2097 MFLOPS/watt. Esse supercomputador aparece como o número 1 do
ranking Green500. Veja:
O que vem na próxima aula
Na próxima aula, você estudará sobre os seguintes assuntos:
•Tratamento de falhas;
•Métodos de tratamento de falhas em sistemas distribuídos.
CONCLUSÃO
Nesta aula, você:
• Conheceu as falácias da computação distribuída;•
- -13
• Conheceu as falácias da computação distribuída;
• Identificou os atributos dos sistemas distribuídos;
• Identificou o uso de algumas aplicações distribuídas;
• Identificou os maiores computadores com desempenho no mundo;
• Compreendeu a necessidade de se tratar o uso consciente da eficiência energética em máquinas 
multiprocessadas.
•
•
•
•
•
- -1
ARQUITETURA DE SISTEMAS 
DISTRIBUÍDOS
TRATAMENTO DE FALHAS
- -2
Olá!
Nesta aula, você irá:
1) Reconhecer alguns dos métodos de tratamento de falhas em sistemas distribuídos.
Introdução
O profissional da área de Tecnologia da Informação atua diretamente no planejamento, na implementação e na
implantação de soluções de TI nas organizações.
Dessa forma, é importante que sejam compreendidos os conceitos, os benefícios, as características e as restrições
dos sistemas tolerantes a falhas e com alta disponibilidade. Tais sistemas devem ser confiáveis!
1 Falhas Parciais
Uma característica dos sistemas distribuídos que os distingue de sistemas centralizados é a noção de falha
parcial.
A falha parcial pode acontecer quando um componente em um sistema distribuído não funciona. Essa falha pode
afetar a operação adequada de outros componentese, ao mesmo tempo, deixar outros totalmente ilesos.
A falha em sistemas não distribuídos quase sempre é total, no sentido de que afeta todos os componentes e pode,
facilmente, fazer o sistema inteiro cair.
Um objetivo importante do projeto de sistemas distribuídos é construir o sistema de tal modo que possa se
recuperar automaticamente de falhas parciais, sem afetar, seriamente, seu desempenho global.
Em particular, sempre que ocorrer uma falha, o sistema distribuído deve continuar a funcionar de maneira
aceitável enquanto o sistema estiver em conserto.
Em outras palavras, o sistema distribuído deve tolerar falhas e continuar a funcionar até certo ponto, mesmo na
presença dessas falhas.
2 Tolerância a falhas
Para entendermos o papel da tolerância a falhas em sistemas distribuídos, em primeiro lugar, precisamos
entender o que significa tolerar falhas para esse sistema.
Existe uma forte relação entre ser tolerante a falhas e sistemas confiáveis. De acordo com Kopetz e Verissimo
 Kopetz, H e Veríssimo, P. . Em Mullender (ed.), Distributed(1993)( Real Time and Dependability Concepts
- -3
Systems, 2ª ed. Addison-Wesley. 1993), a confiabilidade abrange uma série de requisitos úteis para sistemas
distribuídos, tais como:
Disponibilidade
A disponibilidade consiste na propriedade de um sistema estar pronto para ser usado imediatamente. Trata-se
da probabilidade de o sistema funcionar corretamente em qualquer momento determinado e estar disponível
para executar suas funções em nome de seus usuários.
A alta disponibilidade, por sua vez, representa o que provavelmente funcionará em dado instante de tempo.
Por exemplo, se um sistema nunca cai, mas é desligado por duas semanas em um determinado mês, todos os
anos, tem alta confiabilidade, mas somente 96% de disponibilidade.
Confiabilidade
A confiabilidade consiste na propriedade de um sistema poder funcionar continuamente sem falhas.
Essa confiabilidade é definida em termos de um intervalo de tempo, e não de um instante de tempo.
A alta confiabilidade, por sua vez, representa o que provavelmente continuará a funcionar, sem interrupção,
durante um período de tempo relativamente longo.
Por exemplo, se um sistema ficar fora do ar por um milissegundo a cada hora, terá uma disponibilidade de mais
de 99,99%, mas sua confiabilidade ainda será muito baixa.
Segurança
Se um sistema deixar de funcionar corretamente durante certo tempo, nada de catastrófico acontecerá.
É o que acontece, por exemplo, com sistemas de controle de processos usados em usinas de energia nuclear ou
sistemas para enviar pessoas ao espaço.
Capacidade de manutenção
À capacidade de manutenção consiste na facilidade com que um sistema que falhou pode ser consertado.
Sistemas de alta capacidade de manutenção também podem mostrar alto grau de disponibilidade, em especial se
as falhas puderem ser detectadas e reparadas automaticamente.
3 Falha, erro e defeito
O defeito acontece quando o sistema não pode cumprir o que foi especificado ou prometido.
Em particular, se um sistema distribuído é projetado para oferecer a seus usuários uma série de serviços, o
sistema falha quando um ou mais desses serviços não podem ser fornecidos completamente.
O erro, por sua vez, representa o estado de um sistema que pode levar a uma (a causa de um erro éfalha
denominada falha).
- -4
É o caso da transmissão de pacotes por uma rede. Espera-se que alguns pacotes estejam danificados quando
chegam ao receptor. Meios de transmissão com problemas podem facilmente danificar pacotes.
Os erros de transmissão também podem ser causados por más condições atmosféricas, como ocorre com redes
sem fio.
4 Tipos de falhas
As falhas são classificadas como:
Transientes
As falhas transientes ocorrem uma vez e, depois, desaparecem. Se a operação for repetida, a falha não acontecerá
novamente.
Por exemplo, um pássaro voando pelo feixe de um transmissor de microondas pode causar perda de bits em
alguma rede.
Intermitentes
As falhas intermitentes ocorrem e desaparecem por sua própria vontade. Depois, essas falhas reaparecem e
assim por diante.
Por exemplo, um conector com um contato frouxo causará, muitas vezes, uma falha intermitente.
Permanentes
As falhas permanentes continuarão a existir até que o componente faltoso seja substituído.
É o caso dos chips queimados e dos bugs de software.
5 Modelos de falha
Um sistema falha quando não fornece, adequadamente, os serviços para os quais foi projetado.
Se considerarmos um sistema distribuído como um conjunto de servidores que se comunicam entre si e com
seus clientes, esse fornecimento inadequado de serviços significa que servidores, canais de comunicação ou,
possivelmente, ambos não estão fazendo o que deveriam fazer.
Contudo, nem sempre um servidor que funciona mal representa a falha que estamos procurando. Se tal servidor
depender de outros servidores para prestar seus serviços adequadamente, é possivel que a causa de um erro
tenha de ser procurada em algum outro lugar.
Para que tivéssemos uma ideia melhor da real seriedade de uma falha, foram desenvolvidos diversos esquemas
de classificação.
- -5
Um desses esquemas é descrito em (Cristian, F.-Understanding Fault-Tolerant DistributedCristian (1991)
Systems. Communnications of the ACM Vol 34, No 2, pp 56-78, 1991) e (Hadzilacos, Hadzilacos e Toueg (1993)
V. and Toueg, S. A Modular Approach to Fault-tolerant Broadcasts and Related Problems, Technical report, Dept.
of Computer Science, University of Toronto, 1994) da seguinte forma:
Veja a seguir, um modelo de falhas em sistemas distribuídos:
6 Técnicas de tratamento
Veja, a seguir, algumas técnicas de tratamento:
- -6
1. Mascaramento de falha por redundância;
2. Mascaramento de falhas e replicação;
3. Acordo em sistemas com falha;
4. Detecção de falha;
5. Recuperação
Mascaramento de falha por redundância
Se um sistema deve ser tolerante a falhas, o melhor que ele pode fazer é tentar ocultar de outros processos a
ocorrência de falhas. À técnica fundamental para mascarar falhas é usar redundância.
Avance e conheça os três tipos possíveis de redundância.
Redundância de Informação
Na redundância de informação, os bits extras são adicionados para permitir recuperação de bits deteriorados.
Por exemplo, um código de pode ser adicionado a dados transmitidos para recuperá-los de ruído naHampming
linha de transmissão.
Redundância de Tempo
Na redundância de tempo, uma ação é realizada e, se for preciso, essa ação será executada novamente.
Transações (banco de dados usam essa abordagem. Se uma transação for abortada, ela pode ser refeita sem
causar nenhum dano.
A redundância de tempo tem especial utilidade quando as talhas são transientes ou intermitentes.
Redundância Física
Na *, são adicionados equipamentos ou processos extras para possibilitar que q sistemaredundância física
como um todo tolere a perda ou o mau funcionamento de alguns componentes. A redundância física pode ser
feita em hardware ou em .software
Por exemplo, processos extras podem ser adicionados ao sistema, de modo que, se uma pequena quantidade
deles cair, o sistema ainda possa funcionar corretamente.
Em outras palavras, replicando processos, podemos conseguir alto grau de tolerância à talha.
*A redundância física é uma técnica bem conhecida para prover tolerância à falha. Essa técnica é usada em:
Biologia – mamíferos têm dois olhos, dois ouvidos, dois pulmões e assim por diante;
Aeronaves – aviões 747 têm quatro motores, mas podem voar com três;
Esportes – com a utilização de vários juízes, caso algum deles não perceba um evento.
A referida técnica também vem sendo usada, há anos, para tolerância à falha em circuitos eletrônicos.
Mascaramento de falhas e replicação
Grupos de processos fazem parte da solução para construir sistemas tolerantes à falha.
- -7
Em particular, ter um grupo de processos idênticos permite-nos mascarar um ou mais processos faltosos àquele
grupo. Podemos replicar processos e organizá-losem um grupo para substituir um único processo (vulnerável)
por um grupo (tolerante à falha).
De modo geral, em casos de tolerância à falha, a replicação é baseada na forma de um
protocolo de primário e backup.
Nesse caso, um grupo de processos é organizado de modo hierárquico, no qual um servidor primário coordena
todas as operações de escrita.
Na prática, o servidor primário é fixo, embora seu papel possa ser assumido por um dos backups (caso
necessário).
Na verdade, quando um servidor primário cai, os backups executam algum algoritmo de
eleição para escolher um novo servidor primário.
Acordo em Sistemas com Falha
Organizar processos replicados em um grupo ajuda a aumentar a tolerância à falha.
Em geral, as coisas tornam-se mais complicadas se exigirmos que um grupo de processos
chegue a um acordo, o que é necessário em muitos casos, tais como:
· Eleger um coordenador;
· Decidir a validação ou não de uma transação;
· Repartir tarefas entre operários;
· Sincronização.
Quando a comunicação e os processos são todos perfeitos, chegar a tal acordo costuma
acontecer de forma direta, mas, quando não o são, surgem problemas.
O objetivo geral de algoritmos de acordo distribuído é que todos os processos que não
apresentam falha cheguem a um consenso sobre alguma questão e estabeleçam esse consenso dentro de um
número finito de etapas.
O problema é complicado pelo fato de que premissas diferentes sobre o sistema subjacente requerem soluções
diferentes, considerando que existam soluções para as mesmas.
Detecção de falha
Para mascarar falhas adequadamente, em geral, também é necessário detectá-las!
A detecção de falhas é uma das bases da tolerância à falha em sistemas distribuídos.
No caso de um grupo de processos, os sistemas devem ser capazes de decidir quem ainda é um membro e quem
não é, isto é, o sistema deve ser capaz de detectar quando um membro de um grupo falhou.
Quando se trata de detectar falhas de processos, há, essencialmente, dois mecanismos:
- -8
1. Os processos enviam as mensagens ativamente uns aos outros;
2. Os processos esperam passivamente pela entrada de mensagens de processos diferentes.
Há várias questões que precisam ser levadas em conta no projeto de um subsistema de detecção de falha.
A (Por exemplo, a detecção de falha pode ocorrer por gossiping, no qual cada nó anuncia,detecção de falha 
periodicamente, a seus vizinhos que ainda está vivo e funcionando) também pode ser realizada como resultado
da troca regular de informações com vizinhos, como acontece na disseminação de informações baseada em
gossiping.
Em determinado momento, todo processo saberá da existência de cada um dos outros processos. Entretanto, o
mais importante é que o referido processo terá informações disponíveis suficientes para decidir se outro
processo falhou ou não.
Um membro cuja informação de disponibilidade é antiga presumivelmente falhará!
Detecção de falha – exemplo
Podemos também nos deparar com a seguinte situação:
um subsistema de detecção de falhas que não consegue distinguir falhas de rede de falhas de nós.
Um modo de lidar com esse problema é não permitir que um único nó decida se um de seus vizinhos caiu.
Em vez disso, ao perceber que a temporização de uma mensagem se esgotou, um nó requisita a outrosping
vizinhos que verifiquem se podem alcançar o nó que, presumivelmente, falhou.
Certamente, informações positivas também podem ser compartilhadas: se um nó ainda estiver vivo, essa
informação poderá ser transmitida para outras partes interessadas (que podem detectar uma falha de enlace
com o nó suspeito).
Recuperação
Uma vez ocorrida a falha, é essencial que o processo em que a mesma aconteceu se possa recuperar para um
estado correto.
A recuperação de um erro é fundamental para a tolerância à falha!
Atenção!
É bom lembrar que um erro é parte de um sistema que pode levar a uma falha. A ideia geral de recuperação de
erro é substituir um estado errôneo por um estado livre de erro.
7 Formas de Recuperação de Erro
Essencialmente, existem duas formas de recuperação de erro, quais sejam:
Recuperação Retroativa
- -9
A questão principal da é trazer o sistema de seu estado com o erro presente para umrecuperação retroativa*
estado anterior, que estava correto.
Para fazer isso, é necessário registrar o estado do sistema de tempos em tempos e restaurar tal estado registrado
quando ocorrer o erro.
Toda a vez que o estado presente de um sistema (ou parte dele) é registrado, dizemos que foi realizado um
ponto de verificação (check-point).
* De modo geral, técnicas retroativas de recuperação de erro são amplamente aplicadas como um mecanismo
geral para recuperação de falhas em sistemas distribuídos.
O principal benefício da recuperação retroativa de erro é que esse método pode ser aplicado de modo geral,
independentemente de qualquer sistema ou processo especifico (TANENBAUM, 2007).
Em outras palavras, a recuperação retroativa pode ser integrada a um sistema distribuído (camada de
middleware) como um serviço de uso geral.
Recuperação para a Frente
Quando o sistema entra em um estado de erro, em vez de retroagir para um estado anterior correspondente a
um ponto de verificação, realiza-se uma tentativa para levar o sistema a um novo estado correto, a partir do qual
ele possa continuar a executar.
O principal problema dos * é que precisamos saber, de antemão,mecanismos de recuperação para a frente
quais erros podem ocorrer. Só assim, é possível corrigir esses erros e passar para um novo estado.
* Para distinguirmos recuperação de erro retroativa e para a frente, basta considerarmos a imple-mentação da
comunicação confiável.
A abordagem comum para se recuperar um pacote perdido é permitir que o remetente retransmita esse pacote.
Na verdade, a retransmissão de pacotes determina que tentamos voltar a um estado anterior correto, ou seja, ao
estado no qual o pacote que foi perdido está sendo enviado.
Portanto, a comunicação confiável por meio de retransmissão de pacote é um exemplo de aplicação de técnicas
retroativas de recuperação de erro.
O que vem na próxima aula
Na próxima aula, você vai estudar:
•Classificação de Flynn;
•Modelos de Programação;
•Implementações da arquitetura MIMD;
- -10
•Características de desenvolvimento de aplicações para as arquiteturas MIMD.
CONCLUSÃO
Nesta aula, você:
• Conheceu os conceitos sobre falhas, defeitos e erros em sistemas distribuídos;
• Conheceu os conceitos sobre falhas parciais;
• Conheceu os métodos de tratamento de falhas em sistemas distribuídos.
•
•
•
- -1
ARQUITETURA DE SISTEMAS 
DISTRIBUÍDOS
CLASSIFICAÇÃO DE FLYNN E MODELOS DE 
PROGRAMAÇÃO
- -2
Olá!
Objetivo desta aula
Nesta aula, você irá:
1-Definir a classificação de Flynn;
2-Reconhecer as implementações da arquitetura MIMD e as características de desenvolvimento de aplicações
para essa arquitetura;
3-Descrever a motivação a partir de alguns modelos de programação paralela.
Introdução
Nesta aula, estudaremos a classificação de multiprocessadores em relação à quantidade de fluxo de dados e
instruções, e em relação ao acesso à memória.
Conheceremos, também, algumas características de desenvolvimento de aplicações para as arquiteturas MIMD.
1 Taxonomia de Flynn
Em 1966, Michael J. Flynn propôs uma taxonomia: o primeiro esquema para classificar computadores em
configurações de paralelismo crescente.
O esquema consistia de quatro categorias baseadas em tipos diferentes de fluxos usados por processadores.
Um processador aceita dois fluxos: um fluxo de instruções e um fluxo de dados.
Veja, a seguir, uma tabela que apresenta a classificação de Flynn para os computadores:
- -3
Trata-se da classificação do tipo mais simples: são os monoprocessadores tradicionais, nos quais um único
processador busca uma instrução por vez e a executa sobre um único item de dado.
Como exemplos dessa classificação, podemos citar a arquitetura sequencial e a máquina de Von-Neumann.
Técnicas como a de , a da -pipelinepalavra de instrução muito longa - Very Long Instruction Word (VLIW)
e a do projeto superescalar podem introduzir paralelismo em computadores SISD.
Além disso, a tecnologia Hyper-Threading da Intel introduz paralelismo, criando dois processadores virtuais por
meio de um único processador físico, o que dá a um sistema operacional habilitado a multiprocessador a
impressão de que esteja executando em dois processadores (um a um) com pouco menos da metade da
velocidade do processador físico.
Pipeline - Na técnica de pipeline, o caminho de execução de uma instrução é dividido em estágios discretos, o 
que permite que o processador processe várias instruções simultaneamente, contanto que, no máximo, uma
instrução ocupe cada estágio durante um ciclo de relógio.
palavra de instrução muito longa - Very Long Instruction Word (VLIW) - As técnicas VLIW e superescalar
emitem, simultaneamente, várias instruções independentes (de um fluxo de instruções), que executam em
diferentes unidades de execução.
A VLIW depende de um compilador para determinar quais instruções emitir a qualquer ciclo de relógio,
enquanto um projeto superescalar requer que um processador tome essa decisão.
Computadores de fluxo múltiplo de instruções e fluxo único de dados - Multiple-Instruction-Stream,
Single-Data-Stream (MISD)
Esses tipos de computadores não são usados. Uma arquitetura MISD teria várias unidades de processamento que
agiriam sobre um fluxo único de dados. Cada unidade executaria uma instrução diferente nos dados e passaria o
resultado para a próxima unidade.
Computadores de fluxo único de instruções e fluxo múltiplo de dados - Single-instruction-Stream,
Multiple-Data-Stream (SIMD)
Esses computadores emitem instruções que agem sobre vários itens de dados. Um computador SIMD consiste
em uma ou mais unidades de processamento.
Um processador executa uma instrução SIMD processando-a em um bloco de dados (por exemplo, adicionando
esse bloco a todos os elementos de um arranjo). Se houver mais elementos de dados do que unidades de
processamento, essas unidades buscarão elementos de dados adicionais para o ciclo seguinte.
- -4
Isso pode melhorar o desempenho da arquitetura SIMD em relação às arquiteturas SISD, que exigiriam um laço
para realizar a mesma operação em um elemento de dados por vez. Um laço contém muitos testes condicionais e
requer que o processador SISD decodifique a mesma instrução várias vezes, além de exigir que o processador
SISD leia os dados uma palavra por vez.
Ao contrário, arquiteturas SIMD leem um bloco de dados por vez, reduzindo dispendiosas transferências da
memória para o registrador. Por isso, arquiteturas SIMD são mais efetivas em ambientes em que um sistema
aplica a mesma instrução a grandes conjuntos de dados.
Como exemplos de computadores que usam uma arquitetura SIMD, podemos citar os processadores vetoriais e
os processadores matriciais.
Processadores vetoriais – Processadores vetoriais contêm uma unidade de processamento que executa cada
instrução vetorial em um conjunto de dados, processando a mesma operação em cada elemento de dado. Esses
processadores dependem de pipelines profundose de altas velocidades de clock.
Pipelines profundos permitem que o processador realize trabalho em diversas instruções por vez, de modo que
muitos elementos de dados possam ser manipulados de uma só vez.
Processadores matriciais – Processadores matriciais (também denominados processadores maciçamente
paralelos) contêm diversas unidades de processamento que executam a mesma instrução em paralelo sobre
muitos elementos de dados.
Os processadores matriciais podem contem dezenas de milhares de elementos de processamento. Portanto,
esses processadores são mais eficientes quando manipulam grandes conjuntos de dados.
Computadores de fluxo múltiplo de instruções e fluxo múltiplo de dados - Multiple-instruction-Stream,
Multiple-Data-Stream (MIMD)
Trata-se de multiprocessadores, nos quais as unidades processadoras são completamente independentes e
operam sobre fluxos de instruções separados.
Entretanto, esses sistemas normalmente contêm hardware que permite que os processadores se sincronizem
uns com os outros quando necessário, como no caso de acessarem um dispositivo periférico compartilhado.
Essa classe foi subdividida em sistemas fortemente acoplados e fracamente acoplados.
2 Esquemas de interconexão de processadores
O esquema de interconexão de um sistema multiprocessador descreve de que modo os componentes do sistema
(como, por exemplo, um processador e módulos de memória) são conectados fisicamente.
- -5
O esquema de interconexão é uma questão fundamental para projetistas de multiprocessadores, porque afeta o
desempenho, a confiabilidade e o custo do sistema. Um sistema de interconexão consiste de e .nós enlaces
Em muitos sistemas, um único nó pode conter um ou mais processadores, seus caches associados, um módulo de
memória e uma chave. Em multiprocessadores de grande escala, às vezes, abstraímos o conceito de nó e
indicamos um grupo de nós como um único supernó.
Nós – os nós são compostos de componentes do sistema ou de chaves que fazem o roteamento das mensagens
entre componentes.
Enlaces – o enlace é uma conexão entre dois nós.
Uma técnica para medir a tolerância à falha de um esquema de interconexão é contar o número de enlaces de
comunicação que devem falhar antes que a rede não possa mais funcionar adequadamente. Isso pode ser
quantificado por meio da largura de (número mínimo de enlaces que precisam ser cortados parabisseção
dividir a rede em duas metades não conectadas).
Sistemas que têm larguras de bisseção maiores são mais tolerantes à falha do que aqueles que têm larguras de
bisseção menores, pois mais componentes têm de falhar antes que o sistema inteiro tenha problemas.
O desempenho de um esquema de interconexão depende, em grande parte, da latência de comunicação entre
nós, que pode ser medida de várias maneiras, como, por exemplo, por meio da latência média.
Outra medição de desempenho é o (distância mais curta entre os dois nós mais remotos dodiâmetro da rede
esquema de interconexão). Para determiná-lo, você deve considerar todos os pares de nós da rede e identificar o
caminho de comprimento mais curto para cada par - calculado pela soma do número de enlaces percorridos. Só
então, você identificará o maior desses caminhos.
Um diâmetro de rede pequeno indica baixa latência de comunicação e desempenho mais alto.
Por fim, arquitetos de sistemas tentam minimizar o custo de um esquema de interconexão, semelhante ao
número total de enlaces de uma rede.
3 Arquiteturas de acesso à memória
Veja, a seguir, uma figura que representa a classificação das arquiteturas segundo o acesso à memória:
- -6
Acesso uniforme à memória - UMA
Arquiteturas de multiprocessadores com acesso uniforme à memória - Uniform Memory Access multiprocessor
(UMA) - requerem que todos os processadores compartilhem a memória principal do sistema. Essa é uma
extensão direta da arquitetura de memória de um monoprocessador, mas com vários processadores e módulos
de memória.
O tempo de acesso à memória é uniforme para qualquer processador que acessar qualquer item de dado, exceto
quando esse estiver armazenado no cache de um processador ou quando houver contenção no barramento.
Acesso não uniforme à memória - NUMA
Arquiteturas de multiprocessador de acesso não uniforme à memória - NonUniform Memory Áccess (NUMA) -
mantêm uma memória global compartilhada, que pode ser acessada por todos os processadores.
A memória global é fracionada em módulos, e cada nó usa um desses módulos de memória como a memória local
do processador. Cada nó contém um processador, mas isso não é uma exigência.
Embora a implementação do esquema de interconexão possa variar, os processadores são conectados
diretamente a seus módulos de memória local e conectados indiretamente ao restante da memória global. Esse
arranjo proporciona acesso mais rápido à memória localdo que ao restante da memória global, porque o acesso
à memória global requer que se percorra a rede de interconexão.
Sem acesso à memória remota - NORMA
Multiprocessadores sem acesso à memória remota - No Remote Memory Access (NORMA) - são
multiprocessadores fracamente acoplados que não fornecem nenhuma memória global compartilhada. Cada nó
mantém sua própria memória local, e multiprocessadores NORMA implementam, frequentemente, uma memória
virtual compartilhada comum – Shared Virtual Memory (SVM).
NUMA com cache coerente (CC-NUMA)
- -7
NUMAs com cache coerente - Cache Coherent NUMAs (CC-NUMAs) - são multiprocessadores NUMA que im-põem
coerência de cache. Em uma arquitetura CC-NUMA típica, cada endereço de memória física está associado a um 
 (muitas vezes, o nó nativo é simplesmente determinado pelos bits de ordem mais alta do endereço),nó nativo
responsável por armazenar o item de dado com aquele endereço de memória principal.
Arquitetura de memória somente de cache - COMA
Em um sistema NUMA, cada nó mantém sua própria memória local, cujo acesso pode ser feito por processadores
de outros nós. Muitas vezes, o acesso à memória local é radicalmente mais rápido do que o acesso à memória
global (ou seja, o acesso a outro nó da memória local).
A latência de falta de (tempo requerido para recuperar dados que não estão nocache (cache-miss tatency)
cache) pode ser significativa quando o dado requisitado não estiver presente na memória local. Um modo de
reduzir a latência de falta de cache é reduzir o número de requisições de memória atendidas por nós remotos.
Os multiprocessadores de arquitetura de memória somente de cache - Cache Only Memory Architecture (COMA)
- usam uma ligeira variação da NUMA para abordar essa questão do posicionamento da memória.
4 Programação distribuída
A programação distribuída pode ser:
Sequencial – Composta por um conjunto de instruções que são executadas sequencialmente.
Concorrente – Permite execução concorrente de tarefas dentro de um mesmo processo ou entre processos que
compartilham recursos.
Paralela – Pressupõe a existência de mais de uma CPU, pois é destinada à execução simultânea de tarefas de um
mesmo processo.
5 Execução de uma tarefa
Existem três maneiras de executar uma tarefa de forma mais rápida, quais sejam:
Aumento da velocidade da CPU
Algumas limitações estão associadas à aquisição de CPUs com maior poder de processamento, como o aumento
de seu custo e a previsão para a velocidade dos processadores duplicarem a cada 18 meses (Lei de Moore), que
tem sido mantida até os dias atuais.
Mesmo com o aumento da frequência das CPUs, há a possibilidade de essas não atenderem à solução de alguns
problemas.
Otimização do Algoritmo
- -8
Geralmente, conseguimos aumentar o desempenho de um sistema com a melhora do algoritmo. Entretanto, esse
sistema pode ser comprometido quando não há uma solução determinística para o problema.
Colaboração
Quando pensamos em trabalhar com colaboração, devemos atentar para a diferença entre paralelismo e
concorrência. Veja:
• Paralelismo - Execução de uma tarefa em mais de uma CPU (os processadores colaboram para execução dessa
tarefa);
• Concorrência – Os processos disputam CPUs (uma ou mais).
6 Aspectos técnicos da programação distribuída
Veja alguns aspectos técnicos da programação distribuída:
Interação da aplicação e do usuário com o ambiente distribuído em níveis diferentes;
Suporte a plataformas heterogêneas através de uma camada de entre o e a aplicaçãosoftware kernel
(middleware);
Problemas como custo e carência de produtos de adequados;software
Programação paralela, utilizando bibliotecas de troca de mensagem (como, por exemplo, o MPI e o PVM) ou
bibliotecas baseadas em memória compartilhada (como, por exemplo, Pthreads).
A troca de mensagens (message passing) é o método de comunicação baseada no envio e recebimento de
mensagens através de uma rede de computadores, seguindo regras de protocolo de comunicação entre vários
processadores que possuam memória própria.
Os processos possuem acesso à memória local. As informações, por sua vez, são enviadas da memória local do
processo à memória local do processo remoto. Nesse modelo, o programador é responsável pela sincronização
de tarefas.
O que vem na próxima aula
Na próxima aula, você vai estudar:
•Introdução aos modelos de comunicação e a arquitetura cliente/servidor;
•O que é um modelo e quais são as características dos modelos arquitetural e fundamental;
•Fundamentos e características de cada componente do modelo cliente/servidor.
- -9
CONCLUSÃO
Nesta aula, você:
• Conheceu a classificação de multiprocessadores em relação à quantidade de fluxo de dados e instruções, 
e em relação ao acesso à memória;
• Verificou o desenvolvimento de aplicações para as arquiteturas MIMD.
•
•
- -1
ARQUITETURA DE SISTEMAS 
DISTRIBUÍDOS
INTRODUÇÃO AOS MODELOS DE 
COMUNICAÇÃO E A ARQUITETURA 
CLIENTE/SERVIDOR
- -2
Olá!
Objetivo desta Aula
Nesta aula, você irá:
1. Reconhecer um modelo de comunicação;
2. Identificar os modelos arquitetural e fundamental e suas características;
3. Descrever os fundamentos e as características de cada componente do modelo cliente/servidor.
Introdução
Nesta aula, você entenderá o que é um modelo de comunicação. Em seguida, você conhecerá as características
dos modelos arquitetural e fundamental e saberá como pode implementá-los.
Por fim, você conhecerá as principais características e os componentes da arquitetura cliente/servidor.
1 Introdução aos modelos de comunicação
Os sistemas desenvolvidos para a utilização em ambientes do mundo real devem ser projetados para funcionar
corretamente na maior variedade possível de circunstâncias e frente às dificuldades e ameaças.
Os modelos de sistemas distribuídos podem ser classificados como:
Arquiteturais
Aqueles que definem a forma como os componentes dos sistemas interagem.
Fundamentais
Aqueles que definem o comportamento e as propriedades dos componentes.
2 Modelos de Arquitetura de Sistemas Distribuídos
A arquitetura ou organização de um sistema representa sua estrutura em termos de componentes especificados
separadamente. Essa estrutura deve atender às demandas atuais e futuras impostas sobre ela.
A maior preocupação é tornar o sistema:
· Confiável
· Gerencial
· Adaptável
· Rentável
- -3
O modelo de arquitetura de um sistema distribuído primeiramente simplifica e abstrai as funções dos
componentes individuais desse sistema.
3 Características dos modelos de arquitetura
Os modelos de arquitetura de um sistema distribuído apresentam estrutura em camadas de software de
diferentes níveis de abstração, quais sejam: (denominação frequente para as camadas de plataforma hardware
e de nível mais baixo) e (camada de que tem como objetivo mascarar asoftware middleware software
heterogeneidade e fornecer um modelo de programação conveniente para os desenvolvedores de aplicações
distribuídas).
Para definir o padrão de distribuição, devemos considerar o posicionamento e a carga de trabalho de cada
componente. Além disso, as tarefas devem ser alinhadas de forma a atender aos requisitos de desempenho e
confiabilidade.
Os modelos de arquitetura classificam-se como:
• Cliente/servidor;
• Peer-to-peer;
• De (utilização de serviços oferecidos por diversos servidores). variações
Nesta aula, estudaremos mais especificamente o modelo cliente/servidor.
Requisitos de projeto dos modelos de arquitetura
Veja, a seguir, quais são os requisitos de projeto dos modelos de arquitetura!
Desempenho
- -4
Os desafios decorrentes da distribuição de recursos excedem a necessidade de gerenciamento das atualizações
concorrentes.
Os principais problemas associados à limitação finita da capacidade de recursos de processamento e de
comunicação são: reatividade, throughput e balanceamento de carga.
Qualidade de serviço
As principais propriedades não funcionais dos sistemas que afetam a qualidade dos serviços fornecidosaos
clientes são:
• Confiabilidade;
· Segurança;
· Desempenho;
· Adaptabilidade;
· Disponibilidade.
Replicação
Os problemas de desempenho podem ser (em parte) solucionados através do uso de replicação de dados.
Dependabilidade
A dependabilidade pode ser definida como correção, segurança e confiabilidade.
Trata-se de um requisito necessário à maior parte dos dominios da aplicação, o que significa que é crucial não
apenas nas atividades de comando e controle, mas também em muitas aplicações comerciais.
Como um par de programas pode-se encontrar em uma rede tão larga quanto a internet?
Modelo cliente/servidor
Como a maioria das redes, a internet utiliza um mecanismo simples: um aplicativo é ligado primeiro e espera que
o outro aplicativo faça contato. O segundo aplicativo, por sua vez, precisa conhecer a localização na qual o
primeiro aplicativo espera contato.
O acordo no qual um aplicativo de rede espera pelo contato de outro é conhecido como paradigma cliente-
servidor ou arquitetura cliente-servidor.
O programa que espera pelo contato é chamado de servidor, e o que inicia o contato é conhecido co-mo cliente.
Para iniciar contato, o cliente precisa saber onde o servidor está rodando e especificar a localização para o
software de rede.
Mas, como um cliente especifica a localização de um servidor?
Por exemplo, na Internet, a localização é dada por um par de identificadores. Conceitualmente, o par consiste
em: (o termo computador identifica a máquina na qual o servidor está rodando) e (ocomputador aplicativo 
aplicativo identifica um programa aplicativo em particular naquele computador).
- -5
4 Modelos de Arquitetura de Sistemas Distribuídos
Geralmente, os aplicativos desenvolvidos para a internet seguem o mesmo paradigma básico quando se
comunicam. Dois aplicativos estabelecem comunicação, trocam mensagens e, só então, finalizam a comunicação.
Sendo assim, para fins de comunicação, os aplicativos seguem os seguintes passos:
O aplicativo servidor é ativado e aguarda o contato de um cliente.
O cliente especifica a localização do servidor e solicita o estabelecimento de uma conexão.
Após o estabelecimento da conexão, cliente e servidor estão aptos a trocar mensagens.
Com a conclusão da transmissão, cliente e servidor enviam um fim de arquivo (end-of-file), e a conexão é
encerrada.
Application Program Interface (API)
vários desenvolvedores utilizam a expressão Application Program Interface (API) para descrever o conjunto de
aplicativos disponiveis a um programador.
A API especifica os parâmetros para cada operação bem como suas semânticas.
Application Program Interface (API)
Como exemplo, veja a tabela a seguir que lista as sete funções de uma API simples para a comunicação em uma
rede:
- -6
Um servidor inicia a aplicação chamando a função await contact para esperar pelo contato de um cliente. O
cliente, por sua vez, inicia a aplicação chamando a função make. contact para estabelecer contato.
Uma vez que o cliente te-nha contatado o servidor, eles podem trocar mensagens com send e recv. Os dois
aplicativos devem ser programados para saber se devem enviar ou receber se ambos tentarem receber sem
enviar, ficarão bloqueados para sempre.
Após o término do envio de dados, um aplicativo chama a função send eof para enviar a condição de fim de
arquivo (end-of-file). Do outro lado, a função recv retorna um valor zero para indicar que o fim de arquivo foi
alcançado.
Por exemplo, se o cliente executa a função send eof, o servidor vai encontrar um valor zero de retorno para sua
chamada à função recv. Uma vez que ambos os lados tenham invocado a função send eof, a comunicação é
encerrada.
Veja, a seguir, uma ilustração das chamadas API usadas para uma interação trivial, na qual o cliente envia um
pedido e recebe uma resposta:
- -7
5 Características dos modelos de arquitetura
Para manter a API exemplo, independente de algum sistema operacional e software de rede em particular, são
definidos três tipos de dados. Esses tipos são utilizados através de códigos.
A tabela a seguir lista os nomes e os significados de cada (em um dado computador, esses tipostipo de dados
são definidos como inteiros e de tamanho específico) usados na API exemplo:
6 O paradigma cliente-servidor
O paradigma de organizar uma aplicação que espera passivamente por outro aplicati-vo para iniciar a
comunicação está tão presente na computação distribuída que recebeu um nome: pa-radigma de interação
cliente-servidor.
Os termos cliente e servidor referem- se aos dois aplicativos envolvidos em uma comunicação. O aplicativo que
começa ativamente o contato é chamado de cliente, enquanto o aplicativo que espera passivamente por contato é
denominado servidor.
Veja, a seguir, uma figura que representa o paradigma cliente-servidor:
- -8
Fonte: Figura disponível no link. Acesso em: 29 fev. 2012. http://arqsystemsarmtecseduc.blogspot.com/2011/08
/aplicacao-cliente-servidor.html
7 Características de clientes e servidores
Embora existam variações, em geral, a interação cliente-servidor tem as mesmas características.
O software cliente é uma aplicação qualquer arbitrária que se torna um cliente temporariamente, quando o
acesso remoto for necessário, mas pode executar, também, outro processamento local.
Esse software é diretamente invocado por um usuário e executa somente para uma sessão. Essa execução ocorre
localmente no computador pessoal de um usuário.
O software cliente inicia ativamente o contato com um servidor e, quando necessário, pode acessar múltiplos
serviços, mas contata, de forma ativa, um servidor remo-to de cada vez. O referido software não exige hardware
especial ou sistema operacional sofisticado.
Em contraste, o software servidor é um programa privilegiado, de propósito especial, dedicado a fornecer um
serviço, mas pode tra-tar, simultaneamente, de múltiplos clientes remotos.
Esse programa é automaticamente invocado quando um sistema inicializa (boot) e continua a executar por mui-
tas sessões.
O software servidor executa em um computador compartilhado, e não em um computador pessoal de um
usuário, esperando, passivamente, pelo contato de clientes remotos arbitrários. O referido programa aceita o
contato de clientes arbitrários, mas oferece um único serviço.
Diferentemente do software cliente, o servidor exige hardware poderoso e um sistema operacional
sofisticado.
- -9
8 Requisições, Respostas e Direção do Fluxo de Dados
A comunicação entre cliente e servidor pode ser realizada em uma ou ambas as direções.
Um cliente envia uma requisição para um servidor; este, por sua vez, devolve uma resposta para o cliente. Em
alguns casos, um cliente envia uma série de requisições, e o servidor emite uma série de respostas.
Como exemplo, podemos citar um cliente de uma base de dados que poderia permitir a um usuário a consulta de
mais de um item por vez.
Em outros casos, o servidor fornece saída continua sem qualquer requisição assim que o cliente contata o
servidor, este começa a enviar-lhe dados.
Como exemplo, podemos citar um servidor local de dados climáticos, que poderia enviar, com frequência,
relatórios sobre os valores de tempo, com temperatura e pressão barométrica atualizadas continuamente.
Veja, a seguir, uma figura que representa o processo de comunicação realizado entre cliente e servidor:
9 Protocolos de transporte e interação cliente-servidor
Como a maioria dos programas aplicativos, cliente e servidor usam um protocolo de transporte para se
comunicar.
Como exemplo, podemos citar um cliente e um servidor que usam a pilha do TCP/IP. Um aplicativo cliente ou
servidor interage diretamente com um protocolo da camada de transporte para estabelecer uma comunicação e
enviar ou receber informações.
O protocolo de transporte usa, então, os protocolos das camadas mais baixas para enviar e receber mensagens
individuais. Desse modo, um computador necessita de uma pilha completa de protocolos para executar um
cliente ou um servidor.- -10
10 Múltiplos serviços em um computador
Um sistema suficientemente poderoso pode gerenciar a execução de múltiplos clientes e servidores ao mesmo
tempo.
Entretanto, para isso, algumas características são necessárias, quais sejam:
Primeiro
O computador deve ter recursos de suficientes;hardware
Segundo
O computador deve ter um sistema operacional que permita que múltiplos programas aplicativos executem de
modo concorrente (como, por exemplo, os sistemas UNIX, Linux ou Windows).
11 Identificando um serviço particular
Os protocolos de transporte fornecem um mecanismo que permite a um cliente especificar, de forma não
ambígua, qual o serviço desejado. Esse mecanismo designa cada serviço com um identificador único, e exige que
o servidor e o cliente usem esse identificador.
Múltiplas cópias de um servidor para um único serviço
Quando um sistema permite que múltiplos aplicativos estejam ativos ao mesmo tempo, podemos afirmar que
esse sistema suporta concorrência.
Portanto, um programa que tem mais de um thread de controle é chamado de programa concorrente.
A concorrência é fundamental para o modelo cliente-servidor de interação, porque um servidor concorrente
oferece serviço para múltiplos clientes ao mesmo tempo, sem exigir que cada cliente espere os clientes
anteriores terminarem a operação.
O que vem na próxima aula
Na próxima aula, você vai estudar:
· Comunicação a partir da utilização de sockets e Chamada a Procedimento Remoto (RPC);
· Como uma aplicação é desenvolvida;
· Como funciona a programação com socket;
· O funcionamento e a forma de geração de uma Chamada a Procedimento Remoto (RPC).
- -11
CONCLUSÃO
Nesta aula, você:
• Conheceu as características dos modelos arquitetural e fundamental;
• Conheceu as principais características e os componentes da arquitetura cliente/servidor.
•
•
- -1
ARQUITETURA DE SISTEMAS 
DISTRIBUÍDOS
COMUNICAÇÃO USANDO SOCKETS E 
CHAMADA A PROCEDIMENTO REMOTO 
(RPC)
- -2
Olá!
Objetivo desta Aula
Ao final desta aula, o aluno será capaz de:
1- Reconhecer como uma aplicação é desenvolvida;
2- Identificar como funciona a programação com socket;
3- Estabelecer o funcionamento e a forma de geração de uma Chamada a Procedimento Remoto (RPC).
Introdução
Nesta aula, você entenderá como funciona a programação com sockets e conhecerá o funcionamento de uma
Chamada a Procedimento Remoto (RPC).
1 Comunicação utilizando sockets
A comunicação realizada a partir da utilização de sockets é um mecanismo de comunicação entre processos –
Inter Process Comunication (IPC) – através da rede, que pode ser utilizado em processos na mesma máquina.
Interface de Programa Aplicativo – Application Program Interface (API)
As aplicações cliente e servidor utilizam protocolos de transporte para se comunicar. Para tal, essas aplicações
devem especificar detalhes. Por exemplo, o remetente deve especificar os dados a serem enviados, e o receptor,
onde esses dados recebidos devem
ser colocados.
Como uma API define um conjunto de operações que um aplicativo pode executar quando interage com o
software de protocolo, essa interface determina a funcionalidade que está disponível.
2 A API de sockets
Os protocolos de comunicação geralmente não especificam a API que as aplicações devem utilizar. Ao contrário
disso, os protocolos especificam quais são as operações que devem ser fornecidas e permitem que cada sistema
operacional defina a API específica que uma aplicação deve usar para executar suas operações.
A API de sockets (ou somente sockets) originou-se como parte do sistema operacional
BSD UNIX (University of California - Berkeley). Tanto neste quanto nos sistemas que dele derivaram, as funções
de sockets são parte do próprio sistema operacional.
- -3
Para um programador, seu programa chama procedimentos de sockets, que são, então, providos por
procedimentos do sistema operacional ou por rotinas de biblioteca.
Desse modo, um aplicativo que usa sockets pode ser copiado para um novo computador, compilado, carregado
junto com a biblioteca de sockets do computador e, então, executado.
3 Comunicação de socket e entrada e saída do UNIX
Originalmente, os sockets foram desenvolvidos como parte do sistema operacional UNIX e utilizam diversos
conceitos que são implementados em outras partes desse sistema.
Um programa vê os sockets como um mecanismo de entrada e saída de dados, pois eles seguem o paradigma
open-read-write-close, usado pela maioria das operações de entrada e saída.
Sendo assim, um socket deve ser criado, usado e, só então, destruído. Por isso, quando uma aplicação se
comunica através de uma rotina similar ao socket, forma um caminho para a aplicação transferir dados a um
arquivo. Dessa forma, a compreensão dos sockets exige o entendimento das características de entrada e saída do
UNIX.
Por exemplo, um aplicativo deve primeiro chamar open para preparar um arquivo para acesso. O aplicativo
chama, então, ou para recuperar ou armazenar dados no arquivo. Finalmente, o aplicativo chama read write
 para especificar que terminou de usar o arquivo.close
A figura a seguir representa uma conexão por sockets:
- -4
4 Sockets e descritores
A comunicação através de sockets utiliza também a abordagem de descritor. Quando a aplicação solicitar ao
sistema operacional para criar um socket, o aplicativo passará o descritor como um argumento para a chamada
de procedimentos na (não é necessário que a aplicação especifique detalhes sobre otransferência de dados
destino para cada transferência de dados) através da rede.
O sistema operacional fornece um único conjunto de descritores para arquivos, dispositivos, comunicação entre
processos e comunicação de rede. Como resultado, procedimentos como são bem gerais - umaread e write
aplicação pode usar o mesmo procedimento para enviar dados para outro programa ou um arquivo através de
uma rede.
Em terminologia corrente, o descritor representa um objeto e o procedimento write, o método aplicado àquele
objeto.
Parâmetros e a API de sockets
A programação por difere da entrada e saída convencional de dados porque um aplicativo devesocket
especificar diversos detalhes para utilizar um socket.
Por exemplo, um aplicativo deve escolher um protocolo de transporte em particular, fornecer o endereço de
protocolo de uma máquina remota e especificar se o aplicativo é cliente ou servidor.
Para acomodar todos os detalhes, cada socket tem diversos parâmetros e opções - um aplicativo pode fornecer
valores para cada um deles.
Para evitar que exista uma única função de socket com argumentos separados para cada opção, os
desenvolvedores das APIs de sockets definiram diversas funções. Essencialmente, um aplicativo cria um socket
e, então, invoca funções para especificar, em detalhes, como ele será usado.
A vantagem da abordagem de sockets respalda-se no fato de que a maioria das funções tem três ou menos
argumentos.
A desvantagem, por sua vez, indica que um programador deve lembrar-se de chamar múltiplas funções sockets.
Procedimentos que implementam a API de sockets
Conheça, agora, os procedimentos que implementam a API de sockets:
Procedimento socket
O procedimento socket cria um socket e retorna um descritor inteiro.
Conheça o procedimento socket:
sockfd = socket (protofamity, type, protocol);
São argumentos desse procedimento:
- -5
protofamity - especifica a familia de protocolos a ser usada com o socket;
type - especifica o que o socket usará;tipo de comunicação
protocol - especifica um protocolo de transporte particular usado com o socket.
Tipo de comunicação – Os tipos mais comuns são (transferência de stream orientada à conexão)sock_stream
e (transferência sem conexão orientada a mensagens).sock_dgram
Procedimento bind
Uma vez que tenha um socket, você deve associá-lo a uma porta em sua máquina.
Um servidor usa o procedimento bind para prover um número de porta de protocolo em que o servidor esperará
por contato.
Conheça o procedimento bind:

Continue navegando