Conceitos de sistema operacional com Java – 7 a edição, 15/11/2006 Silberschatz, Galvin e Gagne...

Preview:

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

Recommended