Aula 9 - Prof. Edilberto Silva

Propaganda
Sistemas
Operacionais
Aula 9
Threads
Prof.: Edilberto M. Silva
http://www.edilms.eti.br
Baseado no material disponibilizado por:
SO - Prof. Edilberto Silva
Prof. José Juan Espantoso
Threads
Uma thread (ou um processo leve) é uma unidade básica
de utilização da CPU; ela consiste de:
– Contador de programas
– Conjunto de registradores
– Espaço de pilha
Uma thread compartilha com seus pares (outras threads
vinculadas):
– Seção de código
– Seção de dados
– Recursos do sistema operacional
Coletivamente conhecida como uma tarefa (task).
SO - Prof. Edilberto Silva
2
Threads
Modelo de Threads
(a) 3 processos, cada um com uma thread
(b) 1 processo com 3 Threads
SO - Prof. Edilberto Silva
3
Modelo de Threads
 Itens compartilhados por todos as threads em um processo
 Itens privados de cada thread
SO - Prof. Edilberto Silva
4
Modelo de Threads
Cada Thread possui sua própia pilha (stack)
SO - Prof. Edilberto Silva
5
Uso de Threads
Um editor de texto com três threads
SO - Prof. Edilberto Silva
6
Uso de Threads
Um servidor Web com Threads
SO - Prof. Edilberto Silva
7
Uso de Threads
Rough outline of code for previous slide
(a) Thread para disparo
(b) Thread trabalhadora
SO - Prof. Edilberto Silva
8
Ambiente Multithread
Aplicação multithread
Pro ce sso
E s p a ç o d e
e n d e r e ç a m e n to
V a riá v e is
P r o g r a m a P r in c ip a l
PC
SP
C a ll S u b _ 1
T h re a d _2
Su b _1
PC
SP
T h re a d _3
Su b _2
PC
SP
C o n te x t o d e
H a rd w a re
F im
C o n te x t o d e
H a rd w a re
C a ll S u b _ 2
Ret
Ret
...
Neste processo os
três threads são executados
concorrentemente.
T h re a d _1
C o n te x to d e
H ardw are
...
Na figura ao lado,
existe um programa principal
que realiza a chamada de
duas sub-rotinas assíncronas
(Sub_1
e
Sub2).
Inicialmente, o processo é
criado
apenas
com
o
Thread_0 para execução do
programa principal. Quando
o programa principal chama
as sub-rotinas, são criados
os thread_1 e Thread_2.
SO - Prof. Edilberto Silva
9
Ambiente Multithread
 Benefícios de programação com múltiplos threads:
 Capacidade de resposta – o multithreading de uma aplicação
interativa pode permitir que um programa continue executando
mesmo se parte dele estiver bloqueada ou executando uma operação
demorada, aumentando assim, a capacidade de resposta ao usuário.
Por exemplo, um navegador web com múltiplos threads poderia
permitir a interação do usuário em um thread enquanto uma imagem
está sendo carregada em outro thread
 Compartilhamento de recursos – os threads compartilham a memória
e os recursos do processo aos quais pertencem. O Compartilhamento
de código permite que uma aplicação tenha vários threads diferentes
todos dentro do mesmo espaço de enderaçamento
SO - Prof. Edilberto Silva
10
Ambiente Multithread
Benefícios de programação com múltiplos threads:
Economia – alocar memória e recursos para a criação de
processo é caro. Como os threads compartilham recursos
do processo, é mais econômico criar e realizar a troca de
contexto de threads. No Solaris criar um processo é quase
30 vezes mais lento do que criar um thread, e a troca de
contexto é cinco vezes mais lenta
Utilização de arquiteturas de multiprocessador – os
benefícios são expandidos em arquitetura
multiprocessador, na qual cada thread pode estar
executando em paralelo em um processador diferente
SO - Prof. Edilberto Silva
11
Ambiente Multithread
Aplicação
multithread (a)
T h r e a d d e
e n tr a d a
Bu ffe r
T h r e a d d e
e x ib iç ã o
T h r e a d d e
g ra v a çã o
SO - Prof. Edilberto Silva
12
Ambiente Multithread
Aplicação
multithread (b)
P r o c e s s o s e r v id o r
S o lic ita ç õ e s
T h re a d
Th re a d
Th re a d
P r o c e s s o c lie n t e
P r o c e s s o c lie n t e
P r o c e s s o c lie n t e
SO - Prof. Edilberto Silva
13
Arquitetura e
Implementação
Pode ser fornecido suporte a threads no nível do
usuário, para threads de usuário, ou pelo kernel,
para threads de kernel
SO - Prof. Edilberto Silva
14
Arquitetura e
Implementação
Threads em modo usuário
são suportados acima do kernel e são implementados por
uma biblioteca no nível do usuário (criação,
escalonamento e gerência de thread, sem suporte do
kernel)
todas as atividades são feitas no espaço de usuário, sem
necessidade de intervenção do kernel. Portanto, os
threads de usuário são rápidos de criar e gerenciar; no
entanto, apresenta desvantagens. Por exemplo, se o kernel
tiver um único thread, qualquer thread de usuário
realizando uma chamada bloqueante ao sistema causará o
bloqueio de todo o processo, mesmo se houver outros
threads disponíveis na aplicação
SO - Prof. Edilberto Silva
15
T h re a d 4
Th re a d 3
Th re a d 2
T h r e a d 1
Th re a d 0
Threads em modo usuário
Arquitetura e
Implementação
M odo
u s u á rio
B ib lio t e c a
K e rn e l
SO - Prof. Edilberto Silva
M odo
k e rn e l
16
Threads em modo kernel
Arquitetura e
Implementação
 São suportados diretamente pelo sistema operacional (criação,
escalonamento e a gerência são feitos pelo kernel no espaço do
kernel)
 Como a gerência é feita pelo s.o., os threads de kernel são
geralmente mais lentos na criação e gerência do que os threads
de usuário. No entanto, se um thread realizar uma chamada
bloqueante ao sistema, o kernel poderá escalonar outro thread
na aplicação para execução. Além disso, em ambientes
multiprocessados, o kernel pode escalonar threads em
diferentes processadores
SO - Prof. Edilberto Silva
17
K e rn e l
T h r e a d 4
T h r e a d 3
T h r e a d 2
T h r e a d 1
T h r e a d 0
Threads em modo kernel
Arquitetura e
Implementação
M odo
u s u á rio
M odo
k e rn e l
•Windows NT, Solaris e Digital unix são sistemas
operacionais que suportam threads de kernel.
SO - Prof. Edilberto Silva
18
T M U 5
T M U 4
T M U 3
T M U 2
T M U 1
T M U 0
Threads em modo híbrido
Arquitetura e
Implementação
M odo
u s u á rio
B ib lio t e c a
TM K 0
TM K 1
TM K 2
K e rn e l
TM K 3
M odo
k e rn e l
•Muitos sistemas fornecem suporte a threads de usuário e
de kernel, resultando em diferentes modelos de
multithreading.
SO - Prof. Edilberto Silva
19
Threads de Java
 Como visto o suporte para threads é fornecido pelo sistema
operacional ou por uma biblioteca de threads. Por exemplo, a
biblioteca win32 fornece um conjunto de APIs para efetuar
multithreading em aplicações nativas do windows e Pthreads
fornece uma biblioteca de funções de gerência de threads para
sistemas compatíveis com POSIX
 Java fornece suporte no nível da linguagem para criação e geração
de threads
 Todos os programas Java consistem em pelo menos um thread de
controle. Um programa Java com apenas um método main()
executa com um único thread na JVM
 Uma forma de criar um thread explicitamente é criar uma nova
classe derivada da classe thread e redefinir o método run()
SO - Prof. Edilberto Silva
20
Thread em Java
Exemplo de criação de thread pela extensão da
classe Thread
class Worker1 extends Thread
{
public void run( ) {
system.out.println(“I am a worker thread”);
}
}
Public class First
{
public static void main)String args [ ]){
worker1 runner = new Worker1( );
runner.start( );
System.out.println(“I am The Main Thread”);
}
{
SO - Prof. Edilberto Silva
21
Thread em Java
 Além de um programa Java que contém vários threads, existem
threads executando assincronamente para a JVM que tratam de
tarefas ao nível de nível
 A especificação JVM não indica como os threads serão mapeados
no sistema operacional, isso depende de cada JVM em particular
 Em geral, um thread Java é considerado um thread de usuário, e a
JVM é responsável pela gerência dos threads. O windows NT
utiliza o modelo um-para-um, ou seja, cada thread Java para uma
JVM executando no NT é mapeada em um thread de Kernel. O
solaris 2 inicialmente implementou a JVM em muitos-para-um
(threads verdes – Sun). Na versão 2.6, JVM 1, é utilizado o modelo
muitos-para-muitos
SO - Prof. Edilberto Silva
22
Download