Buscar

Sistema Operacional e Middleware

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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando