Sistemas Operacionais I Parte VI Threads 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 Prof. Gregorio Perez gregorio@uninove.br 2007 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 2 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 Registradores Pilha (program counter) (register set) (stack space) 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 3
Threads Introdução Thread 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ódigo Dados Arquivos Processo tradicional - Um thread Código Dados Múltiplos threads Arquivos Thread 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 4 Threads Exemplo Um processador de Texto com 3 threads Figura extraída de Sistemas Operacionais Modernos A.Tanenbaum; 2a Edição; Ed. Pearson 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 5 Threads Exemplo Um servidor web com múltiplos threads 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 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 7 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 8 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 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 9
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 10 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 11 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 12
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 13 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 Usuário Kernel Desvantagens Se houver chamada bloqueante o processo inteiro é bloqueado Não é possível executar múltiplos threads em multiprocessadores 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 14 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 Usuário Kernel 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 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 15
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 Usuário Kernel 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 16 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 17 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 Figura extraída de Sistemas Operacionais, Conceitos e Aplicações A. Silberschatz, et al; Ed. Campus 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 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 18
Sistemas com Threads Threads do Solaris 2 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 19 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 20 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 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 21
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 22 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 23 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"); 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 24
Threads no Java Implementando a Interface Runnable 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"); 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 25 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 new( ) Novo start( ) sleep( ) suspend( ) I/O executável bloqueado stop( ) Terminado resume( ) I/O disponível 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 26 Threads no Java Exemplo de Thread 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! "); 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 27
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"); 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 28 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 29 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 2007 Sistemas operacionais I - SO I - 06 -prof. Gregorio Perez 30