Buscar

ARQUITETURA DE SISTEMAS DISTRIBUIDOS (37)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Sistemas DistribuídosSistemas Distribuídos
ComputaçãoComputação
Aula 21-22: Suporte de Sistema OperacionalAula 21-22: Suporte de Sistema Operacional
2o. Semestre / 2014
Prof. Jesus
I
Suporte do sistema operacionalSuporte do sistema operacional
● Como middleware é auxiliado pelo sistema 
operacional 
● Fornecer acesso a recursos de forma eficiente e 
robusta
● Oferecer flexibilidade com relação ao gerenciamento 
de recursos
I
Dois tipos de sistemas operacionaisDois tipos de sistemas operacionais
● Sistema operacional de rede
– Windows, Linux e suas versões
● Possuem recursos para acessar rede em busca de 
recursos remotos
● Fornecem autonomia para gerenciar seus próprios 
recursos
● Múltiplas imagens de sistema
I
Dois tipos de sistemas operacionaisDois tipos de sistemas operacionais
● Sistema operacional distribuído
● Usuários rodam seus programas sem se preocupar 
com sua localização e como os recursos são obtidos e 
utilizados
● Sistema operacional possui controle sobre todos os 
nós do sistema
● Única imagem de sistema
SO Distribuído vs. SO de RedeSO Distribuído vs. SO de Rede
● SO Distribuído
– Sistema homogêneo
– Imagem de sistema 
único
– Gerenciamento de 
recursos global
● SO de Rede
– Sistema heterogêneo
– Computadores 
autônomos
– Cada computador 
gerencia seus 
próprios recursos
– Maioria dos SOs 
existentes hoje
I
SO Distribuído vs. SO de RedeSO Distribuído vs. SO de Rede
● Predominância dos SOs de rede ocorre principalmente por 
duas razões:
– Usuários preferem SOs que dão suporte aos 
programas que atendem suas necessidades
– Usuários preferem SOs que fornecem maior 
autonomia para suas máquinas
● A combinação de SOs de rede e middlewares oferece um 
melhor equilíbrio entre autonomia e compartilhamento de 
recursos
I
Camadas de sistemaCamadas de sistema
● Camada de SO: responsável por gerenciar recursos e 
fornecer uma interface para sua utilização.
– Encapsulamento: fornece um conjunto de operações e oculta 
detalhes de gerenciamento e implementação de recursos
– Proteção: contra acessos inválidos. Ex: usuários não 
autenticados
– Concorrência: permitir que mais de um cliente tenha acesso 
aos recursos de forma transparente
I
Camadas do sistemaCamadas do sistema
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, ...
I
Mecanismo de invocaçãoMecanismo de invocação
● Clientes requisitam recursos localmente ou remotamente
● Necessária uma combinação de bibliotecas, kernel e 
processos servidores para atender as seguintes 
relacionadas com invocação:
– Comunicação: parâmetros e resultados passados entre 
clientes e gerenciadores de recursos
– Escalonamento: quando uma operação é requisitada, a 
mesma deve ser escalonada dentro do kernel ou processo 
servidor
I
Funcionalidade do SOFuncionalidade do SO
Gerente de processos
Gerente de Threads Gerente de memória
Gerente de
Comunicação
Supervisor
I
Funcionalidade do SOFuncionalidade do SO
● Gerente de processos: cuida da criação e gerenciamento de 
processos
● Gerente de threads: criação, sincronização e escalonamento de 
threads
● Gerente de comunicação: cuida da comunicação de threads 
pertencentes a diferentes processos
● Gerente de memória: responsável pela memória física e virtual
I
Funcionalidade do SOFuncionalidade do SO
● Supervisor
– Emite interrupções, chamadas de sistema e outras exceções
– Controle de gerenciamento de memória e caches de 
hardware
– Manipulação de registradores
– No Windows é chamada de Camada de Abstração de 
Hardware
I
ProteçãoProteção
● Cada processo: um espaço de endereçamento 
separado
– ambiente de execução com recursos (memória, sockets, 
arquivos abertos etc) de acesso restrito ao processo
● Proteção garantida pelo kernel
● Níveis de proteção típicos (Unix)
– nível de kernel: acesso irrestrito
– nível de usuário
● Um mesmo processo pode passar de um nível para 
outro através de interrupções (ou chamadas ao sistema)
I
Processos e Processos e threadsthreads
● Processo: ambiente de execução
– Espaço de endereçamento
– Recursos para sincronização e comunicação entre 
threads
– Recursos de alto nível (arquivos abertos, janelas)
● Thread: atividade (“linha” de execução)
– Uma ou múltiplas threads em um processo
– Compartilham o espaço de endereçamento de um 
processo
● Sem proteção entre threads
I
Processos - Espaço de endereçamentoProcessos - Espaço de endereçamento
● Gerenciar memória virtual de um processo
● Constituída por regiões que são áreas da memória virtual 
acessíveis somente pelas threads do processo
● Regiões possuem as seguintes características:
– Extensão (endereço mais baixo e tamanho)
– Permissões de escrita/leitura/execução para threads
– Se podem expandir para cima ou para baixo
– Não se sobrepõem
I
Processos - Espaço de endereçamentoProcessos - Espaço de endereçamento
Stack
Text
Heap
Auxiliary
regions
0
2N
I
Criação de processosCriação de processos
● Criação de um novo ambiente de execução
– A partir de uma definição estática
– A partir de uma cópia do espaço de endereçamento 
do processo pai (no caso de fork)
I
Criação de processosCriação de processos
● Cópia otimizada: uso da técnica de copy-on-
write
● Memória virtual é copiada mas a memória física 
não
● Memória física só é copiada quando um dos 
processos (pai ou filho) tenta modificá-la.
I
Copy-on-writeCopy-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
I
ProcessosProcessos
● Contexto:
 – estruturas de dados (variáveis em memória)
 – descritores de arquivos e sockets
● Atividade:
 – fluxo de execução
 – registradores, pilha de execução
 – outros recursos exclusivos para execução
● Alternar processos = trocar contextos
● Alternar threads = trocar atividades
I
ProcessosProcessos
● A troca de contexto é uma operação cara
(+/- 10% do tempo de CPU)
● Para trocar de atividade, precisamos
sempre trocar de contexto ?
– Aplicações com concorrência interna
● Solução → threads:
 múltiplas atividades em um mesmo contexto
I
Processos com uma ou várias threadsProcessos com uma ou várias threads
I
ThreadsThreads
● Importantes na arquitetura dos componentes 
de software de sistemas distribuídos
● No Cliente:
– Permitem que outras ações ocorram simultanea-
mente com chamadas remotas bloqueantes
● No Servidor:
– Permitem servir várias requisições (de vários ou do 
mesmo cliente) simultaneamente
I
Clientes e servidores com Clientes e servidores com threadsthreads
Server
N threads
Input-output
Client
Thread 2 makes
T1
Thread 1
requests to server
generates 
results
Requests
Receipt &
queuing
I
Arquiteturas para servidores com Arquiteturas para servidores com threadsthreads
a. Thread-per-request b. Thread-per-connection c. Thread-per-object
remote
workers
I/O remoteremote I/O
per-connection threads per-object threads
objects objects objects
I
Thread por requisiçãoThread por requisição
● Uma thread é criada para cada requisição
● Depois a thread é destruída quando a requisição é 
completada
● Não precisam disputar um espaço na fila e throughput 
otimizado
● Aumento na carga de processamento (overhead)
I
Thread por conexão e por objetoThread por conexão e por objeto
● Thread por conexão:
– Uma thread é criada para cadaconexão
– Depois a thread é destruída quando a conexão é encerrada
● Thread por objeto:
– Uma thread para cada objeto remoto
– Cada objeto remoto possui sua própria fila
I
Thread por conexão e por objetoThread por conexão e por objeto
● Baixo overhead em comparação à arquitetura thread 
por requisição
● Algumas threads podem estar sobrecarregadas 
enquanto outras threads ociosas
I
Estado associado com ambientes de Estado associado com ambientes de 
execução e execução e threadsthreads
Ambiente de execução Thread
Tabelas dos espaços de endereçamento Valores gravados no registradores
Interfaces de comunicação, arquivos
abertos
Prioridade e estado de execução (tais 
como BLOCKED)
Semáforos, outros mecanismos de
sincronização
Informações com relação tratamento de 
interrupções do software
Lista de identificadores das threads Identificador do ambiente de execução
Páginas do espaço de endereçamento residente na memória;
Entradas de cache de hardware
I
Threads – Nível de ImplementaçãoThreads – Nível de Implementação
● Nível do usuário
– gerenciamento das threads é feito pela aplicação
– o núcleo desconhece a existência de threads
– chaveamento entre threads não requer privilégio de 
modo núcleo; isso elimina o gasto de dois 
chaveamentos de modo
– escalonamento é feito pela aplicação
– Maior portabilidade pois pode ser implementada 
através de bibliotecas
I
Threads – Nível de ImplementaçãoThreads – Nível de Implementação
● Nível do usuário
– chamada ao sistema bloqueia todas as threads de um 
processo
– não aproveita os benefícios do multiprocessamento 
pois estão dentro de algum processo!
I
Threads – Nível de ImplementaçãoThreads – Nível de Implementação
● Nível do kernel
– gerenciamento das threads é feito pelo núcleo
– núcleo mantém a informação de contexto para 
processo e threads
– escalonamento e chaveamento das threads é 
feito pelo núcleo
– bloqueio de uma thread não bloqueia as outras
I
Threads – Nível de ImplementaçãoThreads – Nível de Implementação
● Nível do kernel
– threads podem aproveitar a capacidade de 
multiprocessamento
– usuário enxerga uma API para threads do núcleo
● A transferência de controle entre threads de um 
mesmo processo requer chaveamento para modo 
núcleo
I
Threads - VantagensThreads - Vantagens
● É mais rápido criar um thread que um processo
● É mais rápido terminar um thread que um processo
● É mais rápido chavear entre threads de um mesmo
processo
● Threads podem se comunicar sem invocar o núcleo
já que compartilham memória e arquivos
 ● IPC : troca de mensagens
 memória compartilhada
I
Threads - VantagensThreads - Vantagens
● Maior facilidade para construir aplicações
 com múltiplas atividades (Pseudo-paralelismo)
 – Mais adequado para implementar diversas
 atividades que compartilham recursos comuns
 – Ex.: Editor de texto → manipulando um arquivo
I
Threads - DesvantagensThreads - Desvantagens
● Nem todos os sistemas as suportam
● Falta de padronização
● Exigem maior controle de concorrência no
acesso aos recursos comuns
 – Risco de dados inconsistentes
● Aplicações menos robustas
 – Se um thread travar, a aplicação pode travar
I
Programação com threadsProgramação com threads
● Programação concorrente
– Condições de corrida, seções (ou regiões) críticas
– Monitores, variáveis de condição, semáforos
● Duas alternativas
– Bibliotecas em linguagens convencionais
● pthreads em C
– Construções nativas da linguagem
● Ada95, Modula-3, Java
I
Caso de Estudo: ThreadsCaso de Estudo: Threads em Java em Java
● Vantagens
– Portabilidade (Máquina Virtual)
– API nativa que fornece suporte para threads
● Pode ser implementada de duas maneiras
– Herdando da classe Thread ou
– Implementando a interface Runnable
I
Herdando da classe ThreadHerdando da classe Thread
I
Implementando a interface RunnableImplementando a interface Runnable
I
Implementando a interface RunnableImplementando a interface Runnable
I
Caso de Estudo: ThreadsCaso de Estudo: Threads em Java em Java
● A execução do programa pode ser definida através do 
diagrama abaixo:
I
Mapeamento de threads em JavaMapeamento de threads em Java
● A The green-thread model : threads são escalonados 
pela JVM
– Usado pelos sistemas UNIX (Linux)
● The native-thread model : threads são escalonados 
pelo sistema operacional que hospeda a JVM
– Usados pelos sistemas Windows (Vista, 7, 8)
I
Caso de Estudo: ThreadsCaso de Estudo: Threads em Java em Java
Thread() 
Creates a new thread in the SUSPENDED state, 
setPriority(int newPriority), getPriority()
Set and return the thread’s priority.
run()
A thread executes the run() method of its target object, if it has one, and otherwise 
its own run() method (Thread implements Runnable).
start()
Change the state of the thread from SUSPENDED to RUNNABLE. 
sleep(int millisecs)
Cause the thread to enter the SUSPENDED state for the specified time.
yield()
 Enter the READY state and invoke the scheduler.
destroy()
Destroy the thread.
I
Estado das Threads em JavaEstado das Threads em Java
I
Iniciando threads em Java Iniciando threads em Java 
● Depois que start() retorna, o thread esté no estado "Runnable"
● O thread está "pronto para rodar"
● Se a máquina tiver um único processador, só se pode rodar de 
fato uma thread de cada vez
● O sistema Java (JVM) deve implementar um esquema de 
escalonamento que compartilhe a CPU entre todos os threads 
que estão no estado "Runnable"
● Portanto, um thread que está no estado "Runnable" pode, de 
fato, estar esperando a CPU
I
Estado Estado dede não-executando não-executando de uma Thread de uma Thread 
● Pode ser : bloqueado, esperando, adormecido ou morto
● Um thread deixa de executar quando um dos seguintes eventos 
ocorre:
– O método sleep() é chamado (adormecido)
– O thread chama o método wait() que espera por uma 
condição (esperando)
– O thread faz um system call "lento" tal como um system 
call que causa I/O (bloqueado)
– O método run() termina a sua execução (morto)
●
I
Testando o estado de uma Thread em Java Testando o estado de uma Thread em Java 
● A partir do Java 5, pode-se usar o método Thread.getState 
que retorna:
– NEW
– RUNNABLE
– BLOCKED
– WAITING
– TIMED_WAITING
– TERMINATED
● Pode-se também chamar o método isAlive()
– TRUE significa que o thread está no estado Runnable 
ou no estado Non-Runnable
I
Sincronização de Threads Sincronização de Threads 
● Existem situações em que threads devem compartilhar dados e 
são obrigados a se preocupar com o que os outros estão 
fazendo
● Um exemplo disso é o caso Produtor/Consumidor em que um 
Produtor produz um fluxo de dados consumidos pelo 
consumidor
● Por exemplo, um thread (o produtor) poderia estar gravando 
dados num arquivo enquanto outra thread (o consumidor) lê os 
dados do mesmo arquivo
I
Sincronização de Threads Sincronização de Threads 
● Outro exemplo: enquanto você digita no teclado, o produtor 
coloca eventos de mouse numa fila de eventos e o consumidor 
lê os eventos da mesma fila
● Em ambos os casos, temos threads que compartilham um 
recurso comum
● Com tal compartilhamento, as threads devem se sincronizar 
para acessar o recurso
I
Exemplo Produtor/Consumidor Exemplo Produtor/Consumidor 
● Um produtor gera um número entre 0 e 9 e o armazena num 
objeto chamado Resources (os recursos são os números)
● Neste exemplo o produtor dorme durante um intervalo aleatório 
entre 0 e 100 milisegundos antes de gerar mais números
● O consumidor consome os inteiros do mesmo Resources 
asssim que se tornam disponíveis
● O produtor e o consumidor compartilham dados através de um 
objeto ResourcesI
Exemplo Produtor/Consumidor Exemplo Produtor/Consumidor 
● Vamos supor que não houvesse sincronização entre os 
threads. Que problemas poderiam ocorrer?
● Um problema ocorre quando o produtor é mais rápido do que o 
consumidor e gera dois números antes de o consumidor ter 
chance de consumir o primeiro
● Nessa situação, o consumidor perde um número:
I
Exemplo Produtor/Consumidor Exemplo Produtor/Consumidor 
● Um outro problema ocorre quando o consumidor é mais rápido 
do que o produtor
● Um número pode ser consumido duas (ou mais)vezes:
I
Exemplo Produtor/Consumidor Exemplo Produtor/Consumidor 
● Um problema desse tipo se chama uma condição de corrida
● Condições de corrida levam a resultados imprevisíveis e a 
bugs sutis, difíceis de achar
● Sincronização dentro da classe Resources para:
– O produtor ter uma forma de dizer ao consumidor que um novo 
número está disponível para consumo
– O consumidor ter uma forma de dizer ao produtor que o número foi 
consumido, liberando a produção de outro número
– A classe Object do Java provê métodos (wait, notify, notifyAll) para 
permitir que threads esperem por uma condição e notificar 
outros threads quando uma condição ocorre
I
Exemplo Produtor/Consumidor Exemplo Produtor/Consumidor 
● As threads não devem acessar o Resources simultaneamente
● Utilizamos a palavra-chave synchronized nos métodos get e put
● Seções críticas
– public synchronized int get(int id) { ... }
– public synchronized void put(int id, int value) { ... }
I
Exemplo Produtor/Consumidor Exemplo Produtor/Consumidor 
● Devemos implementar uma maneira para que uma thread 
sinalize a outra quando pode continuar
● Isso é feito com os métodos wait e notifyAll:
● O método wait faz a thread que o chamou esperar pelo 
recurso
● O método notifyAll “avisa” para a(s) thread(s) em espera 
que o recurso está disponível
I
Exemplo Produtor/Consumidor Exemplo Produtor/Consumidor 
● Desta forma o programa gera a saída correta:
Producer #1 put: 0
Consumer #1 got: 0
Producer #1 put: 1
Consumer #1 got: 1
Producer #1 put: 2
Consumer #1 got: 2
…
Producer #1 put: 9
Consumer #1 got: 9
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Figure 6.1 System layers
	Slide 9
	Figure 6.2 Core OS functionality
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Figure 6.3 Address space
	Slide 17
	Slide 18
	Figure 6.4 Copy-on-write
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Figure 6.5 Client and server with threads
	Figure 6.6 Alternative server threading architectures (see also Figure 6.5)
	Slide 26
	Slide 27
	Slide 28
	Figure 6.7 State associated with execution environments and threads
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35
	Slide 36
	Slide 37
	Figure 6.8 Java thread constructor and management methods
	Slide 39
	Slide 40
	Slide 41
	Slide 42
	Slide 43
	Slide 44
	Slide 45
	Slide 46
	Slide 47
	Slide 48
	Slide 49

Outros materiais