Download - Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads
![Page 1: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/1.jpg)
Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Chapter 4: Threads
![Page 2: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/2.jpg)
4.2 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Sobre a apresentação (About the slides)
Os slides e figuras dessa apresentação foram criados por Silberschatz, Galvin e Gagne em 2009. Esse apresentação foi modificada por Cristiano Costa ([email protected]). Basicamente, os slides originais foram traduzidos para o Português do Brasil.
É possível acessar os slides originais em http://www.os-book.com
Essa versão pode ser obtida em http://www.inf.unisinos.br/~cac
The slides and figures in this presentation are copyright Silberschatz, Galvin and Gagne, 2009. This presentation has been modified by Cristiano Costa ([email protected]). Basically it was translated to Brazilian Portuguese.
You can access the original slides at http://www.os-book.com
This version could be downloaded at http://www.inf.unisinos.br/~cac
![Page 3: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/3.jpg)
4.3 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Capítulo 4: Threads
Visão Geral
Modelos de Múltiplas Threads
Bibliotecas de Threads
Questões sobre Threads
Exemplos de Sistemas Operacionais
Threads no Windows XP
Threads no Linux
![Page 4: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/4.jpg)
4.4 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Objetivos
Introduzir a noção de uma thread — uma unidade fundamental de utilização de CPU que forma a base de sistemas computacionais com múltiplas threads (multithreaded)
Discutir as APIs de Pthreads, Win32, e Java
Examinar questões relacionadas a programação com múltiplas threads (multithreaded programming)
![Page 5: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/5.jpg)
4.5 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Processos com uma e múltiplas Threads
![Page 6: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/6.jpg)
4.6 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Benefícios
Responsividade
Compartilhamento de Recursos
Economia
Escalabilidade
Utilização de arquiteturas multiprocessadas (MP) ou multicore
![Page 7: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/7.jpg)
4.7 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Programação Multicore
Sistemas Multicore tem pressionado programadores, desafios incluem:
Dividir atividades
Balanceamento
Separação de dados (Data splitting)
Dependência de dados
Teste e depuração
![Page 8: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/8.jpg)
4.8 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Arquitetura de Servidor Multithreaded
![Page 9: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/9.jpg)
4.9 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Execução concorrente em um Sistema com um único core
![Page 10: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/10.jpg)
4.10 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Execução paralela em Sistemas Multicore
![Page 11: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/11.jpg)
4.11 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Threads em Nível Usuário
Gerência de Threads é feito por bibliotecas em nível de usuário
Três bibliotecas de threads principais:
POSIX Pthreads
Win32 threads
Java threads
![Page 12: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/12.jpg)
4.12 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Threads em Nível Kernel
Suportada pelo Kernel
Exemplos
Windows XP/2000
Solaris
Linux
Tru64 UNIX
Mac OS X
![Page 13: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/13.jpg)
4.13 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelos de Múltiplas Threads
Muitos-para-Um
Um-para-Um
Muitos-para-Muitos
![Page 14: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/14.jpg)
4.14 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelo Muitos-para-Um
Muitas threads em nível usuário são mapeadas para uma única thread no kernel
Exemplos:
Solaris Green Threads
GNU Portable Threads
![Page 15: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/15.jpg)
4.15 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelo Muitos-para-Um (cont.)
![Page 16: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/16.jpg)
4.16 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelo Um-para-Um
Cada thread em nível usuário é mapeada para uma thread em nível kernel
Exemplos
Windows NT/XP/2000
Linux
Solaris 9 e posteriores
![Page 17: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/17.jpg)
4.17 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelo Um-para-Um (cont.)
![Page 18: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/18.jpg)
4.18 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelo Muitos-para-Muitos
Permite que muitas threads em nível usuário sejam mapeadas para muitas threads em nível kernel
Permite que o sistema operacional crie um número suficiente de threads no kernel
Solaris versão anterior a 9
Windows NT/2000 com o pacote ThreadFiber
![Page 19: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/19.jpg)
4.19 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelo Muitos-para-Muitos (cont.)
![Page 20: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/20.jpg)
4.20 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelo de Dois Níveis
Similar ao M:M, exceto que ele permite que uma thread do usuário seja amarrada (bind) a uma thread no kernel
Exemplos
IRIX
HP-UX
Tru64 UNIX
Solaris 8 e anterior
![Page 21: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/21.jpg)
4.21 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Modelo de Dois Níveis (cont.)
![Page 22: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/22.jpg)
4.22 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Bibliotecas de Thread
Bibliotecas de Thread (Thread library) fornecem ao programador uma AP para criar e gerenciar threads
Duas formas principais de implementação
Biblioteca totalmente em espaço de usuário
Biblioteca em nível de kernel suportada pelo SO
![Page 23: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/23.jpg)
4.23 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Pthreads
Pode ser oferecida tanto em nível de usuário como de kernel
Uma API padrão POSIX (IEEE 1003.1c) para criação e sincronização de threads
A API especifica o comportamento da biblioteca de threads, a implementação está a cargo do desenvolvedor da biblioteca.
Comum nos sistemas operacionais UNIX (Solaris, Linux, Mac OS X)
![Page 24: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/24.jpg)
4.24 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Threads em Java
Java threads são gerenciadas pela JVM
Tipicamente implementadas usando o modelo de threads fornecido pelo SO em que executa
Java threads podem ser criadas:
Estendendo a classe Thread
Implementando a interface Runnable
![Page 25: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/25.jpg)
4.25 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Estados das Threads em Java
![Page 26: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/26.jpg)
4.26 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Questões sobre Threads
Semântica das chamadas de sistemas fork() e exec()
Cancelamento de Thread de uma thread alvo
Assíncrono ou delegado
Manipulação de Sinais
Conjunto de Thread (Thread Pools)
Dados Específicos de Thread
Ativações de Escalonamento
![Page 27: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/27.jpg)
4.27 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Semântica de fork() e exec()
O fork() duplica somente a thread chamadora ou todas as threads?
![Page 28: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/28.jpg)
4.28 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Cancelamento de Thread
Terminação de uma thread antes dela ter finalizado
Duas abordagens:
Cancelamento Assíncrono termina a thread alvo imediatamente
Cancelamento Delegado permite que a thread alvo seja periodicamente verificada se deve ser cancelada
![Page 29: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/29.jpg)
4.29 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Manipulação de Sinais
Sinais são usados nos sistemas UNIX para notificar um processo que um evento particular ocorreu
Um manipulador de sinais (signal handler) é usado para processar sinalizações
1. Sinal é gerado por um evento particular
2. Sinal é enviado a um processo
3. Sinal é manipulado
Opções:
Enviar o sinal para a thread para qual ele se aplica
Enviar o sinal para cada thread no processo
Enviar o sinal para determinadas threads no processo
Associar uma thread específica para receber todos os sinais enviados para o processo
![Page 30: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/30.jpg)
4.30 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Conjunto de Threads
Cria um número de threads que formam um conjunto para espera de trabalho
Vantagens:
Usualmente torna um pouco mais rápido o atendimento a uma requisição com uma thread existente do que criar uma nova
Permite que o número de threads na aplicação seja limitado pelo tamanho do conjunto
![Page 31: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/31.jpg)
4.31 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Dados Específicos de Thread
Permite que cada thread tenha seu próprio conjunto de dados
Útil quando não se tem controle sobre o processo de criação de threads (ex. quando se usa um conjunto de threads)
![Page 32: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/32.jpg)
4.32 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Ativações de Escalonamento
Tanto o modelo M:M quanto em dois níveis requer comunicação para manter o número apropriado de threads no kernel alocado para a aplicação
Ativações de escalonamento fornecem upcalls - um mecanismo de comunicação do kernel para a biblioteca de threads
Essa comunicação permite uma aplicação manter o número correto de threads no kernel
![Page 33: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/33.jpg)
4.33 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Exemplos de Sistemas Operacionais
Windows XP Threads
Linux Thread
![Page 34: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/34.jpg)
4.34 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Windows XP Threads
![Page 35: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/35.jpg)
4.35 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Linux Threads
![Page 36: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/36.jpg)
4.36 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Threads no Windows XP
Implementa o mapeamento um-para-um em nível de kernel
Cada thread contém
Um identificador de thread (id)
Conjunto de registrados
Pilhas separadas para kernel e usuário
Área privada de armazenamento de dados
O conjunto de registradores, pilhas e área de armazenamento privado são denominados contexto da thread
As principais estruturas de dados de uma thread são:
ETHREAD (executive thread block)
KTHREAD (kernel thread block)
TEB (thread environment block)
![Page 37: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/37.jpg)
4.37 Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Threads no Linux
No Linux são denominadas de tarefas (tasks) ao invés de threads
Criação de threads é feita através da chamada de sistemas clone()
clone() possibilita que uma tarefa filha compartilha o espaço de endereçamento com a tarefa pai (processo)
![Page 38: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads](https://reader038.vdocuments.site/reader038/viewer/2022102923/552fc172497959413d8ee9f7/html5/thumbnails/38.jpg)
Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8th Edition
Fim do Capítulo 4