Buscar

ARQUITETURA DE SISTEMAS DISTRIBUIDOS (45)

Prévia do material em texto

1 
PROCESSAMENTO DISTRIBUÍDO REVISITADO 
 
 
Adenauer Corrêa Yamim 
Prof. da Escola de Informática da UCPel 
 
 
O termo “Sistemas Distribuídos” tem sido utilizado para definir uma grande 
diversidade de equipamentos. Desde sistemas interligados através de redes de longa distância, 
a exemplo da Internet, passando pelos interligados por redes locais de alta velocidade, e 
chegando aos sistemas paralelos com memória distribuída. Todos tem em comum o fato de 
disporem de múltiplas unidades de processamento, cada qual responsável por algumas 
atividades, as quais cooperam entre si na solução de problemas computacionais. 
As unidades de processamento são logicamente integradas através de recursos de 
software (sistema operacional distribuído, ambiente de execução distribuído, etc.), porém 
podem estar fisicamente interligadas de diferentes maneiras (vide figuras 1 e 3). 
Um sistema paralelo pode ser visto como um tipo de sistema distribuído no qual 
as unidades de processamento estão fisicamente próximas, podem se comunicar em 
velocidades elevadas e via de regra são administradas por um único sistema operacional. Em 
um sistema paralelo, as unidades de processamento aumentam a velocidade de execução de 
um único programa processando o mesmo em conjunto. Elevado desempenho no 
processamento é um importante objetivo tanto para sistemas paralelos como para os 
distribuídos, porém sistemas distribuídos costumam ter também outros focos, tais como; 
suporte a tolerância a falhas, compartilhamento de recursos e possibilidade de crescimento 
gradual. 
Os sistemas distribuídos podem ser classificados com base em três fatores: 
• O grau de acoplamento indica quanto fortemente as unidades de 
processamento estão interligadas. Este fator é determinante no 
desempenho das comunicações; 
• A estrutura de interconexão determina a topologia da rede: estrela, 
árvore, anel, etc.; 
• A interdependência entre os componentes determina o nível de 
dependência operacional entre as unidades de processamento. 
A topologia de um sistema distribuído pode mudar enquanto o sistema esta 
operando, em função de falhas ou adições nos canais de comunicação, ou mesmo pela adição 
ou remoção de unidades de processamento. Isto faz com que surjam atrasos imprevisíveis nas 
comunicações e no processamento, como exemplo típico temos a Internet. Por sua vez, em 
um sistema paralelo o aspecto disponibilidade 
de comunicações e unidades de processamento é 
bem mais estável. 
Os sistemas paralelos podem 
utilizar tanto memória compartilhada como 
distribuída. Uma máquina de memória 
compartilhada (Encore Multimax, Sequent 
Symmetry ou a Alliant FX/8) tipicamente 
coordena a comunicação entre processadores 
(unidades de processamento) através de uma 
memória global, a qual todos compartilham 
(vide figura 2). Uma máquina de memória 
distribuida, por sua vez, combina um 
processador e uma memória local em cada nodo da rede de interconexão; a comunicação 
ocorre somente através da troca de mensagens entre os processadores (vide figura 3). 
É possível ainda classificar as arquiteturas paralelas em função do fluxo de 
instruções e dados. Duas possibilidades são disponíveis comercialmente: Múltiplo fluxo de 
Rede de Comunicações 
Unidades de Proces-
samento Autônomas 
Figura 1 – Estrutura Básica de Um Sistema Distribuído 
2 
Instruções, Múltiplo fluxo de Dados (MIMD) e fluxo Simples de Instruções e Múltiplo fluxo 
de Dados (SIMD). 
Em sistemas MIMD (Intel 
Paragon XP/S e Intel iPSC/2) múltiplos 
processadores podem simultaneamente 
executar diferentes instruções sobre 
diferentes dados. Equipamentos MIMD são 
formados por computadores assíncronos 
independentes cujos processos que 
cooperam são sincronizados através do 
acesso a dados em uma memória 
compartilhada (ou pela troca de mensagens 
em equipamentos de memória distribuída). 
Sistemas MIMD são mais voltados para 
exploração de paralelismo com tarefas de 
granulosidade elevada (nível de 
subprogramas e rotinas). 
Equipamentos SIMD por sua 
vez são síncronos, no qual os processadores 
executam a mesma instrução, no mesmo 
momento, podendo alguns, em 
determinado instante, permancerem 
inoperantes. Em sistemas SIMD (Thinking 
Machines CM-2 and MasPar’s MP1 e 
MP2) existe uma unidade de controle 
central que distribui uma única instrução a 
todos os processadores, os quais a executam ao mesmo tempo sobre os dados disponíveis em 
sua memória local. Estes sistemas são apropriados para paralelismo de baixa granulosidade 
(nível de instrução). 
 
Frentes de Atuação em Processamento Distribuído e Paralelo 
 
As frentes de trabalho e pesquisa em processamento paralelo e distribuído se 
estendem por diversas áreas teóricas e práticas. As selecionadas abaixo são apenas algumas 
das atualmente existentes: 
 
Avaliação de desempenho: sistemas distribuídos e paralelos necessitam de 
outros indicadores de desempenho, além dos usuais MIPS (Milhões de Instruções Por 
Segundo) e MFLOPS (Milhões de Instruções de Ponto Flutuante por Segundo). 
Mesmo uma rápida análise em um indicador bastante utilizado em 
processamento paralelo, o Speedup, já indica diversas questões em aberto: qual a influência 
da dimensão do problema no Speedup? Como o desempenho cresce a medida que são 
adicionados processadores? Responder perguntas semelhantes a estas através de simulações e 
modelos para as diferentes arquiteturas existentes, é uma frente de trabalho e pesquisa 
bastante atual. 
 
Escalonamento de tarefas. A programação paralela e distribuída enfrenta um 
problema que não existe na programação seqüencial: as partes concorrentes devem ser 
organizadas no tempo e no espaço (processadores, canais de comunicação) para otimizar o 
desempenho. Este problema de escalonamento é bastante complexo (NP-completo) e conduz 
a um elevado número de heurísticas, cada qual tendo melhor desempenho em função das 
circunstâncias (arquitetura do equipamento e algoritmo empregados). Uma vez definidas as 
heurísticas, muito trabalho ainda se faz necessário para fazer sua codificação, avaliação e 
eficiente aplicação em sistemas paralelos e distribuídos reais. 
 
Memória Global Compartilhada 
Processador 
Processador Processador 
Processador 
Processador Processador 
Cache 
 
P 
Cache 
 
P 
Cache 
 
P 
Cache 
 
P 
 M0 M2 M1 M0 
 M1 
P1 P0 
 S 
 S 
 S 
 S 
(a) 
(b) (c) 
Figura 2 – Arquitetura Paralela de Memória Compartilhada 
 (a) Modelo Geral; (b) Interconexão por barramento 
 (c) Interconexão por Crossbar 2x2 
3 
Novos métodos de programação. Os estilos tradicionais de programação e de 
pensar a respeito dos problemas, não chegam a bons resultados quando a aplicação vai ser 
executada em uma coleção de processadores que cooperam para chegar a um resultado final. 
Pesquisadores estão investigando programação com memória compartilhada real ou virtual 
(DSM-Distributed Shared Memory), programação com memória distribuída para 
equipamentos MIMD, programação para explorar paralelismo nos dados, programação com 
objetos distribuídos, paralelismo na programação em lógica e funcional, e programação 
paralela utilizando espaço de tuplas. 
 
Ferramentas CASE. O 
desenvolvimento de software para qualquer sistema 
computacional é uma atividade complexa e que 
consome tempo, porém ganha bastante 
complexidade quando se defronta com os detalhes do 
paralelismo, tais como: o não-determinismo, a 
sincronização, o escalonamento e o desempenho das 
tarefas. Uma grande diversidade de ferramentas 
CASE se fazem necessárias para ajudar os 
programadores na concepção, codificação, e na 
depuração de aplicações paralelas e distribuídas. 
 
Otimização da geração de código 
distribuído. Existem duas principais propostas na 
elaboração de códigodistribuído. A proposta de 
exploração do paralelismo implícito, procura manter 
a sintaxe da codificação seqüencial. Nesta primeira 
proposta o compilador traduz a aplicação escrita em 
linguagem de alto nível seqüencial para sua forma 
paralela. Fica deste modo oculto do programador o 
acréscimo de complexidade introduzido pelo 
paralelismo, ganhando porém grande complexidade 
a tarefa de elaboração do compilador paralelizador. 
Na segunda proposta, exploração da 
distribuição/paralelismo explícito, as linguagens 
existentes são ampliadas com construtores 
específicos para o paralelismo, ou são criadas novas 
que disponibilizem os mesmos. Nesta proposta o 
programador é responsável por especificar o que 
pode/deve ser executado em paralelo, exigindo que 
além de dominar o algoritmo o programador conheça 
as características operacionais da arquitetura paralela. Nesta segunda proposta o projeto do 
compilador paralelizador tem sua complexidade reduzida, porém ainda engloba aspectos mais 
sofisticados que o projeto de compiladores para códigos seqüênciais. 
 
Análise de complexidade de algoritmos. O movimento de dados entre 
processos que cooperam e as decorrentes sincronizações que surgem, são aspectos que 
distinguem fortemente a programação seqüencial da paralela/distribuída. Somente estes 
aspectos seriam suficientes para tornar sem sentido o uso dos modelos já existentes para 
determinação da complexidade de programas seqüênciais. A busca por formalismos gerais 
para medir e otimizar a complexidade de algoritmos paralelos se constitui um importante 
problema de pesquisa. 
 
Rede de Interconexão
Processador +
Memória Local
Processador +
Memória Local
Processador +
Memória Local
Processador +
Memória Local
Processador +
Memória Local
Processador +
Memória Local
P
P PP P
PP
P PPP
PPPP
PPP9
PPPP
P
P
P
P
P
P
P
P
P
(a)
(b)
(c)
(d)
Figura 3 – Arquitetura Paralela de Memória Distribuída
(a) Modelo Geral (b) Grade (c) Árvore (d) Estrela
4 
Sistemas Operacionais. Sistemas operacionais verdadeiramente distribuídos 
estão ainda na sua infância; seu projeto e construção ainda permanecem problemas abertos. 
Não existe ainda consenso significativo nas soluções de problemas de áreas críticas: 
microkernels, sistemas operacionais orientados a objetos, sistemas operacionais com suporte a 
tolerância a falhas, e sistemas operacionais com suporte a migração de processos e balanço de 
carga, etc. 
 
Paralelismo heterogêneo. Na proposta de exploração de paralelismo 
heterogêneo, são utilizados hardwares (processadores) fortemente sintonizados com as 
necessidades computacionais específicas das diferentes porções de código que constituem o 
programa. O paralelismo heterogêneo envolve pesquisa em sistemas operacionais, 
compiladores e metodologia de programação. 
 
Confiabilidade. Sistemas paralelos e distribuídos em decorrência de sua inerente 
redundância de recursos (processadores, memória, canais de comunicação), são oportunos 
para a implementação de técnicas de tolerância a falhas, técnicas estas que viabilizam 
detecção, confinamento, mascaramento e diagnóstico de falhas, bem como auto-
reconfiguração e recuperação de erros. 
 
Sistemas de Tempo Real. Sistemas paralelos e distribuídos estão entre os 
melhores candidatos a sistemas de tempo real de elevado desempenho. Sistemas de tempo real 
são necessários no controle sistemas cujas condições mudam muito rapidamente. Pesquisas 
nesta área envolvem especificação, implementação, validação e estudo de casos. 
 
Portabilidade de código. A forma rápida como avança a tecnologia utilizada em 
processamento paralelo e distribuído, faz da portabilidade de código uma questão 
significativa. O objetivo central das pesquisas nesta área é transportar os programas existentes 
para novas plataformas sem que se tenha perda de desempenho ou se façam necessárias 
muitas alterações a nível de código. 
 
Bancos de dados distribuídos. A expectativa para os próximos anos é que os 
sistemas paralelos e distribuídos venham substituir sistemas centralizados em ambientes de 
informação comerciais. A proposta central é aproveitar o desempenho e a possiblidade de 
crescimento gradual que os sistemas paralelos e distribuídos oferecem. Nesta área existem 
frentes de pesquisa envolvendo segurança, bancos de dados distribuídos, protocolos de 
comunicação, etc.

Continue navegando