gerências de processos: threads
DESCRIPTION
Introduzir a noção de thread, uma unidade fundamental de utilização de CPU e que representa a base da maioria dos sistemas computacionais modernos Questões relacionadas a criação de threadsTRANSCRIPT
![Page 1: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/1.jpg)
Gerências de Processos: Threads
Sistemas Operacionais I
Prof. Alexandre Duarte : http://alexandrend.comCentro de Informática | Universidade Federal da Paraíba
Estes slides são baseados no material que acompanha o livro Operating Systems Concepts de Silberschatz, Galvin and Gagne
![Page 2: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/2.jpg)
Objetivos
Introduzir a noç ão de thread, uma unidade fundamental de utilizaç ão de CPU e que representa a base da maioria dos sistemas computacionais modernos
Questões relacionadas a criaç ão de threads
![Page 3: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/3.jpg)
Processo com thread único e com múltiplos threads
![Page 4: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/4.jpg)
Benefícios
Responsividade
Compartilhamento de recursos
Economia
Escalabilidade
![Page 5: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/5.jpg)
Programação com múltiplos núcleos
Sistemas com múltiplos núcleos pressionam os programadores
Os desafios incluem Particionamento das atividades Balanç o Particionamento dos dados Dependência dos dados Teste e depuraç ão
![Page 6: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/6.jpg)
Arquitetura de um servidor multi-threaded
![Page 7: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/7.jpg)
Execução concorrente em um sistema de núcleo único
![Page 8: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/8.jpg)
Execução paralela em um sistema com múltiplos núcleos
![Page 9: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/9.jpg)
Threads do usuário
Gerencia de threads feita por bibliotecas carregadas no nível do usuário
Três principais bibliotecas de threads: POSIX Pthreads Win32 threads Java threads
![Page 10: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/10.jpg)
Threads do Núcleo
Gerenciadas pelo pró prio sistema operacional
Exemplos Windows XP/2000 Solaris Linux Tru64 UNIX Mac OS X
![Page 11: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/11.jpg)
Modelos de Multi-threading
Muitos-para-um
Um-para-um
Muitos-para-muitos
![Page 12: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/12.jpg)
Muitos-para-um
Muitas threads do usuário mapeadas para uma única thread do núcleo
Exemplos: Solaris Green
Threads GNU Portable
Threads
![Page 13: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/13.jpg)
Um-para-um
Cada thread do usuário é mapeada uma uma thread do núcleo
Exemplos Windows NT/XP/2000 Linux Solaris 9 e posterior
![Page 14: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/14.jpg)
Muitos-para-muitos
Permite que muitas threads do usuário sejam mapeadas em muitas threads do núcleo
Exemplos Solaris antes da
versão 9 Windows NT/2000
como o pacote ThreadFiber
![Page 15: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/15.jpg)
Modelo em dois níveis
Similar ao M:M porém também permite que uma thread do usuário seja associada a uma thread do núcleo
Exemplos IRIX HP-UX Tru64 UNIX Solaris 8 e anteriores
![Page 16: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/16.jpg)
Bibliotecas de threads
Bibliotecas de threads oferecem uma API para criaç ão e manipulaç ão de threads
Duas formas primárias de implementaç ão Biblioteca localizada inteiramente no espaç o do
usuário Biblioteca localizada no núcleo com suporte do
SO
![Page 17: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/17.jpg)
Pthreads
Pode ser fornecida tanto no nível do usuário quanto no núcleo
API padrão POSIX (IEEE 1003.1c) para criaç ão e sincronizaç ão de threads
A API especifica unicamente o comportamento da biblioteca, a implementaç ão fica a cargo dos desenvolvedores
Comum em sistemas operacionais UNIX (Solaris, Linux, Mac OS X)
![Page 18: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/18.jpg)
Java Threads
Threads em Java são gerenciados pela JVM
Tipicamente implementados de acordo com o modelo de threads do sistema operacional “hospedeiro”
Threads em Java podem ser criados Estendendo a classe Thread Implementando a interface Runnable
![Page 19: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/19.jpg)
Questões relacionadas a criação de threads
As chamadas de sistema fork() e exec()
Cancelamento de threads Assíncrono versus adiado
Manipulaç ão de sinais Pools de Thread Dados específicos de threads Ativaç ões do escalonador
![Page 20: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/20.jpg)
As chamadas de sistema fork() e exec()
O fork() duplica apenas o thread que invocou a chamada ou todos os threads do programa ?
O que acontece com o exec() ?
![Page 21: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/21.jpg)
Cancelamento de threads
Cancelar uma thread antes de sua conclusão
Duas abordagens Cancelamento assíncrono: termina
a thread alvo imediatamente Cancelamento adiado: permite que
a thread alvo verifique periodicamente se ela deve ser cancelada
![Page 22: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/22.jpg)
Manipulação de sinais
Sinais são utilizados no UNIX para notificar um processo de que um determinado evento ocorreu
Todos os sinais seguem o mesmo padrão São gerados por um evento particular São entregues a um processo São manipulados pelo processo
Opç ões: Entregar o sinal para a thread a qual ele se aplica Entregar o sinal para todas as threads do processo Entregar o sinal para certas threads do processo Escolher uma thread específica para receber todos os sinais do
processo
![Page 23: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/23.jpg)
Pools de threads
Cria um número de threads em um pool onde elas aguardam por trabalho
Vantagens: Geralmente é um pouco mais rápido requisitar
uma thread já existente do que criar uma nova thread
Permite que o número de threads na(s) aplicaç ão(ões) seja limitado ao tamanho do pool
![Page 24: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/24.jpg)
Dados específicos de threads
Permite que cada thread tenha sua pró pria có pia dos dados
Útil quando não se tem controle sobre o processo de criaç ão de threads (ex., quando se usa um thread pool)
![Page 25: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/25.jpg)
Ativações do escalonador
Tanto o modelo M:M quanto o de dois níveis utilizam uma estrutura de dados intermediária (LWP) entre as threads do núcleo e do usuário
O LWP funciona como um processador virtual para a aplicaç ão no qual a aplicaç ão pode agendar a execuç ão de uma thread
O núcleo, em seguida, atribui uma de suas threads para executar a thread do usuário associada a um LWP
![Page 26: Gerências de Processos: Threads](https://reader034.vdocuments.com.br/reader034/viewer/2022042514/559ba3521a28abed148b471b/html5/thumbnails/26.jpg)
Ativações do escalonador
Para esse esquema funciona, o núcleo precisa notificar a aplicaç ão sobre certos eventos de escalonamento de threads
Essa notificaç ão é feita através de um procedimento chamado upcall e a esse esquema de comunicaç ão é conhecido com ativação do escalonador