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