You are on page 1of 24

Threads

IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition Silberschatz, Galvin and Gagne 2012

Threads
 Panormica
 Modelos Multitarefa
 Bibliotecas de Threads
Questes relacionadas com Threads
IPG-ESTG EI 2016-17 Sistemas Operativos


 Exemplos de Sistemas Operativos
 Threads no Windows
 Threads no Linux

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 2
Objetivos
 Introduzir a noo de thread uma unidade fundamental de utilizao da CPU que constitui a base dos
sistemas computacionais multitarefa

 Apresentar e discutir as API das bibliotecas Pthreads, Windows Threads e Java Threads
IPG-ESTG EI 2016-17 Sistemas Operativos

 Analisar questes relacionadas com a programao multitarefa

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 3

Motivao
 As threads so executadas no mbito de uma aplicao
 As mltiplas tarefas que constituem uma aplicao podem ser implementadas por diferentes threads
 Atualizar o monitor
Receber dados
IPG-ESTG EI 2016-17 Sistemas Operativos

 Aplicar o corretor ortogrfico


 Responder a um pedido de rede
 A criao de um processo muito pesada enquanto que a criao de uma thread mais leve
 Podem simplificar o cdigo, aumentar a eficincia
 Os ncleos dos SO so de um modo geral multitarefa

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 4
Processos Uni e Multitarefa
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 5

Benefcios
 Capacidade de resposta

 Partilha de recursos
IPG-ESTG EI 2016-17 Sistemas Operativos

 Economia

 Escalabilidade
 Os benefcios da multitarefa podem ser bastante incrementados numa arquitetura multiprocessador

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 6
Programao de Sistemas Multiprocessador
 As arquiteturas multiprocessador ou multicore trouxeram alguma presso para o lado dos programadores,
na medida em que so obrigados a tirar melhor partido das mquinas com mltiplos processadores. Os
projetistas de SO devem escrever algoritmos de escalonamento que utilizem os diversos processadores
do sistema de modo a permitirem a execuo paralela. Para os programadores de aplicaes genricas, o
desafio o de modificar os programas existentes, ou desenvolver novos que sejam multitarefa, de modo a
IPG-ESTG EI 2016-17 Sistemas Operativos

tirar vantagem dos sistemas com vrios processadores.


 Podemos considerar que a programao para sistemas multiprocessador apresenta os seguintes
desafios:
 Diviso de atividades
 Equilbrio
 As tarefas devem desenvolver trabalho com peso e valor semelhantes
 Separao dos dados
 Os dados acedidos e manipulados pelas tarefas devem ser divididos de modo a que a
execuo possa ser feita em diferentes processadores
 Dependncia dos dados
 Verificar existncia de dependncia de dados entre duas ou mais tarefas (tarefas devero ser
devidamente sincronizadas)
 Teste e depurao (debugging)
 O teste e depurao de programas concorrentes inerentemente mais complexo

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 7

Arquitetura de Servidor Multitarefa


IPG-ESTG EI 2016-17 Sistemas Operativos

 Exemplo de um servidor Web


 Se o sistema no for multitarefa, de cada vez que o servidor recebe um pedido cria um processo
separado (consome mais tempo e recursos do sistema). Cada novo processo executa as mesmas tarefas
dos processos j existentes
 mais eficiente usar um nico processo que contm mltiplas threads
 Quando o servidor recebe um pedido, cria uma nova thread para responder ao pedido, ficando espera
de novos pedidos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 8
Execuo Concorrente
num Sistema Single-Core
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 9

Execuo Paralela
num Sistema Multicore
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 10
Modelos Multitarefa
 O suporte para as threads pode ser fornecido ao nvel de utilizador (para as user threads) ou pelo ncleo do SO
(para as kernel threads)
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 11

User Threads
 As user threds so suportadas acima do ncleo do SO, sendo geridas sem o suporte do kernel

 So geridas pelas bibliotecas de threads de nvel de utilizador


IPG-ESTG EI 2016-17 Sistemas Operativos

 As principais bibliotecas de threads de utilizador em utilizao nos dias de hoje:


 POSIX Pthreads
 Windows threads
 Java threads

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 12
Kernel Threads
 As kernel threads so suportadas e geridas diretamente pelo SO (pelo Kernel)

 Exemplos virtualmente, todos os SO atuais suportam kernel threads:


 Windows XP/2000
IPG-ESTG EI 2016-17 Sistemas Operativos

 Solaris
 Linux
 Tru64 UNIX (anteriormente designado por Digital UNIX)
 Mac OS X

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 13

Modelos Multitarefa
 Em ltima instncia, deve existir uma relao entre user threads e kernel threads (entre tarefas de utilizador e
tarefas de sistema)

 Existem 3 modos comuns de estabelecer essa relao:


IPG-ESTG EI 2016-17 Sistemas Operativos

 Muitos-para-Um

 Um-para-Um

 Muitos-para-Muitos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 14
Modelo Muitos-para-Um
 Muitas user-level threads mapeadas em uma nica kernel thread

 Exemplos:
IPG-ESTG EI 2016-17 Sistemas Operativos

 Solaris Green Threads


 GNU Portable Threads

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 15

Modelo Muitos-para-Um
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 16
Modelo Um-para-Um
 Cada user-level thread mapeada numa kernel thread

 Exemplos
IPG-ESTG EI 2016-17 Sistemas Operativos

 Windows NT/XP/2000
 Linux
 Solaris 9 e verses posteriores

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 17

Modelo Um-para-Um
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 18
Modelo Muitos-para-Muitos

 Permite que muitas threads do nvel de utilizador sejam mapeadas em vrias kernel threads (em nmero
menor ou igual ao nmero de threads de utilizador)
IPG-ESTG EI 2016-17 Sistemas Operativos

 Permite ao SO criar um nmero suficiente de kernel threads

 Exemplos
 Solaris (verses anteriores 9)
 Windows NT/2000 (com o package ThreadFiber)

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 19

Modelo Muitos-para-Muitos
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 20
Modelo de Dois Nveis

 Semelhante ao modelo M:M, mas permitindo tambm que uma user thread seja mapeada numa kernel
thread
IPG-ESTG EI 2016-17 Sistemas Operativos

 Exemplos
 IRIX
 HP-UX
 Tru64 UNIX
 Solaris 8 e anteriores

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 21

Modelo de Dois Nveis


IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 22
Bibliotecas de Threads
 Uma biblioteca de Threads fornece aos programadores uma API para criao e gesto de threads

 Duas formas principais de implementao


Biblioteca inteiramente no espao de utilizador (sem suporte do kernel)
IPG-ESTG EI 2016-17 Sistemas Operativos

 Chamar uma funo da biblioteca resulta na chamada de uma funo local no espao de
utilizador em vez de uma chamada sistema
 Biblioteca ao nvel do kernel (suportada pelo SO)
 Chamar uma funo da biblioteca na API resulta tipicamente numa chamada sistema do
ncleo do SO

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 23

Pthreads
 Pthreads: threads do standard POSIX

 Tanto pode ser fornecida como user-level ou como kernel-level


IPG-ESTG EI 2016-17 Sistemas Operativos

 Um standard API POSIX (IEEE 1003.1c) para criao e sincronizao de threads


 Especificao de comportamento da thread, no uma implementao

 A API especifica o comportamento da biblioteca de threads, j a implementao fica para o


desenvolvimento da biblioteca

 Comum em sistemas operativos UNIX (Solaris, Linux, Mac OS X)

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 24
Exemplo Pthreads
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 25

Exemplo Pthreads (Cont.)


IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 26
Programa C Multitarefa para a API Windows
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 27

Programa C Multitarefa para a API Windows (Cont.)


IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 28
Java Threads
 As Java threads so geridas pela JVM

 Tipicamente implementadas usando o modelo de threads fornecido pelo SO subjacente


IPG-ESTG EI 2016-17 Sistemas Operativos

 As Java threads podem ser criadas por:

 Extenso da Thread class


 Implementao da Runnable interface

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 29

Programa Java Multitarefa


IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 30
Programa Java Multitarefa (Cont.)
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 31

Questes Relacionadas com Threads

 Semntica das chamadas sistema fork() e exec()


 Diferentes num programa multitarefa
Caso uma thread num programa chame fork():
IPG-ESTG EI 2016-17 Sistemas Operativos

O novo processo duplica todas as threads?


Ou ser que o novo processo single-threaded?
 Depende da aplicao:
Se exec() for chamada imediatamente aps a criao (forking), ento a duplicao de
todas as threads desnecessria. Bastar duplicar apenas a thread invocante.
Se o processo separado no chamar exec() aps a criao (forking), ento o
processo separado dever duplicar todas as threads.

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 32
Questes Relacionadas com Threads

 Cancelamento de uma Thread (target thread)


 O cancelamento de uma Thread a tarefa de terminar uma thread antes de ela ficar concluda
Exemplos:
IPG-ESTG EI 2016-17 Sistemas Operativos

 Mltiplas threads esto a procurar informao concorrentemente numa base de dados at


que uma devolve o resultado; as outras threads podem ser canceladas
 O utilizador carrega no boto de um web browser que pra de continuar a carregar a
pgina web. Geralmente, uma pgina web carregada usando vrias threads
 Uma thread que est para ser cancelada referida como a target thread.
 O cancelamento de uma target thread pode ocorrer num de dois cenrios diferentes:
 Cancelamento assncrono
Uma thread termina de imediato a target thread
 ou um cancelamento diferido
A target thread verifica periodicamente se deve terminar, permitindo-se uma
oportunidade de terminar de um modo ordenado
 Dificuldades com o cancelamento ocorrem em situaes em que foram atribudos recursos a
uma thread cancelada

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 33

Questes Relacionadas com Threads

 Tratamento de sinais (Signals)


 Os sinais (signals) so utilizados nos sistemas UNIX para notificar um processo da ocorrncia de um
determinado evento
IPG-ESTG EI 2016-17 Sistemas Operativos

 Sncronos
 Acesso ilegal memria
 Diviso por 0
 Ou assncronos
 Quando o sinal gerado por um evento externo ao processo em execuo
 De um modo geral, esto disponveis as seguintes opes:
 Distribuir o sinal thread a que diz respeito
 Distribuir o sinal a todas as threads do processo
 Distribuir o sinal a determinadas threads do processo
 Designar uma determinada thread para receber todos os sinais destinados ao processo

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 34
Questes Relacionadas com Threads

 Thread pools
 Definir uma limitao para o nmero de threads em concorrncia ativa no sistema
IPG-ESTG EI 2016-17 Sistemas Operativos

 O nmero de threads na pool pode ser determinado heuristicamente com base em fatores
como o nmero de CPU no sistema, a quantidade de memria fsica e o nmero expectvel de
pedidos concorrentes de clientes.
 Dados especficos da Thread
 Criar mecanismos necessrios para os dados privados de uma thread
 Scheduler activations

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 35

Semnticas de fork() e exec()


 A chamada sistema fork() duplica apenas a thread invocante ou todas as threads?
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 36
Cancelamento de uma Thread

 Terminar uma thread antes da sua concluso

 Duas abordagens genricas:


IPG-ESTG EI 2016-17 Sistemas Operativos

 Cancelamento assncrono termina a target thread imediatamente.


 Cancelamento diferido permite que a prpria target thread verifique periodicamente se deve
ser cancelada.

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 37

Tratamento de Sinais

 Os sinais so utilizados nos sistemas UNIX para notificar um processo que um determinado evento
ocorreu.

Um signal handler utilizado para processar sinais


IPG-ESTG EI 2016-17 Sistemas Operativos


1. O sinal gerado por um determinado evento
2. O sinal distribudo a um processo
3. O sinal tratado

 Opes:
 Distribuir o sinal thread a que diz respeito
 Distribuir o sinal a todas as threads do processo
 Distribuir o sinal a determinadas threads do processo
 Designar uma determinada thread para receber todos os sinais destinados ao processo

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 38
Thread Pools
 Colocar uma quantidade de threads numa pool onde esperaro que lhes seja atribudo trabalho

 Vantagens:
Geralmente ligeiramente mais rpido responder a um pedido com uma thread j existente (
IPG-ESTG EI 2016-17 Sistemas Operativos


espera na pool) do que criar uma nova thread
 Permite que o nmero de threads na(s) aplicao(es) seja limitado dimenso da pool

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 39

Dados da prpria Thread


 Permite que cada thread tenha a sua prpria cpia de dados

 til na situao em que no se tem controlo no processo de criao da thread (por exemplo, quando se
utiliza uma thread pool)
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 40
Scheduler Activations
 Tanto o modelo M:M como o de Dois Nveis requerem comunicao com vista a manterem o nmero
apropriado de kernel threads atribudos aplicao

 Ora, as scheduler activations fornecem upcalls - um mecanismo de comunicao entre o kernel e a


IPG-ESTG EI 2016-17 Sistemas Operativos

thread library

 Esta comunicao permite que uma aplicao mantenha o nmero apropriado de kernel threads

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 41

Processos Lightweight
IPG-ESTG EI 2016-17 Sistemas Operativos

 Muitos dos sistemas que implementam tanto o modelo M:M como o modelo de Dois Nveis colocam
uma estrutura de dados (LWP) de ligao entre as user e kernel threads

 Para a biblioteca de threads do utilizador, a LWP vista como um processador virtual onde a
aplicao pode escalonar a execuo de uma thread de utilizador

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 42
Exemplos de Sistemas Operativos
 Threads no Windows

 Threads no Linux
IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 43

Threads no Windows
 O Windows implementa a API Windows a principal API para os SO da famlia Windows (Windows 98,
NT, 2000, XP e tambm do Windows 7 e posteriores)

Uma aplicao Windows executada como um processo em separado, sendo que cada processo pode
IPG-ESTG EI 2016-17 Sistemas Operativos


conter uma ou mais threads

 Implementa o mapeamento um-para-um, kernel-level

 Cada thread contm


 Um identificador
 Conjunto de registos, representando o estado do processador
 Pilhas user e kernel separadas, para quando a thread executada em modo utilizador ou em
modo kernel
 rea de armazenamento de dados privada, usadas pelas diversas run-time libraries e dynamic link
libraries (DLL)

 O conjunto de registos, pilhas e rea de armazenamento privado so conhecidos como o contexto da


thread

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 44
Threads no Windows
 As estruturas de dados bsicas de uma thread incluem:
 ETHREAD (executive thread block) existente inteiramente no espao do kernel (s o kernel lhe
pode aceder)
inclui apontador para o processo a que a thread pertence e apontador para o KTHREAD
IPG-ESTG EI 2016-17 Sistemas Operativos


correspondente

 KTHREAD (kernel thread block) - existente inteiramente no espao do kernel


 Informao de escalonamento e de sincronizao para a thread, pilha para o modo kernel,
apontador para o TEB

 TEB (thread environment block) estrutura de dados do espao de utilizador, que pode ser acedida
quando a thread executada em modo utilizador
 id da thread, pilha para o modo utilizador, array para armazenamento local da thread

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 45

Estrutura de uma Thread no Windows


IPG-ESTG EI 2016-17 Sistemas Operativos

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 46
Threads no Linux

 O Linux refere-se a elas como tasks em vez de threads


 O Linux no faz distino entre processos e threads
O Linux usa o termo task (em vez de processo ou thread) quando se quer referir a um fluxo de
IPG-ESTG EI 2016-17 Sistemas Operativos


controlo num programa

 A criao de uma thread obtida com a chamada sistema clone()

 clone() permite a partilha do espao de endereamento entre a task-filho e a task-pai (processo)

 Existe uma nica estrutura de dados do kernel (struct task_struct) para cada
task no sistema
 struct task_struct aponta para estruturas de dados do processo (partilhada ou nica)
 Esta estrutura de dados, em vez de armazenar dados para a task, contm
ponteiros para outras estruturas de dados onde esses dados esto
armazenados
 Esta maneira de representar uma task no kernel do Linux possibilita a
existncia de vrios nveis de partilha entre as diversas tasks

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 47

Threads no Linux
 Chamadas sistema fork() e clone()
 No faz distino entre processo e thread
 Utiliza a designao task em vez de thread
 clone() tem opes (flags) para determinar a partilha na criao de tasks ver tabela
IPG-ESTG EI 2016-17 Sistemas Operativos

 Se nenhuma destas flags for sinalizada, nada partilhado, pelo que a funcionalidade
semelhante chamada sistema fork()
 Significado das flags:

 struct task_struct aponta para as estruturas de dados da task (partilhadas ou nicas)

Operating System Concepts 9th Edition


Silberschatz, Galvin and Gagne 2012 Threads 48