Upload
widson-melo
View
234
Download
1
Embed Size (px)
DESCRIPTION
Aula sobre Threads
Citation preview
Gerncias de Processos: Threads
Sistemas Operacionais I
Prof. Daniel Gondim: http://sites.google.com/site/danielgondimm
Universidade Estadual da Paraba
Objetivos
Introduzir a noo de thread, uma unidade
fundamental de utilizao de CPU e que
representa a base da maioria dos sistemas
computacionais modernos
Questes relacionadas a criao de threads
Introduo
O que uma Thread?
Unidade bsica de utilizao da CPU.
Compreende:
Thread ID;
Contador de Programa;
Conjunto de Registradores;
Pilha
Compartilham com outras threads num mesmo processo:
Seo de cdigo;
Seo de dados;
Arquivos
Processo com thread nico e com
mltiplos threads
Exemplo
Problema Cliente-Servidor:
Centenas de clientes...
Exemplo
Qual seria a soluo?
Criar um processo para cada cliente!?
E o custo? E o uso de memria?
Soluo ALTAMENTE custosa!!!
Criar uma thread pra cada cliente!?
Bem menos custoso
Mais atraente
Soluo mais rentvel
Exemplo
Soluo:
Centenas threads
Benefcios
Responsividade
Programa continua rodando mesmo que parte
dele esteja executando uma operao lenta
Multithread browser:
Permite interao em uma thread enquanto carrega
uma imagem em outra thread
Compartilhamento de recursos
Compartilham memria e recursos do processo
Vrias threads em um mesmo espao de
memria
Benefcios
Economia
Mais rpido criar threads do que processos
Solaris: criar um processo demora 30x mais
Mais rpido mudar contexto de threads
Solaris: mudar contexto de processos demora 5x mais
Escalabilidade
Threads executam paralelamente em cada
processo
Programao com mltiplos ncleos
Sistemas com mltiplos ncleos pressionam
os programadores
Os desafios incluem
Particionamento das atividades
Balano
Particionamento dos dados
Dependncia dos dados
Teste e depurao
Arquitetura de um servidor multi-threaded
Execuo concorrente em um sistema
de ncleo nico
Execuo paralela em um sistema com mltiplos
ncleos
Threads do usurio
Gerencia de threads feita por bibliotecas
carregadas no nvel do usurio
Trs principais bibliotecas de threads:
POSIX Pthreads
Win32 threads
Java threads
Threads do Ncleo
Gerenciadas pelo prprio sistema operacional
Exemplos
Windows XP/2000
Solaris
Linux
Tru64 UNIX
Mac OS X
Threads do Ncleo
E se ocorrer uma chamada de sistema?
Estou executando uma thread do usurio, mas
ela quer acessar informaes do modo kernel
Modelos de Multi-threading
Muitos-para-um
Um-para-um
Muitos-para-muitos
Modelos de Multi-threading
Antes de mais nada, vamos aprender o que
uma blocking system call...
For a blocking system call, the caller can't do
anything until the system call returns
Basicamente:
Uma chamada de sistema que interrompe o
processamento, at que a chamada retorne
Muitos-para-um
Muitas threads do usurio
mapeadas para uma
nica thread do ncleo
Mltiplas threads
incapazes de rodarem em
paralelo (apenas uma
acessa o kernel)
Exemplos:
Solaris Green Threads
GNU Portable Threads
Um-para-um
Cada thread do usurio mapeada para uma thread do ncleo
Possibilita mltiplas threads rodarem em paralelo. O ponto negativo: a criao de vrias threads de
kernel compromete a performance da aplicao Exemplos
Windows NT/XP/2000 Linux Solaris 9 e posterior
Muitos-para-muitos
Permite que muitas threads do usurio sejam mapeadas em muitas threads do ncleo
Exemplos
Solaris antes da verso 9
Windows NT/2000 como o pacote ThreadFiber
Modelo em dois nveis
Similar ao M:M porm tambm permite que uma thread do usurio seja associada a uma thread do ncleo
Exemplos
IRIX
HP-UX
Tru64 UNIX
Solaris 8 e anteriores
Bibliotecas de threads
Bibliotecas de threads oferecem uma API para
criao e manipulao de threads
Duas formas primrias de implementao
Biblioteca localizada inteiramente no espao do
usurio
Biblioteca localizada no ncleo com suporte do
SO
Pthreads
Pode ser fornecida tanto no nvel do usurio
quanto no ncleo
API padro POSIX (IEEE 1003.1c) para
criao e sincronizao de threads
A API especifica unicamente o comportamento
da biblioteca, a implementao fica a cargo
dos desenvolvedores
Comum em sistemas operacionais UNIX
(Solaris, Linux, Mac OS X)
Win32 Threads
Similares s Pthreads
Nvel do ncleo (kernel)
Java Threads
Threads em Java so 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
public interface Runnable
{
public abstract void run();
}
Java Threads
Ao criar um objeto Thread no se cria uma
nova Thread:
o mtodo start() que na verdade cria uma nova
thread
Ao chamar o mtodo start():
1. Aloca espao e inicializa uma nova thread na
JVM;
2. Invoca o mtodo run(), fazendo com a thread se
torne elegvel para ser rodada pela JVM.
Questes relacionadas a criao de
threads
As chamadas de sistema fork() e exec()
Cancelamento de threads
Assncrono versus adiado
Manipulao de sinais
Pools de Thread
Dados especficos de threads
Ativaes do escalonador
As chamadas de sistema fork() e exec()
O fork() duplica apenas a thread que invocou
a chamada ou todos as threads do processo?
Se um exec() chamado logo aps o fork(),
desnecessrio duplicar todas as threads, uma
vez que o processo ser substitudo
Caso contrrio, deve-se duplicar todas as threads
O que acontece com o exec()?
Tipicamente o mesmo funcionamento
apresentado na aula passada
Pode substituir todo o processo (incluindo as
threads)
Cancelamento de threads
Cancelar uma thread antes de sua
concluso
Duas abordagens
Cancelamento assncrono: termina a
thread alvo imediatamente
Browser
Cancelamento adiado: permite que a
thread alvo verifique periodicamente se
ela deve ser cancelada
Pesquisa numa base de dados
Manipulao de sinais
Sinais so utilizados no UNIX para notificar um processo de que um determinado evento ocorreu
Todos os sinais seguem o mesmo padro So gerados por um evento particular So entregues a um processo So manipulados pelo processo
Sinais sncronos (do prprio processo) e assncronos (processos externos)
Opes: 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 especfica para receber todos os sinais do
processo
Pools de threads
Cria um nmero de threads em um pool onde
elas aguardam por trabalho
Vantagens:
Geralmente um pouco mais rpido requisitar
uma thread j existente do que criar uma nova
thread
Permite que o nmero de threads na(s)
aplicao(es) seja limitado ao tamanho do pool.
Importante para sistemas que no suportam um
grande nmero de threads concorrentes
tima soluo do Cliente-Servidor!
Dados especficos de threads
Permite que cada thread tenha sua prpria
cpia dos dados
til quando no se tem controle sobre o
processo de criao de threads (ex., quando
se usa um thread pool)
Ativaes do escalonador
Tanto o modelo M:M quanto o de dois nveis utilizam uma estrutura de dados intermediria (LWP) entre as threads do ncleo e do usurio
O LWP funciona como um processador virtual para a aplicao no qual a aplicao pode agendar a execuo de uma thread
O ncleo, em seguida, atribui uma de suas threads para executar a thread do usurio associada a um LWP
Ativaes do escalonador
Para esse esquema funcionar, o ncleo
precisa notificar a aplicao sobre certos
eventos de escalonamento de threads
Essa notificao feita atravs de um
procedimento chamado upcall. Esse
esquema de comunicao conhecido como
ativao do escalonador
Dvidas