Você está na página 1de 40

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