SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 1 REVISÃO DE REDES E SISTEMAS OPERACIONAIS 1. INTRODUÇÃO No atual cenário tecnológico, algumas práticas vêm se destacando bastante, dentre elas a utilização dos sistemas distribuídos. Baseado em conceitos apresentados nesta disciplina é que é possível a construção de sistemas complexos de renderização de imagens como o utilizado em filmes (p. ex. Titanic) ou do projeto Caverna Digital da USP, sem mencionar projetos de construção de sistemas operacionais destinados especificamente ao processamento distribuído. Dessa forma, cresce a importância em conhecer a estrutura e peculiaridades dos sistemas distribuídos. Neste sentido, conhecer e saber aplicar os conceitos e algoritmos dos sistemas distribuídos é um diferencial no mercado de trabalho e nas pesquisas científicas. 2. REVISÃO DE REDES DE COMPUTADORES Para a perfeita compreensão dos sistemas distribuídos é necessário relembrar e compreender conceitos fundamentais de redes de computadores. 2.1. Requisitos da comunicação Os complexos sistemas de comunicação de dados não usam um único protocolo para tratar de todas as tarefas de transmissão. Ao contrário, requerem uma pilha de protocolos cooperativos, algumas vezes chamados de família de protocolos ou mesmo pilha de protocolos. Para exemplificar toda essa idéia de comunicação em vários níveis, vamos lembrar a analogia dos dois filósofos, conforme figura 1. Cada protocolo envolvido no processo é totalmente independente dos demais, desde que as interfaces não sejam alteradas. 2.2. Aplicações para redes de computadores Para utilizar a infraestrutura física de uma rede é necessário que os computadores tenham aplicações que transmitem e recebem mensagens, onde uma mensagem é constituída por um grupo de bytes que tenham algum significado. 2.2.1. CLIENTE/SERVIDOR (CS) A filosofia de desenvolvimento de aplicações, na qual a aplicação é constituída de duas partes: o Cliente e o Servidor. O Cliente solicita algum serviço e o Servidor atende a solicitação. 1 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br Figura 1 - Dois filósofos Cada parte pode estar sendo executada em um sistema diferente, isto é, o cliente pode estar no Windows XP e o Servidor pode estar executando em um servidor Linux Debian. São exemplos de aplicações cliente-servidor: - www - Telnet - FTP - SSH Figura 2 – Cliente/Servidor Aplicações Cliente/Servidor utilizam funções que estão disponíveis em bibliotecas que acompanham o TCP/IP. As mais utilizadas são open, send, recv, close; As bibliotecas fornecem transparência de acesso a rede. Dessa forma, o programador não precisa conhecer como a rede está estruturada para desenvolver a aplicação. 2 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br 2.3. Topologia de Rede A topologia de uma rede de comunicação refere-se à forma como os enlaces físicos (cabos) existentes e os nós de uma rede (computadores) estão organizados, determinando caminhos físicos existentes e utilizáveis entre quaisquer pares de estações conectadas a essa rede. As topologias de rede mais conhecidas são: - Estrela - Anel - Barramento - Mista 2.4. Transmissão da informação pelo meio físico A transmissão da informação pode dar-se, principalmente, de duas formas: - Difusão - Ponto-a-ponto O primeiro, Links de difusão têm apenas um canal de comunicação compartilhado por todas as máquinas da rede, onde são transferidos pacotes de um computador para outro ou de um computador para todos. Cada pacote deve ter um endereço que identificará para qual máquina é a mensagem dentro da rede na qual ela está inserida. Existe ainda a possibilidade de haver a difusão para todas as máquinas. Isto se dá com a utilização de um código especial o campo de endereço. Quando um pacote com esse código é transmitido, ele é recebido e processado por todas as máquinas da rede. Esse modo de operação é chamado de difusão ou broadcasting. Alguns sistemas também permitem a transmissão para um subconjunto das máquinas, o que se conhece como multidifusão ou multicasting. Em contraste, o segundo tipo, as redes ponto-a-ponto consistem em muitas conexões entre pares de máquinas individuais. Para ir da origem ao destino, um pacote muitas vezes tem que visitar várias máquinas intermediárias ou fazer várias rotas com tamanhos diferentes. Como regra geral (embora existam exceções), redes menores tendem a usar difusão, enquanto redes maiores em geral são redes ponto-a-ponto. Exemplo: A transmissão ponto a ponto com um transmissor e um receptor, chamada de unicasting. 2.5. Classificação da Comunicação segundo a direção da transmissão A forma de utilização do meio físico que conecta as estações da origem a seguinte classificação sobre a comunicação no enlace. - Simplex: A informação vai apenas para um sentido. Ex.: Rádio. - Half-Duplex: Transmite nos dois sentidos em tempos diferentes. Ex.: Rádio amador. - Full-Duplex: Transmite e recebe ao mesmo tempo. Ex.: Telefone 3 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br 2.6. Modelo de referencia OSI Modelo surgido em 1983 é atualmente o modelo de referencia no estudo de Redes de Computadores. É um modelo abstrato de redes, não existem redes implementadas exatamente segundo modelo de sete camadas, uma vez que as redes não necessitam implementar todas as camadas. No RM OSI não há o detalhamento de serviços. Figura 3 – Arquitetura baseada no Modelo de Referência OSI 2.6.1. CONCEITOS FUNDAMENTAIS DO RM OSI - É estruturado em camadas hierárquicas; - Cada camada presta serviços para camada superior. Dessa forma cada camada usa serviços da camada inferior; - As camadas de mesmo nível “comunicam-se”; - Uma determinada camada apenas toma conhecimento da camada inferior; - Interação entre camadas feita através de serviços; - Existe certa divisão de tarefas entre as camadas; - É de fácil abstração. 4 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br Figura 4 - Estrutura Funcional No RM OSI, assim como nos modelos derivados deste, a informação ao passar por cada camada sobre um processo de empacotamento conforme ilustrado na figura abaixo: Figura 5 - Processo de empacotamento 2.7. Modelo de Referência TCP/IP Diferente do RM OSI, este é formado por quatro camadas. 5 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br Figura 6 - Comparativo do RM OSI com o RM TCP Observe que a camada Internet do RM TCP/IP está em um nível menor que do correspondente no RM OSI. Isto implica que a camada de Internet realiza funções extras, como a entrega local de mensagens dentro da mesma rede. Neste caso o IP só trata da entrega e a decisão de roteamento quando a origem e o destino da mensagem estão situados em redes distintas. De modo semelhante o RM TCP/IP combina os aspectos das camadas de apresentação e de sessão dentro da sua camada de aplicação. Os protocolos do RM TCP/IP são os padrões em torno dos quais a Internet se desenvolveu, portanto este modelo de referência ganha credibilidade apenas por causa dos seus protocolos. Ao contrário, geralmente as redes não são desenvolvidas de acordo com o RM OSI, embora este seja usado como um guia. 3. REVISÃO DE SISTEMAS OPERACIONAIS Inicialmente é preciso relembrar como estão organizados os sistemas operacionais. Figura 7 - Organização do SO 6 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br O Sistema Operacional é um programa de controle, pois controla os dispositivos de entrada e saída (I/O devices) e os programas que resolvem os problemas dos usuários. Ele previne erros e o uso impróprio do computador (por exemplo, um usuário não pode destruir os arquivos de outros usuários). O Sistema Operacional cria um sistema computacional usável. As aplicações possuem necessidades em comum que são atendidas pelo sistema operacional. Estas necessidades correspondem exatamente à alocação e controle dos recursos. O objetivo do Sistema Operacional é permitir o uso do computador de forma fácil e eficiente. Pode-se dizer que o Sistema Operacional de um computador é a parte de software que estende os recursos de hardware da máquina, tornando a utilização do equipamento mais fácil, mais eficiente e mais confiável. Recursos gerenciados pelo Sistema Operacional: - Tempo de CPU - Espaço de memória - Espaço em disco - Periféricos (impressora, etc.) Os primeiros Sistemas Operacionais não otimizavam o uso da CPU, o que era inaceitável. Algumas técnicas foram utilizadas para minimizar este problema. Entre elas estão a operação offline, a bufferização e o spooling. 3.1. Multiprogramação A operação off-line, bufferização e spooling, mesmo utilizadas em conjunto, não garantem uma utilização eficiente do computador. Um único programa não consegue manter a CPU o tempo todo ocupada. Por isso surgiu a multiprogramação, que é a execução “simultânea” de vários programas (vários programas na memória). A multiprogramação aumenta a utilização da CPU, fazendo com que ela tenha sempre algo para executar. Os primeiros sistemas multiprogramados foram implementados através de uma extensão da técnica de spooling. Para obter maior eficiência, o SO procura manter na memória uma mistura de jobs CPUbound e I/O-bound. A multiprogramação aumenta a complexidade do sistema, mas aumenta muito a sua eficiência. 3.2. Tipos de Sistemas Operacionais Sem considerar os sistemas para redes de computadores, os sistemas distribuídos e os sistemas paralelos, pode-se dizer que existem três tipos básicos de Sistemas Operacionais. 3.2.1. SISTEMAS OPERACIONAIS BATCH Os primeiros sistemas operacionais eram chamados de sistemas batch devido ao fato 7 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br dos jobs semelhantes estarem agrupados em lotes. Isto simplificava a operação do computador quando todo o I/O era feito através de fitas magnéticas ou cartões perfurados, dispositivos essencialmente seqüenciais. 3.2.2. SISTEMAS OPERACIONAIS TIME-SHARING Os sistemas operacionais do tipo time-sharing permitem interação de uma forma eficiente. Eles são implementados da seguinte forma: - O sistema operacional dispõe de multiprogramação; - Cada usuário possui um job ativo vinculado a um terminal; - A comunicação via terminal é lenta, sobra CPU para os outros; - Os usuários, ao longo do tempo, compartilham a CPU (time-sharing); A idéia de um sistema time-sharing foi demonstrada no início dos anos 60 e tornou-se comum no início da década seguinte. Alguns sistemas operacionais suportavam os dois ambientes (batch e time-sharing). 3.2.3. SISTEMAS OPERACIONAIS REAL-TIME Em um sistema de tempo real, o computador está ligado a processos externos (processos industriais, equipamentos cirúrgicos, etc.) que dependem fundamentalmente dos tempos de resposta do computador. Sinais dos processos externos acionam o computador através do sistema de interrupção; se estes sinais não são respondidos prontamente (em microsegundos ou milisegundos, dependendo da aplicação), os processos externos podem prosseguir de forma errada ou degradada. Nas aplicações de tempo real, o computador é apenas uma das peças do sistema (não a mais importante, em geral) e os “usuários” são os processos externos controlados pelo computador. 3.3. Serviços do Sistema Operacional Pode-se dizer que o principal objetivo de um sistema operacional é criar um ambiente para execução de programas. Seu objetivo é fornecer a infraestrutura e os mecanismos necessários para levar programas para a memória e supervisionar as execuções dos mesmos. A infraestrutura resultante fornece diversos tipos de serviços aos aplicativos e aos programadores. 3.3.1. TIPOS DE SERVIÇOS Serviços para facilitar o uso (aumentar a conveniência de uso do sistema): - Execução de programas; - Operações de I/O; 8 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Sistema de arquivos; - Detecção de erros. 3.3.2. SERVIÇOS PARA AUMENTAR A EFICIÊNCIA - Alocação de recursos; - Contabilizações; - Proteção 3.3.3. A VISÃO DO USUÁRIO O sistema operacional pode ser visto de diferentes ângulos. A visão do usuário é formada pelas chamadas de sistema disponíveis e pelos programas de sistema (também denominados utilitários). Com a utilização de interfaces gráficas, o usuário se comunica com o Sistema Operacional através de ícones e menus (via mouse e teclado). Com isso, deixou de haver a visão mais detalhada que havia quando a comunicação era textual (via linhas de comandos). Contudo, mesmo que isto fique escondido, o usuário se comunica com o Sistema Operacional sempre através de chamadas de sistema. 3.3.4. A VISÃO DO PROGRAMADOR DE SISTEMA A visão do programador de sistema é diferente. Ele percebe o sistema operacional como um servidor de interrupções cujo objetivo é administrar os recursos físicos de maneira a criar facilidades de uso para os usuários. O sistema operacional é um programa conduzido por eventos. Se não existem programas para executar ou E/S para fazer, o sistema operacional não faz nada. Neste contexto, um evento é a ocorrência de uma interrupção (de hardware ou de software). O sistema operacional é, portanto, dirigido por interrupções. Quando uma interrupção ou um trap ocorre, o sistema operacional é ativado. O evento sinalizado pode ser uma chamada de sistema, ou a indicação do término de uma determinada operação de dispositivo, ou ainda um erro na execução de um programa. 3.3.5. CHAMADAS DE SISTEMA Os programas utilizam as chamadas de sistema para solicitar serviços ao sistema operacional. Existem diversos tipos de chamadas de sistema. Chamadas de sistema para controle de processo ou job: - Término ou cancelamento de programa; - Carregar e executar programas; - Criar e terminar processos; 9 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Obter e alterar atributos de processos; - Esperar a passagem de certo tempo; - Esperar ou sinalizar a ocorrência de eventos. Chamadas ligadas à manipulação de arquivos: - Criar e remover arquivos; - Abrir, fechar, ler e escrever em arquivos; - Obter e alterar atributos de arquivos. Chamadas ligadas à manipulação de dispositivos: - Requisitar ou liberar dispositivo; - Ler e escrever em dispositivo; - Obter e alterar atributos de dispositivos. Chamadas ligadas à manutenção de informações: - Obter e alterar hora e data; - Obter e alterar dados do sistema; As interrupções por chamada de sistema podem ou não ser atendidas na hora. Por exemplo, uma chamada de sistema para ler a data pode ser atendida imediatamente. Entretanto, uma chamada de sistema para ler um setor de disco não poderá ser atendida imediatamente. O pedido feito será inserido na fila do driver. Enquanto o processo solicitante aguarda a realização da E/S, o sistema operacional entrega a CPU para outro programa. Dessa forma surgem diversos tipos de interrupções: - Interrupção de dispositivo de E/S (I/O devices); - Interrupção por erro em programa; 3.4. Processos Como sabemos um Sistema Operacional executa uma série de programas. Em muitas literaturas job e processos são quase sinônimos. Processo nada mais é que um programa em execução. Um processo inclui: - Contador de programa (PC) - Pilha - Segmento (área) de dados Ao executar, o processo muda de “estados”: - New: processo está sendo criado - Running: instruções do processo estão executando 10 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Waiting: processo está esperando ocorrência de algum evento - Terminated: processo terminou a execução Figura 8 - Processos Os processos para serem executados entram em uma fila e são submetidas a um escalonamento: - Fila de “jobs”: conjunto de todos os processos no sistema; - Fila de prontos (ready queue): conjunto de todos os processos que residem na memória principal, prontos para executar, mas não estão em execução; - Filas de dispositivos: conjunto de processos esperando por um dispositivo de I/O Os processos migram entre as diversas filas do sistema. Os escalonadores analisam o tipo de processo antes de processá-lo. Como visto os processos são classificados em: - I/O-bound processes − delimitados pelo tempo de I/O, gasta mais tempo fazendo I/O do que computações, muitas pequenas rajadas (bursts) de CPU; - CPU-bound processes − delimitados pelo tempo de CPU, gastam a maior parte do tempo fazendo computações; Poucas RAJADAS LONGAS de CPU. 3.5. Processos Cooperantes Processos Independentes não podem afetar ou serem afetados pela execução de outros processos. Processos Cooperantes podem afetar a execução de outros processos cooperantes (ou ter execução afetada) Vantagens da cooperação entre processos: - Compartilhamento de informações - Aumento da velocidade de computação (speed−up) 11 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Modularidade - Conveniência 3.6. Thread Uma thread (ou lightweight process) é uma unidade básica de utilização de CPU. Uma thread consiste de: - Apontador de instruções (PC) - Conjunto de registradores - Espaço de pilha A Thread é um processo de peso leve ou, também, linha de execução de um processo. A thread compartilha com outras threads pares (peers): - A seção de código - A seção de dados - Os recursos do SO Coletivamente tudo isso é conhecido como tarefa (task). Um processo tradicional (ou heavyweight process) é igual a uma tarefa com uma thread. Threads provêm um mecanismo que possibilita a um processo seqüencial fazer uma chamada bloqueante ao Sistema Operacional e ao mesmo tempo obter paralelismo no processo. 3.7. Comunicação entre processos (IPC) Para a comunicação entre processo são necessários mecanismos de comunicação e sincronização de suas ações. No sistema de mensagens os processos comunicam-se uns com os outros sem uso de variáveis compartilhadas. O Mecanismo de IPC por troca de mensagens provê duas operações: - Send (message): mensagens de tamanho fixo ou variável - Receive(message) Se P e Q querem comunicar, eles precisam: - Estabelecer um “canal” de comunicação entre si - Trocar mensagens via send/receive Para a comunicação é preciso um link de comunicação, seja ele físico (memória compartilhada, barramento de hardware) ou lógico (propriedades lógicas). 12 SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br 3.8. Resumo Histórico a. Computadores iniciais: Caros e Grandes. b. Anos 50: Com o spooling e a multiprogramação o objetivo era otimizar a utilização da CPU. c. Início dos anos 60: Sistemas de tempo compartilhado. Foi o primeiro passo na direção dos Sistemas Distribuídos, incorporando dois conceitos fundamentais: Compartilhamento de recursos Acesso remoto Os Terminais passam a ter maior capacidade de processamento passando a executar tarefas principais/comuns em um computador principal. A redução do tamanho, do preço e o aumento da velocidade no hardware, bem como maiores distâncias e confiabilidade na comunicação foram evoluções significativas. d. Final dos anos 60 e início dos anos 70: Surgimento das redes: Ethernet: LAN ARPANet: WAN Surgimento do Sistema Operacional UNIX. e. Final dos anos 70: Protoloco TCP/IP f. Início dos anos 80: Estações de trabalho 13