quinta-feira, 24 de setembro de 2009

Threads com Java

por Peter Jandl Jr

Threads
Uma thread define um fluxo de execução independente dentro de um programa e permite
que sejam isoladas tarefas específicas dentro deste. Como as threads são partes do mesmo programa, i.e., fazem parte de um mesmo contexto computacional, então os recursos do
sistema reservados para um programa estão disponíveis para todas as suas threads, e por isso
as threads são consideradas processos leves. Em sistemas onde as threads são suportadas,
programas com um único fluxo de execução (programas sequenciais comuns) são denominados
single-threaded ou de thread única. Já aqueles que definem múltiplos fluxos de execução são
chamados de multithreaded.

O uso das threads pode tornar um programa eficiente e versátil, garantindo que sua interface
se mantenha responsiva, mesmo enquanto o programa executa suas tarefas, ou permitindo
que várias tarefas sejam realizadas ao mesmo tempo.

O uso de threads na plataforma Java é relativamente simplificado, sendo que sua API Java inclui classes especialmente destinadas ao uso e controle das threads que são: Thread e ThreadGroup, além da interface Runnable.

A Classe Thread
A classe Thread, pertencente ao pacote java.lang, permite representar um fluxo independente
de execução dentro de um programa. Basicamente define-se uma nova thread através da
criação de uma subclasse de Thread, na qual se implementa o método run(), que contém o
código que a ser executado. Por exemplo:

class MinhaThread extends Thread {
public void run() {
System.out.println("Inicio: " + getName());
for (int i=0; i<5;>
System.out.println(i + "-" + getName());
}
System.out.println("Fim: " + getName());
}

}
Uma thread assim definida imprimirá no console a contagem de 0 até 5, acompanhada de
seu próprio nome. No início e fim do método run() ocorre a impressão de uma mensagem
indicativa. Para criar uma thread declara-se um objeto de classe e usa-se o operador new
para instanciar o novo objeto (tal como para qualquer outro objeto Java) definindo ou não
um nome para a nova thread:

MinhaThread minhaThread1 = new MinhaThread();
MinhaThread minhaThread2 = new MinhaThread("A Minha Thread");


A instanciação de uma thread não basta para colocá-la em execução. É necessário iniciá-la
explicitamente através do método start(), que providencia o escalonamento da thread pelo
sistema operacional e a consequente execução do método run(), como segue:

minhaThread1.start();

Segue um outro exemplo:

public class TestaThreads {
public static void main(String a[]) {
System.out.println("Inicio: main");
MinhaThread mt1 = new MinhaThread(),
mt2 = new MinhaThread(), mt3 = new MinhaThread();
mt1.start(); mt2.start(); mt3.start();
System.out.println("Fim: main");
}
}
class MinhaThread extends Thread {
public void run() {
System.out.println("Inicio: "+ getName());
for (int i=0; i<5;> System.out.println(i + -"+ getName());
System.out.println("Fim: "+ getName());
}
}


Se executado, este exemplo produz o seguinte resultado:
Referências

  • JANDL JR. Peter. Java 6 - Guia de Consulta Rápida. São Paulo: Novatec, 2008.
  • JANDL JR. Peter. Java - Guia do Programador. São Paulo: Novatec, 2007.
  • Sun. Classe Thread. Disponível em:
    http://72.5.124.55/javase/6/docs/api/java/lang/Thread.html
  • Sun. Interface Runnable. Disponível em:
    http://72.5.124.55/javase/6/docs/api/java/lang/Runnable.html

sexta-feira, 18 de setembro de 2009

Threads

Por Mariane e Miriam

O que são Threads?

Uma thread é um pequeno programa que trabalha como um subsistema independente de um programa maior e que executa alguma tarefa específica. Um programa dividido em várias threads pode rodar mais rápido que um programa monolítico, pois várias tarefas podem ser executadas ao mesmo tempo. As threads de um programa podem trocar dados entre si e  compartilhar o mesmo espaço de memória e os mesmos recursos do sistema.

Uma thread (linha de execução) permite que o usuário do programa, por exemplo, utilize uma funcionalidade do ambiente enquanto outra thread realiza outros cálculos e operações.

Em hardwares equipados com uma única CPU, cada thread é processada de forma aparentemente simultânea, pois a mudança entre uma linha e outra é feita de forma tão rápida que para o usuário isso está acontecendo paralelamente. Em hardwares com múltiplos CPUs ou multi-cores as threads podem ser realizadas realmente de forma simultânea.

Os sistemas que suportam apenas uma thread são chamados de monothread e aqueles sistemas que suportam múltiplas threads são chamados de multithread.

Um benefício do uso de threads (linha de execução) além do fato do processo poder ser dividido em mais de uma linha de tarefas é que quando uma linha está esperando determinado dispositivo de I/O ou qualquer outro recurso do sistema, o processo como um todo não fica parado, pois quando uma linha de execução entra no estado de bloqueio uma outra thread aguarda na fila de “prontos para executar”.

A comunicação entre threads é muito rápida por que elas compartilham tudo: espaço de endereçamento, variáveis globais, memória, etc. Desse jeito elas aumentam o desempenho da aplicação, pois não envolvem mecanismos lentos de intercomunicação.

Deve-se tomar cuidado com o numero de threads criadas. O excesso pode causar overhead no sistema ocasionando uma queda de desempenho.

imagem thread2

imagem thread3

imagem thread

Estados de uma Thread

Uma thread pode assumir os seguintes estados:

Ø Criação: o processo pai está criando a thread que é levada a fila de “prontos para executar”;

Ø Execução: a thread está usando a CPU;

Ø Pronto: a thread avisa a CPU que pode entrar no estado de execução e entra na fila de “prontos para executar”;

Ø Bloqueado: por algum motivo, a CPU bloqueia a thread, geralmente enquanto aguarda algum dispositivo de I/O;

Ø Término: são desativados os contextos de hardware e a pilha é deslocada.


Tipos Implementação de Threads

As threads podem ser oferecidas por uma biblioteca de rotinas fora do núcleo do sistema operacional (modo usuário), pelo próprio núcleo do sistema (modo Kernel), por uma combinação de ambos (modo híbrido) ou por um modelo conhecido como Scheduler Activations.

Modo Usuário (TMU)

As threads são implementadas pela aplicação e não pelo sistema operacional. Como ele não sabe da existência de múltiplas threads cabe a aplicação gerenciar e sincronizar as diversas threads existentes.

Existem vantagens e desvantagens em todos os casos:

Vantagens

Ø Permitem a implementação de threads mesmo em sistemas operacionais que não suportam threads;

Ø Como dispensam o acesso ao kernel do sistema, são rápidos e eficientes.

Desvantagens

Ø O sistema operacional gerencia o processo como se houvesse uma única thread. Quando uma thread chama uma rotina do sistema que o coloca em estado de espera, todo o processo é colocado em estado de espera, mesmo havendo outras threads prontas para execução;

Ø Tratamento individual de sinais. Como o sistema operacional reconhece apenas processos e não threads, os sinais enviados para um processo devem ser reconhecidos e encaminhados a cada thread para tratamento;

Ø Redução do grau de paralelismo. O sistema seleciona apenas processos para execução e threads de um processo podem ser executadas somente em um processador de cada vez.

Modo Kernel (TMK)

São implementadas diretamente pelo núcleo do sistema operacional.

Vantagens

Ø O sistema operacional sabe de cada thread que existe e assim pode escaloná-las individualmente;

Ø Caso haja múltiplos processadores, threads de um mesmo processo podem ser executadas simultaneamente.


Desvantagens

Ø Baixo desempenho. Há varias mudanças no modo de acesso, pois enquanto no modo do usuário todo o tratamento era realizado sem a ajuda do sistema operacional aqui são utilizadas as rotinas do sistema.

Modo Híbrido

Combina vantagens de threads implementadas em modo usuário e threads implementadas em modo Kernel.

Um processo pode ter vários threads em modo Kernel e por sua vez este pode ter vários threads em modo usuário.

Um thread em modo usuário pode ser executado em um thread de modo Kernel e em segundos, ser executado em outro.

Vantagem

Ø Maior flexibilidade.

Desvantagens

Ø Apresenta problemas herdados de ambas as implementações. Por exemplo, uma chamada de bloqueio de uma thread em modo Kernel bloqueia todas as threads de modo usuário, que são colocados em espera;

Ø Reduz o desempenho, pois threads de modo usuário que precisam utilizar diferentes processadores precisam utilizar diferentes threads de modo Kernel.

Scheduler Activations

Ø Os problemas apresentados nos threads de modo híbrido existem devido à falta de comunicação entre os threads em modo usuário e modo kernel;

Ø Usa o melhor do modo usuário e do modo kernel, através de uma estrutura de dados chamada Scheduler Activations;

Ø Alcança um melhor desempenho evitando mudanças de modos de acesso que não sejam necessárias;

Ø Caso uma thread utilize uma chamada ao sistema que o coloque no estado de espera não é necessário que o kernel seja ativado, basta que a própria biblioteca escalone outra thread;

Ø Bibliotecas em modo usuário e kernel se comunicam, trabalhando de forma cooperativa.


Exemplos de Threads

Um exemplo bem simples de uma thread é um jogo onde o mesmo pode ser modelado com linhas de execução diferentes sendo uma para desenho de imagem e outra para áudio. Neste caso há uma thread para tratar da imagem e outra para tratar do áudio. Para o usuário, a imagem é desenhada ao mesmo tempo em que o áudio é emitido pelos auto-falantes, porém para sistemas com uma única CPU, cada linha de execução é processada uma de cada vez, separando por escalonamento em milessegundos os processos que estão sendo executados.

Exemplos em C#

Exemplo 1:

No C# existe um suporte a execução paralela de código, através de multithreading. Um programa em C# começa com uma thread principal que é criada automaticamente pelo CLR do .NET Framework e pelo sistema operacional é a thread("main"). Então o programa se torna multithreading a partir da criação de outras threads a partir dessa thread principal.

Exemplo de código de uma thread, mostrando o compartilhamento de recursos em comum como no caso o Console:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ThreadTest
{
class Program
{
static void Main(string[] args)
{
Thread minhaThread = new
Thread(new ThreadStart(Escreve));
minhaThread.Start();
for (int i = 0; i < 1000; i++)
{
Console.Write("_");
}
Console.ReadLine();
}
public static void Escreve()
{
for (int i = 0; i < 1000; i++)
{
Console.Write("-");
}
}
}

}

A thread principal ("main"), cria uma nova thread que irá executar a função
Escreve(), esta função mostrará na tela o hífen"-". Ao mesmo tempo em que isso
ocorre, a thread principal escreve na tela "_" (underline). Note que
repetindo a execução varias vezes, o comportamento não se repete.

Exemplo 2:

Se em uma aplicação Windows Form há uma tarefa que consome muito tempo, e que faz essa programação normalmente, o Form irá travar enquanto a aplicação processa essa tarefa.
Com os threads isso pode ser evitado, pois a aplicação irá processar a tarefa "em paralelo" numa outra thread e o Form poderá ser utilizado normalmente.

Código de uma aplicação Console utilizando threads:
class Program
{
//Primeiro criamos um método “void” que não recebe parâmetros
//Esse método fará o trabalho das Threads
static void Trabalho ()
{
Console.WriteLine("Esse é o ID da Thread: " + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("Esse é o nome da Thread: " + Thread.CurrentThread.Name);
//Apenas escrevemos o ID e o nome da Thread em execução
}
static void Main(string[] args)
{
//Aqui utilizamos uma delegate que recebe nosso método como parâmetro
//Note que esta delegate só pode receber como parâmetro
//um método void que não recebe argumentos
ThreadStart operacao = new ThreadStart(Trabalho);
//Agora já estamos prontos para criar a Thread
//A Thread deve receber como parâmetro a delegate que indica
//o que deve ser executado quando a Thread for iniciada
Thread minhaThread1 = new Thread(operacao);
//Nome da Thread

minhaThread1.Name = "Exemplo-1";
//Aqui inicializamos a Thread, então ela executará o que
//foi especificado pela delegate operação

minhaThread1.Start();
//Aqui executamos o mesmo código novamente para
//iniciar uma segunda Thread e compararmos os IDs
Thread minhaThread2 = new Thread(operacao);
minhaThread2.Name = "Exemplo-2";
minhaThread2.Start();
Console.ReadLine();
}
}

Exemplo 3:

Como a thread funciona, mostrando seu período em que está processando várias coisas paralelamente, em milessegundos, dando impressão ao usuário de que está funcionando tudo ao mesmo tempo, e o estado de parada.

using System;

using System.Threading;

public class Worker

{

// Este método será chamado quando a thread é iniciada.

public void DoWork()

{

while (!_shouldStop)

{

Console.WriteLine("worker thread: working...");

}

Console.WriteLine("worker thread: terminating gracefully.");

}

public void RequestStop()

{

_shouldStop = true;

}

// Voláteis, é usado como dica para o compilador que

//esse membro de dados será acessado por várias threads.

private volatile bool _shouldStop;

}

public class WorkerThreadExample

{

static void Main()

{

// Criar o objeto de discussão. Isso não iniciar a thread.

Worker workerObject = new Worker();

Thread workerThread = new Thread(workerObject.DoWork);

// Comece a thread.

workerThread.Start();

Console.WriteLine("main thread: Starting worker thread...");

// Repetir até thread ser ativa.

while (!workerThread.IsAlive);

// Coloque o fio condutor para dormir durante 1 milissegundo

//para permitir que o segmento de trabalho para fazer alguns trabalhos:

Thread.Sleep(1);

// Solicite que a thread pare:

workerObject.RequestStop();

// Use o método de associação para bloquear a thread

//atual até que a thread termine.

workerThread.Join();

Console.WriteLine("main thread: W ted.");

}

}


Bibliografia

Sites:

www.ufba.br

www.joaoseixas.blogspot.com

www.fortium.com.br

http://msdn.microsoft.com/pt-br/library/7a2f3ay4.aspx

quinta-feira, 10 de setembro de 2009

Kernel

Curso:Tecnólogo em Análise e Desenvolvimento de Sistemas 4° Semestre

Deusdete de Oliveira Junior

Rodrigo Santi

 

O que é o Kernel

Trata-se de uma série de arquivos desenvolvidos na linguagem C e em Assembly que formam o núcleo do Sistema Operacional. Esses arquivos são responsáveis pelo controle do hardware presente em sua máquina.A tarefa principal do kernel é permitir que todos os processos seja executados pela CPU e permitir que eles consigam compartilhar a memória do computador.Tudo o que está abaixo da interface de chamadas do sistema e acima do hardware físico é o Kernel.

ref.: http://www.infowester.com/linuxkernel.php

Tipos de Kernel

Kernel Monolítico

`

A principal característica do Kernel monolítico é permitir que funções como rede, vídeo e acesso a outros periféricos sejam possíveis através do Kernel-space. Isso é possível através do uso de módulos. O que significa que um módulo, apesar de não estar no mesmo código do Kernel, é executado no espaço de memória do Kernel. Sendo assim, apesar de modular, o Kernel monolítico continua sendo único e centralizado.

Kernel Monolítico

clip_image002

ref.:http://localdomain.wordpress.com/2007/07/22/micro-kernel-ou-kernel-monolitico/

Micro-Kernel

É um método que estrutura o sistema operacional removendo todos os componentes que não são essenciais para o Kernel e implementando-os como programas de sistema e de nível de usuário deixando o Kernel menor. Com essa diminuição, tem-se como ganho a facilidade de expandir o sistema operacional.

Todos os novos serviços são inseridos no espaço do usuário o que não exige a modificação do Kernel.Quando, ainda sim as alterações são necessárias, elas são menores pois o Kernel é menor.

O Micro-Kernel não só é menor como é mais seguro e confiável pois a m aioria dos processos estão sendo executados como processos de usuários ao invés do Kernel. Caso haja alguma falha, o sistema operacional não sofre modificações.

clip_image004

 

 

Kernel Linux

O Kernel do Linux foi idealizado pelo Finlandês Linus Torvalds, no ano de 1991. Torvalds era estudante de ciência da computação. Em seus estudos teve de criar uma nova versão do Minix (sistema operacional baseado no Unix desenvolvido por Andy Tannenbaum).

Linus começou a trabalhar e, ao obter algo concreto enviou uma mensagem para um grupo de usuários do Minix na UseNet. Em sua mensagem, Linus notificou a todos e disse que disponibilizaria o código-fonte do seu desenvolvimento a todos os interessados.

A vontade de Linus era construir um sistema operacional no qual fosse possível de ser alterado conforme a necessidade.Ao criar a nova versão do Minix, Linus desenvolveu um método de utilizar o hardware do computador por software deixando livre, a cada interessado, adicionar aplicativos e funcionalidades desejadas para constituir o sistema operacional.

Versões do Kernel

Periodicamente, novas versões do kernel do Linux são lançadas. Isso ocorre para prover melhorias em uma determinada função da versão anterior, para corrigir vulnerabilidades e para adicionar recursos ao kernel, principalmente compatibilidade com novos hardwares.

Cada versão do kernel é representada por 3 números distintos separados por pontos, sendo que um quarto número pode ser aplicado, por exemplo: 2.6.21.3. O primeiro número indica a versão do kernel. Note que esse número muda raramente: a última alteração (até o fechamento do artigo referente) ocorreu em 1996, quando o kernel passou da versão 1 para a versão 2. O segundo número indica a última revisão feita até o momento naquela versão do kernel. O terceiro número, por sua vez, indica uma revisão menor, como se fosse uma "revisão da última revisão" do kernel. Note que o terceiro número pode ser acompanhado de pequenas siglas. Uma que costuma aparecer com freqüência é a sigla "rc" (release candidate), que indica a disponibilização de uma versão ainda não oficial, por exemplo: 2.6.22-rc1. Há siglas que apontam uma versão trabalhada por um desenvolvedor em específico, como a "mm", que indica as alterações feitas por Andrew Morton.

Como um quarto número pode ser usado, ele é aplicado quando uma falha grave no kernel for descoberta, sendo, portanto, necessário atualizá-lo. Porém, não faz sentido lançar uma revisão completa apenas por causa de algumas correções, razão esta que levou à utilização de um quarto número.

Não é necessário usar sempre a última versão do kernel. Só é recomendável fazer uma atualização em caso de necessidade de compatibilidade com novo hardware ou em casos de melhorias de recursos. Em alguns casos, principalmente com computadores antigos, o desempenho é melhor se usado um kernel antigo. Em situações simples, talvez seja melhor apenas aplicar um patch (uma correção para um problema) do que adicionar um kernel novo.

Compatibilidade

O kernel do Linux permite que o sistema operacional seja compatível com uma série de plataformas, desde palmtops até mainframes. Até mesmo nos computadores da Apple é possível instalar o Linux. As principais plataformas compatíveis são: Apple, Sun, Sparc, Alpha, PowerPC, i386 (Intel), ARM, entre outras.

Também existe compatibilidade com sistemas de arquivos. Apesar de não ser recomendável por questões de desempenho, é possível instalar o Linux até mesmo em partições FAT32. As principais compatibilidades neste aspecto são com os seguintes sistemas de arquivos: FAT, FAT32, ext2, ext3, ReiserFS, JFS, XFS, NTFS, entre outros.

Atuação do Kernel

O Kernel começa a atuar no processo de inicialização do sistema a partidas das instruções lidas na MBR (Master Boot Record - Recurso responsável por indicar a BIOS como e onde carregar o Sistema Operacional). Após essa etapa, o kernel começa a detectar os dispositivos de hardware essenciais do computador. Se tudo ocorrer bem nesta faze, a imagem do kernel passa a ser carregada. Em seguida, o kernel checa a memória e prepara para o uso através de uma função de paginação. Os IRQs, os discos, memória-cache, entre outros são acionados logo após esta função. Ao Final de todas estas etapas o sistema operacional esta pronto para funcionar.

O kernel carrega as funções responsáveis por checar o que deve ser inicializado em nível de software e processos, como, por exemplo, o conteúdo do arquivo /etc/init. Geralmente o que é carregado é a tela de login do usuário.

Usuário logado, sistema operacional trabalhando o kernel agora executa suas funções, como a de controlar o uso da memória pelos programas ou a de atender a chamada de uma interrupção de hardware.

É interessante notar que as distribuições Linux montam o kernel com recursos e drivers básicos para hardware, afinal carregar o suporte a todo tipo de dispositivo é algo inviável. O kernel ficaria extremamente grande e somente os drivers relacionados ao hardware do computador em questão é que seriam usados. Para lidar com esse tipo de problema, os drivers são carregados como módulos após o kernel ser ativado. A questão é que carregar recursos por módulo gera uma queda de desempenho (pouco significativa em computadores rápidos) e, por isso, muitos usuários preferem recompilar o kernel de seus sistemas para que esse carregue os drivers junto com sua inicialização, ou seja, sem usar módulos.

ref.: http://www.infowester.com/linuxkernel.php

O KERNEL do WINDOWS

O KERNEL, é importantíssimo para o bom desempenho do nosso Sistema Operativo, pois todos os programas dependem dele. Uma simples falha no mesmo, é o suficiente para provocar uma rotura em todos os outros programas ou contribuir para a perda de performance do nosso computador.

Quem é que nunca ouviu falar dos célebres “Ecrans azuis” (Blue Screen of Death), muito provavelmente todos nós. Para quem não sabe o responsável por este tipo de erros é o nosso “amigo” KERNEL, os ditos “Ecrans Azuis”, são o resultado de uma falha interna do mesmo ou então são o resultado de uma falha num driver associado ao processo, este tipo de erro é tão grave que o sistema operativo não consegue recuperar normalmente, sendo necessário proceder muitas vezes á recuperação do Windows através do CD de instalação, isto nos casos menos graves, pois outros há em que a resolução não é tão simples.

No Windows Vista, a Microsoft tenta minimizar este tipo de erros, salvaguardando a integridade do processo, ao mesmo tempo que tenta controlar o software instalado e o tipo de processos que são executados pelo mesmo. Há a tentativa de “isolar” todo este processo, ao contrário do que era feito até agora, nomeadamente no XP e 2003.

O KERNEL, é um dos primeiros processos a arrancar, quando o Windows se inicia, é ele que permite ao software “falar” com o Hardware, assim como é o responsável por tarefas tão básicas, como a gestão da memória, o lançamento de processos, o arranque dos programas e a gestão dos dados armazenados no nosso disco rígido. A performance, o rendimento e a segurança do nosso computador, dependem da integridade do KERNEL, dai a importância do mesmo.

Provavelmente, já ouviram falar em “Rootkit”, os quais são muito difíceis de remover e difíceis de detectar, temos sempre de recorrer a software de terceiros para o fazer… e por vezes acabamos por optar pelo método mais radical, a formatação do nosso disco rígido e a consequente reinstalação do Windows. Sem darmos por isso, os Rootkits, tentam ganhar aceso ao KERNEL e consequentemente o poder de controlar todas as outras aplicações do nosso computador (para evitar este tipo de situações convêm instalar um bom anti-malware, que consiga detectar rootkit).

Este tipo de “peste” é muito perigosa e tem como finalidade ganhar acesso aos ficheiros fundamentais do nosso sistema operativo Windows, monitorizando KeysStrokes, alterando logs de ficheiros, alterando aplicações do sistema, criando Backdoors no nosso sistema que permitam ganhar acesso remoto ao nosso computador e possibilitar ataques externos. Esta “peste”, tem também a “habilidade” de se esconder dos ficheiros de sistema, de algumas ferramentas anti-pestes e claro dos utilizadores… que muitas vezes só dão por ela, tarde demais.

Ao longo do tempo tem existido a tentativa de alterar o código base do KERNEL, por parte dos criadores de programas de Spyware/Malware/Vírus, com a única intenção de “esconder” os seus processos do utilizador, este tipo de alteração ao código, dá origem muitas vezes a erros no sistema operativo e á consequente falha de certos programas… não é por acaso que o nosso computador, quando está infectado por maleitas deste tipo, fica muito lento.

Para terminar, gostaria de relembrar que é deveras importante, instalar um Antivírus, um AntiSpyware/Malware e fundamentalmente mantê-los actualizados, assim como instalar os updates mais recentes do Windows. Se conseguirmos manter o nosso sistema operativo protegido, ficaremos menos sujeitos a este tipo de ataques e consequentemente o desempenho do nosso computador será muito superior.

ao mesmo tempo que outros tem um primeiro contacto com um dos processos fundamentais do Windows, existem outros como o HAL (Hardware Abstraction Layer ) que tem como “missão” carregar os drivers necessários ao bom funcionamento de todo o Hardware instalado no nosso computador.

 

Funcionamento do Kernel

kernel nucleo

Software para Gerenciamento de Processos no Windows



Seguem alguns links para o download de softwares (free e opensource) para gerenciamento de processos nos sistema operacionais MS-Windows.

Process Monitor 2.6
http://www.softpedia.com/get/System/System-Info/Microsoft-Process-Monitor.shtml

Process Manager For Windows 1.6.192
http://terrabrasil.softonic.com/ie/79043/Process_Manager_For_Windows
http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

Process Explorer v11.33
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Mais links sobre gerenciamento de processos:

http://www.lgti.ufsc.br/posgraduacao/legenda/gpa/Processo_Cochabamba.pdf

http://www.patentesonline.com.br/gerenciamento-de-sistemas-de-computador-e-aplicacoes-distribuidas-baseado-em-modelo-34499.html

http://www.patentesonline.com.br/processos-de-operar-um-computador-e-de-proteger-informacoes-armazenadas-em-uma-memoria-108537.html

quinta-feira, 3 de setembro de 2009

Gerenciamento de Processos Linux e Windows




Curso:Tecnólogo em Análise e Desenvolvimento de Sistemas 4° Semestre


Marco Antonio Batista Barbosa

Valdeci dos Santos


PROCESSO:

Um processo nada mais que um programa em execução, incluindo os valores correntes de todos os registradores do hardware, e das variáveis, manipuladas por ele no curso de sua execução Informalmente, dizemos que um processo e um programa em execução.


Gerenciamento de Processos no Linux Passo a Passo




Há duas maneiras de realizar o gerenciamento de processos no Linux:

Forma gráfica;

Através de uma janela terminal;


Forma gráfica:

Selecionar a seguinte sequência:

Iniciar - Aplicativos - Sistemas - Monitor de Sistema

Após a sequência será aberta a seguinte janela:


Na janela acima, pode-se verificar os processos os execução, o quanto de memória está sendo alocada para cada processo, utilização da CPU, além de poder ser realizado um filtro, para visualização de processos apenas de programas , processos de sistema , processos de usuários, ou visualizar todos os processos . Há também a opção de se "matar" o processo, marcando o processo na lista, e selecionando a opção "matar processo".


Através da janela de terminal:

Selecionar a seguinte sequência:

Iniciar - Aplicativos - Sistemas - Terminal


Após a sequência será aberta a seguinte janela:



Através da tela de terminal, podemos executar o comando PS (Procces Status), e verificar os vários processos que estão em execução na máquina .
Uma boa dica para quem quer adquirir um conhecimento maior sobre um determinado comando no Linux, e utilizar o help do comandos, através do comando "man", abreviação de manual . Por exemplo para se obter a descrição completa do comando ps, basta digitar no prompt $ man ps (figura abaixo):




Para verificar todos os processos em execução no Linux, o comando a ser digitado é o "ps -e" .



Com este comando é mostrado o PID (Procces Identifier) de cada processo, e com isto podemos encerrar o processo ao executarmos o comando Kill .
Exemplo: $ kill 760 (caso houvesse um processo com o PID 760)



GERENCIAMENTO DE PROCESSO NO WINDOWS

A única forma de gerenciamento de processos no windows, é através da ferramenta gráfica "Gerenciador de Tarefas", o qual é aberto após pressionar as teclas CTRL + ALT + DELETE.






Na aba de processos, visualizamos todos os processos em execução, bem como a utilização de CPU e memória utilizada .
Na aba de rendimento, pode-se verificar a utilização da CPU, e de memória, e assim identificar se a máquina está lenta por falta de memória, ou por um alta utilização da CPU (figura abaixo)




Para quem quiser baixar um video com uma explicação e o passo a passo do gerenciamento de arquivos no Linux (forma gráfica e via terminal), basta acessar o endereço abaixo e baixar o video .

http://www.4shared.com/file/129918072/6ab75181/Gerenciamento_Processos_Linuxpart1.html