Buscar

UNIDADE IV - Thread pptx (1)

Prévia do material em texto

Unidade IV: 
Threads
INSTITUTO DE CIÊNCIAS EXATAS E NATURAIS
FACULDADE DE COMPUTAÇÃO
BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO
SISTEMAS OPERACIONAIS
Profª. Fabíola Araújo
fpoliveira@ufpa.br
Objetivos desta Unidade...
▪ Introduzir o conceito de thread – uma unidade básica 
de utilização da CPU que forma a base dos sistemas 
de computação multithread;
▪ Discutir as APIs das bibliotecas de threads: Pthreads, 
Win32 e Java;
▪ Examinar questões relacionadas à programação 
multithreaded;
▪ No final da década de 70, os S.O. suportavam apenas 
processos com um único thread (monothread), ou seja, 
um processo com apenas um único programa fazendo 
parte do seu contexto.
▪ Em 1979, é introduzido o conceito de lightweight 
(processo leve) – Espaço de endereçamento de processo 
era compartilhado por vários programas.
▪ Em 1980, ficou clara a divisão entre o conceito de processo 
e thread, com o desenvolvimento do sistema Mach;
• Conceito de multithread → Possibilidade de projetar e 
implementar aplicações concorrentes mais eficientes.
• Threads de um mesmo processo → compartilham o mesmo 
espaço de endereçamento.
Introdução
• Exemplos de programas multithreads
○ O usuário edita o arquivo enquanto ele está sendo 
carregado do disco.
○ Processamento assíncrono através do salvamento 
periódico.
Introdução
▪ Exemplos de programas multithreads 
• Navegador (browser)
○ Faz o download de vários arquivos simultâneos, gerenciando as 
diferentes velocidades de cada servidor, permitindo que o 
usuário continue interagindo, mudando de página enquanto os 
arquivos estão sendo carregados.
• Programas numéricos (ex: multiplicação de matrizes)
○ Cada elemento da matriz produto pode ser calculado 
independentemente dos outros, podendo ser facilmente 
calculados por threads diferentes.
Introdução
▪ Um processo suporta apenas um programa no seu 
espaço de endereçamento.
▪ Permite dividir uma aplicação em partes que podem 
trabalhar de forma concorrente.
▪ A concorrência é implementada apenas com o uso de 
múltiplos processos independentes ou subprocessos.
▪ Compartilham o mesmo espaço de endereçamento e com 
isso a comunicação é mais rápida, não envolvendo 
mecanismos lentos de intercomunicação entre processos. 
▪ O processo é ao mesmo tempo a unidade de alocação de 
recursos e a unidade de escalonamento.
Ambientes Monothreads
 Software de 
Gerenciamento de e-mails
subprocessos
Processo 
independente
Enviar Receber
Armazenar 
Mensagens Antigas
Aplicação Concorrente
Ambientes Monothreads
▪ Desvantagens:
• Consumo de diversos recursos do sistema:
✔ Tempo de processador: Alocar e desalocar recursos 
para criação/término de cada processo.
✔ Comunicação: Cada processo possui seu próprio 
espaço de endereçamento.
 Ex.: MS-DOS, Windows (primeiras versões)
Ambientes Monothreads
▪ Um Thread é uma unidade básica de utilização da CPU; 
É uma sub-rotina de um programa que pode ser 
executada de forma assíncrona, ou seja, executada 
paralelamente/concorrentemente ao programa 
chamador.
▪ É composta por um ID de Thread, um contador de 
programa, um conjunto de registradores e uma pilha;
▪ Ele compartilha com outras Threads pertencentes ao 
mesmo processo, sua seção de código, a seção de dados e 
outros recursos do Sistema Operacional;
Ambientes Multithreads
❑ Conceito Básico:
▪ Dependendo da implementação de thread para 
determinada plataforma, os threads podem ser 
gerenciados pelo sistema operacional ou pela aplicação 
do usuário que o cria.
▪ Embora muitos sistemas operacionais suportem 
threads, as implementações variam consideravelmente.
Ambientes Multithreads
❑ Conceito Básico:
▪ Não existe a ideia de programas associados a processos, 
mas, sim, a threads.
Contexto de 
Software
Espaço de 
Endereçamento
Contexto de 
Hardware
Contexto de 
Hardware
Contexto de 
Hardware
Thread 1 Thread 2 Thread 3
Ambientes Multithreads
❑ Motivação na Criação de Thread
▪ Projeto de software: Devido à modularidade e ao 
projeto de compiladores, possibilidade de executar 
segmentos de códigos independentemente do restante 
da aplicação.
▪ Desempenho: Execução paralela pode reduzir 
significativamente o tempo requerido para uma 
aplicação multithread concluir sua tarefa.
▪ Cooperação: Os threads de processos podem se 
comunicar usando seu espaço de endereçamento 
compartilhado.
Ambientes Multithreads
▪ Capacidade de Resposta: Permite que um programa 
continue a ser executado mesmo se parte dele estiver 
bloqueada ou estiver executando uma operação 
demorada, aumentando a capacidade de resposta para o 
usuário;
▪ Compartilhamento de Recursos: Threads compartilham 
a memória e os recursos do processo ao qual pertencem;
▪ Economia: Diminuição do overhead na criação, troca, 
eliminação e gerência de processos.
▪ Escalabilidade: Possibilidade de resposta de várias 
solicitações paralelamente em uma arquitetura com 
vários processadores (núcleos);
Ambientes Multithreads
❑ Benefícios no uso de Threads
Ambientes Multithreads
Execução em um
Ambiente com um 
único núcleo
Execução em um
Ambiente com 
vários núcleos
❑ Escalabilidade (Arquiteturas Multicore)
▪ Implementação interna de Threads: utiliza o TCB 
(Bloco de Controle de Threads) → Contexto de 
hardware e informações exclusivas de cada thread.
▪ Permite separar a unidade de alocação de recursos da 
unidade de escalonamento.
Ambientes Multithreads
❑ Vantagens do uso de Threads
Unidade de alocação 
de recursos
C.S.
E.E.
C.H. C.H. C.H.
Thread 
1
Thread 
2
Thread 
3
Unidade de 
escalonamento
Thread 
1
Thread 
2
Thread 
3
SO seleciona um dos threads e 
não um processo.
Ambientes Multithreads
▪ Não existe qualquer proteção no acesso à memória → 
um thread pode alterar facilmente dados de outro.
▪ Ambientes cliente-servidor: Threads são essenciais para 
solicitação de serviços remotos.
E.E.
C.H. C.H. C.H.
Thread 
1
Thread 
2
Thread 
3
solicitação
Thread 1
Thread 2
Thread 3
Ambientes Multithreads
❑ Compartilham o mesmo espaço de endereçamento:
Ambientes Multithreads
▪ É vantagem um servidor criar um novo thread a cada 
nova solicitação que chegar?
1. Tempo necessário para a criação da thread antes do 
atendimento da solicitação;
2. Qual o limite para a quantidade de threads ativas 
concorrentes no sistema? (quantidades muito grandes 
podem exaurir os recursos do sistema);
❑ Ambientes Cliente-Servidor:
Ambientes Multithreads
▪ Uma solução para esse problema é usar um pool de 
threads;
1. O atendimento de uma solicitação com um thread 
existente é mais rápido do que esperar a criação de uma 
nova thread;
2. Um pool de threads limita a quantidade de threads 
existentes em qualquer ponto do sistema;
▪ A quantidade de threads pode ser configurada 
heuristicamente com base em fatores como:
• Quantidade de CPUs; 
• Quantidade de memória física; 
• Quantidade de solicitações de clients concorrentes 
esperada;
❑ Ambientes Cliente-Servidor:
Ambientes Multithreads
❑ Ambientes Cliente-Servidor (pool de threads)
Ambientes Multithreads
❑ Ciclo de vida de um Thread:
Ambientes Multithreads
❑ Ciclo de vida de um Thread em Java:
Arquitetura de Implementação
▪ As implementações de threads variam entre SO, mas 
quase todos os sistemas suportam algum sistema 
primário de funcionamento de threads;
▪ Essas implementações de pacotes de threads influenciará 
no desempenho, na concorrência e na modularidade das 
aplicações multithread;
▪ Os pacotes podem ser oferecidos por uma biblioteca de 
rotinas fora do núcleo do SO, pelo próprio núcleo do 
sistema, uma combinação de ambos ou por um modelo 
diferente dos anteriores:
1. Modo Usuário;
2. Modo Kernel;
3. Modo Híbrido;
4. Scheduler Activations;
1. Theads – MODO USUÁRIO (TMU)
▪ São implementados pela aplicação e não pelo S.O.;
▪ Utiliza biblioteca de rotinas;
▪ S.O. não sabe da existência de multithreads ⇒ 
responsabilidade exclusiva da aplicação gerenciar e 
sincronizar.
BIBLIOTECA
KERNEL
Th
re
ad
 1
Th
re
ad2
Th
re
ad
 3
Th
re
ad
 4
Th
re
ad
 5
Th
re
ad
 6
Modo Usuário
Modo Kernel
Arquitetura de Implementação
Vantagens:
▪ Possibilidade de implementar aplicações multithreads mesmo 
em S.O. que não suportam threads;
▪ São rápidos e eficientes por dispensarem acesso ao kernel do 
S.O. ⇒ Evita a mudança de modo de acesso 
(usuário-kernel-usuário)
Desvantagens:
▪ S.O. gerencia cada processo como se existisse um único thread;
✔ Thread chama rotina que coloca em estado de espera (bloqueante), todo o 
processo é colocado em espera;
✔ Sinais enviados para um processo devem ser reconhecidos e enviados para 
cada thread;
✔ Ambiente multiprocessado não é possível que múltiplos threads sejam 
executados em diferentes CPUs.
1. Theads – MODO USUÁRIO (TMU)
Arquitetura de Implementação
▪ São implementados diretamente pelo núcleo do 
sistema operacional;
▪ O S.O. sabe da existência dos threads e pode 
escaloná-los individualmente, ou seja, o sistema 
operacional pode executar os threads prontos de um 
processo mesmo que um de seus threads esteja 
bloqueado;
▪ Múltiplos processadores: threads de um mesmo 
processo podem ser executados simultaneamente.
2. Theads – MODO KERNEL (TMK)
Arquitetura de Implementação
Desvantagens:
▪ Baixo Desempenho ⇒ Mudanças de modo de acesso 
(usuário-kernel-usuário).
▪ Softwares que empregam threads de núcleo são menos 
portáveis: Adaptar o programa para cada API de 
thread para cada sistema operacional em que executar.
2. Theads – MODO KERNEL (TMK)
Arquitetura de Implementação
Modo Usuário
KERNEL
Modo Kernel
TMK 0 TMK 1 TMK 2 TMK 3 TMK 4
TMU 0 TMU 1 TMU 2 TMU 3 TMU 4
▪ Combina as vantagens de threads implementados em 
modo usuário e threads em modo kernel.
KERNEL
TM
U
 1
TM
U
 2
TM
U
 3
TM
U
 4
TM
U
 5
TM
U
 6
Modo Usuário
Modo Kernel
BIBLIOTECA
TMK 0 TMK 1 TMK 2 TMK 3 TMK 4
▪ Núcleo do SO reconhece os TMKs e pode escaloná-los 
individualmente.
3. Theads – MODO HÍBRIDO (TMH)
Arquitetura de Implementação
▪ Um TMU pode ser executado em um TMK, em um 
determinado momento, e ser executado em outro em um 
instante seguinte;
▪ Desenvolvimento da aplicação baseado em TMUs e 
especifica quantos TMKs estão associados a cada 
processo;
▪ Problemas herdados de ambas implementações;
▪ Quando um TMK realiza uma chamada bloqueante, todos os 
TMUs relacionados a ele são colocados em estado de espera;
▪ TMUs que desejem utilizar vários processadores (ambiente 
multiprocessado) devem utilizar diferentes TMKs pois 
impacta no desempenho;
3. Theads – MODO HÍBRIDO (TMH)
Arquitetura de Implementação
Desvantagem:
▪ Implementa o melhor das duas arquiteturas (TMU e 
TMK).
▪ O núcleo do sistema troca informações com a biblioteca 
de threads utilizando uma estrutura de dados chamada 
Scheduler Activations.
▪ Evita a mudança de modo de acesso.
▪ A biblioteca de modo usuário e o kernel se comunicam e 
trabalham de forma cooperativa.
▪ Cada chamada implementa o seu escalonamento de 
forma independente, porém trocando informações 
quando necessário.
4. Theads – SCHEDULER ACTIVATIONS
Arquitetura de Implementação
KERNEL
Modo Usuário
BIBLIOTECA
Th
re
ad
 1
Th
re
ad
 2
Th
re
ad
 3
Th
re
ad
 4
Th
re
ad
 5
Th
re
ad
 6
Modo kernel
4. Theads – SCHEDULER ACTIVATIONS
Arquitetura de Implementação
Modelos de Geração de Multithreads
▪ O suporte aos threads pode ser fornecido no nível de 
usuário, para threads de usuário; ou pelo kernel, para 
threads de kernel;
▪ Deve existir um relacionamento entre os threads de 
usuário e os threads de kernel;
▪ Existem três maneiras comuns de se estabelecer esse 
relacionamento:
A. Modelo
Muitos-para-um
C. Modelo
Muitos-para-muitos
B. Modelo
Um-para-Um
Modelos de Geração de Multithreads
A. Modelo Muitos-para-Um
▪ Mapeia muitos threads de nível de usuário para um 
thread de kernel;
▪ O gerenciamento de threads é feito pela biblioteca de 
threads no espaço do usuário;
▪ O processo inteiro será bloqueado se um thread fizer 
uma chamada de sistema bloqueadora;
▪ Somente um thread pode acessar o kernel de cada vez, 
muitos threads ficarão sem ser executados em paralelo 
nos vários processadores;
✔ Green Threads (Biblioteca de Threads - Solaris);
✔ GNU Portable Threads;
Modelos de Geração de Multithreads
B. Modelo Um-para-Um
▪ Mapeia um thread de nível de usuário para um thread 
de kernel;
▪ Permite que outro thread seja executado, se um thread 
fizer uma chamada de sistema bloqueadora;
▪ Permite que vários threads sejam executados em 
paralelo em vários processadores;
▪ Desvantagem: A criação de um thread de usuário 
requer a criação do thread de kernel correspondente;
• O overhead de criação de thread de kernel pode 
sobrecarregar o desempenho de uma aplicação;
• A maioria das implementações desse modelo restringe a 
quantidade de threads suportados pelo sistema;
Modelos de Geração de Multithreads
C. Modelo Muitos-para-Muitos
▪ Conecta muitos threads de nível de usuário a uma 
quantidade menor ou igual de threads de kernel;
▪ A quantidade de threads de kernel pode ser específica 
de uma determinada aplicação ou máquina;
▪ Os desenvolvedores podem criar quantas threads de 
usuários forem necessárias e as threads de kernel 
correspondentes podem ser executadas em paralelo em 
um ambiente multiprocessador;
▪ Quando uma thread executa uma chamada de sistema 
bloqueadora, o kernel pode agendar outro thread para 
execução;
Modelos de Geração de Multithreads
C. 1. Modelo de Dois Níveis
▪ Conecta muitos threads de nível de usuário a uma 
quantidade menor ou igual de threads de kernel;
▪ Também permite que um thread de nível de usuário seja 
limitada a um thread de kernel;
▪ Tem suporte em SO como o IRIX, o HP-UX e o Tru64 
UNIX;
Bibliotecas de Threads
▪ Uma biblioteca de threads fornece ao programador uma 
API para a criação e gerenciamento de threads;
▪ Como citado anteriormente, há duas maneiras de se 
implementar uma biblioteca de threads: no modo usuário 
e no modo kernel;
▪ Três bibliotecas de threads são as mais usadas 
atualmente:
I. Pthreads do POSIX (padrão da IEEE);
II. Win32
III. Java
Bibliotecas de Threads
I. Pthreads
▪ É o padrão POSIX (IEEE 1003.1c) que define uma API 
para a criação e sincronização de threads;
▪ Pode ser fornecida como uma biblioteca de nível de 
usuário ou de kernel;
▪ É uma especificação para o comportamento de 
threads, e não uma implementação (os projetistas de 
SO podem implementar a especificação como 
quiserem);
▪ Ex.: Solaris, o Linux, Mac OS X e o Tru64 UNIX;
Bibliotecas de Threads
II. Win32
▪ É uma biblioteca de nível de kernel disponível em 
sistemas Windows;
III. Java
▪ Permite que threads sejam criados e gerenciados 
diretamente em programas Java;
▪ Na maioria dos casos a JVM é executada acima de um 
SO hospedeiro, geralmente a API de threads Java é 
implementada no sistema hospedeiro;
▪ Em sistemas Windows, usa-se o Win32, e em sistemas 
UNIX e Linux costuma-se usar a biblioteca Pthreads;
▪ São interrupções geradas por softwares ou pelo sistema 
operacional, ou pelos processos usuários que notificam 
ao processo que um evento ocorreu.
✔ Sinal Síncrono: Ocorre como resultado direto de uma 
instrução executada pelo processo ou thread.
✔ Sinal Assíncrono: Ocorre devido a um evento não 
relacionado com a instrução corrente; esses sinais 
devem especificar um identificador (ID) de processo 
para indicar o receptor do sinal.
Implementação de Threads
❑ Sinal de Thread:
▪ O desenvolvimento de aplicações multithreads não é 
simples, pois exige que a comunicação e o 
compartilhamento de recursos entre os diversos threads 
seja feito de forma sincronizada.
▪ Para obter os benefícios do uso de threads, uma 
aplicação deve permitir que partes diferentes do seu 
código sejam executadas em paralelo de forma 
independente.
▪ Os benefícios da criação de vários threads incluem o 
aumento da capacidade de resposta ao usuário, o 
compartilhamento de recursos dentro do processo, 
economiae questões relacionadas à escalabilidade com o 
uso eficiente de vários núcleos;
Conclusão
▪ Questões sobre Threads
▪ Entrega pelo SIGAA.
❑ EXERCÍCIO
Atividade 04

Continue navegando