Você está na página 1de 15

Sistemas Operativos

Threads

© 2022 Sérgio Nunes Sistemas Operativos 1


Introdução
• Threads
– Lightweight process (LWP)
– Fluxos de execução dentro de um processo
– As threads dentro de um processo partilham o espaço de
endereçamento (recursos), mas têm contextos de execução
distintos
– Threads podem ser
geridas pelo SO ou pela
aplicação
– Pilha, estado,
program counter e
registos distintos

© 2022 Sérgio Nunes Sistemas Operativos Fonte: Silberschatz 2


Introdução
• Benefícios em relação aos processos:
– Tempo de resposta:
• Context switch menor que os processos
• Criação e terminação mais rápida da thread
• Simplicidade de sincronização entre threads
– Partilha de recursos: facilidade de comunicação
entre threads porque partilham à partida
recursos
– Escalabilidade e economia de recursos
– Mudanças no processo afecta todas as threads
• Ex: Suspender o processo suspende todas as threads

© 2022 Sérgio Nunes Sistemas Operativos 3


Thread Control Block
• 1 PCB mas vários Thread Control Blocks

© 2022 Sérgio Nunes Sistemas Operativos Fonte: Stallings 4


Multithread Server
• Arquitectura típica de servidor de recursos:

© 2022 Sérgio Nunes Sistemas Operativos Fonte: Silberschatz 5


Estados Threads

Fonte: Deitel
© 2022 Sérgio Nunes Sistemas Operativos 6
Operações Threads
• Igual aos processos:
– Create, Exit (terminate), Block, Resume, Sleep, Wake
• Diferentes dos processos:
– Cancel: indica que uma thread deve ser terminada,
mas não garante que isso acontece porque a thread
pode ignorar o sinal de cancel
• Cancelamento síncrono: termina a thread de imediato
• Cancelamento assíncrono: a thread verifica periodicamente
se deve ser terminada
– Join: espera que outra thread acabe a execução
bloqueando até que a outra termine

© 2022 Sérgio Nunes Sistemas Operativos 7


Sinais Threads
• Sinais das threads: cada thread pode receber do
processo um conjunto de sinais quando executa
– O processo pode enviar o sinal para 1 thread, para várias,
para todas ou pode designar uma thread para gerir os
sinais
• Esses sinais podem ser ignorados (mask) excepto
alguns que queira receber
• Síncronos
– Ocorrem em consequência da execução
– São enviadas à thread em execução
• Assíncronos
– Ocorrem por eventos não relacionados com a execução
– A biblioteca das threads é responsável por entregar o sinal
no recipiente da thread alvo
© 2022 Sérgio Nunes Sistemas Operativos 8
User Level Threads
• User Level Threads (ULT):
– Toda a gestão de threads é feita pela aplicação
• As operações são realizadas no user space
– O kernel não sabe da
existência de threads
– Mapeamento many to one
(M:1)

© 2022 Sérgio Nunes Sistemas Operativos Fonte: Stallings 9


User Level Threads
• Vantagens:
– Bibliotecas de threads (user-level) podem escalonar as threads
para optimizar performance
• Escolha do tipo de escalonamento apropriado para a aplicação
– Sincronização é feita sem recorrer ao kernel space por isso
minimiza mudanças de contexto user/kernel mode
– Criar e terminar threads com rapidez
– Portabilidade: sem dependência do kernel usa bibliotecas
específicas
• Desvantagens
– Kernel vê um processo multi thread como uma única thread de
controlo
• Não pode ser escalonada em vários processadores (escalonamento
limitado)
• Fraca performance se as threads forem dependentes I/O (se uma
bloquear todas bloqueiam)
• Se uma thread for terminada todas as outras também são
• Limitado a uma system call de cada vez
© 2022 Sérgio Nunes Sistemas Operativos 10
Kernel Level Threads
• Kernel Level Threads (KLT):
– Kernel mantém a informação de contexto do
processo e as suas threads
– Threads implementadas em
Kernel space
– Escalonamento feito por
threads
– Mapeamento one to one
(1:1)

© 2022 Sérgio Nunes Sistemas Operativos Fonte: Stallings 11


Kernel Level Threads
• Vantagens:
– Maior escalabilidade e maior interactividade
– Se uma thread bloquear outra pode continuar
– Podem existir system calls simultâneas
– Terminação de threads independente
– Escalonamento adequado entre threads
• Adequado para multiprocessadores

• Desvantagens
– Context switching kernel/user mode (overhead)
– Menor portabilidade (OS thread API)
– Necessidade de kernel threads visíveis para o
utilizador
© 2022 Sérgio Nunes Sistemas Operativos 12
Combinar ULT e KLT
• Modelo Híbrido:
– Tenta aproveitar os benefícios dos ULT e KLT
– Mapeia várias threads do
user space a várias do
kernel space (M:N)
Criação da thread,
escalonamento e sincronização
em user space

© 2022 Sérgio Nunes Sistemas Operativos Fonte: Stallings 13


Thread Pool
• Como a maior parte dos SO utiliza o modelo
1:1 é fundamental não perder tempo a criar e
destruir threads
• Um conjunto de threads persistentes (worker
threads) são criadas previamente e são
bloqueadas à espera de execução
• Quando aparece trabalho útil uma thread de
gestão acorda 1 worker thread e atribui o
trabalho
• Quando acaba o trabalho volta para a pool
© 2022 Sérgio Nunes Sistemas Operativos 14
Exemplos Threads
• Pthreads
– A POSIX standard API para criação e sincronização de
threads
– Comum em sistemas Unix
• Windows threads
– Implementam o mapeamento 1:1
– Utiliza uma thread pool
• Linux threads
– Através da syscall Clone() que partilha o espaço de
endereçamento
• Java Threads
– Classe Thread ou interface Runnable com execução no
método run()
© 2022 Sérgio Nunes Sistemas Operativos 15

Você também pode gostar