Sistemas Operacionais Distribuídos Introdução O uso de redes locais e da Internet está amplamente difundido mesmo para uso doméstico. Mas para que tais recursos físicos sejam aproveitados da melhor forma possível é preciso fornecer suporte adequado de software. Nesse texto serão discutidos diversos aspectos relacionados ao controle em ambientes distribuídos. Por ambiente distribuído entende-se um conjunto de processadores interligados por uma rede de interconexão e sem memória compartilhada. A ausência de memória compartilhada obriga a uma interação entre processadores de uma forma distinta do ambiente centralizado: ao invés de variáveis ou arquivos compartilhados utiliza-se troca de mensagens. Sistemas Distribuídos Um sistema distribuído é uma coleção de computadores independentes que parecem ao usuário como um único computador Essa definição implica hardware formado por máquinas autônomas e software fornecendo a abstração de uma máquina única. Vantagens: Econômicas: aproveitar máquinas potencialmente ociosas; mais barato vários processadores interconectados do que um supercomputador. Distribuição inerente: algumas aplicações são distribuídas por natureza. Tolerância a falhas: em caso de falha de uma máquina, o sistema como um todo pode sobreviver, apresentando apenas uma degradação de desempenho. Crescimento incremental: o poder computacional pode ser aumentado através da inclusão de novos equipamentos. Flexibilidade: sistemas distribuídos são mais flexíveis do que máquinas isoladas, por isso muitas vezes são utilizados até mesmo que não se esteja buscando desempenho. É essa flexibilidade que permite que vários usuários compartilhem dados e periféricos. Desvantagens: Pouco software de alto nível disponível para sistemas distribuídos.
Dificuldades para evitar acesso indevido (segurança). A rede de interconexão pode causar problemas ou não dar vazão demanda. Questões de projeto Transparência de Localização: os usuários não sabem onde os recursos estão localizados. de Migração: os recursos podem se mover sem alterar seus nomes. de Replicação: os usuários não sabem quantas cópias de um recurso existem. de Concorrência: múltiplos usuários podem compartilhar um recurso automaticamente. de Paralelismo: atividades podem ocorrer em paralelo sem que o usuário saiba (falta muito ainda para ser atingido). Flexibilidade Para obter isso, hoje a tendência é construir Sistemas Operacionais. baseados em um micro kernel (ao invés de um sistema monolítico com mais performance mas menos flexibilidade). Um microkernel implementa poucas funções, fornecendo em princípio quatro serviços básicos: Mecanismo de comunicação entre processos Algum tipo de gerência de memória Uma pequena parte do escalonamento e gerência de baixo nível de processos Estrada e saída de baixo nível Outros serviços (file system, full process management, etc) providos por serviços em nível de usuário. Confiabilidade Na teoria, a idéia é que se alguma máquina parar de funcionar, alguma outra máquina pode pegar o trabalho dela. Na prática, existem alguns servidores em diferentes máquinas que precisam estar no ar para que o sistema como um todo funcione. Existem vários aspectos relacionados a confiabilidade: Disponibilidade (availability): se refere a fração de tempo que o sistema está funcionando/usável. Pode-se melhorar a disponibilidade através de um projeto que não exija o funcionamento simultâneo de um número substancial de componentes críticos; ou, ainda, através de redundância, isto é, componentes chaves de hardware e software devem ser replicados, de modo que se um deles falhar, os outros estarão aptos a tomar conta da tarefa.
Tolerância a falhas: o que fazer em caso de falha de um servidor? Em geral, sistemas distribuídos podem ser projetados para mascarar falhas, isto é, escondê-las do usuário. Por exemplo, um serviço de arquivos (ou outros serviços quaisquer) pode ser construído com um grupo de servidores cooperantes de tal modo que o usuário não perceba a perda de um ou mais servidores (a não ser, talvez, por perda de desempenho). Desempenho Todos os itens anteriores não devem ser atingidos sacrificando o desempenho. Quando rodar uma determinada aplicação em um sistema distribuído, ele não pode ser pior do que rodar a mesma aplicação em um único processador. Métricas para medir desempenho: Tempo de resposta Throughput (número de tarefas / tempo) Utilização do sistema Quantidade consumida da capacidade da rede Principal problema é o Custo de Comunicação. Para otimizar o desempenho, otimiza-se o número de mensagens. Porém, a melhor forma de obter desempenho é ter várias atividades rodando em paralelo em diferentes processadores, o que implica em enviar muitas mensagens. Executar tarefas que envolvam grandes computações (coarsegrained parallelism), baixas taxas de interações e poucos dados pode ser mais apropriado. Escalabilidade (Scalability) Os sistemas distribuídos precisariam se adaptar a possibilidade de termos ambientes com centenas ou milhares de processadores. Para isso, deve-se evitar: Componentes centralizados. Por exemplo, um único servidor de email para todos os usuários. Tabelas centralizadas. Por exemplo, uma única relação on-line de telefones. Algoritmos centralizados. Por exemplo, roteamento de mensagens baseado em informações completas. Deve-se usar algoritmos descentralizados, que possuem as seguintes características: Nenhuma máquina possui informações completas sobre o estado do sistema. Máquinas tomam decisões baseadas apenas nas informações disponíveis localmente. Falha de uma das máquinas não impede o funcionamento do algoritmo.
Não há suposições implícitas de que existe um relógio global. Questões de Hardware Sistemas distribuídos consistem de várias CPUs interconectadas. No entanto, há várias formas diferentes no qual esse hardware pode estar organizado. Dentre as várias classificações existentes, Flynn propõe uma taxonomia considerando o número de fluxo de instruções e o número de fluxo de dados. SISD Single Instruction Single Data fluxo de instruções e dados único é a característica dos uniprocessadores tradicionais; MIMD Multiple Instructions Multiple Data caracteriza-se por vários processadores interconectados. Multiprocessador máquinas MIMD com memória compartilhada (um único espaço de endereçamento virtual compartilhado por todas as CPU s). Multicomputador máquinas que não possuem memória compartilhada, isto é, cada processador possui sua memória privada. Barramento um único cabo, rede, barramento ou outro meio que conecte todas as máquinas. Analogia: TV a cabo. Switch: existem cabos individuais conectando máquina a máquina, com vários padrões possíveis. Outra classificação: Fortemente acoplado Tightly Coupled comunicação rápida entre os processadores (grande número de bits por segundo). Fracamente acoplado Loosely Coupled atraso para troca de msg entre máquinas é alto. Questões de software Com a criação de novas arquiteturas de computadores, surgiram novas demandas de software e, em especial, novas funções exigidas ao S.O. Pode-se considerar como uma boa classificação da evolução dos Sistemas Operacionais a tabela abaixo apresentada em [CHO
Sistema Operacional Distribuído (Distributed Operating Systems ou DOS) A implementação de um sistema verdadeiramente distribuído tem como objetivo a obtenção de um conjunto de máquinas ligadas em rede que funcionem como um uniprocessador virtual. Um S.O Distribuído parece ao usuário como um sistema centralizado comum, mas executa em múltiplas unidades de processamento independentes onde: (1) o uso de múltiplos processadores deve ser invisível (transparente) para o usuário; (2) o usuário vê o sistema como um uniprocessador virtual, não como uma coleção de máquinas distintas conectadas por um subsistema de comunicação. Como principais características tem-se um mecanismo de comunicação global único entre processos, proteção global e gerenciamento homogêneo de processos. O objetivo é fornecer transparência no acesso aos recursos, mas, de fato, não existe um sistema 100% transparente. Assim, o SO Distribuído deve: (1) controlar a alocação de recursos da rede para permitir seu uso no modo mais eficiente; (2) prover ao usuário com um computador virtual conveniente que serve como um ambiente de programação de alto nível; (3) esconder a distribuição dos recursos; (4) prover mecanismos para proteção dos recursos do sistema contra acesso por usuários não autorizados; (5) prover comunicação segura
Diferenciação na arquitetura entre S.O de Rede e S.O Distribuído. Computação em grade Computação em Grade é um novo conceito que explora as potencialidades das redes de computadores, com plataforma heterogênea. Tem o objetivo de disponibilizar capacidade de processamento para aplicações altamente exigentes, e também conectar comunidades virtuais de grande escala, com uma grande diversidade de recursos de computação e de repositórios de informações. A Computação em Grade é um caso particular de computação distribuída, uma vez que os Grids são orientados essencialmente para aplicações que precisam de uma grande capacidade de cálculos, ou enormes quantidades de dados transmitidos de um lado para outro, ou as duas. Hoje em dia, existem varias aplicações que utilizam o conceito de Grid, na sua grande maioria são trabalhos de pesquisas acadêmicos, como o Projeto TeraGrid nos Estados Unidos. Embora o foco seja basicamente voltado para pesquisa, já existem algumas aplicações que qualquer pessoa no mundo pode acessar e principalmente participar, um deles e o SETI@HOME, projeto da Universidade da Califórnia, que utiliza a capacidade ociosa do computadores conectados a Internet na busca de vida inteligente em outros planetas. O tema por si só já se torna muito interessante e desafiador, pois se trata de uma tecnologia nova, sendo com certeza uma tendência para o futuro. Esta tecnologia está despertando muito interesse na comunidade mundial, pois novos projetos estão surgindo em todo o mundo. No Brasil, o assunto já está emergente e já existem experiências na área, um deles é o Brazilian Grid, projeto da parceria Universidade Federal de Pernambuco e da HP. Além disso, desde o ano de 2000, fornecedores de TI, como Sun, IBM, HP, Oracle e Intel, entre outras, desenvolvem estratégias para o Mercado de Grid. Nesse caminho foi criado o Consórcio Globus, que visa promover o avanço comercial do sistema aberto Globus Toolkit, que é um bloco de desenvolvimento de implementações corporativas Grid. A proposta deste trabalho é pesquisar todos os conceitos de Computação em Grade, trazendo todos tópicos voltados ao assunto, bem como discutir alguns projetos e aplicações atualmente em funcionamento. Além disso, no intuído de aprimorar
e valorizar mais ainda o trabalho de pesquisa, existe a intenção de desenvolver uma pequena aplicação para a simulação dos conceitos.