como consistindo de multiplos processadores autonomos, que nao compartilham memoria primaria, mas cooperam entre si, atraves de envio de mensagens sobre uma rede de comunicacao. Cada processador em um sistema desse tipo executa seu(s) proprio(s) fluxo(s) de instrucao e utiliza sua propria area de dados locais, ambos armazenados em sua memoria local particular. Para programas distribuidos sera adotada a definicao proposta em Andrews (1991), que define um programa distribuido como sendo um programa concorrente (ou paralelo) no qual os processos componentes comunicam-se atraves de passagens de mensagens. Muito embora o nome leve o adjetivo "distribuido", decorrente do fato de que esses programas tipicamente sao executados em ambientes distribuidos, um programa desse tipo, no entanto, tambem pode ser executado em um sistema de multiprocessadores com memoria compartilhada, ou ate mesmo em um monoprocessador.Uma complementacao da caracterizacao de sistemas distribuidos esta fundamentada na comunicacao. Em funcao do tipo de comunicacao utilizada entre os processadores de um sistema distribuido, foram criadas duas categorias de sistemas. Uma arquitetura distribuida e dita ser fortemente acoplada se a comunicacao e rapida e confiavel e, tambem, se os seus processadores se encontram fisicamente proximos uns dos outros. Como exemplos podem ser citados as grelhas e os hipercubos, etc., que utilizam uma rede de comunicacao, consistindo de ligacoes ponto a ponto, confiavel e rapida, a qual conecta cada processador a algum subconjunto de outros processadores. Ja uma arquitetura distribuida e dita ser fracamente acoplada se a comunicacao entre os seus processadores, fisicamente dispersos, apresente baixa velocidade e pouca confiabilidade. Exemplos de sistemas dessa classe sao as redes de longa distancia ou locais de estacoes de trabalho, que permitem comunicacao direta entre dois processadores quaisquer, porem com baixa velocidade e nao totalmente confiavel. Ocasionalmente uma mensagem pode ser danificada, chegar fora de ordem ou, simplesmente, nao alcancar o seu destino. Nesses casos, devem ser utilizados protocolos para implementar comunicacoes mais seguras.Geralmente as aplicacoes que utilizam sistemas distribuidos fortemente acoplados, apresentam altas taxas de comunicacao entre os seus processos, pois a assiduidade de intercomunicacao entre as unidades de paralelismo e grande. Essas aplicacoes sao ditas possuirem granularidades finas. Por outro lado, as aplicacoes com baixa granularidade, formadas por processos com baixo nivel de interacao, podem ser suportadas por sistemas distribuidos fracamente acoplados.4.3 Arquiteturas de MulticomputadoresUma vez que se pretende utilizar um sistema distribuido do tipo multicomputador para a implementacao do sistema proposto nesse trabalho, sera entao abordada nesta secao, com mais detalhes, a categoria dos multicomputadores, ver Duncan (1990) e Reed (1987).Como ja visto anteriormente, em um multicomputador a interacao entre os seus nos (processadores autonomos com memorias privadas, de onde sao obtidas suas instrucoes e dados) e alcancada, unica e exclusivamente, atraves do envio de mensagens que trafegam pelo sistema por meio de uma rede de interconexao de alta velocidade. Essas redes, que representam o principal elemento determinante do desempenho de um sistema multicomputador, podem ser divididas em duas classes principais: as redes de interconexao de barramento e as redes de interconexao bipontuais.4.3.1 Redes de Interconexao de BarramentoAs redes de barramento (Figura 4.1) que compreendem o meio de conexao mais simples