Realidades Paralelas

Thursday, August 12, 2004

Execução sequencial ?

Em oposição à execução concorrente. Imagine seu computador doméstico (garden-variety), que deve ser um Pentium qualquer, ou Athlon, Duron, Celeron, K6, o que seja. Digamos que seja um Pentium III: este é o processador, ou CPU do computador; como o próprio nome diz, é a unidade central de processamento. Tudo que a CPU faz é obedecer ordens, ou seja, executar as instruções que recebe. As instruções estão na memória, e são códigos que dizem "some estes dois números e me dê o resultado", ou coisas similares. O interessante é que, apenas com as operações aritméticas e operações para mover dados na memória de um lugar para o outro, o computador consegue fazer tudo que faz...

Mas estou me desviando do assunto. O importante aqui é que temos apenas um processador nos nossos computadores caseiros usuais. E, a rigor, um processador só pode executar uma instrução de cada vez (*). Por isso dizemos que a execução é sequencial.

E a multitarefa ? E o editor de texto, navegador web, programa de email e campo minado rodando ao mesmo tempo ? Truque simples: tendo vários programas para executar, o processador alterna entre eles o tempo todo, de forma muito rápida. Por exemplo, digamos que existam apenas 5 programas executando. O processador pode executar cada um deles por 2 décimos de segundo de cada vez; em cada segundo, todos os 5 programas serão executados durante algum tempo. Para o usuário, não dá para perceber essas trocas, porque elas são muito rápidas, normalmente mais rápidas que 2 décimos de segundo. E os processadores atuais executam milhares ou milhões de instruções em apenas 2 décimos de segundo. Assim, cria-se a ilusão de vários programas rodando ao mesmo tempo, apesar do processador continuar executando apenas uma instrução de cada vez.


* Isso é uma simplificação. Nos processadores atuais as instruções são executadas em pipelines superescalares; isso significa que, a rigor, mais de uma instrução é executada simultaneamente. Mas com restrições: as instruções devem estar em fases diferentes de execução e são obtidas (fetch) sequencialmente. Os detalhes são complicados, mas em suma isso significa que não é concorrência arbitrária; no fundo, é apenas uma forma de acelerar a execução sequencial.

0 Comments:

Post a Comment

<< Home