Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Distribuídos Suporte do Sistema Operacional Joinvile Batista Junior UFGD - SD 05 - Joinvile Batista Junior 2 Suporte do Sistema Operacional A : Sistemas Operacionais Rede x Sistemas Distribuídos B : Multiprocessadores de Memória Compartilhada C : Proteção D : Processos x Threads E : Criação de um Novo Processo F : Threads UFGD - SD 05 - Joinvile Batista Junior 3 A : Sistemas Operacionais Rede x Sistemas Distribuídos 1. Compare SOs Distribuídos com SOs de Rede. UFGD - SD 05 - Joinvile Batista Junior 4 Camadas de Serviços Applications, services Computer & Platform Middleware OS: kernel, libraries & servers network hardware OS1 Computer & network hardware Node 1 Node 2 Processes, threads, communication, ... OS2 Processes, threads, communication, ... Software and hardware service layers in distributed systems Applications, services Computer and network hardware Platform Operating system Middleware UFGD - SD 05 - Joinvile Batista Junior 5 Sistemas Operacionais de Rede • Unix, Mac OS e Windows são exemplos de SOs de Rede – têm um recurso de interligação em rede incorporado • portanto: podem ser usados para acessar recursos remotos – o acesso à rede é transparente para alguns tipos de recursos • por meio de um sistema de arquivos distribuídos (como NFS) – os usuários tem acesso transparente aos arquivos na rede » muitos arquivos são armazenados de forma remota: totalmente transparente para seus aplicativos – mas não para todos os recursos • os nós que estão sendo executados na rede mantém autonomia sobre seus próprios recursos de processamento – ao contrário do controle exercido pelo SO nos processos que estão sendo executados em seu próprio nó – ele não não escalona os processos nos outros nós UFGD - SD 05 - Joinvile Batista Junior 6 Sistemas Operacionais Distribuídos • SO produz um única imagem do sistema para todos os recursos de um sistema distribuído – nunca se preocuparia • com o local onde os programas estão sendo executados • ou com a localização de quaisquer recursos – teria total controle sobre todos os nós do sistema • e dispararia novos processos de forma transparente – no nó mais conveniente: de acordo com sua política de escalonamento » por exemplo no nó menos carregado do sistema • não existem SOs Distribuídos para uso geral: somente SOs de Rede – usuários tem muito investimento em softwares aplicativos • não adotarão um SO que execute seus aplicativos independente das vantagens relacionadas à eficiência que ele ofereça – usuários preferem ter uma certo grau de autonomia em suas máquinas UFGD - SD 05 - Joinvile Batista Junior 7 B : Multiprocessadores de Memória Compartilhada 1. Comente o suporte fornecido pelos Multiprocessadores de Memória Compartilhada. UFGD - SD 05 - Joinvile Batista Junior 8 Multiprocessadores de Memória Compartilhada • computadores multiprocessadores de memória compartilhada – vem equipados com vários processadores • que compartilham um ou mais módulos de RAM • na arquitetura de processamento simétrico – cada processador executa o mesmo núcleo – e os núcleos executam papéis equivalentes no gerenciamento de recursos de hardware • os núcleos compartilham suas principais estruturas de dados – como a fila de threads prontas para execução • os multiprocessadores podem ser usados para muitas tarefas de alto desempenho – em particular são úteis para servidores • que podem executar um único programa com várias threads – para tratar simultaneamente requisições de vários clientes – fornecendo acesso a um banco de dados compartilhado UFGD - SD 05 - Joinvile Batista Junior 9 C : Proteção 1. Identifique ameaças à integridade e proteção contra acesso ilegítimo. 2. Compare Java com C++ e C, do ponto de vista de proteção. 3. Qual o papel do núcleo na proteção dos recursos do computador e no chaveamento de espaço de endereçamento? UFGD - SD 05 - Joinvile Batista Junior 10 Proteção • a ameaça à integridade de um sistema pode provir de: – código malicioso – código benígno contendo erros ou comportamento imprevisto • acesso ilegítimo – operações só podem ser executadas pelos clientes que tenham o direito de executá-las – somente as operações disponibilizadas por um dado recurso podem ser executadas • em uma linguagem fortemente tipada (como: Java, Módula-3) – um módulo só pode acessar outro se tiver uma referência validada para ele – o que não ocorre com C e C++ • programador pode definir um ponteiro e convertê-lo para um tipo qualquer: e assim realizar quaisquer invocações e acessos UFGD - SD 05 - Joinvile Batista Junior 11 Proteção • Núcleo – código sempre ativado com privilégios de acesso completos aos recursos físicos do computador • pode controlar a unidade de gerenciamento de memória e configurar os registradores do processador – de modo que nenhum outro código possa acessar os recursos físicos da máquina • configura espaços de endereçamento para proteger a si mesmo e a outros processos – um processo não pode executar fora do seu espaço de endereçamento – o processo núcleo é executado em modo supervisor (privilegiado) • e providencia para que os outros processos executem em modo usuários (não privilegiado) UFGD - SD 05 - Joinvile Batista Junior 12 Proteção • Chaveamento de espaço de endereçamento – alternância entre modo usuário e modo núcleo • através de interrupção • ou uma chamada do sistema: mecanismo de invocação de recursos do núcleo – processador entra em modo supervisor • e passa para o espaço de endereçamento do núcleo – operação mais dispendiosa do que a chamada de método • pode ocupar muitos ciclos de processador UFGD - SD 05 - Joinvile Batista Junior 13 D : Processos x Threads 1. Qual a vantagem da utilização de várias threads em um único ambiente de execução para mono e multiprocessadores? UFGD - SD 05 - Joinvile Batista Junior 14 Um processo com Múltiplas Threads Process Thread activations Activation stacks (parameters, local variables) UFGD - SD 05 - Joinvile Batista Junior 15 Processo e Threads • Aprimorar a noção de processo para suportar concorrência – atualmente, um processo consiste de um ambiente de execução com um ou mais threads (fluxos de controle) • Ambiente de Execução – um espaço de endereçamento – recursos de sincronização e comunicação entre threads • ex: semáforos e sockets – recursos de nível mais alto: arquivos e janelas abertas • A criação e a destruição de Ambientes de Execução é dispendiosa – mas várias threads podem compartilhar os recursos disponíveis – fornece proteção contra as threads de outros ambientes de execução • Objetivo de se ter múltiplas threads em execução – maximizar o grau de execução concorrente entre operações • permitindo a sobreposição da computação com E/S – execução simultânea em máquinas com multiprocessadores UFGD - SD 05 - Joinvile Batista Junior 16 Espaço de Endereçamento • unidade de gerenciamento de memória virtual de um processo – normalmente possui grande capacidade: 2**32 bytes (às vezes: 2**64) – consiste de uma ou mais regiões separadas por áreas não acessíveis de memória virtual • região: área contígua de memória virtual acessível para as threads do processo que a possui e caracterizada por – sua extensão: menor endereço virtual e tamanho – permissões (leitura, gravação, execução) para as threads do processo – pode crescer em ambas as direções (para baixo e para cima) – região de pilha separada por thread • facilita detectar tentativas de ultrapassar os limites UFGD - SD 05 - Joinvile Batista Junior 17 Espaço de Endereçamento • representação do espaço de endereçoscomo um conjunto esparso de regiões desmembradas – é um generalização do endereçamento do UNIX que possui 3 regiões • região de texto (fixa não modificável): código do programa • região heap (pode ser estendida para endereços virtuais mais altos): com parte inicializada por valores armazenados no arquivo binário do programa • região de pilha (pode ser estendida para endereços virtuais mais baixos) • regiões extras no espaço de endereçamento: compartilhadas entre processos de usuário ou entre processo de usuário e o núcleo – bibliotecas: compartilhamento de um espaço considerável – núcleo: evita troca de novo conjunto de mapeamentos de endereços – compartilhamento de dados e comunicação: entre processos UFGD - SD 05 - Joinvile Batista Junior 18 E : Criação de um Novo Processo 1. Comente diferentes políticas de localização de processo para a escolha do processador hospedeiro. 2. Conceitue suporte à migração de processos em balanceamento de carga e comente os problemas associados. 3. Conceitue criação de um novo ambiente de execução e a otimização por cópia de escrita. UFGD - SD 05 - Joinvile Batista Junior 19 Criação de um Novo Processo • tradicionalmente é uma operação indivisível fornecida pelo SO – ex: chamada de sistema fork no Unix • cria um processo com ambiente de execução copiado do processo que efetuou a chamada • exec: processo carrega um novo código e executa • para um SD: deve levar em conta a utilização de vários computadores – consequentemente: a infra-estrutura de suporte a processos é dividida em distintos serviços de sistema • a criação de um novo processo pode ser separada em 2 aspectos independentes – a escolha de um host (hospedeiro) de destino • ex: host escolhido entre nós de um cluster (agrupamento) de computadores – a criação de um ambiente de execução • e de uma thread inicial dentro dele UFGD - SD 05 - Joinvile Batista Junior 20 Escolha do Host • escolha do nó do novo processo: emprego de políticas – desde executar na estação de trabalho de seus criadores – até o balanceamento entre um conjunto de computadores • categorias de políticas para balanceamento de carga – política de transferência: criação local ou remota • ex: se nó local está pouco ou muito carregado – política de localização: qual nó deve receber o novo processo • depende: das cargas relativas dos nós, de suas arquiteturas de máquinas, e dos recursos especializados que eles possam ter – ex: estação de trabalho ociosa – ex: em conjunto de processadores compartilhados • transparente para o programador e para o usuário UFGD - SD 05 - Joinvile Batista Junior 21 Escolha do Host • políticas de localização de processo – estáticas: operam sem considerar estado corrente, embora considerem características de longo prazo • baseadas em análise matemática para otimizar um parâmetro – ex: quantidade de processadores executados por unidade de tempo – determinísticas (ex:transferir sempre para nó B) ou probabilísticas (ex:transferir aleatóriamente) – dinâmicas: aplicam heurísticas com base em fatores de tempo de execução imprevisíveis • ex: medida de carga de um nó UFGD - SD 05 - Joinvile Batista Junior 22 Escolha do Host • sistemas de balanceamento de carga – centralizados: único gerenciador de carga – hierárquicos ou descentralizados: vários organizados em uma estrutura em árvore • tomam decisões de alocação no nível mais baixo possível • mas sob certas condições de carga: podem transferir processos uns para os outros – ex: considerar nós como compradores e vendedores de recursos computacionais em economia de mercado • alguns sistemas de balanceamento oferecem suporte à migração – podem transferir carga a qualquer momento: não só na criação – pouco utilizados: custo computacional e dificuldade de extrair estado do processo do núcleo do SO • simplicidade é fundamental para balanceamento de carga – custo de coletar informações de carga e tomar decisões de balanceamento: pode comprometer a vantagem de usá-lo UFGD - SD 05 - Joinvile Batista Junior 23 Criação de um Novo Ambiente de Execução • a criação de um novo processo exige um ambiente de execução composto por espaço de endereçamento com conteúdos inicializados • duas estratégias para definir e inicializar o espaço de endereçamento de um processo recentemente criado – formato de endereçamento de um processo definido estaticamente – espaço de endereçamento definido em relação a uma ambiente de execução existente • formato de endereçamento de um processo definido estaticamente – ex: pode conter apenas uma região de texto, uma de heap e uma de pilha – neste caso as regiões são criadas a partir de uma lista que especifica seus tamanhos e inicializadas a partir de um arquivo executável UFGD - SD 05 - Joinvile Batista Junior 24 Criação de um Novo Ambiente de Execução • espaço de endereçamento definido em relação a uma ambiente de execução existente – ex: semântica fork do UNIX; processo filho compartilha região de texto com pai e tem cópias separadas de heap e pilha – este esquema foi generalizado • cada região do processo pai pode ser herdada ou omitida pelo processo filho • uma região herdada pode ser compartilhada (mapeada simultaneamente na região do processo filho) ou logicamente copiada da região do pai • alguns núcleos aplicam uma otimização chamada “cópia de escrita” – região copiada sem nenhuma cópia física por default – cópia ocorre somente após escrita modificando a região UFGD - SD 05 - Joinvile Batista Junior 25 F : Threads 1. Compare multiprocessos x multithreads do ponto de vista de desempenho e de segurança. 2. Explique os cenários para avaliar a taxa de rendimento de threads. UFGD - SD 05 - Joinvile Batista Junior 26 Threads x Múltiplos Processos • vários processos single-threads X um processo multi-threads – threads são computacionalmente mais baratas de serem criadas e gerenciadas do que processos – o compartilhamento de recursos pode ser obtido de forma mais eficiente entre threads • processos x threads – desempenho: menos oneroso • criar uma nova thread em um processo existente X criar um processo • o chaveamento de uma thread diferente em um mesmo processo X chavear threads em processos diferentes • compartilhamento de dados e recursos entre threads de um mesmo processo X entre threads de processos distintos – segurança • threads de um mesmo processo não são protegidas umas das outras UFGD - SD 05 - Joinvile Batista Junior 27 Threads x Múltiplos Processos • criação: processo x thread – thread em ambiente de execução existente • alocar uma região para sua pilha • fornecer valores iniciais para os registradores internos do processador • definir estado de execução (suspended ou runnable) • valor para a prioridade inicial da thread • identificador do ambiente de execução no registro descritor de uma thread – processo: tempo para criar 11x maior • um novo ambiente de execução deve ser criado – tabelas de espaço de endereçamento – interfaces de comunicação, arquivos abertos – semáforos, outros objetos de sincronização – lista de identificadores das threads UFGD - SD 05 - Joinvile Batista Junior 28 Taxa de Rendimento de Threads • Cenário de comparação de taxa de rendimento (throughput) em sistemas multithreads e multiprocessadores – servidor com pool de uma ou threads • cada thread retira um pedido da fila de requisições e o processa – por simplicidade: condições iniciais • não se preocupar com o modo que os pedidos são recebidos e enfileirados • cada pedido tem 2 ms de processamento: cada thread executa o mesmo código para processar o pedido • cada pedido tem 8 ms de E/S para leitura em disco: semutilização de cache • servidor tem um único processador • Objetivo da comparação – considerar a taxa de rendimento máxima do servidor: medida em pedidos de clientes manipulados por segundo • para diferentes números de threads UFGD - SD 05 - Joinvile Batista Junior 29 Taxa de Rendimento de Threads • Cenário 1: uma única thread (novas mensagens são enfileiradas) – pedido = 2 + 8 ms 100 pedidos/s • Cenário 2: duas threads escalonadas independentemente (uma thread pode executar enquanto a outra está bloqueada para E/S) – bloqueio de E/S = 8 ms com processamento em || 125 pedidos/s • Cenário 3: 2 threads e cache de blocos de disco (75% de acerto) – bloqueio de E/S = 0,75x0 + 0,25x8 = 2 ms 500 pedidos/s • Cenário 4: Cenário 3 com tempo de processamento de 2,5 ms (devido ao acesso ao cache) – processamento > E/S média = 2,5 ms 400 pedidos/s • Cenário 5: 2 threads escalonadas em 2 processadores (multiprocessador com memória compartilhada: 1 thread por CPU) – cada processador = 2,5 + 2 2 pedidos em 4,5 ms 444 pedidos/s UFGD - SD 05 - Joinvile Batista Junior 30 F : Threads 1. Compare as arquiteturas de servidores multithreads: pool, por requisito, por conexão. UFGD - SD 05 - Joinvile Batista Junior 31 Threads no Cliente e no Servidor Client Thread 2 makes Thread 1 requests to server generates results Server N threads Input-output Requests Receipt & queuing UFGD - SD 05 - Joinvile Batista Junior 32 Arquiteturas de Servidores Multithreads • arquitetura do pool de trabalhadores – com uma única fila • servidor cria um pool fixo de thread trabalhadores para processar pedidos • thread de E/S recebe e enfileira pedidos para serem recuperados pelas threads trabalhadores – múltiplas filas de pedidos por prioridade • threads trabalhadores percorrem as filas em ordem decrescente de prioridade – desvantagem: falta de flexibilidade • número de threads trabalhadoras pode ser pequeno demais para tratar adequadamente a taxa de pedidos • grande quantidade de chaveamentos entre threads de E/S e trabalhadoras acessando uma fila compartilhada UFGD - SD 05 - Joinvile Batista Junior 33 Arquiteturas Alternativas para Threads no Servidor a. Thread-per-request b. Thread-per-connection c. Thread-per-object remote workers I/O objects server process remote per-connection threads objects server process remoteI/O per-object threads objects server process UFGD - SD 05 - Joinvile Batista Junior 34 Arquiteturas de Servidores Multithreads • arquitetura thread por pedido – gera uma nova thread a cada pedido: thread trabalhador auto terminará após processar o pedido – vantagem • threads não disputam fila compartilhada • maximiza taxa de rendimento: thread de E/S cria tantas threads trabalhadoras quantas forem necessárias sem manter pedidos pendentes – desvantagem • sobrecarga de operações de criação e destruição de threads UFGD - SD 05 - Joinvile Batista Junior 35 Arquiteturas de Servidores Multithreads • arquitetura thread por conexão – criação de uma nova thread a cada nova conexão estabelecida pelo cliente • destruição quanto a conexão é fechada pelo cliente – variação: por objeto remoto • thread E/S enfileira pedidos para as threads associadas a cada objeto remoto do servidor – vantagem • menor sobrecarga de gerenciamento de threads em relação a thread por pedido – desvantagem da thread por conexão • uma thread tem vários pedidos pendentes • outro thread está ociosa UFGD - SD 05 - Joinvile Batista Junior 36 Threads em Clientes • primeira thread: gera resultados a serem passados para um servidor – não exige resposta: continua gerando resultados e armazenando – só bloqueia se buffer de armazenamento estiver cheio • segunda thread: invoca método remoto no servidor e bloqueia • utilização de clientes multithreads fica evidente nos navegadores web – manipulam vários pedidos de páginas paralelamente • para minimizar sensação de espera do usuário UFGD - SD 05 - Joinvile Batista Junior 37 F : Threads 1. Explique o ciclo de vida de uma thread. 2. Explique a utilização de grupos de threads. UFGD - SD 05 - Joinvile Batista Junior 38 Ciclo de Vida de uma Thread • uma nova thread é criada, na mesma Java Virtual Machine (JVM) que sua criadora, no estado SUSPENDED – JVM e as threads são todas executadas em um único processo no SO • após se tornar RUNNABLE com o método start() – ela executa o método run() de um objeto fornecido no construtor • a thread pode receber um prioridade – de forma a priorizar a execução de uma thread em detrimento de threads de menor prioridade • a thread termina quanto retorna do método run() – ou quando seu método destroy() é chamado UFGD - SD 05 - Joinvile Batista Junior 39 Gerenciamento de Grupos de Threads • toda thread pertence a um grupo designado no momento da sua criação • grupos de threads são úteis quanto aplicativos coexistem na mesma Java Virtual Machine – uma thread de um grupo não pode executar operações de gerenciamento de uma thread de outro grupo – facilitam o controle de prioridades relativas das threads • util para navegadores que executam Applets • e para servidores de web que executam Servets para criar páginas dinâmicas – uma thread não privilegiada de um Applet ou Servet só pode criar uma nova thread que pertença a seu grupo ou a um grupo descendente – navegadores e servidores podem atribuir threads, pertencentes a diversos applets ou threads, a diversos grupos • e configurar a prioridade máxima de cada grupo UFGD - SD 05 - Joinvile Batista Junior 40 Construtor de Thread • Thread(ThreadGroup group, Runnable target, String name) – cria uma nova Thread no estado SUSPENDED – a thread pertence ao grupo (group) e será identificada pelo nome (name) – a thread executará o método run() do alvo (target) UFGD - SD 05 - Joinvile Batista Junior 41 Métodos de Gerenciamento de Threads • setPriority(int newPriority) – define a prioridade da thread • getPriority() – retorna a prioridade da thread • run() – uma thread executa o método run() do objeto alvo (target), se ela tem um – do contrário, executa seu próprio método run() --- thread implements Runnable start() – muda o estado da thread de SUSPENDED para RUNNABLE • sleep(int millisecs) – Leva a thread a entrar no estado SUSPENDED pelo tempo especificado • yield() – entra no estado READY e invoca o escalonador (scheduler) • destroy() – destrói a thread UFGD - SD 05 - Joinvile Batista Junior 42 F : Threads 1. Explique o conceito de sincronização de threads para suportar exclusão mútua. 2. Compare escalonamento de threads preemptivo com não-preemptivo. UFGD - SD 05 - Joinvile Batista Junior 43 Sincronização de Threads • threads não possuem cópias privativas de suas variáveis estáticas e nem de variáveis de instâncias de objetos – no exemplo da filas compartilhadas por threads de E/S e threads trabalhadores podem ocorrer race conditions em função da manipulação concorrente das filas • pedidos enfileirados podem ser perdidos ou duplicados • Java suporta o conceito de monitor através do modificador synchronized – garantindo que no máximo uma thread sincronizada possa executar em um dado momento – no exemplo das filas compartilhadas poderiam ser utilizados • métodos sincronizados: addTo() e removeFrom() UFGD - SD 05 - Joinvile Batista Junior 44 Sincronização de Threads • Java permite que threads sem bloqueadas (object.wait()) e liberadas (object.notify()) por meio de objetos arbitrários que atuam como variável de condição – ex: da fila compartilhada • quando um tread trabalhador descobre que não existenenhum pedido para processar: chama wait() na instância de Queue (fila compartilhada) • quando uma thread de E/S adiciona, subsequentemente, um pedido na fila: chama o método notify() na instância de Queue para ativar a thread trabalhador suspensa • método join(): bloqueia o chamador até o término de uma outra thread • método interrupt(): ativa prematuramente um thread em espera UFGD - SD 05 - Joinvile Batista Junior 45 Sincronização de Threads • thread.join(int millisecs) – bloqueia a thread chamadora pelo tempo especificado até que a thread termine • thread.interrupt() – interrompe a thread – leva a thread a retornar de um método de bloqueio tal como sleep() • object.wait(long millisecs, int nanosecs) – bloqueia a thread chamadora até que uma chamada feita para notify() ou notifyall() em um objeto que acorda a thread – ou a thread é interrompida ou o tempo especificado tem estourado – simula operação de semáforo • object.notify() – acorda respectivamente uma thread que tem chamado wait() no objeto – simula operação de semáforo • object.notifyAll() – idem para todas as threads que tem chamado wait() no objeto UFGD - SD 05 - Joinvile Batista Junior 46 Escalonamento de Threads • escalonamento não-preemptivo – um thread é executada até realizar um operação que a bloqueie • e leve ao escalonamento de outra thread – vantagem: qualquer seção de código que não contenha uma operação que possa bloqueá-la • funciona como uma região crítica: garantindo exclusão mútua – desvantagem: seções de código longas que não provoquem escalonamento • escalonamento preemptivo – uma thread pode ser suspensa, em qualquer ponto de sua execução • para a execução de outra thread – necessária para tratar prioridades • fundamentais em tempo real: controle de processos em plantas industriais – por padrão Java não suporta tempo real • mas existem implementações para tempo real
Compartilhar