Gerências de Processos: Threads
Sistemas Operacionais I
Prof. Alexandre Duarte : http://alexandrend.com
Centro 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
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
Processo com thread único e com
múltiplos threads
Benefícios
 Responsividade
 Compartilhamento de recursos
 Economia
 Escalabilidade
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
Arquitetura de um servidor multi-threaded
Execução concorrente em um sistema
de núcleo único
Execução paralela em um sistema com múltiplos
núcleos
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
Threads do Núcleo
 Gerenciadas pelo pró prio sistema operacional
 Exemplos
 Windows XP/2000
 Solaris
 Linux
 Tru64 UNIX
 Mac OS X
Modelos de Multi-threading
 Muitos-para-um
 Um-para-um
 Muitos-para-muitos
Muitos-para-um
 Muitas threads do
usuário mapeadas
para uma única
thread do núcleo
 Exemplos:
 Solaris Green
Threads
 GNU Portable
Threads
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
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
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
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
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)
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
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
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() ?
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
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
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
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)
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
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

Gerências de Processos: Threads

  • 1.
    Gerências de Processos:Threads Sistemas Operacionais I Prof. Alexandre Duarte : http://alexandrend.com Centro 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
  • 2.
    Objetivos  Introduzir anoç ã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
  • 3.
    Processo com threadúnico e com múltiplos threads
  • 4.
    Benefícios  Responsividade  Compartilhamentode recursos  Economia  Escalabilidade
  • 5.
    Programação com múltiplosnú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
  • 6.
    Arquitetura de umservidor multi-threaded
  • 7.
    Execução concorrente emum sistema de núcleo único
  • 8.
    Execução paralela emum sistema com múltiplos núcleos
  • 9.
    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
  • 10.
    Threads do Núcleo Gerenciadas pelo pró prio sistema operacional  Exemplos  Windows XP/2000  Solaris  Linux  Tru64 UNIX  Mac OS X
  • 11.
    Modelos de Multi-threading Muitos-para-um  Um-para-um  Muitos-para-muitos
  • 12.
    Muitos-para-um  Muitas threadsdo usuário mapeadas para uma única thread do núcleo  Exemplos:  Solaris Green Threads  GNU Portable Threads
  • 13.
    Um-para-um  Cada threaddo usuário é mapeada uma uma thread do núcleo  Exemplos  Windows NT/XP/2000  Linux  Solaris 9 e posterior
  • 14.
    Muitos-para-muitos  Permite quemuitas 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
  • 15.
    Modelo em doisní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
  • 16.
    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
  • 17.
    Pthreads  Pode serfornecida 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)
  • 18.
    Java Threads  Threadsem 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
  • 19.
    Questões relacionadas acriaçã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
  • 20.
    As chamadas desistema 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() ?
  • 21.
    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
  • 22.
    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
  • 23.
    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
  • 24.
    Dados específicos dethreads  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)
  • 25.
    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
  • 26.
    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