You are on page 1of 27

Threads

Introduo
Processos e Threads
Nveis de implementao
Modelos de Multithreads
Exemplo de uso

Multiprogramao pesada
Custo de gerenciamento de processos fator limitante
Criao do processo
Troca de contexto
Esquemas de proteo, memria virtual, ...

Soluo:
Aliviar os custos
Reduzir o overhead
envolvido

Multiprogramao leve - Threads


Fornecido pela abstrao de um fluxo de execuo
thread
mecanismo que permite a um processo ter mais de um
fluxo de controle
threads: compartilham o espao de endereamento
(processo leve)
estados fundamentais: executando, pronta, bloqueada
unidade de interao passa a ser a funo
contexto: pilha, PC, registradores de uso geral
comunicao via compartilhamento direto da rea de
dados
3

Processos x Threads (1)

Processos x Threads (2)

Processo = fluxo de controle +


espao de endereamento
5

Thread = fluxo de controle

Exemplo: RPC
tempo
pedido
RPC

pedido
RPC

processo 1
serv

serv

thread A
(processo 1)

pedido
RPC

serv

thread B
pedido
RPC

serv
executando
bloqueado
6

Single x Multithreaded (1)

Single x Multithreaded (2)


Multithreaded
Singlethread
PCB

Espao de
ender. do
usurio

Pilha
do
usurio
Pilha
do
ncleo

PCB

Espao de
ender. do
usurio

Thread

Thread

Thread

TCB

TCB

TCB

Pilha
do
usurio

Pilha
do
usurio

Pilha
do
usurio

Pilha
do
ncleo

Pilha
do
ncleo

Pilha
do
ncleo

Multithreading
Suporte a mltiplas threads de
execuo dentro de um nico
processo

estruturas de dados similares ao descritor de processo


(PCB): TCB

Single x Multithreaded (3)

um processo
uma thread

vrios processos
uma thread por processo

Ex.: MSDOS

Ex.: Unix (incio)


9

um processo
vrias threads

vrios processos
vrias threads por processo

Ex.: JVM

Ex.: Linux, Win

Exemplo de uso de threads (1)


Editor de textos com 3 threads (threads para diferentes
tarefas)

10

Exemplo de uso de threads (2)


Processador de textos
thread para exibir grfico

thread para ler sequncias de teclas digitadas


thread para efetuar a verificao ortogrfica em segundo plano
Sistemas computacionais

3 processos separados no funcionam os 3 precisam atuar


sobre o mesmo documento
3 threads compartilham uma memria comum, permitindo
acesso ao documento

11

Thread: implementao
2 principais nveis de implementao:
Threads no espao de usurio (user level threads, N:1)
Threads no espao de kernel (kernel level threads,1:1)

a) Modelo N:1

b) Modelo 1:1

12

c) Modelo N:M

Threads de usurio
admitidas no nvel do usurio e gerenciadas sem o suporte
do kernel
thread requisita I/O bloqueia todo o processo

Biblioteca de threads com:


- Tabela de threads
- Escalonador prprio

13

Threads de kernel
admitidas e gerenciadas diretamente pelo SO
kernel chaveia entre threads, independente do processo a que
pertencem

14

Threads: implementao hbrida


Tenta combinar as vantagens dos 2
modos anteriores
Usurio: rpida criao e
chaveamento entre threads
Kernel: o processo todo no
bloqueado pelo bloqueio de uma
thread
A ideia utilizar algumas threads de
kernel e multiplexar threads de
usurio sobre elas

15

Modelos de multithreading

a) Modelo N:1

b) Modelo 1:1

16

c) Modelo N:M

a) Modelo N:1, user-level threads (1)

N threads de usurio mapeadas para 1 thread de kernel

Gerenciamento feito pela biblioteca de threads no nvel de usurio

Se uma thread faz chamada de sistema bloqueante, todo o processo


ser bloqueado

Ex.: GNU Portable threads, POSIX Pthreads, SunOS

17

a) Modelo N:1, user-level threads (2)

PC1 SP1
Espao
de
usurio

PC2 SP2
PCn SP3

processo
SP

pilha

PC cdigo dados

escalonador
biblioteca

CPU virtual

biblioteca
Espao
de
sistema

dados

escalonador
sistema operacional

pilha

CPU
18

b) Modelo 1:1, kernel-level threads (1)

Mapeia cada thread de usurio para 1 thread de kernel

Thread a unidade de escalonamento do ncleo

Biblioteca de chamadas de sistema inclui operaes para


criar/controlar threads

SOs que suportam esse modelo: Linux Threads, Win32, FreeBSD

19

b) Modelo 1:1, kernel-level threads (2)

Espao
de
usurio

PC1 SP1
PC2 SP2
PCn SP3

Espao
de
sistema

dados

processo
SP
pilha

PC cdigo dados

CPU
virtual

CPU
virtual

CPU
virtual

escalonador
sistema operacional

pilha

CPU
20

c) Modelo N:M, hbrido (1)

Mapeia N threads de usurio para M threads de kernel (M<N)

Quando uma thread faz chamada de sistema bloqueante, SO pode


escalonar outra thread do mesmo processo

SOs que suportam esse modelo: Win7, Solaris 8

21

c) Modelo N:M, hbrido (2)

PC1 SP1
Espao
de
usurio

PC2 SP2
PCn SP3

processo
escalonador
biblioteca

SP

pilha

PC cdigo dados
CPU
virtual

CPU
virtual

CPU
virtual

biblioteca
Espao
de
sistema

dados

escalonador
sistema operacional

pilha

CPU
22

Bibliotecas de Threads
Oferece uma API para a criao e gerenciamento de
threads
2 formas de implementar bibliotecas:
Biblioteca no espao do usurio sem suporte do kernel
Biblioteca no espao do ncleo com suporte direto do SO

Bibliotecas mais comuns


POSIX Pthreads (nvel de usurio ou de kernel)
Win32 (nvel de kernel)
Java (nvel de usurio, mas usa a biblioteca do SO
hospedeiro)
23

Exemplo de uso: Pthreads no C (1)


#include <pthread.h>
#include <stdio.h>
void * Thread0(){
int i;
for(i=0;i<10;i++)
printf(" Thread0 - %d\n",i);
}
void * Thread1(){
int i;

int main(){
pthread_t t0, t1;
pthread_create(&t0, NULL, Thread0,NULL);
pthread_create(&t1, NULL, Thread1,NULL);
pthread_join(t0,NULL);
pthread_join(t1,NULL);
printf("Main ....\n");
}

for(i=10;i<20;i++)
printf(" Thread1 - %d\n",i);

// p/ compilar: gcc o thread thread.c pthread


24

Exemplo de uso: Pthreads no C (2)

25

Escalonamento de Threads

Threads de kernel

Threads de usurio
26

Exemplos de threads

hello.c
hello_arg.c
hello_args.c
hello_join.c

27

You might also like