O documento discute threads em sistemas operacionais, abordando: 1) Visão geral de threads e seus benefícios; 2) Diferentes modelos de multithreading; 3) Principais bibliotecas de threads como Pthreads, Win32 e Java.
O documento discute threads em sistemas operacionais, abordando: 1) Visão geral de threads e seus benefícios; 2) Diferentes modelos de multithreading; 3) Principais bibliotecas de threads como Pthreads, Win32 e Java.
O documento discute threads em sistemas operacionais, abordando: 1) Visão geral de threads e seus benefícios; 2) Diferentes modelos de multithreading; 3) Principais bibliotecas de threads como Pthreads, Win32 e Java.
Contedo THREADS ........................................................................................................................... 4 1.0 - Viso Geral .................................................................................................................. 4 1.1 - Motivao ................................................................................................................ 4 1.2 - Benefcios ................................................................................................................ 5 2.0 - Modelos de mltiplas threads (multithreading) .......................................................... 7 2.1 Modelo muitos para um .......................................................................................... 7 2.2 Modelo um para um ................................................................................................ 7 2.3 Modelo muitos para muitos .................................................................................... 8 3.0 Bibliotecas threads ...................................................................................................... 9 3.1 Pthreads .................................................................................................................. 9 3.2 Threads Win32 ..................................................................................................... 10 3.3 Threads em Java ................................................................................................... 10 3.4 Estados da thread Java .......................................................................................... 10 3.5 A JVM e o sistema operacional do hospedeiro .................................................... 11 3.6 Uma soluo com multithreads para o problema condutor consumidor .............. 11 4.0 Aspectos do uso de threads ....................................................................................... 12 4.1 - As chamadas de sistema fork() e exec() ................................................................ 12 4.2 Cancelamento ....................................................................................................... 12 4.3 Tratamento de sinais ............................................................................................. 13 4.4 Bancos de threads ................................................................................................. 14 4.5 Dados especficos da thread ................................................................................. 14 4.6 Ativaes do escalonador (Scheduler Activations) .............................................. 15 PROCESSOS E THREADS TUTORIAL ...................................................................... 16 5.0 Tutorial ..................................................................................................................... 16 5.1 - Processos ............................................................................................................... 16 5.2 - Threads .................................................................................................................. 16 5.3 Exemplos de uso de threads.................................................................................. 16 THREADS EM SISTEMAS DE INFORMAO ........................................................... 18 BIBLIOGRAFIA ............................................................................................................... 19
THREADS 1.0 - Viso Geral Os primeiros computadores apresentavam para cada processo, apenas uma thread de controle. J os novos, possuem mltiplas threads, assim como, API para PThreads, Win32 e bibliotecas threads em Java. Uma thread uma unidade bsica de utilizao de CPU; compreende um ID de thread, um contador de programa, um conjunto de registradores e uma pilha. Vrias threads no mesmo processo so capazes de compartilhar sua seo de cdigo, seo de dados e outros recursos do sistema operacional, como arquivos abertos e sinais. O processo pode executar uma nica tarefa por vez, dotado de uma nica thread (single- threaded) ou executar mais de uma tarefa ao mesmo tempo (multithreaded). 1.1 - Motivao Vamos utilizar como exemplo, um servidor web. Essa aplicao pode ocorrer diferentes requisies (imagem, som...) concorrentemente com tarefas semelhantes. Se cada cliente s pudesse executar uma requisio por vez, os demais teriam que esperar ela ser finalizada. A criao de vrios processos demorada e exige muitos recursos. Por isso a eficcia de um processo ter mltiplas threads. A RPC (remote procedure calls) permite a comunicao entre processos, fornecendo um mecanismo de comunicao similar s chamadas comuns de funo ou procedimento.
1.2 - Benefcios Podemos dividir os benefcios da utilizao do thread em quatro (4) categorias principais: Responsividade Por exemplo, em um navegador Web, o usurio pode interagir em uma thread, enquanto uma imagem est sendo carregada na outra. Ou seja, o programa continua funcionando mesmo que parte dele esteja bloqueada ou realizando uma operao longa. Compartilhamento de recursos Os threads compartilham memria e os recursos do processo ao qual pertencem. O compartilhamento de cdigo e de dados permite que vrias threads de atividades estejam dentro de uma mesma aplicao dentro do mesmo espao de endereo. Economia A alocao de memria e recursos para a criao de processos custosa. Como as threads compartilham recursos do processo, mais econmico e vantajoso criar e trocar o contexto das threads. Utilizao de arquiteturas multiprocessadas O uso de mltiplas threads em uma mquina de diferentes CPUs aumenta a concorrncia e podem ser executados ao mesmo tempo nos diferentes processadores.
2.0 - Modelos de mltiplas threads (multithreading) Suporte para as threads podem ser feitos em dois nveis: Threads do usurio so admitidas acima do kernel e gerenciadas sem o suporte do kernel; Threads de kernel admitidas e gerenciadas diretamente pelo sistema operacional. 2.1 Modelo muitos para um O gerenciamento de threads feito pela biblioteca threads no espao do usurio, de modo que eficiente. Porm se uma thread fizer a chamada de sistema bloqueante, o sistema inteiro para. Vrias threads no podem ser executadas em paralelo. Um exemplo de biblioteca disponvel nesse exemplo, o Solaris (Green Threads).
2.2 Modelo um para um Permite que mesmo uma chamada de sistema bloqueante, ele continue sendo executado. Assim como mais de uma tarefa por vez. A desvantagem dessa utilizao que para cada thread de usurio criada, correspondentemente, deve ser criada uma thread de kernel, gerando um custo adicional.
2.3 Modelo muitos para muitos Muitas threads no nvel do usurio para um nmero menor ou igual de threads de kernel. O modelo muitos para muitos no possui muitas limitaes. Os desenvolvedores podem criar quantas threads forem necessrias, e as threads de kernel podem ser executadas em paralelo em um sistema multiprocessado.
3.0 Bibliotecas threads Uma biblioteca thread fornece ao programador uma API para a criao e o gerenciamento de threads. Podemos implementar uma biblioteca em dois nveis; usurio e kernel. No espao do usurio, sem o suporte do kernel. Ela resulta em uma chamada de funo local e no em uma chamada de sistema. No nvel do kernel, suporte direto do sistema operacional. O cdigo e as estruturas de dados para a biblioteca existem no espao do kernel. Atualmente, temos trs principais bibliotecas disponveis: POSIX Pthreads, Win32 e Java. O Pthreads, uma extenso da thread do POSIX, pode ser fornecido como biblioteca no nvel do usurio ou kernel. Win32 uma biblioteca no nvel do kernel disponvel no sistema Windows. API de threads Java permite a criao e gerncia de threads diretamente nos programas Java.
3.1 Pthreads Padro POSIX que define uma API para criao e sincronismo de thread. uma especificao, e no uma implementao. 3.2 Threads Win32 Os dados compartilhados pela thread so declarados globalmente. 3.3 Threads em Java Todos os programas Java incluem ao menos uma thread de controle. Duas formas de us- las. Uma nova classe derivada da classe thread e redefinir o mtodo run() ou definir uma classe que implementa a interface Runnable, sendo esta a mais usada.
3.4 Estados da thread Java 1. Novo objeto da thread criado (instruo new). 2. Executvel start() aloca memria para a nova thread na JVM e chama o mtodo run(), esse fluxo passa do estado novo para o executvel. 3. Bloqueado Uma thread torna-se bloqueada quando realiza uma instruo de bloqueio (instruo sleep(), por exemplo). 4. Morto passa para esse estado quando o mtodo run() termina.
public interface Runnable{ public abstract void run(); }
3.5 A JVM e o sistema operacional do hospedeiro A especificao para a JVM no indica como as threads Java devem ser associadas ao sistema operacional subjacente, deixando essa deciso para a implementao especfica da JVM. Cada sistema operacional possui seu prprio uso de threads; por exemplo, Windows 2000 utiliza o modelo um para um. Tru64 Linux utiliza modelo muitos para muitos. 3.6 Uma soluo com multithreads para o problema condutor consumidor
4.0 Aspectos do uso de threads Programas com mltiplas threads. 4.1 - As chamadas de sistema fork() e exec() Alguns sistemas UNIX escolheram ter duas verses de folk(), uma que duplica todas as threads e outra que duplica apenas a thread que invocou a chamada de sistema fork(). Sua utilizao depende da aplicao. Se uma thread invocar a chamada de sistema exec(), o programa especificado no parmetro de exec() substituir o processo inteiro, incluindo todas as threads. 4.2 Cancelamento O cancelamento da thread ocorre quando ela terminada antes de ter sido concluda. Uma thread que precisa ser cancelada denominada thread-alvo (target thread). Pode ocorrer em duas situaes: 1. Cancelamento assncrono uma thread termina imediatamente a thread-alvo. Em geral, o sistema operacional retomar os recursos de sistema de uma thread cancelada, mas no todos. Ocorre quando foram alocados recursos a uma thread cancelada ou cancelada quando est ocorrendo a atualizao dos dados. 2. Cancelamento adiado A thread-alvo pode verificar periodicamente se deve terminar, permitindo a oportunidade de terminar de forma controlada. O adiado permite a verificao de um sinalizador, ocorre a determinao se deve ser cancelada ou no e com segurana. Os pthreads referem-se a esses pontos como pontos de cancelamento (cancellation points). A thread-alvo pode verificar periodicamente seu status de interrupo por meio do mtodo isInterrupted() e, quando marcado, faz a limpeza antes de terminar.
4.3 Tratamento de sinais Um sinal usado nos sistemas UNIX para notificar a um processo a ocorrncia de um determinado evento. Os sinais, independentes de serem sncronos ou assncronos, seguem o mesmo padro: 1. Um sinal gerado pela ocorrncia de um evento em particular; 2. Um sinal gerado entregue a um processo; 3. Uma vez entregue, o sinal precisa ser tratado. Os sinais sncronos so entregues para o mesmo processo que executou a ao (ex.: diviso por 0). E os sinais assncronos, normalmente so enviados a outros processos. Todo sinal pode ser tratado por dois tipos disponveis: 1. Um tratador de sinal padro; 2. Um tratador de sinal definido pelo usurio. public class InterruptibleThread implements Runnable {
/** * Esta thread continuar executando at que seja interrompida */
@Override public void run() { // TODO Auto-generated method stub while (true) {
/** * realiza algum trabalho por um tempo * ... */
if (Thread.currentThread().isInterrupted()) { System.out.println("Eu estou interrompida"); break;
} }
// limpa e termina }
}
Cada sinal possui um tratador de sinal (signal handler). O tratamento de sinais em programas com nica thread simples, os sinais so sempre entregues a um processo. Num processo multithread, temos as seguintes opes de entrega: 1. Entregar o sinal thread ao qual o sinal se aplica; 2. Entregar o sinal a cada thread no processo; 3. Entregar o sinal a certas threads no processo; 4. Atribuir uma thread especfica para receber todos os sinais para o processo. APCs Asynchronous Procedure Calls permite que uma thread de usurio especifique uma funo que deve ser chamada quando a thread de usurio receber notificao de um evento em particular. 4.4 Bancos de threads Um banco de threads criar uma srie de threads na partida do processo e coloc-las em um banco, no qual fiquem esperando para atuar. Diminui o tempo gasto de criao de uma thread, sendo que ao final de sua concluso, ela ser descartada, e se cada thread nova for criada, no teremos um limite imposto, podendo esgotar os recursos do sistema (como CPU ou memria). O pacote java.util.concurrent inclui uma API para banco de threads. Temos trs: 1. Executor de nica thread newSingleThreadExecutor() cria um banco de tamanho 1; 2. Executor de thread fixo newFixedThreadPool(int size) cria um banco de threads com um nmero especificado de threads; 3. Executor de thread em cache newCachedThreadPool() cria um banco de threads ilimitado, reutilizando threads em muitas instncias. FIGURA 4.14 4.5 Dados especficos da thread Cada thread recebe seu chamador exclusivo. Os dados de ThreadLocal, em Java, podem ser inicializados com o mtodo initialValue() ou com o mtodo set(). FIGURA 4.16 4.6 Ativaes do escalonador (Scheduler Activations)
PROCESSOS E THREADS TUTORIAL Os computadores podem executar mais de uma ao mesmo tempo. Esse basicamente o conceito de threads. Enquanto sua pgina da web est sendo carregada, uma msica est sendo executada em outro programa. No necessria a pausa de uma, para continuar a execuo de outra. Biblioteca java.util.concurrent. Mesmo em sistemas monoprocessadores, podemos ter diferentes processos e threads sendo executadas. Hoje est ficando cada vez mais comum o uso desses recursos. 5.0 Tutorial 5.1 - Processos IPC (Inter Process Communication) serve de comunicao no s em comunicao de um mesmo sistema, mas em sistemas diferentes. 5.2 - Threads As threads tambm so chamadas de processos leves. As threads no existem sem um processo. No mnimo um processo ter uma thread. 5.3 Exemplos de uso de threads Objeto Runnable public class HelloRunnable implements Runnable {
public void run() { System.out.println("Hello from a thread!"); }
public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); }
} Subclasse Thread public class HelloThread extends Thread {
public void run() { System.out.println("Hello from a thread!"); }
public static void main(String args[]) { (new HelloThread()).start(); }
} Suspende a execuo por um perodo de tempo especfico. public class SleepMessages { public static void main(String args[]) throws InterruptedException { String importantInfo[] = { "Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too" };
for (int i = 0; i < importantInfo.length; i++) { //Pause for 4 seconds Thread.sleep(4000); //Print a message System.out.println(importantInfo[i]); } } }
O programador pode decidir quando deve parar a thread para fazer a execuo de outra ao. for (int i = 0; i < importantInfo.length; i++) { // Pause for 4 seconds try { Thread.sleep(4000); } catch (InterruptedException e) { // We've been interrupted: no more messages. return; } // Print a message System.out.println(importantInfo[i]); }
THREADS EM SISTEMAS DE INFORMAO Threads significa linha de execuo que so executadas concorrentemente. Precisamos entender a importncia de uma thread, para que no ocorra erros de utilizao at do prprio hardware da mquina aonde ser feita a utilizao do seu desenvolvimento em sistemas de informao. Um processador com muitos ncleos, mas sem a utilizao de sistemas monothread, um dinheiro gasto que poder acarretar uma lentido no programa. O multithreading um modelo de programao popular que permite a execuo de mltiplas linha de execuo dentro de um contexto simples, compartilhando recursos do processo, e capazes de executar de forma que no depende uma da outra.