Buscar

SD 05 - Suporte do Sistema Operacional

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 23 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 23 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 23 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í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

Outros materiais