cap4_threads_silberschatz.pps

Propaganda
Capítulo 4: Threads
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Silberschatz, Galvin e Gagne ©2007
Capítulo 4: Threads







Visão geral
Modelos de multithreading
Questões de threading
Pthreads
Threads do Windows XP
Threads do Linux
Threads Java
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.2
Silberschatz, Galvin e Gagne ©2007
Processos de único e múltiplos threads
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.3
Silberschatz, Galvin e Gagne ©2007
Benefícios

Responsividade

Compartilhamento de recursos

Economia

Utilização de arquiteturas de MP
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.4
Silberschatz, Galvin e Gagne ©2007
Threads de usuário e kernel

Threads do usuário – Gerenciamento de thread
feito pela biblioteca de threads em nível de
usuário.

Threads do kernel - Threads admitidos
diretamente pelo kernel.
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.5
Silberschatz, Galvin e Gagne ©2007
Threads de kernel
Exemplos
 Windows XP/2000
 Solaris
 Linux
 Tru64 UNIX
 Mac OS X
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.6
Silberschatz, Galvin e Gagne ©2007
Modelos de multithreading
Mapeamento entre threads do usuário e
threads do kernel:

Muitos-para-um

Um-para-um

Muitos-para-muitos
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.7
Silberschatz, Galvin e Gagne ©2007
Muitos-para-um


Muitos threads em nível de usuário
mapeados para único thread do kernel
Exemplos:
 Solaris Green Threads
 GNU Portable Threads
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.8
Silberschatz, Galvin e Gagne ©2007
Modelo muitos-para-um
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.9
Silberschatz, Galvin e Gagne ©2007
Um-para-um


Cada thread em nível de usuário é mapeado
para thread do kernel
Exemplos
 Windows NT/XP/2000
 Linux
 Solaris 9 em diante
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.10
Silberschatz, Galvin e Gagne ©2007
Modelo um-para-um
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.11
Silberschatz, Galvin e Gagne ©2007
Modelo muitos-para-muitos




Permite que muitos threads em nível de
usuário sejam mapeados para muitos threads
do kernel
Permite que o sistema operacional crie um
número suficiente de threads do kernel
Solaris antes da versão 9
Windows NT/2000 com o pacote ThreadFiber
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.12
Silberschatz, Galvin e Gagne ©2007
Modelo muitos-para-muitos
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.13
Silberschatz, Galvin e Gagne ©2007
Modelo de nível dois


Semelhante a M:M, exceto por permitir que
um thread do usuário sejam ligado ao
thread do kernel
Exemplos
 IRIX
 HP-UX
 Tru64 UNIX
 Solaris 8 e mais antigos
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.14
Silberschatz, Galvin e Gagne ©2007
Modelo de nível dois
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.15
Silberschatz, Galvin e Gagne ©2007
Threads Java

Threads Java são gerenciados pela JVM

Threads Java podem ser criados por:
 Implementando a interface Runnable
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.16
Silberschatz, Galvin e Gagne ©2007
Threads Java - Programa de exemplo
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.17
Silberschatz, Galvin e Gagne ©2007
Threads Java - Programa de exemplo
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.18
Silberschatz, Galvin e Gagne ©2007
Estados de threads Java
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.19
Silberschatz, Galvin e Gagne ©2007
Threads Java – Produtor-Consumidor
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.20
Silberschatz, Galvin e Gagne ©2007
Threads Java - Produtor-Consumidor
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.21
Silberschatz, Galvin e Gagne ©2007
Threads Java - Produtor-Consumidor
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.22
Silberschatz, Galvin e Gagne ©2007
Questões de threading






Semântica das chamadas do sistema fork() e
exec()
Cancelamento de thread
Tratamento de sinal
Pools de thread
Dados específicos do thread
Ativações do escalonador
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.23
Silberschatz, Galvin e Gagne ©2007
Semântica de fork() e exec()

fork() duplica apenas o thread que chama ou todos os
threads?
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.24
Silberschatz, Galvin e Gagne ©2007
Cancelamento de thread


Terminando um thread antes que ele tenha
terminado
Duas técnicas gerais:
 Cancelamento assíncrono termina o
thread de destino imediatamente
 Cancelamento adiado permite que o
thread de destino verifique
periodicamente se ele deve ser cancelado
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.25
Silberschatz, Galvin e Gagne ©2007
Cancelamento de thread
Cancelamento adiado em Java
Interrompendo um thread
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.26
Silberschatz, Galvin e Gagne ©2007
Cancelamento de thread
Cancelamento adiado em Java
Verificando status da interrupção
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.27
Silberschatz, Galvin e Gagne ©2007
Tratamento de sinal




Sinais são usados em sistemas UNIX para notificar
um processo de que ocorreu um evento em particular
Um manipulador de sinal é usado para processar
sinais
Um manipulador de sinal é usado para processar
sinais
1. Sinal é gerado por evento em particular
2. Sinal é entregue a um processo
3. Sinal é tratado
Opções:
 Entregar o sinal ao thread ao qual o sinal se aplica
 Entregar o sinal a cada thread no processo
 Entregar o sinal a certos threads no processo
 Atribuir uma área específica para receber todos os
sinais para o processo
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.28
Silberschatz, Galvin e Gagne ©2007
Pools de threads


Criam uma série de threads em um pool onde
esperam trabalho
Vantagens:
 Em geral, ligeiramente mais rápido para
atender ma solicitação com um thread
existente do que criar um novo thread
 Permite que uma série de threads nas
aplicações seja vinculada ao tamanho do
pool
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.29
Silberschatz, Galvin e Gagne ©2007
Pools de threads

Java oferece 3 arquiteturas de pool de threads:
1. Executor de único thread - pool de tamanho 1.
2. Executor de thread fixo - pool de tamanho
fixo.
3. Pool de threads em cache - pool de tamanho
ilimitado
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.30
Silberschatz, Galvin e Gagne ©2007
Pools de threads
Uma tarefa a ser atendida em um pool de threads
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.31
Silberschatz, Galvin e Gagne ©2007
Pools de threads
Criando um pool de threads em Java
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.32
Silberschatz, Galvin e Gagne ©2007
Dados específicos do thread


Permite que cada thread tenha sua
própria cópia dos dados
Útil quando você não tem controle
sobre o processo de criação de thread
(ou seja, ao usar um pool de threads)
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.33
Silberschatz, Galvin e Gagne ©2007
Dados específicos do thread
Dados específicos do thread em Java
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.34
Silberschatz, Galvin e Gagne ©2007
Ativações do escalonador



Os modelos M:M e de dois níveis exigem comunicação
para manter o número apropriado de threads de kernel
alocados à aplicação
Ativações do escalonador oferece upcalls – um
mecanismo de comunicação do kernel para a
biblioteca de threads
Essa comunicação permite que uma aplicação
mantenha o número correto de threads do kernel
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.35
Silberschatz, Galvin e Gagne ©2007
Pthreads



Uma API padrão POSIX (IEEE 1003.1c) para
criação e sincronismo de thread
A API especifica o comportamento da
biblioteca de threads, a implementação fica
para o desenvolvimento da biblioteca
Comum em sistemas operacionais UNIX
(Solaris, Linux, Mac OS X)
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.36
Silberschatz, Galvin e Gagne ©2007
Threads do Windows XP



Implementa o mapeamento um-para-um
Cada thread contém
 Uma id de thread
 Conjunto de registradores
 Pilhas de usuário e kernel separadas
 Área privativa de armazenamento de
dados
O conjunto de registradores, pilhas e área de
armazenamento privativa são conhecidos
como o contexto dos threads
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.37
Silberschatz, Galvin e Gagne ©2007
Threads do Windows XP
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.38
Silberschatz, Galvin e Gagne ©2007
Threads do Linux



Linux se refere a eles como tarefas ao
invés de threads
A criação de thread é feita por meio da
chamada do sistema clone()
clone() permite que uma tarefa filha
compartilhe o espaço de endereços da
tarefa pai (processo)
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
4.39
Silberschatz, Galvin e Gagne ©2007
Final do Capítulo 4
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Silberschatz, Galvin e Gagne ©2007
Download