Upload
alexandre-duarte
View
2.171
Download
0
Embed Size (px)
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 threads
Citation preview
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
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