Agenda
•Modelo de Threads
•Aplicação de Threads
•Threads no Modo Usuário
•
Threads no Modo
Kernel
•
Threads no Modo
Kernel
•Implementações Híbridas de Threads
•Threads Pop-up
•Threads no Linux
Modelo de Threads
•Processo: recursos + linhas de execução
•Recursos formam um contexto de execução
•Threads são entidades que competem pelo
tempo de CPU tempo de CPU
•Threads “vivem” em processos,
compartilhando seus recursos
Modelo de Threads
Modelo de Threads
•Threads em um processo são cooperativas,
compartilham os recursos e trabalham juntas
para realizar alguma tarefa.
Modelo de Threads
Aplicação de Threads
•Por que usar threads?
–Modelo de programação mais apropriado para
tratamento de atividades concorrentes
–
Facilidade de criação e finalização (peso leve)
–
Facilidade de criação e finalização (peso leve)
–Permite sobrepor diferentes atividades de E/S,
dando um ganho de desempenho
Aplicação de Threads
•Editor de texto
Aplicação de Threads
•Servidor WEB
Aplicação de Threads
•Formas de construir um Servidor
Implementação de Threads
•Existem três formas de implementar
multithreading
–Modo Usuário
–
Modo
Kernel
–
Modo
Kernel
–Modelo Híbrido
Threads no Modo Usuário
•Threads são implementadas como uma
biblioteca
•Kerneldesconhece a existência das threads
•
O
run
-
time
system coordena a execução das
•
O
run
-
time
system coordena a execução das
threads, sem chamadas de sistema
•O que acontece quando uma thread faz uma
chamada bloqueante?
Threads no Modo Usuário
Threads no Modo Kernel
•O kernelgerencia a execução das threads
•Custo mais alto para criar e destruir threads
–Reciclagem de Threads
•
Sem problemas com chamadas
bloqueantes
•
Sem problemas com chamadas
bloqueantes
Threads no Modo Kernel
Modelo Híbrido
Threads Pop-Up
•Thread criada automaticamente para
gerenciar um evento de E/S
Threads no Linux
•Criação de Thread
–A função pthread_createcria uma nova thread.
–O programador deve fornecer
•
Um ponteiro para uma variável que armazenará o ID d a
•
Um ponteiro para uma variável que armazenará o ID d a Thread
•Um ponteiro para uma estrutura thread attribute
•Um ponteiro para função que a thread irá executar
•Argumentos da função da thread como um ponteiro
void
Passando dados para Threads
Threads no Linux
•JoiningThreads
–Em alguns casos, é necessário esperar pela
finalização de uma thread
–
A função
pthread_join
bloqueia uma thread até
–
A função
pthread_join
bloqueia uma thread até
que a thread desejada finalize
Exercícios
•Implemente os exemplos de código listados na
apresentação.
•Crie uma aplicação multithread(duas threads)
que seja capaz de calcular o
Nth
número
que seja capaz de calcular o
Nth
número
primo. Utilize as chamadas de sistemas
apresentadas.
Exercícios
•Neste problema, iremos comparar a performance
de dois servidores de arquivo. O servidor A é
monothreade o servidor B é multithread. Ambos
servidores compartilham as seguintes
características: leva 15
ms
para responder uma
requisição se os dados estão na
cache
. Se um
características: leva 15
ms
para responder uma
requisição se os dados estão na
cache
. Se um
acesso ao disco é necessário, como em 1/3 das
vezes, 75 msadicionais são necessários, durante
os quais a thread dorme. Quantas requisições/sec
o servidor pode atender se é monothread? E se
for multithread?
Exercícios
•Em quais circunstâncias um servidor WEB
monothreadseria melhor do que um
multithread?
•
Pesquise sobre o problema da inversão de
•
Pesquise sobre o problema da inversão de prioridades. Ele pode ocorrer em thread modo
usário? Por que ou por que não?
Referências
•TANENBAUM, Andrew S., SistemasOperacionais
Modernos, 2°ed., Ed. Pearson Education, 2003.
•MITCHEL, M., OLDHAM J. e SAMUEL A., Advanced
Linux Programming, 1
°
ed.,
New
Riders
Publisher,
2001.