Upload
ngohanh
View
218
Download
0
Embed Size (px)
Citation preview
Sistemas Operacionais I
Parte VI – Threads
Prof. Gregorio Perez
2007
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 2
Roteiro
Introdução
Benefícios
Ciclo de Vida
• Estados
Modelos Multithreading
• Modelo Muitos para Um
• Modelo Um para Um
• Modelo Muitos para Muitos
Sistemas com Threads
Threads no Java
Questões
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 3
Threads
Introdução
Tradicionalmente, processo é um programa em execução
• Supõem-se um único fluxo de controle
Em sistemas modernos um processo pode conter múltiplos
fluxos de controle - Threads
Thread
• Também conhecido como processo leve (lightweight process)
• É uma unidade básica de utilização da CPU
• Coletivamente conhecido como tarefa
Consiste em:
• ID da Thread
• Contador de Programa (program counter)
• Registradores (register set)
• Pilha (stack space)
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 4
Threads
Introdução
Um Thread compartilha com outros Threads do mesmo
processo:
• Seção de Código
• Seção de Dados
• Recursos do Sistema operacional (arquivos abertos, …)
Um processo tradicional ou processo pesado (heavyweight
process) é uma tarefa com um Thread
CódigoCódigo
DadosDados
ArquivosArquivos
CódigoCódigo
DadosDados
ArquivosArquivos
ThreadThread
Processo tradicional - Um thread Múltiplos threads
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 5
Threads
Exemplo
Um processador de Texto com 3 threads
Figura extraída de “Sistemas
Operacionais Modernos”
A.Tanenbaum; 2a Edição;
Ed. Pearson
Figura extraída de “Sistemas
Operacionais Modernos”
A.Tanenbaum; 2a Edição;
Ed. Pearson
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 6
Threads
Exemplo
Um servidor web com múltiplos threads
Figura extraída de “Sistemas
Operacionais Modernos”
A.Tanenbaum; 2a Edição;
Ed. Pearson
Figura extraída de “Sistemas
Operacionais Modernos”
A.Tanenbaum; 2a Edição;
Ed. Pearson
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 7
Threads
Introdução
Ambiente multithread
• Desnecessário processos para implementar aplicações
concorrentes
• Cada processo pode responder a várias solicitações
Concorrentemente ou simultaneamente (vários processadores)
Diferença Sub-processo e Thread
• Espaço de endereçamento
• Sub-processo
• espaço independente e protegido
• Thread
• mesmo espaço do processo e não protegido
• Threads podem alterar dados em outras Threads
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 8
Multithreads
Benefícios
Capacidade de Resposta
• Permite que um programa continue em execução, mesmo
que parte dele esteja bloqueado ou executando uma tarefa
demorada
Compartilhamento de Recursos
• Threads podem compartilhar recursos de memória e processador
• Vários threads diferentes no mesmo espaço de endereçamento
Economia
• Alocar memória e processador é mais rápido para threads do
que para processos
Arquitetura com múltiplos processadores
• Cada thread pode ser executado em paralelo em um
processador diferente
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 9
Ciclo de Vida de Threads
Estados
Novo
• (Born)
Pronto
• (Ready ou runnable)
em Execução
• (Running)
Terminado
• (Dead)
Bloqueado
• (Blocked)
Espera
• (Waiting)
Adormecido
• (Sleeping)
Figura extraída de “Sistemas Operacionais”
Deitel et al; 3a Edição; Ed. Pearson
Figura extraída de “Sistemas Operacionais”
Deitel et al; 3a Edição; Ed. Pearson
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 10
Ciclo de Vida de Threads
Operações
Threads e processos possuem operações em comum
• Criar (Create)
• Encerrar (Terminated)
• Suspender (Suspend)
• Retomar (Resume)
• Dormir (Sleep)
• Acordar (Wake)
Operações de threads que não correspondem a operações de
processos
• Cancelar (Cancel)
• Associar
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 11
Suporte a Threads
Threads de Usuários
Gerenciamento de Thread feito no nível do usuário
• Biblioteca de threads
• Suporte à criação, escalonamento e gerência
• Sem intervenção do Kernel
• Rápidos de criar e gerenciar
• Se o kernel tiver um único thread, sistema pode paralisar
(thread bloqueante)
Principais bibliotecas de threads
• POSIX Pthreads
• Java threads
• Win32 threads
• Mach C-threads
• Solaris threads
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 12
Suporte a Threads
Threads de Kernel
Suportadas diretamente pelo Kernel
• Criação, escalonamento e gerência feitos no espaço do Kernel
• Criação e gerência mais lentos que os threads de usuários
• Kernel sempre pode escalonar outro thread
– sistema nunca paralisa
• Kernel pode escalonar processos em outros processadores
Exemplos
• Windows XP/2000
• Solaris
• Linux
• Tru64 UNIX
• Mac OS X
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 13
Modelos Multithreading
Muitos sistemas fornecem suporte a threads de usuário e
kernel , resultando diferentes modelos de multithreading
Modelo Muitos para um
Modelo um para um
Modelo Muitos para muitos
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 14
Modelos Multithreading
Modelo Muitos para Um
Muitas threads do usuário
associadas a uma única thread de kernel
Exemplos
• Solaris Green Threads
• GNU Portable Threads
Eficiente, pois a gerência é
feita no espaço do usuário
Desvantagens
• Se houver chamada bloqueante o processo inteiro é bloqueado
• Não é possível executar múltiplos threads em multiprocessadores
kk
Thread de
Kernel
Thread de
Usuário
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 15
Modelos Multithreading
Modelo Um para Um
Cada thread do usuário associada a uma thread de kernel
Exemplos
• Windows NT/XP/2000
• Linux
• Solaris 9 e acima
Oferece mais concorrência
• Permite que outro thread execute quando um thread efetuar
uma chamada bloqueante ao sistema
• Permite executar múltiplos threads em paralelo em
multiprocessadores
Desvantagem
• Criar um thread de usuário requer criar um thread de kernel
• Restrição no número de threads suportadas neste sistema
kk
Thread de
Kernel
Thread de
Usuário
kk kk
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 16
Modelos Multithreading
Modelo Muitos para Muitos
Permite que muitas threads no nível do usuário sejam
associadas a muitas threads (em número menor ou igual)
no nível do kernel
Permite que o sistema operacional crie um número suficiente
de threads de kernel
Exemplos
• Solaris antes da versão 9
• Windows NT/2000
com o pacote ThreadFiber
• IRIX
• Tru64 UNIX kk
Thread de
Kernel
Thread de
Usuário
kkkk
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 17
Modelos Multithreading
Modelo Muitos para Muitos
Permite ao desenvolvedor criar tantos threads de usuário
quanto desejar
Os threads de Kernel correspondentes podem executar em
paralelo em um multiprocessador
Quando um thread efetuar uma chamada bloqueante ao
sistema, o kernel pode escalonar outro thread para execução
Desvantagem
Verdadeira concorrência não é obtida
• Apenas um thread pode ser escalonado pelo kernel de cada vez
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 18
Sistemas com Threads
Threads do Solaris 2
Versão do UNIX transformado em SO moderno com
• Suporte a threads de usuário e de kernel
• Multiprocessamneto Simétrico (SMP)
• Escalonamento de Tempo Real
LWP (Lightweight Process
ou Processo Leve)
• nível intermediário entre as Threads no nível do usuário e as
Threads no nível do Kernel
Figura extraída de “Sistemas Operacionais, Conceitos
e Aplicações” A. Silberschatz, et al; Ed. Campus
Figura extraída de “Sistemas Operacionais, Conceitos
e Aplicações” A. Silberschatz, et al; Ed. Campus
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 19
Sistemas com Threads
Threads do Solaris 2
Thread de usuário contém
• ID da Thread
• Registradores
• Pilhas e Prioridade
• Nenhum envolvimento de núcleo significa rapidez de troca
LWP (Lightweight Process ou Processo Leve)
• PCB com dados de registrador
• Contabilidade e informações de memória
• Troca entre LWPs é relativamente lenta
• Estrutura de dados do kernel e reside em espaço do kernel
Threads de Kernel
• Pequena estrutura de dados e uma pilha
• Troca de Threads não exige alterar as informações de acesso à
memória — relativamente rápido
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 20
Sistemas com Threads
Threads do Windows 2000 / XP
Cada thread contém
• ID da Thread
• Registradores
• Pilhas separadas para usuário e kernel
• Área de armazenamento particular (private)
Os registradores, pilhas e área de armazenamento particular
são conhecidos como contexto dos threads
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 21
Sistemas com Threads
Threads do Windows XP
A estrutura de dados primária de um thread inclui:
• ETHREAD
bloco executivo
• KTHREAD
bloco kernel
• TEB
bloco de ambiente
Figura extraída de “Sistemas Operacionais”
Deitel et al; 3a Edição; Ed. Pearson
Figura extraída de “Sistemas Operacionais”
Deitel et al; 3a Edição; Ed. Pearson
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 22
Sistemas com Threads
Threads do Linux
Linux refere-se aos threads como tarefas (tasks)
Criação de Threads é feita
através de comando do
system call clone()
clone() permite que uma
tarefa filha compartilhe o
espaço de endereçamento
da tarefa pai (processo)
Figura extraída de “Sistemas Operacionais”
Deitel et al; 3a Edição; Ed. Pearson
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 23
Sistemas com Threads
Threads no Java™
Gerenciadas pela Máquina Virtual Java (JVM)
Threads no Java Podem ser criadas
• Estendendo classes Thread (class Thread)
• Implementando uma interface Runnable
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 24
Threads no Java™
Estendendo classes
class Operario extends Thread
{
public void run( ) {
System.out.println("Thread trabalhando !");
}
}
public class Primeira
{
public static void main(String args[ ]) {
Operario tarefa = new Operario ( );
tarefa.start( );
System.out.println("Thread Principal");
}
}
class Operario extends Thread
{
public void run( ) {
System.out.println("Thread trabalhando !");
}
}
public class Primeira
{
public static void main(String args[ ]) {
Operario tarefa = new Operario ( );
tarefa.start( );
System.out.println("Thread Principal");
}
}
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 25
Threads no Java™
Implementando a Interface Runnable
public interface Runnable
{
public abstract void run( );
}
public interface Runnable
{
public abstract void run( );
}
class Operario2 implements Runnable
{
public void run() {
System.out.println("Thread Operaria");
}
}
public class Segunda
{
public static void main(String args[ ]) {
Runnable tarefa = new Operario2( );
Thread thrd = new Thread( tarefa );
thrd.start();
System.out.println("Thread Principal");
}
}
class Operario2 implements Runnable
{
public void run() {
System.out.println("Thread Operaria");
}
}
public class Segunda
{
public static void main(String args[ ]) {
Runnable tarefa = new Operario2( );
Thread thrd = new Thread( tarefa );
thrd.start();
System.out.println("Thread Principal");
}
}
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 26
Threads no Java™
Gerência de Threads
suspend( )
• Suspende a execução de um thread que estiver executando no momento
sleep( )
• Suspende um thread em execução no momento por período determinado
resume( )
• Retoma um thread que havia sido suspenso
stop( )
• Interrompe a execução de um thread.
• Depois de interrompido, um thread não pode ser retomado ou iniciado
TerminadoTerminadoexecutávelexecutável
bloqueadobloqueado
NovoNovo
start( )
sleep( )
suspend( )
I/O
stop( )
resume( )
I/O disponível
new( )
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 27
Threads no Java™
Exemplo de Thread
class Tarefa extends Thread
{
private int tempo;
public Tarefa (String nome)
{
super(nome);
tempo =
(int)( Math.random()*5001);
}
class Tarefa extends Thread
{
private int tempo;
public Tarefa (String nome)
{
super(nome);
tempo =
(int)( Math.random()*5001);
}
public void run()
{
try
{
System.err.println( getName() + “ dormira ”
+ tempo + " milisegundos" );
Thread.sleep(tempo);
}
catch(InterruptedException excecao)
{
excecao.printStackTrace();
}
System.err.println( getName() + " acordou ! ");
}
}
public void run()
{
try
{
System.err.println( getName() + “ dormira ”
+ tempo + " milisegundos" );
Thread.sleep(tempo);
}
catch(InterruptedException excecao)
{
excecao.printStackTrace();
}
System.err.println( getName() + " acordou ! ");
}
}
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 28
Threads no Java™
Exemplo de Thread
public class Processo03 {
public static void main(String args[ ]) {
Tarefa trabalho01 = new Tarefa("Operario 01");
Tarefa trabalho02 = new Tarefa("Operario 02");
Tarefa trabalho03 = new Tarefa("Operario 03");
System.err.println("\n\n Iniciando as Threads ! ");
trabalho01.start();
trabalho02.start();
trabalho03.start();
System.err.println("Programa Principal encerrado!\nThreads Iniciadas !\n");
}
}
public class Processo03 {
public static void main(String args[ ]) {
Tarefa trabalho01 = new Tarefa("Operario 01");
Tarefa trabalho02 = new Tarefa("Operario 02");
Tarefa trabalho03 = new Tarefa("Operario 03");
System.err.println("\n\n Iniciando as Threads ! ");
trabalho01.start();
trabalho02.start();
trabalho03.start();
System.err.println("Programa Principal encerrado!\nThreads Iniciadas !\n");
}
}
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 29
Operações nos Processos
Questões
Que recursos são usados quando
uma thread é criada? Como eles
diferem daqueles usados quando
um processo é criado?
Qual a vantagem fundamental que
você obteria executando uma
aplicação multithread em um
sistema multipro-cessado em vez
de um sistema unipro-cessado ?
Como um projeto de software
pode ser melhorado com a ajuda
de aplicações multithread para
executarem mais rapidamente ?
Por que os processos tradicionais
são chamados de processos
pesados ?
Por que threads do mesmo
processo em geral se comunicam
mais eficientemente do que em
processos separados ?
Por que implementações de
threads de usuário promovem
portabilidade ?
Por que uma aplicação de
software escrita para threads de
kernel é menos portável do que
um software escrito para threads
de usuários ?
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 30
Referência Bibliográfica
Sistemas Operacionais
• Deitel, Deitel e Choffnes;
• Ed. Pearson 3a Edição
• www.prenhall.com/deitel_br
Sistemas Operacionais, Conceitos e Aplicações
• A. Silberschatz, P. Galvin, G. Gagne;
• Ed. Campus Tradução da 6a Edição
• www.wiley.com/college/silberschatz6e/
0471417432/slides/slides.html
Sistemas Operacionais Modernos
• Andrew Tanenbaum;
• Ed. Pearson 2a Edição
• www.prenhall.com/tanenbaum_br
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________
_______________________