Introdução Os Sistemas Distribuídos têm, por seu maior objetivo, melhorar a comunicação entre os computadores, ou melhor, propiciar a integração destes num sentido amplo que pode envolver facilidade de mudanças futuras, rapidez nas trocas de informações, confiabilidade na execução dos processos. Porém, no desenvolvimento de um sistema distribuído encontramos um pequeno problema: software. Devido ao elevado tamanho e complexidade de sistemas distribuídos, o seu desenvolvimento exige um conhecimento bastante profundo dessa área e a utilização de técnicas adequadas de concepção e projeto de sistemas. 1. Sistemas Operacional Todo computador tem, em seu nível mais básico de software uma camada de inteligência que dá vida a máquina. Quando você liga o computador, instruções internas orientam-no para encontrar e rodar o sistema operacional, que continua a operar durante todo o tempo em que a máquina fica ligada. Esse programa especial supervisiona a operação dos dispositivos de hardware do computador e coordena o fluxo de controle e de dados. Tais instruções são conhecidas como chamadas de sistema (system calls), que criam, apagam e usam diversos objetos gerenciados pelo sistema operacional. Sua principal função é controlar o funcionamento do computador. Sistema Operacional tem quatro tarefas básicas: * Proporcionar uma interface de linha de comando ou uma interface gráfica para o usuário se comunicar com o computador. * Gerenciar os dispositivos de hardware do computador. * Gerenciar e manter os sistemas de arquivos em discos. * Dar suporte a outros programas. 2. Sistema Distribuído O sistema distribuído é a existência de um relacionamento mais forte entre os seus componentes, onde geralmente os sistemas operacionais são os mesmos. Podem ser considerados também como a evolução para os sistemas fortemente acoplados, onde uma aplicação pode ser executada por qualquer processador. Os sistemas distribuídos permitem que uma aplicação seja dividida em diferentes partes, que se comunicam através de linhas de comunicação, e cada parte podendo ser processada em um sistema independente. O objetivo do sistema distribuído é criar na cabeça de seus usuários a ilusão de que toda rede de computadores nada mais é do que um único sistema de tempo compartilhado (time-sharing), em vez de um conjunto de máquinas distintas. Portanto um “Sistema Distribuído é aquele que roda em um conjunto de máquinas sem memória compartilhada, máquinas que mesmo assim aparecem como um único computador para seus usuário”. 3. Características De uma forma mais específica, existem algumas características que fazem com que os sistemas distribuídos sejam indicados em muitos projetos de sistemas, como: a) Crescimento incremental: um sistema distribuído apresenta facilidades de expansão, ao contrário de outro sistema que não permitem expansão, a não ser por repetição. A repetição apresenta o inconveniente de produzir dois ou mais sistemas distintos, em vez de um sistema maior; b) Confiabilidade: sistemas distribuídos podem ser potencialmente mais confiáveis devido à multiplicidade e a um certo grau de autonomia de suas partes. É notório que a distribuição física não é tão importante quanto a distribuição lógica. Esta última pode ser implementada tanto a um único processador quanto a vários processadores localizados num mesmo ambiente ou em ambiente distintos . A distribuição física está mais ligada a questões de desempenho, tempo de resposta, organização do sistema e principalmente à possibilidade de ter-se controle explicito sobre o processamento e informações locais; c) Estrutura : sistemas distribuídos podem refletir a estrutura organizacional à qual eles servem ; d) Proteção: sistemas distribuídos podem oferecer mais segurança do que sistemas centralizados. A segurança resulta muito mais da distribuição lógica do sistema do que da sua distribuição física. A estrutura de Sistemas Distribuídos pode ser visualizadas em camadas. A camada mais interna , corresponde ao hardware, que é quem suporta todas as outras camadas de software. Em seguida vem o núcleo, que é a primeira camada de software a envolver o hardware, sobre esse núcleo (kernel), situa- se o sistema operacional propriamente dito, que fornece o suporte necessário à execução de programas. E em seguida, tem-se a camada mais externa, correspondente ao nível de aplicação. 4. Aspectos de tolerância a falhas Pelo fato de sistemas distribuídos possuírem múltiplas partes de hardware e de software funcionando conjuntamente, as chances de algumas dessas partes falhar é bem maior do que ocorreria num sistema simples. Um sistema distribuído pode apresentar falhas de vários tipos, dentre as quais aquelas provenientes de defeitos nas linhas de comunicação que interligam os processadores e aquelas referentes a colapsos nos processadores. Em sistemas tolerantes a falhas, o efeito de defeitos e interferências indevidas pode ser superado através de redundância temporal e/ou redundância física. A redundância temporal corresponde à determinação de um resultado através de execuções repetidas da mesma operação pelo mesmo elemento, usando eventualmente métodos diferentes. A redundância física consiste em ter-se elementos repetidos capazes de executar a mesma operação. Esses elementos referem-se tanto ao hardware quanto ao software do sistema. Um sistema, quando não funciona bem, apresenta como conseqüência resultados incorretos conhecidos por erros. A causa dos erros é a presença de defeitos ou interferências indevidas, conhecidos por falhas, que aparecem tanto a nível de hardware quanto de software. Ao evento que corresponde ao desvio de comportamento esperado do sistema denominamos falha. Até hoje, quando um computador falha, existe uma forte torcida para que seus usuários aceitem este fato como “coisas da vida”. Infelizmente, as pessoas estão ficando “mal acostumadas”, na expectativa de que os serviços que lhe são oferecidos não falhem. Se um canal de televisão, ou sistema telefônico, ou sistema de distribuição de energia saírem do ar por meia hora, no dia seguinte haverá uma grita geral dos usuários contra a infeliz companhia concessionária. À medida que os sistemas distribuídos tornam-se mais difundidos, cresce a demanda por sistemas que nunca falham. Os sistemas atuais não preenchem esta necessidade. Obviamente, como já foi dito, os sistemas tolerantes a falhas vão precisar de considerável redundância do hardware e da infra-estrutura de comunicação. Também será necessário a redundância do software e mais especificamente dos dados. A replicação de arquivos será uma questão essencial para os futuros sistemas. Os sistemas terão também de ser projetados de maneira a funcionar quando somente parte dos dados estiverem disponíveis, uma vez que a insistência em se ter todos os dados disponíveis todo o tempo não leva a sistemas tolerantes a falhas. Vale observar que o fato de se Ter o sistema indisponível por alguns instantes, hoje considerado aceitável, torna-se cada vez menos razoável, `a medida que o computador vai sendo difundido e usado por não-especialistas. 5. Aspectos de Projeto Existem alguns aspectos importantes que as pessoas envolvidas no projeto no sistema distribuído devem tratar necessariamente: 5.1. Transparência: Este aspecto faz com que um conjunto de máquinas seja visto por seus usuários como se fossem simplesmente um único sistema de tempo compartilhado. Tipos distintos de transparência em um sistema distribuído: * Migração: Os recursos podem mudar de lugar sem ter que mudar seus nomes. * Replicação: Os usuários não devem saber quantas cópias existem. * Concorrência: Vários usuários podem compartilhar automaticamente os recursos. * Paralelismo: Podem ocorrer atividades paralelas sem que os usuários venham a saber. 5.2. Flexibilidade: É muito importante que o sistema seja flexível as decisões do projeto que hoje parecem bem razoáveis poderão revelar-se erradas mais tarde. A melhor maneira de se evitar problemas é mantendo várias opções em aberto (flexibilidade). 5.3. Confiabilidade: Os dados confiados à guarda dos sistemas não podem de maneira nenhuma, sofrer qualquer tipo de adulteração ou perder-se . o aspecto da confiabilidade global é a segurança. Os arquivos e de mais recursos devem ser protegidos contra uso-nãoautorizado. Isso se torna crítico no caso dos sistemas distribuídos. Em geral, um Sistema Distribuído pode ser projetado para “mascarar” falhas ocorridas, esconder do seus usuários. 5.4. Performance: O problema da performance é muito influenciada pela comunicação. O envio de uma mensagem e a obtenção da resposta correspondente demora em torno de um milissegundo, e a maior parte desse tempo é gasto no tratamento do protocolo, quando deveria ser gasto na transmissão dos bits propriamente ditos. A dificuldade dessa técnica é que para ganhar performance é preciso ter várias atividades rodando em paralelo em diferentes processadores, mas para isso é necessário a transmissão de muitas mensagens. 5.5. Escabilidade: Um sistema verdadeiramente escalável deve ajustar-se às necessidades crescentes e permitir a adição de novos recursos. 6. Desempenho de um Sistema Distribuído O desempenho, considerado fator primordial de um Sistema Computacional Distribuído, é analisado sobre o ponto de vista do usuário através dos tempos de resposta obtidos a partir de uma requisição. Na Estação de Trabalho/Servidor, vários são os elementos que afetam o desempenho do Sistema. Entretanto, destacam-se os elementos Estação de Trabalho, Servidor e Rede de Comunicação, considerados os mais importantes para análise de desempenho. 7. Elementos que afetam o desempenho de um Sistema Distribuído Os elementos estação de trabalho, servidor e rede de comunicação são considerados os mais relevantes para análise de desempenho de um Sistema Distribuído. O desempenho individual de cada elemento é diretamente influenciado pelos demais, como pode ser observado nas seguintes situações: * Servidores com grande capacidade de processamento, meio de comunicação de alta velocidade de estações de trabalho com baixa capacidade de processamento: as estações de trabalho não conseguem processar as informações na mesma velocidade em que estas chegam e, com isso, o tempo de resposta observado pelos usuários não é satisfatório, considerando-se as características dos servidores e do meio de comunicação. * Estações de trabalho com grande capacidade de processamento, meio de comunicação de alta velocidade e servidores com baixa capacidade de processamento em relação à carga de trabalho: as estações de trabalho precisam esperar as informações requisitadas aos servidores para continuar o processamento do job e, com isso, o tempo de resposta observado pelo usuário também não é satisfatório, considerando-se as características das estações de trabalho e do meio de comunicação. * Servidores e estações de trabalho com grande capacidade de processamento e meio de comunicação de baixa velocidade: o tempo gasto na transmissão das informações degrada o tempo de resposta, tornando-o pouco satisfatório considerando-se as características dos servidores e das estações de trabalho 8. Processamento Distribuído (Cliente/ Servidor) É um tipo de processamento descentralizado em que os computadores comunicam-se uns com os outros através de vários meios de comunicação tais como barramentos de alta velocidade ou linhas telefônicas. Eles não compartilham nem a memória principal e nem o processamento das informações. Os processadores em um sistema distribuído podem variar em tamanho e função. Podem incluir pequenos microcomputadores, estações de trabalho, minicomputadores e sistemas de computadores de uso geral. Esses processadores são chamados por diversos nomes tais como: nós, locais(sites) e computadores. 9. Software Distribuído Dos quatro elementos de um sistema que podem estar distribuído - hardware, dados, programas e controle -, os três últimos referem-se ao software. A distribuição de dados levou ao desenvolvimento de uma área bastante extensa, envolvendo sistemas de arquivos distribuídos, e sistemas de banco de dados distribuídos. A seguir, consideramos os aspectos de distribuição de controle, cuja influência no desenvolvimento de sistemas operacionais tem sido determinante. Para iniciarmos o estudo da distribuição de programas (algoritmos), é necessário que sejam abordados os seguintes tópicos: * um programa é dito distribuído se estiver espalhado por vários ambientes, ou seja, se alguns processadores (ambientes) não puderem executar alguns passos do programa, pelo fato de eles pertencerem a outros ambientes; * qualquer programa seqüencial ou paralelo pode ser um programa distribuído. Diante disso, um programa será distribuído se puder ser estruturado em partes, formadas por grupos de instrução e conhecidas como componentes do programa, colocadas de forma que cada parte só possa ser executada pelo processador a ela associado. Os componentes do programa separados pelo subsistema de comunicação são conhecidos como remotos uns aos outros. A troca de informações entre componentes remotos do sistema deverá ocorrer por transferência de mensagens, através do meio de comunicação. Como exemplo de programa distribuído pode-se citar o programa seqüencial formado por um programa principal e sua sub-rotina, localizados de forma a serem remotos um ao outro. 10. Estruturação de Sistemas Distribuídos 10.1 Estruturação baseada na distribuição física Dentre os vários modelos baseados da distribuição física, encontram-se o modelo hierárquico, o do cache de CPU, o usuário servidor e o modelo de conjunto de processadores. No modelo hierárquico, os computadores são dispostos em uma rede sob a forma de árvore, de maneira que quanto mais próximos estiverem da raiz, mais potentes deverão ser. O computador da raiz tratará, de forma geral, do sistema como um todo, enquanto que os computadores distantes da raiz tratarão de tarefas específicas e especializadas. O modelo de cache de CPU consiste na utilização de computadores de menor porte como elementos que interligam terminais com uma grande CPU. Nesse caso, uma parte do processamento será executada no computador ligado ao terminal, e a outra parte no computador central. O modelo usuário-servidor surgiu na medida em que os computadores pequenos, crescendo em potência e tendo seus preços reduzidos, diminuíram gradativamente a importância do computador central do modelo cache de CPU. 10.2 Estruturação Lógica 10.2.1.Modelo de processos Esses processos podem encapsular tanto elementos ativos com natureza, consistindo dos programas referentes às atividades do sistema e do usuário quanto elementos naturalmente passivos correspondendo aos recursos e suas respectivas operações, confinados em gerenciadores de recursos. A comunicação entre os processos, implementada pelo sistema operacional, pode ocorrer de duas formas: * Chamada remota de procedimento: este tipo de comunicação entre processos é bastante dependente da linguagem usada para implementação do sistema, devendo satisfazer suas restrições com relação a chamada de procedimento e a passagem de parâmetros. * Troca explícita de mensagem: este já é mais flexível do que o anterior, suas restrições estão relacionadas com a existência de ligações implícitas ou explícitas entre os processos e com a interpretação da mensagem. 10.2.2.Modelo de objetos O modelo de objetos baseia-se no encapsulamento das várias partes de um sistema em elementos denominados objetos que são estruturados de forma a apresentarem um conjunto de operações responsáveis pelo seu comportamento. Para conseguir acessar um objeto, um processo deve ter capacidade de fazê-lo, usando o conhecimento do nome do objeto e a posse da autorização para cessar algumas ou todas as suas operações. 11. Processos e Processadores em Sistemas Distribuídos 11.1. Modelos de Sistemas Os processadores em um sistema distribuído podem ser organizados de diversas maneiras. Nesta seção iremos mostrar duas das organizações mais comuns, modelo de estação de trabalho e o modelo de pool de processadores. 11.1.2. O modelo da estação de trabalho É extremamente simples: o sistema é composto de estações de trabalho (computadores pessoais de alto desempenho), podendo estar espalhadas por um edifício. E em alguns sistemas as estações de trabalho têm um disco local, e em outros não. Esta última é conhecida como estações diskless. Se as estações forem diskless, o sistema de arquivos deverá ser implementado em um ou mais servidores. As requisições de leitura e escrita são enviadas ao servidor que realiza a operação solicitada e envia de volta o resultado. 11.1.3. O Modelo Pool de Processadores Neste modelo é entregue ao usuário terminais gráficos de alta performance, a exemplo dos terminais X, apesar de poderem ser usadas estações de trabalho de pequeno porte. E todos os processadores pertencem igualmente a todos os usuários. 12. Sistemas Operacionais Distribuídos O núcleo é a base sobre a qual se constrói o sistema operacional distribuído sua função consiste em transformar o hardware e o software de baixo nível do sistema em uma máquina virtual que ofereça as facilidades necessárias ao sistema operacional. Este sistema compreende um único sistema operacional homogêneo implementado para o ambiente como um todo. 12.1. Núcleo O núcleo de um sistema operacional distribuído é formado por um conjunto de vários núcleos individuais, que devem atuar, cada um, na sua esfera de ação e cooperar entre si no sentido de gerar um ambiente uniforme capaz de fornecer o suporte necessário a sistemas operacionais. 12.2. Sistemas Operacionais Distribuídos em Ambientes Multiprocessadores Este sistema utiliza a organização de supervisor separado em cada nó com estruturas parcialmente repetidas e repartidas. 12.3. Sistemas Operacionais Distribuídos em Ambientes Formados por Redes de Computadores Este sistema pode ser classificado como sistemas operacionais de redes ou sistemas operacionais distribuídos. 12.4. Sistemas Operacionais de Rede Neste sistema cada máquina contém seu próprio sistema operacional individual complementado com facilidades de comunicação, permitindo a interação entre as várias máquinas e seus sistemas. Esses sistemas operacionais são utilizados geralmente na conexão de computadores heterogêneos e geograficamente dispersos, no sentido de permitir o compartilhamento implícito de recursos. Diferença entre redes de computadores e sistemas distribuídos: Um sistema onde há um grande número de computadores autônomos, interconectados e é denominado redes de computadores. Há uma considerável confusão entre redes de computadores e um sistema distribuído. A distinção fundamental é que em um sistema distribuído a existência de computadores autônomos transparente (não visível) para o usuário. Ele pode digitar um comando para rodar um programa e o programa é executado. É tarefa do sistema operacional selecionar o melhor processador, achar e transportar todos os arquivos de entrada para esse processador e colocar os resultados no lugar apropriado. O usuário de um sistema distribuído não percebe a existência de múltiplos processadores. Com uma rede, um usuário precisa abrir explicitamente uma sessão em uma máquina, submeter explicitamente uma tarefa remota, mover explicitamente os arquivos e de maneira geral, lidar pessoalmente com a gestão da rede. Em um sistema distribuído, nada precisa ser feito explicitamente; tudo é feito de forma automática pelo sistema, sem o conhecimento do usuário. 13. O Sistema Operacional Distribuído Amoeba e Unix 13.1. O Amoeba É considerado um sistema operacional distribuído, pois faz um conjunto de processadores e dispositivos de entrada/saída funcionar como se fosse um único computador. 13.1.1. Histórico 1981- Início do projeto. Projeto de pesquisa na área de computação paralela e distribuída. Concebido por Andrew S. Tanenbaum e três alunos de doutorado, Amsterdã, Holanda. 1983- Primeiro protótipo do sistema, o Amoeba 1.0. A partir de 1984- Criação de um segundo grupo de pesquisas, sob a liderança de Mullender, Amsterdã. Baseava-se em chamadas remotas e procedimentos. O sistema continuou evoluindo ao longo do tempo, adquirindo características novas, da emulação parcial do Unix, da comunicação em grupo e de um novo protocolo de baixo nível. 13.1.2. Objetivos da Pesquisa O projeto Amoeba não baseou-se em nenhum sistema operacional já existente. Ele começou do nada. A idéia principal era experimentar novos conceitos, sem compromisso de compatibilidade com qualquer sistema já existente. Principais objetivos: * Contrução de um sistema operacional distribuído totalmente transparente. A principal diferença entre o Amoeba e os demais sistemas operacionais distribuídos é o fato de que o Amoeba não suporta o conceito de “máquina hospedeira”. * Fornecer um ambiente de teste de experiências em programação paralela e em programação distribuída. O Amoeba aceita dois tipos de usuários: aqueles que o utilizam como um sistema tradicional de compartilhamento de tempo e outros interessados em experiências com algoritmos distribuídos e algoritmos paralelos. 13.2. Unix Distribuído Unix é talvez o exemplo melhor conhecido de um sistema operacional multi-usuário. Desde que já estava em uso difundido e facilmente disponível, quando os sistemas distribuídos estavam sendo desenvolvidos, muitos pesquisadores e desenvolvedores de sistemas distribuídos adotaram o modelo provido pelo Unix. Eles visaram produzir implementações do modelo Unix que poderiam explorar os recursos de muitos computadores, oferecendo instalações e desempenho que excederam aqueles dos simples sistemas multi-usuário que eles substituíram. As melhorias só não estavam em desempenho, mas em confiabilidade, extensibilidade e suporte para aplicações que envolvem comunicação. O modelo de Unix distribuído foi implementado em várias formas. A maioria amplamente usada e desenvolvido pela Sun Microsystems, uma manufatura de Work Station que levou o BSD Unix de Berkeley como o ponto de partida para um esforço de software extenso que conduziu ao desenvolvimento do Network File System bem conhecido como (NFS). Este componente de software e sua chamada de procedimento remoto associado (RPC) e Network Information Service (NIS) componentes são oferecidos agora quase por todo distribuidor de estação de trabalho (sob licença de Sun Microsystems) e é usado como base para as maiores tendências das implementações distribuídas do Unix. Outras implementações distribuídas do Unix foram empreendidas nos esforços que visaram remover algumas das limitações e dificuldades associadas com a definição de Unix original e alcançar sistemas de maior extensão além do possível com o sistema Unix multi-usuário. Embora o desenvolvimento do sistema Unix distribuído ofereça obvias vantagens comerciais e técnicas, o Unix foi projetado originalmente para se encontar ao alcance restringido de exigências numa época onde as limitações de hardware de computador restringiam o âmbito das ambições dos projetistas. Uma geração nova de sistemas operacionais distribuídos projetam metas que vão das visões do Unix que está surgindo agora. Um atributo importante de sistemas operacionais distribuídos é sua extensão uma característica que habilita o sistema a ser estendido para reunir novas exigências e aplicações e as necessidades de usuários. 14. Vantagens 14.1. Vantagens do Sistema Distribuído sobre Os Centralizados Os sistemas distribuídos oferecem uma economia muito grande, pois os microprocessadores tem uma melhor relação preço/performance do que a oferecida pelos mainframes , por isso a descentralização está caindo continuamente. Outra razão para se construir sistemas distribuídos é o fato de muitas aplicações serem eminentemente distribuídas. Em um sistema de automação industrial que controla robôs e máquinas ao longo de uma linha de montagem, é interessante que cada robô e cada máquina tenham seu próprio processador. Se todos estes processadores estiverem conectados, teremos um sistema distribuído de automação industrial. No caso de aplicações críticas, como controle de instalações nucleares, ou o controle do tráfego aéreo, o uso de sistemas distribuídos é de fundamental importância. 14.2. Vantagens do Sistema Distribuído sobre Pcs Independentes: O compartilhamento é a maior vantagem que os sistemas distribuídos tem sobre os Pcs independentes, pois o compartilhamento de dispositivos permite que vários usuários tenham acesso a periféricos muito caros, tais como as impressoras laser a cores, as máquinas de fotocomposição, e os dispositivos de armazenamento de alta capacidade, especialmente os óticos, são também candidatos. Outra razão para se fazer a conexão de um grupo de máquinas isoladas, transformando-as em um sistema distribuído é conseguir melhorar a comunicação entre as pessoas. Como exemplo temos o correio eletrônico, que possui muitos atrativos em relação aos meios de comunicação tradicionais. 15. Desvantagens dos Sistemas Distribuídos Apesar das vantagens em relação aos sistemas distribuídos centralizados, existem algumas desvantagens que serão relacionadas neste item. O primeiro problema está relacionado com a falta de software no mercado. O segundo problema potencial é o das redes de comunicação. Aqui, o ponto principal é a possibilidade de que sejam perdidas mensagens na rede, o que nos obriga a utilizar um software especial para fazer a manipulação das mensagens. Outro aspecto relativo às redes é a possibilidade de elas ficarem sobrecarregadas com o tráfego gerado pelo intercâmbio de mensagens. O terceiro problema está relacionado com a segurança dos dados, pois os dados secretos podem ser acessíveis com grande facilidade. Conclusão Só de expressarmos a palavra “Distribuído” do termo Sistemas Distribuídos, podemos notar a amplitude e o grau de complexidade que esse termo nos propõe. Portanto, sua exploração mostrou seus aspectos principais sem se preocupar tanto com os detalhes. A objetividade deste trabalho visou então a introdução dos Sistemas Distribuídos para que os usuários tenham a ilusão de que toda a rede de computadores nada mais é do que um único sistema de tempo compartilhado (time-sharing). Bibliografia NORTON, Peter. Introdução à Informática.. São Paulo: Makron Books,1996. 619p. FRAGA, Josiel Adriano. Sistemas Operacionais Distribuídos. Taquaritinga: Fatec, 1997. 66 p. (Monografia) SILVA, Diller Grisson. Manual de Informática. São Paulo: D'Livros,1997. 510p. TANENBAUM, Andrew S.Redes de Computadores. 2 ed. Rio de Janeiro: Campus,1994. 786p. Internet Universidade Federal do Rio Grande do Sul http:// www.ufrgs.br Data da Pesquisa: 15/03/1999 Universidade Federal da Bahia http:// www.ufba.br Data da Pesquisa: 17/03/1999 Universidade de São Paulo http:// www.usp.br Data da Pesquisa:17/03/1999