Buscar

Aula 05 Threads

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Federal de Ouro Preto - UFOP
Departamento de Computação e Sistemas - DECSI
CSI437 – Sistemas Operacionais
Prof. Samuel Brito
Threads
Referência: Capítulo 4 do livro Sistemas Operacionais com Java (7ª edição)
2
Introdução
• O modelo de processo apresentado nas aulas anteriores 
considerava que o processo era um programa em execução 
com uma única thread de controle.
– Sistemas operacionais modernos fornecem recursos permitindo 
que um processo tenha diversas threads de controle.
– Multithreading - multitarefa.
• Multithreading pode ser suportada por um computador 
com uma única CPU?
– Sim!
– Threads executam de forma concorrente!
3
Visão Geral
• Processo:
– Programa em execução.
– Espaço de endereçamento.
– Recursos de sincronização e comunicação.
– Recursos de mais alto nível.
• Thread (Linha ou Encadeamento de execução):
– Forma de um processo dividir a si mesmo em duas ou mais tarefas que podem 
ser executadas concorrentemente.
– Fluxo de controle de instruções.
– Compartilham recursos do processo.
– Objetivo:
• Maximizar o grau de execução concorrente.
– Sobreposição de E/S e processamento.
4
Visão Geral
• Uma thread é uma unidade básica de utilização de CPU.
– ID de thread
– Contador de programa
– Conjunto de registradores
– Pilha
• Compartilha com outras threads pertencentes ao mesmo 
processo:
– Seção de código
– Seção de dados
– Outros recursos (arquivos abertos, sinais, etc.)
5
Visão Geral
• Um processo tradicional (ou pesado) possui uma única thread de controle.
– Múltiplas threads de controle permitem realizar mais de uma tarefa ao mesmo tempo.
Processo dotado de única thread Processo dotado de múltiplas threads
6
Motivação
• Muitos pacotes de software executados nos 
computadores modernos são dotados de múltiplas 
threads.
– Um processo, várias threads de controle.
– Exemplos:
• Navegador Web
– Uma thread exibindo imagens ou texto.
– Outra thread recebe dados da rede.
• Processador de textos
– Uma thread para exibir gráficos.
– Outra thread para ler os toques de tecla do usuário.
– Uma terceira thread para verificação ortográfica e gramatical.
7
Motivação
• Criação de processos é demorada e exige muitos 
recursos.
– Exemplo:
• Servidor Web
– Vários clientes fazendo requisições concorrentemente.
– Um processo tradicional atenderia uma única requisição por vez.
– Solução inicial: criar um processo para atender cada requisição.
– Se o novo processo tiver de realizar as mesmas tarefas 
do processo existente, por que incorrer em um custo 
adicional?
• Solução é a utilização de múltiplas threads.
8
Motivação
• Threads também estão presentes no kernel dos sistemas 
operacionais modernos.
– Realizam tarefas específicas:
• Gerenciamento de dispositivos, gerenciamento de memória, 
tratamento de interrupções, etc.
– Exemplos:
• Solaris cria um conjunto de threads no kernel especificamente 
para o tratamento de interrupções.
• Linux utiliza uma thread no kernel para gerenciar a memória livre.
9
Benefícios da Utilização de Threads
1. Capacidade de resposta:
– Uso de threads em uma aplicação interativa pode 
permitir que um programa continue funcionando 
mesmo que parte dele esteja bloqueada ou 
realizando uma operação longa.
• Exemplo:
– Usuário clica em um botão que causa a execução de uma operação 
demorada.
– Aplicação com uma única thread deixaria de responder ao usuário até que 
a operação fosse concluída.
» Se a operação demorada for executada em uma thread separada, a 
aplicação continuará respondendo ao usuário.
10
Benefícios da Utilização de Threads
2. Compartilhamento de recursos:
– Processos só podem compartilhar recursos por 
meio de técnicas como memória compartilhada e 
troca de mensagens.
• Tarefa do programador.
– Threads compartilham memória e outros recursos 
do processo ao qual pertencem.
– Uma aplicação pode ter várias threads de 
atividades diferentes dentro do mesmo espaço de 
endereços.
11
Benefícios da Utilização de Threads
3. Economia:
– Alocação de memória e recursos para a criação de processos é dispendiosa.
– Mais econômico criar e trocar o contexto das threads.
• No Solaris a criação de um processo é cerca de trinta vezes mais lenta do que a criação 
de uma thread.
– Troca de contexto é 5 vezes mais lenta.
4. Utilização de arquiteturas multiprocessadas:
– Benefícios do uso de threads em uma arquitetura multiprocessada pode ser 
muito maior.
• Threads executadas em paralelo nos diferentes processadores.
• Aumenta a concorrência.
– Processo com uma única thread só pode ser executado em um processador, 
mesmo em um ambiente mulitprocessado.
12
Tipos de Paralelismo
• Paralelismo de dados:
– Distribuição de subconjuntos dos mesmos dados 
por múltiplos núcleos de computação.
• Mesma operação em cada núcleo.
– Exemplo:
• Somar os conteúdos de um vetor de tamanho N.
– Um processador:
» Somar todos os elementos de 0 a N-1.
– Dual-core:
» Núcleo 0 executaria operações de 0 a N/2 -1.
» Núcleo 1 executaria operações de N/2 a N - 1
13
Tipos de Paralelismo
• Paralelismo de tarefas:
– Distribuição de tarefas (threads) em vários núcleos 
de computação separados.
• Diferentes threads podem estar operando sobre os 
mesmos dados ou sobre dados diferentes .
– Exemplo:
• Calcular a média aritmética e a mediana de um vetor 
de tamanho N.
– Uma thread para calcular a média e outra para calcular a 
mediana.
MODELOS DE MÚLTIPLAS THREADS
Threads
15
Multithreading
• Threads de usuário vs Threads de kernel:
– Implementações com compromissos diferentes.
• Threads de usuário:
– Executa em modo usuário.
– Uma biblioteca é responsável por gerenciar essas threads.
• Criar, remover, escalonar, etc.
– O núcleo do S.O. não interfere nas threads.
– Exemplo:
• Posix Pthreads, Java Threads, etc.
16
Multithreading
• Threads de kernel:
– O núcleo oferece suporte a threads.
– Gerenciadas diretamente pelo S.O.
• Chamadas de sistema.
• Mais lentas que threads de usuário.
– Exemplo:
• Windows, Solaris, Linux, etc.
17
Multithreading
Thread de usuário Threads de kernel
18
Multithreading
• Threads em modo híbrido:
– Combina as vantagens das threads de usuário e 
kernel.
– Maior flexibilidade.
– Mapeamento entre os dois níveis de threads varia 
entre sistemas e tem compromissos diferentes.
• Veremos a seguir 3 formas comuns de estabelecer esse 
relacionamento.
19
Mapeamento Muitos para Um
• Associa muitas threads do nível usuário a uma thread de kernel.
• Gerenciamento de threads é feito pela biblioteca de threads no espaço 
do usuário.
– Cada processo pode ter seu próprio algoritmo de escalonamento interno para 
suas threads.
• O processo inteiro será bloqueado se uma thread fizer uma chamada de 
sistema bloqueante.
• Somente uma thread pode acessar o kernel por vez.
– Threads não podem ser executadas em paralelo em multiprocessadores.
• Threads podem ser implementadas em sistemas que não reconhecem 
threads.
• Exemplos:
– Solaris Green Threads, GNU Portable Threads.
20
Mapeamento Muitos para Um
21
Mapeamento Um para Um
• A cada thread de usuário é associado uma thread de kernel.
• Maior concorrência do que o modelo muitos para um.
– Permite que outra thread seja executada quando uma faz chamada de 
sistema bloqueante.
– Várias threads executando em paralelo nos ambientes 
multiprocessados.
• A criação de uma thread de usuário requer a criação de uma 
thread de kernel.
– Custo adicional na criação.
– Implementações desse modelo normalmente restringem o número de 
threads que podem ser criadas.
• Linux e Windows implementam o mapeamento um para um.
22
Mapeamento Um para Um
23
Mapeamento Muitospara Muitos
• Multiplexa muitas threads do nível do usuário para um número 
menor ou igual de threads de kernel.
– Número de threads de kernel pode ser específico a determinada aplicação 
ou determinada máquina.
• Desenvolvedores podem criar quantas threads forem necessárias.
– Threads de kernel correspondentes podem ser executadas em paralelo em 
um sistema multiprocessado.
– Quando uma thread realiza uma chamada de sistema bloqueante, o kernel 
pode escalonar outra thread.
• Exemplos:
– Solaris antes da versão 9.
– Windows NT/2000: pacote ThreadFiber.
– Linux: PThreads.
24
Mapeamento Muitos para Muitos
25
Mapeamento em Dois Níveis
• Similar ao mapeamento muito para muitos, 
poré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.
26
Mapeamento em Dois Níveis
ASPECTOS DO USO DE THREADS
Threads
28
Aspectos do uso de threads
• Alguns aspectos devem ser considerados com 
programas dotados de múltiplas threads:
– Chamadas de sistema fork e exec.
– Cancelamento de threads.
– Tratamento de sinais.
– Bancos de threads.
– Dados específicos da thread
– Ativações do escalonador.
29
Chamadas de Sistemas fork e exec
• A semântica das chamadas de sistema fork e exec 
muda em um programa dotado de múltiplas 
threads.
• Se uma thread em um programa chamar fork, o 
novo processo duplica todas as threads ou o novo 
processo possui uma única thread?
– Duas versões de fork.
• Uma que duplica todas as threads.
• Outra que duplica apenas a thread que invocou a chamada 
de sistema fork.
30
Chamadas de Sistemas fork e exec
• A chamada de sistema exec continua com o 
mesmo funcionamento:
– Se uma thread faz a chamada de exec, o programa 
especificado no parâmetro de exec substituirá o 
processo inteiro, incluindo todas as threads.
• Análise deve ser feita para se saber quando 
usar cada chamada.
31
Cancelamento
• O cancelamento da thread é a tarefa de 
terminar uma thread antes de ela ter sido 
concluída.
– Exemplos:
• Várias threads estiverem pesquisando em um banco de 
dados e uma retornar o resultado, as restantes poderão 
ser canceladas.
• Usuário pressiona um botão em um navegador Web 
que interrompe a carga do restante da página.
32
Cancelamento
• Thread-alvo (target thread):
– Uma thread que precisa ser cancelada.
• O cancelamento de uma thread-alvo pode ocorrer em dois cenários 
diferentes:
– Cancelamento assíncrono:
• Uma thread termina imediatamente a thread alvo.
– Cancelamento adiado:
• A thread-alvo pode verificar periodicamente se deve terminar, permitindo a 
oportunidade de terminar de forma controlada.
• Cancelamento de forma assíncrona pode não liberar todos os 
recursos necessários no nível de sistema.
33
Tratamento de sinais
• Sinais são utilizados em sistemas UNIX para notificar a um processo a 
ocorrência de um determinado evento.
• 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.
34
Bancos de Threads
• Bancos de threads (pools de threads):
– Criar uma série de threads e colocá-las em um banco, no 
qual fiquem esperando para executar.
– Quantidade de threads pode ser definida heuristicamente.
• 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 banco.
35
Dados Específicos da Thread
• Threads pertencentes a um mesmo processo compartilham os 
dados deste processo.
– Cada thread pode precisar de sua própria cópia de certos dados.
• Dados específicos.
• Exemplo:
– Em um sistema de processamento de transações, poderíamos atender a cada transação 
em uma thread separada.
– Cada transação recebe um identificador exclusivo.
» Dado específico da thread.
• Bibliotecas de threads mais comuns disponibilizam meios de 
se armazenar dados específicos de uma thread.
– Pthreads, Win32, Java Threads, etc.
36
Ativações do Escalonador
• Os mapeamentos de threads muitos para muitos 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.
37
Dúvidas?
	Slide 1
	Introdução
	Visão Geral
	Visão Geral
	Visão Geral
	Motivação
	Motivação
	Motivação
	Benefícios da Utilização de Threads
	Benefícios da Utilização de Threads
	Benefícios da Utilização de Threads
	Tipos de Paralelismo
	Tipos de Paralelismo
	Modelos de múltiplas threads
	Multithreading
	Multithreading
	Multithreading
	Multithreading
	Mapeamento Muitos para Um
	Mapeamento Muitos para Um
	Mapeamento Um para Um
	Mapeamento Um para Um
	Mapeamento Muitos para Muitos
	Mapeamento Muitos para Muitos
	Mapeamento em Dois Níveis
	Mapeamento em Dois Níveis
	Aspectos do uso de threads
	Aspectos do uso de threads
	Chamadas de Sistemas fork e exec
	Chamadas de Sistemas fork e exec
	Cancelamento
	Cancelamento
	Tratamento de sinais
	Bancos de Threads
	Dados Específicos da Thread
	Ativações do Escalonador
	Dúvidas?

Outros materiais