A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Referências

Processos e Linhas de processo

Dom

27

Mai

2007


10:21

(10 votos, média 3.30 de 5) 


Simplificando ao extremo, um PROCESSO é simplesmente um programa em execução. A execução do programa segue uma sequência de instruções. Podemos dizer que o programa segue o "fio da meada" das instruções, ou seja, possui no mínimo uma LINHA DE PROCESSO.

A linha de processo (thread) ocupa tempo do processador, onde as instruções são executadas. Daí a definição:

Linha de processo é a unidade básica para a qual o sistema operacional aloca tempo de processador.


Image

Uma linha de processo pode executar qualquer parte do código do processo, inclusive partes que estejam sendo utilizadas por outra linha de processo.

Mas nem só de código vive um processo. Cada processo precisa fornecer todos os recursos necessários para que o programa possa ser executado. Um processo possui um espaço de endereçamento virtual, código executável, dados, manipuladores (handles) de objetos, variáveis do ambiente e uma prioridade básica. Para cada processo que é iniciado, o sistema operacional atribui uma linha de processo inicial, geralmente chamada de linha de processo primária. Depois, se for necessário, o processo pode criar linhas de processo adicionais.

A multitarefa

Imagine um processo e sua linha de processo primária ocupando todo o tempo do processador. A uma certa altura, o processo cria uma segunda linha de processo que vai percorrer um caminho diferente na sequência de instruções. Neste caso, o processador precisa prestar serviços às duas linhas de processo, dividindo o tempo entre as duas. Pronto, nasceu a MULTITAREFA!

O Windows foi desenhado para realizar multitarefas preemptivas. Para quem não sabe, preempção é o mesmo que prioridade, preferência, direito de aquisição. E é isso mesmo o que acontece: cada linha de processo passa a ter direito a uma parte do tempo do processador. É claro que o processador não pode atender todas as linhas de processo de todos os processos em execução ao mesmo tempo. É aí que ele pratica a preempção... faz rodízio de atendimento e aloca uma fatia do seu tempo para cada linha de processo.

A duração da fatia de tempo depende do sistema operacional e do processador. De qualquer maneira, como as fatias de tempo são muito pequenas (aproximadamente 20 milisegundos), o processamento de múltiplas linhas de processo dá a impressão de ser simultâneo. Para o usuário, é como se fosse "assobiar e chupar cana ao mesmo tempo". Para o processador é uma roda viva! Se houver processos demais e/ou linhas de processo em excesso, o processador perde o fôlego e o rendimento do sistema pode cair muito.

Todas a linhas de processo de um determinado processo compartilham seu espaço de endereçamento virtual e os recursos do sistema. É claro que precisa ser assim, senão as linhas de processo iriam se estranhar. Adicionalmente, cada linha de processo mantém manipuladores de exceção (que controlam erros que possam ocorrer), a sua prioridade de atendimento e um jogo de estruturas que o sistema usa para guardar o contexto da linha de processo enquanto ela não é atendida.

Para o usuário, a vantagem de um sistema multitarefa está no fato de poder usar vários aplicativos que trabalhem simultaneamente. Por exemplo, enquanto estiver trabalhando num editor de texto, outro aplicativo pode estar recalculando uma extensa planilha de cálculos.

Para o programador também existem vantagens. Ele pode criar aplicativos que utilizem mais de um processo, cada um deles com uma ou mais linhas de processo. Por exemplo, um aplicativo pode ter uma linha de processo para a interface do usuário que gerencia a entrada do teclado e do mouse, enquanto uma segunda linha de processo realiza um trabalho diferente. Dando uma prioridade maior à linha de processo que atende o usuário, este será atendido mais rapidamente e o trabalho de fundo usará o processador com eficiência sempre que a primeira estiver ociosa.

Informações adicionais