Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
From Coulouris, Dollimore, Kindberg and Blair Distributed Systems: Concepts and Design Edition 5, © Addison-Wesley 2012 Capítulo 6: Sistema Operacional 1 Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Introdução A integração entre o middleware e o S.O. tem que ter bom desempenho; O S.O. juntamente com o hardware é chamado de plataforma; O S.O. (núcleo + serviços) fornece abstrações para o processamento, armazenamento e comunicação O middleware se utiliza dessas abstrações para implementar seus mecanismos de invocações remotas. Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Camadas do Sistema Aplicações, serviços Computator e Plataforma Middleware OS: kernel, bibliotecas e servidores Hardware de rede OS1 Computador e Hardware de rede Nó 1 Nó 2 Processos, threads, comunicação, ... OS2 Processos, threads, comunicação, ... 3 Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Introdução Nosso objetivo é analisar os mecanismos do S.O., em particular, sobre a capacidade do middleware de apresentar o compartilhamento de recursos distribuídos aos usuários; Componentes de interesse Núcleo Servidor Cliente O núcleo e os servidores gerenciam os recursos e apresentam aos clientes; O kernel + servidores devem proporcionar: Encapsulamento Proteção Processamento Concorrente Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Funcionalidades Básicas de um S.O. Gerenciador de Comunicação Gerenciador de Thread Gerenciador de Memória Supervisor Gerenciador de Processos 5 Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Funcionalidades Básicas do S.O. Gerenciador de Processos Trata da criação de processos e das operações neles executadas Um processo é uma unidade de gerenciamento de recursos, incluindo um espaço de endereçamento e uma ou mais threads. Gerenciador de Threads Serve para a criação de threads, sincronização e escalonamento. As threads são fluxos de execução associadas aos processos. Gerenciador de Memória Trata do gerenciamento da memória física e virtual. Gerenciador de Comunicação Trata da comunicação entre threads associadas a diferentes processos no mesmo computador. Alguns kernel suportam comunicação entre threads de processos remotos, outros necessitam de serviços adicionais. hamadak 6 Processos e Threads Um programa em execução é chamado de processo Cada processo possui, no mínimo, uma thread, que nada mais é que uma linha de execução. Um processo pode ser subdividido em três elementos básicos (ver figura 1): Contexto de Hardware; Contexto de Software; Espaço de Endereçamento. Contexto de Hardware: Conteúdo de registradores gerais da CPU, contador de programa (PC), apontador de pilha (SP) e de estados (status). Está armazenado nos registradores do processador quando o processo está em execução. Processos e Threads Troca de um processo por outro na CPU, comandada pelo SO, é chamada troca de contexto. Portanto, substituir o contexto de hardware de um processo pelo de outro. Contexto de Software Número máximo de arquivos abertos simultaneamente ou o tamanho do buffer para operações de E/S. Define basicamente três grupos de informação de um processo: identificação, quotas e privilégios. Espaço de Endereçamento Área de memória do processo onde o programa será executado, além do espaço para os dados utilizados por ele. Cada processo possui seu próprio espaço de endereçamento, que deve ser protegido contra acessos de outros processos. Processos e Threads Estrutura de um Processo Ambiente Monothread Um programa (tarefa) é uma seqüência de instruções, composto por desvios, repetições (iterações) e chamadas a procedimentos e/ou funções. Em um ambiente monothread, um processo suporta apenas um programa no seu espaço de endereçamento e apenas uma instrução do programa é executada por vez. Dessa forma, aplicações concorrentes e paralelas são criadas através de múltiplos processos independentes e/ou subprocessos. Estrutura de Processos e Subprocessos Ambiente Monothread A utilização de (sub)processos independentes permite dividir uma aplicação em partes que podem trabalhar de forma concorrente Por exemplo, suponha que um processo seja responsável pelo acesso a um banco de dados e existam vários usuários solicitando consultas sobre esta base. Caso um usuário solicite um relatório impresso de todos os registros, os demais usuários terão que aguardar até que a operação termine. Com o uso de múltiplos processos, cada solicitação implicaria na criação de um novo processo para atendê-la, aumentando o throughut da aplicação. Existem, porém, dois tipos de problemas nessa abordagem. Ambiente Monothread O uso de (sub)processos no desenvolvimento de aplicações concorrentes demanda consumo de diversos recursos do sistema Sempre que um novo processo é criado, o sistema deve alocar para ele recursos (contexto de HW, de SW e espaço de endereçamento), além de consumir tempo de CPU neste trabalho. No término do processo, o sistema dispensa tempo para desalocar recursos previamente alocados. Na figura a seguir, existem três processos, cada um com seu próprio contexto de hardware, de software e espaço de endereçamento. Ambiente Monothread Como cada processo possui seu próprio espaço de endereçamento, a comunicação entre os (sub)processos torna-se difícil e lenta, pois utiliza mecanismos tradicionais como pipes, sinais, semáforos, memória compartilhada ou troca de mensagem. Além disto, o compartilhamento de recursos comuns aos (sub)processos concorrentes, como memória e arquivos abertos não é simples. Ambiente Multithread Na tentativa de diminuir o tempo gasto na criação/eliminação de (sub)processos, bem como economizar recursos do sistema como um todo, foi introduzido o conceito de thread. Em um ambiente de múltiplos threads (multithread) não é necessário haver vários processos para se implementar aplicações concorrentes. Em um ambiente multithread não existe a idéia de um programas, mas de threads (linhas de execução). O processo, neste ambiente tem pelo menos um thread de execução podendo compartilhar seu espaço de endereçamento com inúmeros outros threads, que podem ser executados de forma concorrente e/ou simultânea, no caso de vários processadores. Ambiente Multithread Threads compartilham o processador da mesma maneira que um processo Por exemplo, enquanto um thread espera por uma operação de E/S, outro thread pode executar. Threads de um mesmo processo compartilham seu espaço de endereçamento, mas possuem seu próprio contexto de HW e SW, de forma natural e eficiente. Ambiente Multithread Aplicação Multithread Aplicação Multithread Editores de texto; Planilhas; Aplicativos gráficos; Processadores de imagens. Navegadores Web Ambiente Multithread Quando um thread está sendo executado, o contexto de hardware está sendo armazenado nos registradores do processador. No momento em que um thread perde a utilização do processador, o sistema salva suas informações. Threads passam pelos mesmos estados de um processo, ou seja, execução, espera e pronto. Ambiente Multithread A grande diferença entre (sub)processos e threads é em relação ao espaço de endereçamento Subprocessos possuem, cada um, espaços independentes e protegidos, threads compartilham o mesmo espaço de endereçamento do processo, sem nenhuma proteção, permitindo que um thread possa alterar dados de outro thread. Apesar dessa possibilidade, threads são desenvolvidos para trabalharem de forma cooperativa, voltados para desempenhar uma tarefa em conjunto. Ambiente Multithread Vantagens do Ambiente Multithread Programas concorrentes que utilizam múltiplos threads são mais rápidos do que implementados com múltiplos subprocessos. Como os threads compartilham os recursos do processo, a falta das operações de criação, troca de contexto e eliminação de threads geram um ganho de desempenho. Como os threads de um processo compartilham o mesmo espaço de endereçamento, a comunicação entre os threads pode ser feita utilizando o compartilhamento de memória (shared memory) de forma rápida e eficiente. Vantagens do Ambiente Multithread Os threads de um processo podem também facilmente compartilhar outros recursos, como descritores de arquivos, temporizadores, sinais, atributos de segurança, etc. A utilização dos recursos de hardware, como CPU, discos e periféricos, pode ser feita de forma concorrente por diversos threads, significando uma melhor utilização dos recursos computacionais disponíveis. Vantagens do Ambiente Multithread A utilização de threads pode melhorar o desempenho das aplicações apenas executando tarefas secundárias (background), enquanto que operações como entrada/saída estão sendo processadas. Vantagens do Ambiente Multithread As vantagens oferecidas em ambientes com múltiplos processadores podem ser aproveitadas em aplicações multithread, dispensando qualquer preocupação por parte dos desenvolvedores. O escalonamento é realizado com base na prioridade de cada thread, sendo selecionado aquele com maior prioridade. Dessa forma, o programador pode determinar níveis de prioridades dos threads em função de sua importância. Aplicações que podem ser naturalmente paralelizadas, como ordenação e pesquisa, obtém ganhos de desempenho por serem executadas em múltiplos processadores simultaneamente. Sistemas Distribuídos - Karina Oliveira 28 Vantagens do Ambiente Multithread em um SD Em ambientes distribuídos, threads são essenciais para solicitações de serviços remotos. Em um ambiente monothread, se uma aplicação solicita um serviço remoto, ela pode ficar esperando indefinidamente, enquanto aguarda pelo resultado. Em um ambiente multithread, um thread pode solicitar o serviço remoto enquanto a aplicação pode continuar realizando outras atividades úteis. Sistemas Distribuídos - Karina Oliveira 29 Vantagens do Ambiente Multithread em um SD Já para o processo que atende a solicitação, múltiplos threads permitem que diversos pedidos sejam atendidos concorrentemente e/ou simultaneamente. Neste caso, mecanismos de sincronização devem ser utilizados para proteger as estruturas de dados internas do núcleo. Ambiente Multithread em um SD Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Figure 7.4 Copy-on-write a) Before write b) After write Shared frame A's page table B's page table Process A’s address space Process B’s address space Kernel RA RB RB copied from RA 31 Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Cliente e Servidor com Threads Servidor N threads Entrada-saída Cliente Thread 2 faz pedidos T1 Thread 1 ao servidor gera resultados pedidos Recepção e enfileiramento Arquitetura ”Worker Pool” Próximo slide mostra um exemplo desta arquitetura programada em JAVA 32 Servidor TCP faz uma conexão para cada cliente e então encaminha a requisição do cliente Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Alternative server threading architectures a. Thread por requisição b. Thread por conexão c. Thread por objeto objetos trabalhadores I/O objetos objetos I/O Threads por conexão Threads por objeto remotos remotos remotos 34 Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Estados associados aos ambientes de execução e as threads Ambiente de Execução Thread Tabelas de espaço de endereçamento Registradores internosdo processador salvos Interfacesde comunicação, arquivos abertos Prioridade e estado da execução (como BLOCKED) Semáforos, outros objetos de sincronização Informação do tratamento da interrupção de software Lista de identificadores de thread Identificador do ambiente de execução Páginasdo espaço de endereçamento residentes na memória; entradas de cache em hardware 35 Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Programando Threads com Java Construtor e métodos de gerenciamento Thread(ThreadGroup group, Runnable target, String name) Cria uma nova thread no estado SUSPENDED, a qual pertencerá a group e será indentificado como name; a thread executará o método run() de target. setPriority(int newPriority), getPriority() Configura e retorna a prioridade da thread. run() A thread executa o método run() de seu objeto destino, caso ele tenha um; caso contrário, ela executa seu próprio método run() (Thread implementa Runnable). start() Muda o estado da thread de SUSPENDED para RUNNABLE. sleep(int millisecs) Passa a thread para o estado SUSPENDED pelo tempo especificado. yield() Passa para o estado READY e ativa o escalonamento. destroy() Termina a thread. 36 Instructor’s Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5 © Pearson Education 2012 Chamadas de sincronização na Java thread thread.join(int millisecs) Bloqueia até a thread terminar, mas não mais que o tempo especificado thread.interrupt() Interrompe a thread: faz com que ela retorne de uma invocação a método que causa bloqueio, como sleep(). object.wait(long millisecs, int nanosecs) Bloqueia a thread até que uma chamada feita para notify() ou notifyAll(), em object, ative a thread, ou que a thread seja interrompida, ou ainda, que o tempo especificado tenha decorrido. object.notify(), object.notifyAll() Ativa, respectivamente, uma ou todas as threads que tenham chamada wait() em object. 37 Arquitetura e Implementação O conjunto de chamadas (primitivas) disponíveis para que uma aplicação utilize as facilidades dos threads é chamado de pacote de threads (threads package). Existem diferentes abordagens para a implementação deste pacote em um SO, o que influenciará o desempenho, concorrência e modularidade das aplicações multithread. Threads em Modo Usuário; Threads em Modo Kernel; Threads em Modo Híbrido. Ambientes Arquitetura Distributed Computing Environment (DCE) Modo Usuário Compaq Open VMS versão 6 Modo Usuário Microsoft Windows 2000 Modo Kernel Compaq Unix Modo Kernel Compaq Open VMS versão 6 Modo Kernel Sun Solaris versão 2 Modo Híbrido University of WashingtonFastThreads SchedulerActivations Arquitetura e Implementação Arquitetura e Implementação Threads em modo usuário - TMU Implementados pela aplicação e não pelo SO. SO desconhece a presença de múltiplos threads. Aplicação deve gerenciar. Biblioteca de rotinas para realizar tarefas como criação/eliminação, troca de mensagens e política de escalonamento. Arquitetura e Implementação Threads em modo usuário - TMU Arquitetura e Implementação Threads em modo usuário - TMU Vantagens: Presença de threads mesmo em SOs que não suportam o recurso; TMU são rápidos e eficientes, pois evitam a mudança de acesso (usuário-kernel-usuário). Arquitetura e Implementação Threads em modo usuário – TMU Limitações: Thread executa rotina bloqueante, todo processo bloqueia também. Tratamento de sinais: interrupções de tempo, E/S. Não é possível escalonar múltiplos threads de um processo em várias CPUs, pois a unidade de escalonamento é o processo. Threads em modo kernel – TMK Implementados diretamente pelo núcleo do SO, através de chamadas a rotinas do sistema que oferecem todas as funções de gerenciamento e sincronização. Arquitetura e Implementação Threads em modo kernel – TMK Vantagens: Unidade de escalonamento é o thread; Várias CPUs podem executar simultaneamente os threads de um mesmo processo. Limitações: Overhead de mudança de modo de acesso (usuário-kernel-usuário) Arquitetura e Implementação Comparação entre tempos de latência (Anderson et al., 1992) Implementação Operação 1 (s) Operação 2 (s) Subprocessos 11.300 1.840 Threads em Modo Kernel 948 441 Threads em Modo Usuário 34 37 Arquitetura e Implementação Arquitetura e Implementação Threads em modo híbrido Combina as vantagens das implementações TMK e TMU. Um processo pode ter vários TMK e, por sua vez, um TMK pode ter vários TMU. Núcleo do SO reconhece os TMK e os escalona individualmente. Um TMU pode ser executado em um TMK, em um determinado momento, e no instante seguinte, mudar de TMK. Arquitetura e Implementação Threads em modo híbrido Programador desenvolve em termos de TMU e especifica quantos TMK estão associados ao processo. TMU são mapeados em TMK durante a execução do processo. Programador pode utilizar apenas TMK, TMU ou uma combinação de ambos. (Ver figura a seguir) Se TMK realiza chamada bloqueante, todos os TMU são colocados no estado de espera. Arquitetura e Implementação Threads em modo híbrido Exercícios Discuta cada das tarefas de encapsulamento, processamento, proteção, resolução de nomes, comunicação de parâmetros e resultados, e escalonamento, no caso do serviço de arquivos do UNIX (ou de outro kernel que seja familiar para você). Porque algumas interfaces de sistema são implementadas por chamadas de sistema dedicadas (ao núcleo) e outras por chamadas de sistema baseadas em mensagens? Os tratadores de sinal (interrupção de software) devem pertencer ao processo ou a thread? Compare a arquitetura multi-thread de pool de trabalhadores, com a arquitetura de uma thread por pedido. Quais operações de thread têm custo mais significativo? Explique o que o kernel deve fornecer para uma implementação de threads em nível de usuário como o Java no UNIX? 50
Compartilhar