10
Sistemas Operacionais I Parte VI – Threads Prof. Gregorio Perez [email protected] 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) _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________ _______________________

Sistemas Operacionais I Parte VI – Threads I 2007... · Sistemas Operacionais I Parte VI – Threads Prof. Gregorio Perez [email protected] ... • Modelo Um para Um • Modelo

Embed Size (px)

Citation preview

Sistemas Operacionais I

Parte VI – Threads

Prof. Gregorio Perez

[email protected]

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

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________

_______________________