Upload
internet
View
171
Download
4
Embed Size (px)
Citation preview
Conceitos de sistema operacional com Java – 7a edição, 15/11/2006 Silberschatz, Galvin e Gagne ©2007
Capítulo 4: Threads
4.2 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Capítulo 4: Threads
Visão geral Modelos de multithreading Questões de threading Pthreads Threads do Windows XP Threads do Linux Threads Java
4.3 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Processos de único e múltiplos threads
4.4 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Benefícios
Responsividade
Compartilhamento de recursos
Economia
Utilização de arquiteturas de MP
4.5 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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.
4.6 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Threads de kernel
Exemplos Windows XP/2000 Solaris Linux Tru64 UNIX Mac OS X
4.7 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Modelos de multithreading
Mapeamento entre threads do usuário e threads do kernel:
Muitos-para-um
Um-para-um
Muitos-para-muitos
4.8 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Muitos-para-um
Muitos threads em nível de usuário mapeados para único thread do kernel
Exemplos: Solaris Green Threads GNU Portable Threads
4.9 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Modelo muitos-para-um
4.10 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.11 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Modelo um-para-um
4.12 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.13 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Modelo muitos-para-muitos
4.14 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.15 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Modelo de nível dois
4.16 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Threads Java
Threads Java são gerenciados pela JVM
Threads Java podem ser criados por: Implementando a interface Runnable
4.17 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Threads Java - Programa de exemplo
4.18 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Threads Java - Programa de exemplo
4.19 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Estados de threads Java
4.20 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Threads Java – Produtor-Consumidor
4.21 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Threads Java - Produtor-Consumidor
4.22 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Threads Java - Produtor-Consumidor
4.23 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.24 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Semântica de fork() e exec()
fork() duplica apenas o thread que chama ou todos os threads?
4.25 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.26 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Cancelamento de thread
Cancelamento adiado em JavaInterrompendo um thread
4.27 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Cancelamento de thread
Cancelamento adiado em JavaVerificando status da interrupção
4.28 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.29 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.30 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.31 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Pools de threads
Uma tarefa a ser atendida em um pool de threads
4.32 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Pools de threads
Criando um pool de threads em Java
4.33 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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)
4.34 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Dados específicos do thread
Dados específicos do thread em Java
4.35 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.36 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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)
4.37 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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
4.38 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
Threads do Windows XP
4.39 Silberschatz, Galvin e Gagne ©2007Conceitos de sistema operacional com Java – 7a edição, 15/11/2006
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 Silberschatz, Galvin e Gagne ©2007
Final do Capítulo 4