Sítio do Piropo

B. Piropo

< PC@World >
Volte
11/1997

Como Funciona a CPU

 

Até agora, sempre que discutimos o funcionamento interno dos computadores, mencionamos a crucial importância do microprocessador, ou CPU. Dissemos que ele é o componente central de qualquer computador por ser aquele que "processa" as informações, ou seja, que efetua a tarefa mais importante, a própria atividade fim da máquina. Mas afinal o que é e como funciona este componente aparentemente milagroso?

Bem, para entender os microprocessadores é preciso antes de mais nada conhecer alguma coisa sobre seus detalhes internos. Ou, em linguagem de especialista, discutir sua "arquitetura".

Reduzido à sua expressão mais simples, um microprocessador não passa de um circuito integrado capaz de obedecer a instruções. Este circuito é composto por um conjunto extremamente intrincado de microscópicos transistores, capacitores e resistores interligados que podem ser subdivididos em três conjuntos básicos: registradores, unidade de controle e unidade aritmética e lógica.

Os registradores constituem-se no componente mais simples: não passam de posições internas de memória. Mas posições de memória muito especiais, já que se situam dentro do microprocessador. São tão poucas e tão importantes que, a exemplo dos principais edifícios de uma grande cidade - como a estação rodoviária e o estádio de esportes - não são identificadas pelo endereço, mas pelo nome. Por exemplo: todo microprocessador tem um registrador usado exclusivamente para conter o endereço de memória (ou seja, o número da posição de memória externa) onde está armazenada a próxima instrução a ser executada. Este registrador é conhecido pelo nome "ponteiro de instruções" (em inglês, Instruction Pointer, ou IP).

O número, a finalidade e o tamanho dos registradores variam de microprocessador para microprocessador. Tanto assim que uma das principais características dos microprocessadores é o tamanho de seus registradores. Enquanto nos registradores do velho 8088 cabiam 16 bits, os 386 (e 486) usavam registradores de 32 bits. Por isto o velho PC era classificado como um computador "de 16 bits" enquanto os micros que usavam os 386 e 486 eram computadores de "32 bits" (o Pentium usa registradores de 64 bits, mas tecnicamente eles funcionam como dois registradores de 32 bits justapostos, uma diferença sutil mas importante que, no entanto, exige um conhecimento maior do que aquele que acumulamos até agora para ser discutida em detalhes).

A unidade aritmética e lógica é responsável pela execução de dois tipos de tarefas elementares: fazer contas e tomar decisões. Mas sempre usando os dados contidos nos registradores. Neste contexto, "fazer contas" significa basicamente somar e subtrair o conteúdo de certos registradores, já que as operações mais complexas como multiplicação e divisão são efetuadas através de somas ou subtrações sucessivas. E "tomar decisões" significa fundamentalmente comparar as quantidades armazenadas em dois dos registradores e executar tais ou quais instruções dependendo de qual deles contem o maior valor (ou executar ainda um outro conjunto de instruções caso os valores sejam iguais). É difícil de acreditar, eu sei, mas todas as maravilhas que nossos fantásticos computadores multimídia são capazes de fazer não passam de combinações (algumas extraordinariamente complexas, é verdade) destas poucas ações elementares.

A unidade de controle, finalmente, é a responsável por decodificar cada instrução nas tarefas primárias que serão executadas pela unidade aritmética e lógica usando os dados contidos nos registradores.

E é só.

Durante todo o tempo em que o computador está ligado, mesmo quando aparentemente não está "fazendo" nada, o microprocessador executa rigorosa e incessantemente a mesma seqüência de tarefas, um ciclo de operação após outro. Primeiro, lê a instrução armazenada na posição de memória externa cujo endereço está contido no registrador "ponteiro de instruções" e a repassa à unidade de controle. Depois, acrescenta uma unidade ao número contido no ponteiro de instruções (ou seja, o "aponta" para a posição de memória imediatamente posterior, onde presumivelmente está a próxima instrução a ser obedecida). Em seguida, a unidade de controle interpreta a instrução previamente lida e a decompõe em tarefas elementares que são cumpridas pela unidade aritmética e lógica, supervisionando a execução de cada uma delas. Isto feito, repete todo o processo, lendo a instrução contida na nova posição de memória externa para a qual aponta o ponteiro de instruções. É claro que uma das ações elementares executadas em obediência à instrução anterior pode ter modificado o conteúdo do ponteiro de instruções baseando-se no resultado de uma comparação, fazendo-o "apontar" para uma instrução fora da seqüência e alterando assim o fluxo do programa - que, do contrário, repetiria sempre a mesma sucessão de instruções na mesma ordem, o que claramente não é o caso.

Mas o que são estas tais "instruções"? Que ações elas deflagram? Bem, isto também depende do microprocessador. Uma instrução pode ser tão simples como copiar o conteúdo de um registrador para outro, executada em um único ciclo de operação, ou tão complexa como ler seqüencialmente o conteúdo de milhões de posições de memória, executar uma transformação qualquer sobre cada um destes valores e transferir os resultados para diferentes endereços - cuja execução, em virtude de sua complexidade, se estende por milhões de ciclos de operação.

Na verdade, o "conjunto de instruções" que um microprocessador reconhece e obedece (instruction set, em inglês) é uma de suas mais importantes características. Tanto assim que gerou um critério de classificação baseado em duas diferentes filosofias de implementação. Uma delas acha melhor implementar um numeroso conjunto de instruções poderosas e complexas, algumas das quais podem necessitar de muitos ciclos de operação para se completarem, mas que produzem resultados espetaculares - achando que com isto o microprocessador torna-se mais flexível e poderoso e torna mais fácil a tarefa de quem programa em linguagem de máquina, que passa a dispor de maior número de instruções de grande alcance. Outra corrente prefere implementar um conjunto relativamente pequeno de instruções elementares, acreditando que as operações complexas podem ser efetuadas através da combinação e repetição destas instruções primárias - achando que com isto o microprocessador torna-se mais simples e, sobretudo, mais rápido, alegando que hoje em dia, com o advento das linguagens de programação de alto nível, raramente se programa em linguagem de máquina e que a otimização do código para executar tarefas mais complexas usando instruções simples corre por conta do compilador. A primeira corrente filosófica redundou nos computadores de conjunto de instruções complexo (Complex Instruction Set Computer, ou CISC), enquanto a segunda resultou nos computadores de conjunto de instruções reduzido (Reduced Instruction Set Computer, ou RISC). Os microprocessadores da Intel, utilizados na linha PC, aderem à filosofia CISC, mas estão evoluindo no sentido oposto e a cada nova geração têm o conjunto de instruções simplificado, de modo que pode-se presumir que a longo prazo eles evoluirão para a filosofia RISC.

Mas seja lá como for, um microprocessador nada mais é que um circuito integrado capaz de obedecer a instruções. Do ponto de vista do computador, ele pode ser encarado como uma "caixa preta" que recebe instruções sob a forma de impulsos elétricos em determinados terminais e reage de acordo, produzindo sempre o mesmo resultado quando recebe a mesma instrução para operar com os mesmos dados. No fundo, uma coisa muito simples,

Mas achar isto agora não é vantagem. Afinal, depois que se compreende sua mecânica de funcionamento, qualquer coisa é muito simples...

B. Piropo