O Processador (UCP)

Finalmente, eis-nos chegados ao Cérebro do computador. O processador ou a UCP (Unidade Central de Processamento) é aquele componente do computador que o faz ser diferente de uma qualquer máquina de calcular, ou mesmo de uma máquina de lavar.
E qual o porquê desta diferença?

A UCP é um Circuito Integrado que permite que o homem lhe confira diferentes comportamentos, através da programação.

Esse circuito integrado, dispõe de múltiplos circuitos lógicos mais ou menos complexos que, pela introdução de sinais que traduzem os estados lógicos 0 ou 1 de acordo com determinadas combinações, executa operações que conduzem a um fim determinado. Quando esses valores lógicos constituem os bits de seleção de um Multiplexer este escolherá com base neles qual a sua entrada que colocará no caminho que se segue. Se for o caso de um Demultiplexer ele escolherá qual o caminho que o programa seguirá com o valor que tem na sua entrada.
E essas operações, que resultam de combinações específicas da interligação dos diferentes circuitos lógicos da UCP, são as instruções, que se sucedem numa determinada sequência, formando no seu conjunto aquilo a que se chama um programa, que leva o processador a executar com rapidez desmesurada aquilo que o homem só pode fazer com a velocidade que lhe é própria.
Mas foi a inteligência do homem que concebeu e tirou partido desse Circuito Integrado para que ele o ajudasse de forma mais fiável, controlada e rápida, nas suas tarefas.
A capacidade de evolução desse CI e suas ligações ao mundo exterior são um dos grandes desafios que a inteligência do ser humano enfrenta. O facto de a limitação da evolução dessas cada vez mais pequenas coisas estar tanto mais indefinido quanto mais evolui, constitui um ainda maior desafio para quem gosta de pensar e usar nesse sentido aquilo que Deus lhe colocou sobre os ombros.
Mas, para se poder tirar partido dessa inteligência para lidar com um microprocessador, é preciso saber na essência o que ele é, como funciona e como podemos falar com ele. O vocabulário da sua língua já conhecemos. Agora temos que formar palavras com ele. E depois frases, as instruções. E finalmente textos, os tais programas.
E foi precisamente com esse objetivo que iniciámos esta tarefa. Facilitar o contacto de quem se interesse com algo que é na essência elementar e que parece ao longe tão complexo que todos fogem de o entender. Efetivamente é complexo, muito complexo. Só que derivado da acumulação das mais elementares simplicidades.

Começamos por fazer uma pequena descrição da memória do computador, pois a UCP vive em íntima colaboração com a mesma. Todas as instruções de um programa a serem executadas bem como os dados que estão em operação têm que estar na memória. A UCP só opera com dados que se encontrem na memória principal, sejam instruções, endereços ou valores.

A UCP é constituída por circuitos idênticos àqueles que analisámos no Capítulo anterior, que se encontram em 3 diferentes áreas abstratas que compõem a UCP:

  • A Unidade Lógica e Aritmética (ULA), onde estão englobados todos os circuitos de operações aritméticas e lógicas.
  • Os  Registadores, que são registos de Básculas onde são memorizados todos os elementos sobre os quais incidem a operações da UCP, como por exemplo os dados em operação pela UCP, as instruções, os endereços da memória a serem acedidos. Os Registadores estão no nível mais elevado na hierarquia das memórias.
  • A Unidade de Controlo, onde são tomadas as decisões sobre que caminho seguir em cada situação, conforme a instrução do programa em execução. Esta unidade é composta essencialmente por Multiplexeres (MUX) e Demultiplexeres (DEMUX) que tomam as diversas decisões conforme o código binário que lhes é enviado pelo Descodificador onde é feita a descodificação da instrução.

É um MUX que decide se lê ou escreve na memória. É um MUX que escolhe o tipo de operação a executar na ULA. É um MUX que escolhe se o programa segue a sua sequência normal ou se efetua um salto. É um MUX que coloca no ponteiro de instruções a instrução sequencial seguinte ou a instrução de salto. E por aí fora.
Os MUX, como vimos, são comandados por conjuntos de bits e selecionam opções conforme uma das possíveis combinações dos bits de seleção. Então e como chegam esses bits aos MUX na sequência de um programa? Será que o trabalho do programador é ensinar aos diversos MUX em cada instrução o que devem fazer? Efetivamente é, mas sem que ele o saiba. É o código binário resultante da conversão do seu programa que o vai fazer e é precisamente isso que vamos mostrar como.

Cada instrução é composta por um Opcode  e um valor indicativo de vários possíveis parâmetros a que vamos chamar Constante. O Assembly, é a linguagem de programação de baixo nível que representa os Opcode por mnemónicas com sentido para nós.
Mas porque executar programas em linguagens como o Assembly é uma impossibilidade nos computadores atuais, estes são  executados em linguagens de alto nível, como C, Java, C#, C++, etc., independentemente da máquina a que se destinam e da arquitetura da sua UCP. Estes programas são depois convertidos em linguagem máquina, ou seja em código binário executável, isto é, um conjunto de dígitos 0 e 1 que são entendidos e executados pela UCP, o tal Opcode a a tal Constante.

Tudo isto está devidamente documentado neste Capítulo, em que tentámos levar ao nível mais baixo a possibilidade de entendimento destes conceitos.
Construímos a Unidade de Controlo da UCP, MUX a MUX com os sinais que os controlam.
Imaginámos um programa em linguagem C, que traduzimos em Assembly, em Opcodes e finalmente nos sinais de controlo correspondentes a cada Opcode que vão encarregar-se da execução de cada instrução.

Criámos imagens de todos os possíveis estados de uma UCP no cumprimento de todas as operações máquina resultantes deste programa, num total de 23 quadros onde evidenciamos quais os sinais de controlo intervenientes em cada Opcode e seu valor, os valores presentes nos Registadores, na Memórias de Dados e na Memória de Instruções, explicando porque assim se encontram.

Finalmente falamos de uma UCP real atual, o Intel i7 Nehalem, dando especial ênfase à paralelização de execução de instruções num mesmo núcleo por execução simultânea de diferentes estágios de pipeline. Claro que esta abordagem será sempre diminuta face à enorme complexidade de uma UCP de última geração e dirigida no sentido de entendermos qual o caminho que se prevê para o desenvolvimento das UCP.

Ver a síntese global deste trabalho

Inserimos de seguida o índice da edição em livro como forma de descrição dos temas abordados neste Capítulo

C7_Indice_Prt