Baixe o app para aproveitar ainda mais
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.
Compartilhar