sistemas operacionais - threads
DESCRIPTION
Aula sobre ThreadsTRANSCRIPT
-
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