Vous êtes sur la page 1sur 33

Contedo

1. Introduo Threads
2. Ambiente Monothread
3. Ambiente Multithread
4. Arquitetura e Implementao
5. Modelos de Programao

Thread
At o final da dcada de 1970, SOs suportavam apenas
processos com um nico thread
um processo com apenas um nico programa fazendo parte do
seu contexto

Em 1979, durante o desenvolvimento do SO Toth, foi introduzido


o conceito de processos lightweight (peso leve), onde o espao
de endereamento de um processo era compartilhado por vrios
programas.
Este conceito revolucionrio s foi utilizado comercialmente em
meados de 1980, com o desenvolvimento do sistema operacional
Mach na Universidade de Carnegie Mellon, ficou clara a
separao entre o conceito de processo e thread.

Thread
A partir do conceito de mltiplos threads possvel projetar e
implementar aplicaes concorrentes de forma eficiente, pois um
processo pode ter partes diferentes do seu cdigo sendo
executadas em paralelo, com um menor overhead do que
utilizando mltiplos processos.

Como os threads de um mesmo processo compartilham o


mesmo espao de endereamento, a comunicao entre threads
no envolve mecanismos lentos de intercomunicao entre
processos, aumentando o desempenho da aplicao.

Thread
A programao multithread no simples. A presena do
paralelismo introduz um novo conjunto de problemas como a
comunicao e sincronizao de threads.
O conceito de multithread pode ser encontrado em diversos
sistemas operacionais, como no Sun Solaris e Microsoft Windows
2000.
A utilizao comercial de SOs multithread crescente em
funo do aumento da popularidade dos sistemas com mltiplos
processadores, do modelo cliente-servidor e dos sistemas
distribudos.

AMBIENTE MONOTHREAD
Um programa uma seqncia de instrues, composta por
desvios, repeties e chamadas a procedimentos e funes.
Em um ambiente monothread, um processo suporta apenas um
programa no seu espao de endereamento.

Neste ambiente, aplicaes concorrentes so implementadas


apenas com o uso de mltiplos processos independentes ou
subprocessos, que permitem dividir uma aplicao em partes
que podem trabalhar de forma concorrente, como por exemplo,
em um software de gerenciamento de e-mails.
Com o uso de mltiplos processos, cada funcionalidade do
software implicaria a criao de um novo processo para atendla, aumentando o desempenho da aplicao.

6 Thread
Subprocessos e Processos Independentes

Subprocessos

Processos Independentes

6/1

AMBIENTE MONOTHREAD
Ao usar mltiplos processos, tm-se um problema de utilizar
processos de desenvolvimento de aplicaes concorrentes, que
demanda consumo de diversos recursos do sistema.
Sempre que um novo processo criado, o sistema deve alocar
recursos para cada processo, consumindo tempo de processador
neste trabalho.
No caso do trmino do processo, o sistema dispensa tempo para
desalocar recursos previamente alocados.
Outro problema que cada processo possui seu prprio espao
de endereamento, a comunicao entre processos torna-se
difcil e lenta, pois utiliza mecanismos como pipes, sinais,
semforos, memria compartilhada ou troca de mensagens. O
compartilhamento entre processos concorrentes no simples.

6 Thread
Ambiente Monothread

Thread

Thread

Thread

So exemplos de sistemas monothread, o Microsoft MS-DOS, as primeiras


verses do MS-Windows, VAX/VMS e Unix.
6/2

AMBIENTE MULTITHREAD

Em um ambiente multithread, ou seja, com mltiplos threads,


no existe a idia de programas associados a processos, mas,
sim, a threads.
O processo, neste ambiente, tem pelo menos um thread de
execuo, mas pode compartilhar o seu espao de
endereamento com inmeros outros threads.
De forma simplificada, um thread pode ser definido como uma
sub-rotina de um programa que pode ser executada de forma
assncrona, ou seja, executada paralelamente ao programa
chamador.
O programador deve especificar os threads, associando-os s
sub-rotinas assncronas. Um ambiente multithread, possibilita a
execuo concorrente de sub-rotinas dentro de um mesmo
processo.

6 Thread
Ambiente Multithread

Contexto
de hardware

Contexto
de hardware

Thread 1

Thread 2

Thread 3

Contexto de
software

Contexto
de hardware

Espao de
endereamento

6/3

AMBIENTE MULTITHREAD
Programas no so associados a processos, mas sim, a threads;
Um processo tem pelo menos uma thread em execuo,
todavia, pode compartilhar seu espao de endereamento com
inmeras threads;

Uma thread pode ser definida como uma sub-rotina de um


programa que pode ser executada de forma assncrona, ou seja,
executada paralelamente ao programa chamador;
Threads compartilham o processador da mesma forma que
processos e passam pelas mesmas mudanas de estado;

Cada thread possui seu prprio contexto de hardware, porm,


dentro de um mesmo processo, compartilham seus contextos de
software e espao de endereamento.

Aplicao Multithread

6 Thread

Processo

Variveis

Programa Principal

Thread_1
PC
SP

Contexto de
Hardware

...

Espao de
endereamento

Os 3 threads so
executados
concorrentemente.

Call Sub_1

Thread_2

Sub_1

Ret

PC
SP

Thread_3

Sub_2

PC
SP

Contexto de
Hardware

Fim

Contexto de
Hardware

Call Sub_2

...

Ret

6/4

AMBIENTE MULTITHREAD
Threads so implementadas atravs de uma estrutura de dados
denominada Thread Control Block ( TCB );
Como todas as threads de um processo acessam um mesmo
espao de endereamento, no h qualquer proteo memria,
permitindo que uma thread altere dados de outras. Para que
threads trabalhem de forma cooperativa, fundamental que a
aplicao implemente mecanismos de comunicao e
sincronizao entre threads, a fim de garantir o acesso seguro
aos dados compartilhados na memria;
A utilizao de threads pode melhorar o desempenho da
aplicao executando tarefas em background enquanto
operaes E/S esto sendo processadas;

6 Thread

Aplicao Multithread

Thread de
entr ada

Buffer

Thread de
exibio

Thread de
gravao

6/5

AMBIENTE MULTITHREAD
Em ambientes cliente-servidor, threads so essenciais para
solicitaes de servios remotos, pois no Monothread uma
solicitao de servio pode esperar indefinidamente , enquanto
aguarda o resultado; No multithreads, mltiplos threads
permitem que diversos pedidos sejam atendidos
simultaneamente.
O prprio ncleo do sistema operacional pode fazer uso do
multithreading. Por exemplo, na arquitetura microkernel.

6 Thread
Aplicao Multithread
Processo servidor

Solicitaes

Thread

Thread

Thread

Processo cliente

Processo cliente

Processo cliente

6/6

AMBIENTE MULTITHREAD
O uso de multithreads proporciona uma srie de benefcios.
Programas concorrentes com mltiplos threads so mais rpidos
do que programas concorrentes implementados com mltiplos
processos, pois operaes de criao, troca de contexto e
eliminao dos threads geram menor overhead.
Como os threads dentro de um processo dividem o mesmo
espao de endereamento, a comunicao entre eles pode ser
realizada de forma rpida e eficiente.
Alm disso, threads em um mesmo processo podem
compartilhar facilmente outros recursos, como descritores de
arquivos, temporizadores, sinais, atributos de segurana, etc.

AMBIENTE MULTITHREAD
Latncia de Processos e Threads (Vahalia, 1996)

ARQUITETURA E IMPLEMENTAO
Pacote de threads o conjunto de rotinas disponveis para que
uma aplicao utilize as facilidades dos threads;
Um pacote de threads pode ser implementado sob diversas
abordagens em um SO, o que influi diretamente no desempenho,
na concorrncia e na modularidade das aplicaes multithread;
Threads podem ser oferecidas por uma biblioteca de rotinas
fora do ncleo do SO ( modo usurio ), pelo prprio ncleo do
sistema ( modo Kernel ), por uma combinao de ambos ( modo
hbrido ) ou por um modelo conhecido como Scheduler
Activations;

ARQUITETURA E IMPLEMENTAO
Diversas arquiteturas para diferentes ambientes operacionais:

ARQUITETURA E IMPLEMENTAO
Uma das grandes dificuldades para a utilizao de threads foi a
ausncia de um padro.
Em 1995, o padro POSIX P1003.1c foi aprovado e
posteriormente atualizado para a verso P1003.4a. Com este
padro, tambm conhecido como Pthreads, aplicaes
comerciais multithreading tornaram-se mais simples e de fcil
implementao.
O padro Pthreads largamente utilizado em ambientes Unix,
como o Sun Solaris Pthreads e o DECthreads para Digital OSF/1.

THREADS EM MODO USURIO ( TMU )


So implementadas pela aplicao e no pelo sistema
operacional;
Deve existir uma biblioteca de rotinas que possibilite aplicao
realizar tarefas como criao/eliminao de threads, troca de
mensagens entre threads e uma poltica de escalonamento.
O sistema operacional no sabe da existncia de mltiplas
threads, sendo responsabilidade exclusiva da aplicao gerenciar
e sincronizar os diversos threads existentes.
A vantagem deste modelo a possibilidade de implementar
aplicaes multithreads mesmo em sistemas operacionais que
no suportam threads. Utilizando a biblioteca, mltiplos threads
podem ser criados, compartilhando o mesmo espao de
endereamento do processo, alm de outros recursos.

THREADS EM MODO USURIO ( TMU )

Thread 4

Thread 3

Thread 2

Modo
usurio

Biblioteca

Kernel

Thread 4

Thread 3

Thread 2

Thread 1

Modo
kernel

Kernel

Thread 0

Thread 1

Thread 0

TMU so rpidos e eficientes por dispensarem acessos ao kernel


do sistema operacional, evitando assim a mudana do modo de
acesso.

Modo
usurio

Modo
kernel

THREADS EM MODO USURIO ( TMU )


TMU possuem uma grande limitao, pois o SO gerencia cada
processo como se existisse apenas um nico thread.
No momento em que um thread chama uma rotina do sistema
que o coloca em estado de espera (rotina bloqueante), todo o
processo colocado no estado de espera, mesmo havendo
outros threads prontos para execuo.
Um dos maiores problemas na implementao de TMU seja o
tratamento individual de sinais.
Como o sistema reconhece apenas processos e no threads, os
sinais enviados para um processo devem ser reconhecidos e
encaminhados a cada thread para tratamento.

THREADS EM MODO USURIO ( TMU )


VANTAGENS:
Permitem a implementao de threads mesmo em sistemas
operacionais que no suportam threads;
So rpidos e eficientes por dispensarem o acesso ao kernel do
sistema;

THREADS EM MODO USURIO ( TMU )


DESVANTAGENS

O SO gerencia o processo como se houvesse uma nica thread.


Quando uma thread chama uma rotina do sistema que o coloca em
estado de espera, todo o processo colocado em estado de espera,
mesmo havendo outras threads prontas para execuo;
Tratamento individual de sinais. Como o SO reconhece apenas
processos e no threads, os sinais enviados para um processo devem
ser reconhecidos e encaminhados a cada thread para tratamento;

Reduo do grau de paralelismo. No possvel que mltiplos


threads possam ser executados em diferentes UCPs
simultaneamente. O sistema seleciona apenas processos para
execuo e threads de um processo podem ser executadas
somente em um processador de cada vez.

THREADS EM MODO KERNEL ( TMK )


So implementadas diretamente pelo ncleo do sistema
operacional;
VANTAGENS:
O sistema operacional sabe da existncia de cada thread e pode
escalon-las individualmente;
Caso haja mltiplos processadores, threads de um mesmo
processo podem ser executadas simultaneamente;

THREADS EM MODO KERNEL ( TMK )


DESVANTAGENS:
Baixo desempenho. Enquanto nos pacotes em modo usurio
todo o tratamento feito sem a ajuda no SO , no modo kernel
so utilizadas chamadas a rotinas do sistema e,
conseqentemente, h vrias mudanas no modo de acesso;

6 Thread
THREADS EM MODO HBRIDO
Combina vantagens de threads implementadas em modo usurio ( TMU ) e threads
em modo Kernel ( TMK );
Um processo pode ter vrios TMK e, por sua vez, um TMK pode ter vrios TMU;
Um TMU pode ser executado em um TMK e, em um instante seguinte, ser executado
em outro;

VANTAGENS
Maior flexibilidade

6/7

6 Thread
THREADS EM MODO HBRIDO

DESVANTAGENS:
Apresenta problemas herdados de ambas implementaes. Por exemplo, uma
chamada de bloqueio de uma TMK bloqueia todos os TMU, que so colocados em
espera;
TMUs que precisam utilizar diferentes processadores precisam utilizar diferentes
TMK, o que reduz o desempenho.

6/7

6 Thread
SCHEDULER ACTIVATIONS
Os problemas apresentados no pacote de threads em modo hbrido existem devido
falta de comunicao entre os threads em modo usurio e modo kernel;
Usa o melhor do modo usurio e do modo kernel, atravs de uma estrutura de dados
chamada scheduler activations;
Alcana um melhor desempenho evitando mudanas de modos de acesso que no
sejam necessrias;

Caso uma thread utilize uma chamada ao sistema que o coloque no estado de espera,
no necessrio que o kernel seja ativado, basta que a prpria biblioteca escalone
outra thread;
Bibliotecas em modo usurio e kernel se comunicam, trabalhando de forma
cooperativa;
6/7

MODELOS DE PROGRAMAO
O desenvolvimento de aplicaes multithread no simples, pois exige que a
comunicao e o compartilhamento de recursos entre as diversas threads sejam feitos
de forma sincronizada para evitar inconsistncias e deadlock;

O nmero mximo de threads um fator importante. Caso um nmero muito grande


seja criado, poder haver um overhead no sistema, ocasionando uma queda de
desempenho;
O nmero de threads pode ser dinmico ou esttico;
Para permitir a implementao de threads, uma aplicao deve permitir que partes
diferentes do seu cdigo sejam executadas em paralelo, de forma independente.
Exemplos de aplicaes de multithreading:
o SGBDs
o Servidores de arquivos ou impresso

6/7

TMU 5

TMU 4

TMU 3

TMU 2

TMU 1

TMU 0

Threads em Modo Hbrido e Scheduler Activations

Modo
usurio

Biblioteca

TMK 1

TMK 2

TMK 3
Modo
kernel

Thread 4

Thread 3

Thread 2

Thread 1

Kernel

Thread 0

TMK 0

Modo
usurio

Biblioteca

Kernel

Modo
kernel

6/8