programas. Alguns sistemas operacionais comecaram, entao, a ser projetados como uma colecao de processos, em um ambiente em que as tarefas de usuarios conviveriam harmoniosamente com os processos gerentes de dispositivos e os demais processos do sistema operacional Silberschatz e Peterson (1994) e Tanenbaum (1992). Em sistemas dessa natureza, onde um unico processador e capaz de processar mais de um programa simultaneamente, conhecidos como sistemas multiprogramados, os processos sao executados em fatias de tempo, que o processador a eles dedica de forma intercalada.Assim, o despertar da ideia de se construir sistemas computacionais como colecao de processos cooperantes e a evolucao tecnologica fortemente verificada na area da microeletronica foram os principais fatores responsaveis pelo surgimento de uma grande variedade de arquiteturas compostas por multiplos processadores, conhecidos por sistemas multiprocessados.4.2 Sistemas Computacionais DistribuidosNao ha um consenso absoluto na literatura com relacao a definicao de sistema computacional distribuido havendo, no entanto, dentre as muitas definicoes encontradas, pelo menos um ponto em comum: todas requerem a presenca de multiplos processadores. A consideravel controversia reinante pode, portanto, estar relacionada com o grande numero de diferentes modelos arquitetonicos de sistemas, com multiplos processadores propostos e construidos, abrangendo um grande leque de opcoes em termos de objetivo do projeto a ser executado, do seu tamanho e desempenho. Em um sistema multiprocessado com memoria compartilhada multiplos processadores compartilham uma memoria comum. Ja em um sistema multicomputador, varios processadores, com memorias privadas, conhecidos como nos, sao conectados atraves de um hardware especializado que envia mensagens entre eles, em alta velocidade. Em um sistema de rede de computadores, processadores sao conectados atraves de uma rede de comunicacao que pode ser local ou de longa distancia. Muitos sistemas de comunicacoes hibridos tambem podem ser encontrados, como, por exemplo, uma rede de workstations multiprogramadas. Deve-se, tambem, incluir nesse conjunto de sistemas, os computadores construidos especialmente para aplicacoes numericas de computacao intensiva: os computadores vetorizados, que utilizam varios processadores em aplicacoes simultaneas de operacoes aritmeticas identicas, sobre diferentes dados. Outros sistemas desse tipo sao os chamados dataflow e os reduction machines, que aplicam simultaneamente diferentes operacoes a diferentes dados.E importante salientar que os sistemas computacionais distribuidos existentes nao diferem somente nas suas concepcoes arquitetonicas, eles tambem divergem, consideravelmente, nas formas como sao programados. Alguns fazem uso de linguagens de programacao convencionais, suplementando-as, na maioria das vezes, com rotinas de bibliotecas, que garantam a geracao e a coordenacao de processos. Outros sistemas ja sao programados em linguagens completamente novas, especificamente projetadas para aplicacoes distribuidas.Muitos estudiosos do assunto advogam que todas as configuracoes aqui mencionadas podem ser enquadradas na categoria de sistemas distribuidos, outros incluem somente os computadores geograficamente distribuidos, conectados por uma rede de longa distancia.Nao obstante o merito dessa questao fuja da alcada desse trabalho, e fundamental que sejam estabelecidas definicoes para sistema e, principalmente, programa distribuido, visto que esses conceitos serao utilizados no capitulo quatro, e o projeto e implementacao de um programa desse tipo, sao objetivos finais neste trabalho. Para tanto sera adotada a definicao de sistemas distribuidos como a encontrada em Bal et al. (1989), que considera um sistema de computacao distribuido