Aula 07 – Cap. 06 – Threads

Propaganda
Sistemas Operacionais
Prof. Esp. André Luís Belini
Bacharel em Sistemas de Informações
MBA em Gestão Estratégica de Negócios
Capítulo 6 - Threads
• Com o conceito de múltiplos threads (multithread) é
possível projetar e implementar aplicações concorrentes
de forma eficiente, pois um processo pode ter partes
diferentes do seu código sendo executadas
concorrentemente, com um menor overhead do que
utilizando múltiplos processos.
• Como os threads de um mesmo processo compartilham
o mesmo espaço de endereçamento, a comunicação
entre threads não envolve mecanismos lentos de
intercomunicação entre processos, aumentando,
consequentemente o desempenho da aplicação.
2
1
• O desenvolvimento de programas que exploram os
benefícios da programação multithread não é simples.
• A presença do paralelismo introduz um novo conjunto de
problemas, como a comunicação e sincronização de
threads.
• Existem diferentes modelos para a implementação de
threads em um sistema operacional, onde desempenho,
flexibilidade e custo devem ser avaliados.
3
Ambiente Monothread
• Um programa é uma sequência de instruções, composta
por desvios, repetições e chamadas a procedimentos e
funções.
• Em um ambiente monothread, um processo suporta
apenas um programa no seu espaço de endereçamento.
• Neste ambiente, aplicações concorrentes são
implementadas apenas com o uso de múltiplos
processos independentes ou subprocessos.
4
2
• A utilização de processos independentes e
subprocessos permiti dividir uma aplicação em partes
que podem trabalhar de forma concorrente.
• Exemplo: software gerenciador de e-mails, pois ao
mesmo tempo que você está lendo uma mensagens,
outras podem estar chegando ou sendo enviadas ao
mesmo tempo.
• Com o uso de múltiplos processos, cada funcionalidade
do software implicaria a criação de um novo processo
para atendê-la, aumentando o desempenho da
aplicação.
5
Concorrência com subprocessos e processos independentes
Subprocessos
Processos Independentes
6
3
• Problemas desse tipo de implementação: sempre que
um novo processo é criado, o sistema operacional deve
alocar recursos para ele, consumindo tempo do
processador nesse trabalho.
• Ao término do processo, o sistema dispensa tempo para
desalocar recursos previamente alocados.
• Outro problema é o compartilhamento de espaço de
endereçamento. Cada processo tem seu espaço de
endereçamento e, portanto, a comunicação entre eles
torna-se difícil e lenta.
7
Ambiente Multithread
• Em um ambiente multithread, ou seja, com múltiplos
threads, não existe a ideia de programas associados a
processos, mas, sim, a threads.
• O processo, neste ambiente, tem pelo menos um thread
de execução, mas pode compartilhar o seu espaço de
endereçamento com inúmeros outros threads.
• Um thread pode ser definido como uma sub-rotina de
um programa que pode ser executada de forma
assíncrona, ou seja, executada concorrentemente ao
programa chamador.
8
4
Ambiente Multithread
Contexto
de hardware
Contexto
de hardware
Thread 1
Thread 2
Thread 3
Contexto de
software
Contexto
de hardware
Espaço de
endereçamento
9
• No ambiente multithread, cada processo pode responder
a várias solicitações concorrentemente ou mesmo
simultaneamente, caso haja mais de um processador.
• A grande vantagem do uso de threads é a possibilidade
de minimizar a alocação de recursos do sistema, além
de diminuir o overhead na criação, troca e eliminação de
processos.
10
5
Aplicação multithread
Processo
Variáveis
Programa Principal
Thread_1
PC
SP
Contexto de
Hardware
...
Espaço de
endereçamento
Call Sub_1
Thread_2
PC
SP
Ret
Thread_3
PC
SP
Sub_2
Contexto de
Hardware
Fim
Sub_1
Contexto de
Hardware
Call Sub_2
...
Ret
11
• Threads compartilham o processador da mesma
maneira que processos e passam pelas mesmas
mudanças de estado (execução, espera e pronto).
• Dentro de um mesmo processo, threads compartilham o
mesmo contexto de software e espaço de
endereçamento com os demais threads, porém cada
thread possui seu contexto de hardware individual.
• Threads são implementados internamente através de
uma estrutura de dados denominada bloco de controle
do thread (Thread Control Block – TCB).
• O TCB armazena, além do contexto do hardware, mais
algumas informações relacionadas exclusivamente ao
thread, como prioridade, estado de execução e bits de
estado.
12
6
• Em ambientes monothread, o processo é ao mesmo
tempo a unidade de alocação de recursos e a unidade
de escalonamento.
• Em um ambiente multithread, a unidade de alocação de
recursos é o processo onde todos os seus threads
compartilham o espaço de endereçamento, descritores
de arquivos e dispositivos de E/S.
• Cada thread representa uma unidade de escalonamento
independente e, neste caso, o sistema não seleciona um
processo para a execução, mas sim um de seus
threads.
13
• A grande diferença entre aplicações monothread e
multithread está no uso do espaço de endereçamento.
• Processos independentes e subprocessos possuem
espaços de endereçamento individuais e protegidos,
enquanto threads compartilham o espaço dentro de um
mesmo processo.
• Esta característica permite que o compartilhamento de
dados entre threads de um mesmo processo seja mais
simples e rápida, se comparado ao ambiente
monothread.
• Programas concorrentes com múltiplos threads são mais
rápidos do que implementados com múltiplos processos,
pois operações de criação, troca de contexto e
eliminação de threads geram menor overhead
14
7
Latência de processos e threads (Vahalia, 1996)
Implementação
Tempo de criação
Tempo de sincronização
Processo
1700
200
Processo lightweight
350
390
Thread
52
66
15
Aplicação multithread
Thread de
entr ada
Buffer
Thread de
exi bi ção
Thread de
gravação
16
8
• A utilização do processador, discos e outros periféricos
pode ser feita de forma concorrente pelos diversos
threads, significando uma melhor utilização dos recursos
computacionais disponíveis.
• Aplicações como editores de texto, planilhas, aplicativos
gráficos e processadores de imagem são especialmente
beneficiados quando desenvolvidas com base em
threads.
• Em ambientes cliente-servidor, threads são essenciais
para solicitações de serviços remotos. Em um ambiente
monothread, se uma aplicação solicita um serviço
remoto ela pode ficar esperando indefinidamente,
enquando aguarda pelo resultado.
17
• Em um ambiente multithread, um thread pode solicitar o
serviço remoto, enquanto a aplicação pode continuar
realizando outras atividades.
• Já para o processo que atende a solicitação, múltiplos
threads permitem que diversos pedidos sejam atendidos
simultaneamente.
• O núcleo do sistema operacional também pode ser
implementado com o uso desta técnica de forma
vantajosa, como na arquitetura microkernel.
18
9
Aplicação multithread
Processo servidor
Solicitações
Thread
Thread
Thread
Processo cliente
Processo cliente
Processo cliente
19
Programação multithread
• O conjunto de rotinas disponíveis para que uma
aplicação utilize as facilidades dos threads é chamado
de pacote de threads.
• Um exemplo é a API CreateThread, no sistema
Windows.
• O desenvolvimento de aplicações multithread não é
simples, pois exige que a comunicação e o
compartilhamento de recursos entre os diversos threads
sejam feitos de forma sincronizada para evitar
problemas de inconsistências e deadlock.
• Se uma aplicação criar um número execessivo de
threads, poderá ocorrer um overhead no sistema,
ocasionando uma queda de desempenho.
20
10
• Para obter os benefícios do uso de threads, uma
aplicação deve permitir que partes diferentes do seu
código sejam executadas concorrentemente de forma
independente.
• Se um aplicativo realiza várias operações de E/S e trata
eventos assíncronos, a programação multithread
aumenta o desempenho até mesmo em ambientes com
um único processador.
• Sistemas gerenciadores de banco de dados, servidores
de arquivos ou impressão, servidores web e de correio
são exemplos onde o uso de múltiplos threads
proporciona grandes vantagens e benefícios.
21
Arquitetura e implementação
• Existem duas formas de implementar threads em um
sistema operacional:
1. Threads podem ser oferecidos por uma biblioteca de
rotinas fora do núcleo do S.O. (modo usuário), pelo
próprio núcleo do S.O. (modo kernel), uma combinação
de ambos (modo híbrido).
2. Outra forma seriam os scheduler activations
22
11
Threads em modo usuário
• Threads em modo usuário (TMU) são implementados
pela aplicação e não pelo S.O.
• A vantagem deste modelo é a possibilidade de
implementar aplicações multithreads mesmo em S.O.
que não suportam threads.
• TMU possuem uma grande limitação, pois o S.O.
gerencia cada processo como se existisse apenas um
único thread.
• No momento em que um thread entra numa rotina de
espera, todo o processo é colocado em modo de
espera, mesmo havendo outros threads prontos para
execução.
23
Thread 4
Thread 3
Thread 2
Thread 1
Thread 0
Threads em modo usuário
Modo
usuário
Biblioteca
Kernel
Modo
kernel
24
12
Threads em modo kernel
• Threads em modo kernel (TMK) são implementados
diretamente pelo núcleo do S.O., através de chamadas
de rotinas do S.O.
• O S.O. sabe da existência de cada thread e pode
escaloná-los individualmente. No caso de múltiplos
processadores, os threads de um mesmo processo
podem ser executados simultaneamente.
• O grande problema do TMK é o seu baixo desempenho.
• Pacotes em modo kernel utilizam chamadas a rotinas do
sistema e, consequentemente, várias mudanças no
modo de acesso.
25
Kernel
Thread 4
Thread 3
Thread 2
Thread 1
Thread 0
Threads em modo kernel
Modo
usuário
Modo
kernel
26
13
Threads em modo híbrido
• Threads em modo híbrido combinam as vantagens da
TMU e TMK.
• Um processo pode ter vários TMKs e, por sua vez, um
TMK pode ter vários TMUs.
• O núcleo do sistema reconhece os TMKs e pode
escaloná-los individualmente.
• Um TMU pode ser executado em um TMK, em um
determinado momento, e no instante seguinte ser
executado em outro.
• Apresenta os problemas herdados de ambas as
implementações.
27
TMU 5
TMU 4
TMU 3
TMU 2
TMU 1
TMU 0
Threads em modo híbrido
Modo
usuário
Biblioteca
TMK 0
TMK 1
TMK 2
TMK 3
Modo
kernel
Kernel
28
14
Scheduler Activations
• Os problemas apresentados no pacote de threads em
modo híbrido existem devido à falta de comunicação
entre os threads em modo usuário e modo kernel.
• O modelo ideal deveria utilizar as facilidades do pacote
em modo kernel com o desempenho e a flexibilidade do
modo usuário.
• O sheduler activations combina o melhor das duas
arquiteturas, mas ao contrário de dividir os threads em
modo usuário e kernel, o núcleo do S.O. troca
informações com as bibliotecas de threads utilizando
uma estrutura de dados.
29
Thread 4
Thread 3
Thread 2
Thread 1
Thread 0
Scheduler Activations
Modo
usuário
Biblioteca
Kernel
Modo
kernel
30
15
Prof. André Luís Belini
E-mail: [email protected]
Blog: http://profandreluisbelini.wordpress.com/
16
Download