Sistemas Distribuídos Processos Gustavo Reis [email protected] 1 - Processos Conceito originado do campos de sistemas operacionais no qual, em geral, são definidos como programas em execução Do ponto de vista de um sistema operacional, o gerenciamento e escalonamento de processos são as questões mais importantes a discutir Do ponto de vista de sistemas distribuídos outras questões se mostram ser de igual ou maior importância 2 - Processos Ex.: para organizar sistemas cliente-servidor com eficiência, muitas vezes é conveniente usar técnicas de multithreading Threads permitem que clientes e servidores sejam construídos de modo tal que comunicação e processamento local possam se sobrepor, resultando em alto nível de desempenho 3 - Threads Para entender o papel dos threads em sistemas distribuídos, é importante entender o que é um processo e como processos e threads se relacionam Ao executar um programa o sistema operacional cria vários processadores virtuais Cada qual para executar um programa diferente O SO mantém uma tabela de processos que contém entradas para armazenar valores de registrados de CPU, mapas de memória, arquivos abertos, informações de contabilidade, privilégios, etc 4 - Threads Aspecto importante: o SO toma grande cuidado para assegurar que processos independentes não possam afetar, de modo intencional, ou não intencional, a correção do comportamento um do outro Os processos podem compartilhar concorrentemente a mesma CPU e outros recursos de hardware de forma transparente Essa transparência tem preço relativamente alto 5 - Threads Cada vez que um processo é criado, o SO deve criar um espaço de endereços completos independente Alocação pode significar iniciar segmentos de memória: por exemplo, zerando um segmento de dado, copiando o programa associado para um segmento de texto e estabelecendo uma pilha para dados temporários Chaver a CPU entre dois processos pode ser igualmente caro Caso o SO suporte mais processos do que pode conter simultaneamente na memória principal, terá que efetuar troca dinâmica de processos entre a memória principal e o disco antes que o chaveamento propriamente dito possa ocorrer 6 - Threads Assim como um processo, um thread executa sua própria porção de código Todavia, ao contrário dos processos, nenhuma tentativa é feita para conseguir alto grau de transparência de concorrência se isso resultar em degradação do desempenho Threads em geral mantém a mínima informação que permita à CPU ser compartilhada por vários threads 7 - Threads Informações que não são estritamente necessárias para gerenciar múltiplos threads em geral são ignoradas Por essa razão, proteger dados contra acesso inadequado por threads dentro de um único processo fica inteiramente a cargo dos desenvolvedores da aplicação 8 - Threads Threads não são automaticamente protegidos uns contra os outros, como acontece com os processos Sendo assim o desenvolvimento de aplicações multithread requer esforço intelectual adicional Elaborar adequadamente o projeto e manter as coisas simples ajuda muito 9 - Threads O benefício mais importante em sistemas multithread é sempre que for executada uma chamada bloqueadora por uma das threads o processo como um todo não é bloqueado. Caso contrário se for um sistema monothread Outra vantagem de sistema multithread é que se torna possível explorar paralelismo ao executar o programa em um sistema multiprocessador Nesse caso, cada thread é designado a uma CPU diferente, enquanto dados compartilhados são armazenados em memória principal 10 - Threads Em sistemas Unix a cooperação entre programas (processos) é implementada por meio de mecanismos de comunicação entre processos (IPC – Interprocess Communication) Como IPC requer intervenção de núcleo, em geral um processo terá que chavear primeiro de modo usuário para modo núcleo Isto requer trocar mapa de memória MMU e descarregar o TLB 11 - Threads 12 - Threads O chaveamento de thread às vezes pode ser feito inteiramente em espaço de usuário O efeito pode ser uma drástica melhoria em desempenho Ex.: Threads cooperativos. Processador de texto pode usar threads separados para manipular entrada de usuário, verificação de ortografia e gramática, apresentação do documento, geração de índice, etc 13 - Implementação de thread Threads são fornecidas em pacotes que contém operações de criação, finalização, sincronismo Duas abordagens para implementação de um pacote de threads Construção de bibliotecas executa inteiramente em modo usuário Ciência do núcleo sobre a existências dos threads e que sejam escalonados 14 - Implementação de thread Vantagens threads modo usuário Criar e terminar threads são baratos (custo de alocação de memória para estabelecer uma pilha de threads) Chaveamento de contexto de thread pode ser feito em apenas algumas instruções. Basicamente somente valores dos registradores de CPU precisam ser armazenados 15 - Implementação de thread Desvantagen threads modo usuário Uma invocação de uma chamada bloqueadora de sistema imediatamente bloqueará todo o processo ao qual o thread pertence Este problema pode ser contornado pela implementação de threads no núcleo do sistema operacional, mas o custo é alto Outra solução está em uma forma híbrida de threads de nível de usuário e nível de núcleo, denominado LWP (Lightweight Processes) 16 - Implementação de thread 17 - Implementação de thread Vantagens do LWP em combinação com threads nível de usuário Criar, destruir e sincronizar threads é relativamento barato e não envolve absolutamente nenhuma intervenção do núcleo Contanto que um processo tenha LWPs suficientes, uma chamada bloqueadora de sistema não suspenderá o processo inteiro A aplicação não tem conhecimento dos LWPs. Tudo é visto como threads de nível de usuário LWPs podem ser usados com facilidade em ambientes de multiprocessamento, pela execução de diferentes LWPs em diferentes CPUs 18 - Threads em Sist. Distribuídos Threads podem proporcionar um meio conveniente de permitir chamadas bloqueadoras de sistema sem bloquear o processo inteiro Esta propriedade torna-se atrativa na utilização em sisetmas distribuídos, uma vez que facilitam comunicação na forma de manter múltiplas conexões lógicas ao mesmo tempo Caso de uso comunicação cliente/servidor multithread 19 - Threads em Sist. Distribuídos Clientes multithread Sistemas distribuídos que operam em redes de longa distância podem precisar esconder longos tempos de propagação (latência) de mensagens entre processos A maneira usual de ocultar latências de comunicação é iniciar a comunicação e imediatamente prosseguir com alguma outra coisa Ex.: requisição WEB. O navegador busca o arquivo html e já vai exibindo o conteúdo. Para cada objeto que compõe o arquivo são criados threads em separados para estabelecer conexão e buscar estes objetos 20 - Threads em Sist. Distribuídos Clientes multithread 21 - Threads em Sist. Distribuídos Clientes multithread 22 - Threads em Sist. Distribuídos Clientes multithread Ao ser usado clientes multithread, podem ser estabelecidas conexões com diferentes réplicas do servidor web Isto determina que o documento web inteiro seja totalmente exibido em tempo muito menor do que com um servidor não replicado Essa abordagem só é possível se o cliente manipular fluxos de dados de entrada verdadeiramente paralelos. Threads são ideais para essa finalidade 23 - Threads em Sist. Distribuídos Servidores multithread A principal utilização de multithread em sistemas distribuídos é encontrada no lado do servidor Multithread não somente simplifica consideravelmente o código do servidor, mas também facilita muito o desenvolvimento de servidores que exploram paralelismo para alto desempenho 24 - Threads em Sist. Distribuídos Servidores multithread 25 - Virtualização Threads e processos permitem construir programas que parecem ser executados simultaneamente Em sistemas monoprocessados dá a ideia de que programas estão sendo executados em paralelo por causa do chaveamente rápido entre threads e processos Virtualização de recursos 26 - Virtualização O papel da virtualização em sistemas distribuídos Todo sistema de computador oferece uma interface de programação de software de alto nível Há vários tipos de interfaces (instruções oferecidas por uma CPU, conjunto de interfaces de programação de middleware) Em essência, a virtualização trade de estender ou substituir uma interface existente de modo a imitar o comportamento de um outro sistema 27 - Virtualização O papel da virtualização em sistemas distribuídos 28 - Virtualização O papel da virtualização em sistemas distribuídos Uma das questões mais importantes para introduzir a virtualização foi permitir que software herdado executasse em caros hardwares de mainframe A virtualização ajuda, em muito, a administração de diversas plataformas e máquinas, reduzindo a quantidade de máquinas 29 - Virtualização Arquiteturas de máquinas virtuais Quatro tipos diferentes de interfaces Instruções de máquinas: interface entre o hardware e o software. Podem ser invocadas por qualquer programa Instruções privilegiadas: interface entre o hardware e o software. Invocadas somente por programas privilegiados, como o SO Chamadas de sistema: oferecidas por um sistema operacional Interface de aplicação de programação: chamadas de bibliotecas (ocultam a chamada de sistema) 30 - Virtualização Arquiteturas de máquinas virtuais Quatro tipos diferentes de interfaces 31 - Virtualização Arquiteturas de máquinas virtuais Dois modos de virtualização 32 - Virtualização Arquiteturas de máquinas virtuais Dois modos de virtualização Explicar a arquitetura do XEN 33 - Clusters de servidores Organização geral Conjunto de máquinas conectadas por uma rede, no qual cada máquina executa um ou mais servidores Logicamente um cluster de servidores é organizado em três camadas 34 - Clusters de servidores Organização geral 35 - Clusters de servidores Organização geral 36 - Clusters de servidores Servidores distribuídos Conjunto de máquinas que possivelmente muda dinamicamente Mas se apresenta para o mundo externo como uma única e poderosa máquina Ex.: cluster de dinâmico configurado por máquinas de usuários finais 37 - Clusters de servidores Servidores distribuídos Suporte de mobilidade para IPv6 (MIPv6) Nó móvel tem uma rede nativa e possui endereço estável associado (endereço nativo – Home Address HA) Rede nativa possui um repassador especial (agente nativo) 38 - Clusters de servidores Servidores distribuídos Ao se desligar da rede nativa e for para a rede externa o nó receberá um endereço externo (Care-of Address – COA) O COA é informado ao agente nativo 39 - Clusters de servidores Servidores distribuídos 40 - Clusters de servidores Servidores distribuídos 41