Você está na página 1de 19

PONTIFCIA UNIVERSIDADE CATLICA

HELENA STRADA FRANCO DE SOUZA






SISTEMAS OPERACIONAIS
THREADS






SO PAULO
NOVEMBRO 2013

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.



BIBLIOGRAFIA
http://javafree.uol.com.br/artigo/6955/Cap-9-Threads-Segmentos.html
http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-
threads/#17-1-threads
http://www.dei.isep.ipp.pt/~orlando/so2/threads.htm
http://tecnopad.blogspot.com.br/2011/04/sistemas-distribuidos-threads.html
http://web.fe.up.pt/~pfs/aulas/so2012/at/4threads.pdf
http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
http://www.vivaolinux.com.br/artigo/Threads-Importancia-dentro-de-um-software/
http://pt.wikinourau.org/bin/view/GrupoJava/SlidesVisaoGeralDeThreadsJAV114
http://pt.wikipedia.org/wiki/Thread_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)
#Compara.C3.A7.C3.A3o_entre_linha_de_execu.C3.A7.C3.A3o_e_Processo
http://www.numaboa.com.br/informatica/tutos/java/1090-threads
http://informatica.hsw.uol.com.br/sistemas-operacionais5.htm

Você também pode gostar