Você está na página 1de 9

Processadores

         Também conhecido como UCP ( Unidade Central de


Processamento ) ou CPU ( Central Process Unit ) na sigla em inglês,
processador é o cérebro do computador. Sua função é executar os
programas armazenados na memória principal, buscando cada uma das
instruções, examinando-as e executando-as uma após a outra. É
constituído de diversas partes: a unidade de controle é responsável
por buscar as instruções na memória principal e por determinar o tipo de
cada instrução, isto é, decodificar as instruções. A unidade de lógica
aritmética ( ULA ) realiza um conjunto de operações necessárias à
execução das instruções.   O processador possui uma pequena memória
de alta velocidade,composta pelos registradores da CPU, utilizada para
armazenar resultados temporários e informações de controle.  Essa
memória é formada por um conjunto de registradores, cada qual com
determinado tamanho e função. O registrador mais importante é o
Program Counter, ( PC ) cujo valor aponta para a próxima instrução a
ser buscada na memória para ser executada. Outros registradores
importantes são o Registrador de Instruções ( IR - Instruction Register )
que armazena a instrução que está sendo executada, o Registrador de
Status, que armazena os bits ( flags ) referentes ao resultado da última
operação executada ( se o resultado foi zero ou negativo, por exemplo ),
e o Acumulador, utilizado pelos programas para armazenar os
resultados das operações processadas.
 
 
 
 
 
 
Figura 1- Estrutura de um Processador
 
        Quando diz-se que um processador é de 8, 16, 32 ou 64 bits, por
exemplo, geralmente é uma referência ao número de bits armazenados
nos registradores da CPU. Uma CPU de 64 bits, por exemplo, possui um
registrador acumulador de 64 bits, conectado a um barramento também
de 64 bits, sendo capaz de manipular dados com esse número de
bits durante uma única operação. 
 
         Para ser executada pelo processador, uma instrução precisa ser
dividida em uma série de passos, denominada ciclo da busca-
decodificação-execução, a saber:
 
 
- busca da próxima instrução na memória e armazenamento no registrador de
instruções,
                         Programas de computador são constituídos por uma sequência
de instruções que se encontram armazenados na memória
                         do  computador. Portanto, o processador deve ser capaz de
mover ( buscar ) instrução por instrução antes de executá-las.
                         Cada instrução buscada é armazenada no registrador de
instruções ( Instruction Register - IR ) para ser decodificada, isto é,
                         para o processador gerar os sinais de controle que
implementam a execução da operação da forma correta.
                               
 
- atualização do valor do program counter, de modo a apontar para a instrução
seguinte,
                         Para ser capaz de buscar instruções, o processador deve ser
capaz de conhecer a localização  das instruções, ou seja,               
                         do endereço de cada instrução na memória. O endereço da
próxima instrução a ser buscada é armazenado em um registrador
                         especial chamado PC ( Program Counter ou Contador de
Programa ). Esse registrador é na realidade um ponteiro, pois contém
                         o endereço da próxima instrução a ser buscada na memória.
 
 
- determinação do tipo de instrução que está armazenada no registrador de
instruções,
                         Conforme vimos, as instruções devem estar armazenadas no
registrador de instruções ( IR ), para serem decodificadas.
                         Na verdade, cada instrução é composta por dois campos de
bits: o Opcode ( ou código da operação ) e o campo dos operandos.
                         O primeiro contém o código binário que representa qual
operação a instrução executa ( por exemplo, uma operação aritmética,     
                         lógica, de controle ou movimento de dados ). O segundo,
representa a informação de entrada que será tratada.
                         Portanto, o Opcode é decodificado por um decodificador da
Unidade de Controle do processador  para que a instrução correta
                         seja executada.
                        
 
- se a instrução precisar de uma palavra armazenada na memória, nesse passo
deve ser determinado onde essa palavra está armazenada,
                         O operando pode representar tanto o dado a ser tratado
( número ou caractere no formato binário ), quanto um endereço de
                         memória onde o dado a ser tratado se encontra. No segundo
caso, faz-se necessária uma segunda busca à memória.
                        A diferença sobre a natureza do operando, encontra-se
codificada no opcode da instrução.
 
- busca da palavra, se necessário, e armazenamento em um dos registradores,
                        Se o operando é um endereço, o dado é buscado para ser
armazenado em um registrador da CPU.
 
- execução da instrução,
                        Com todos os dados armazenados em registradores da CPU  e
o opcode da instrução já decodificado, a instrução está no ponto de
                        ser executada, pois todas as informações necessárias tornara-
se disponíveis ou já foram interpretadas pelo processador.
                        Desse modo, a Unidade de Controle da CPU já pode coordenar
os circuitos digitais da Unidade Lógica e Aritmética ( ULA ) para os 
                        dados serem processados pelos circuitos selecionados e os
resultados serem obtidos.
 
- armazenamento do resultado,
                         Os resultados obtidos, são os dados de saída da instrução
executada. Resultados de operações aritméticas e lógicas tendem a ser
                         armazenados em registradores da CPU ( geralmente no
registrador acumulador ).
                         Se deseja-se que tais dados resultantes sejam armazenados
na memória principal, faz-se necessária a execução de outra
                         instrução para movimentar o dado de um registrador da CPU
para a memória.
                         
 
 
- retorno ao primeiro passo para iniciar a execução da próxima instrução.
                         Durante a execução, o PC é incrementado ( isto é, seu valor
aumenta ), de tal modo que ele aponta para a próxima instrução do
                         programa. Geralmente a próxima instrução localiza-se no
endereço seguinte ao da instrução anterior. Entretanto, no caso de
                         instruções de desvio, como saltos ( JUMPs, GOTOs )
condicionais e incondicionais chamadas a sub-rotinas ( CALL ) ou retorno de
                         sub-rotina ( RETURN ), o endereço da instrução seguinte não é
o seguinte ao da última instrução executada. Essas instruções
                         alteram o valor do registrador PC, de modo que os programas
não precisam seguir uma sequência rígida de processamento, mas
                         podem realizar decisões condicionadas aos dados de entrada.
                        
 
Princípios de Projeto para Computadores
Modernos
 
Projetistas de máquinas precisam estar sempre atentos às mudanças de
tecnologia que afetam as velocidades dos componentes de um
computador. Desta forma, um conjunto de princípios de projeto deve ser
observado por esses projetistas. Esses princípios são:
 
- todas as instruções são diretamente executadas por hardware –
nenhuma delas é interpretada por microinstruções.
  Até algum tempo, a tecnologia dominante era caracterizada por uma
arquitetura de muitas instruções que realizavam operações complexas.
Para tanto, utilizavam o conceito de microprogramação. Cada instrução
complexa era associada a um microprograma composto por
microinstruções simples. A tendência atual segue a direção oposta, isto
é, processadores compostos por um número reduzido de instruções
elementares, que são decodificadas e executadas diretamente pelo
hardware ( nível lógico digital ).
  Assim, os programas tendem a ser compostos por um número maior
de instruções mais elementares do que um número menor de instruções
mais complexas. Entretanto, instruções elementares são executadas
individualmente em um tempo bem menor, principalmente ao se usar
técnicas de paralelismo, tais como pipelining.
 
- maximizar a taxa à qual as instruções são executadas – o paralelismo
pode representar um papel muito importante na melhora do
desempenho.
    Uma vantagem associada a instruções mais elementares é um
formato mais parecido, com um tempo de execução mais parecido e
estágios mais parecidos.
    Essa característica propicia o uso da tecnologia conhecida como
pipelining.
 
- as instruções precisam ser facilmente decodificadas – o processo de
decodificação é que determina os recursos usados na execução das
instruções.
  Instruções mais simples ( elementares ) e em menor número levam a
um processo de decodificação mais simples
 
- somente as instruções de load e store devem referenciar a memória –
estabelecer que os operandos para a maioria das instruções venham de
e retornem para registradores.
   Os registradores da CPU ocupam o topo da hierarquia como a
memória mais rápida presente em qualquer sistema computacional.
Naturalmente, o desempenho é maior se os dados a serem processados
estiverem nos registradores na maior parte do tempo.
 
- projetar uma máquina com muitos registradores – como o acesso à
memória é relativamente lento, há necessidade de se ter vários
registradores à disposição.
 
 
   Os princípios descritos acima estão associados à tecnologia RISC
( computadores com um conjunto reduzido de instruções ), que são um
contraponto à tecnologia CISC ( computadores com um conjunto
complexo de instruções ).
 
   Uma das maneiras de melhorar o desempenho das máquinas é
aumentar a velocidade do clock, porém existem limites tecnológicos para
isso.      
   Dessa forma, os projetistas focam no paralelismo como forma de obter
melhor desempenho para uma mesma velocidade de clock. No nível de
instruções, o paralelismo é explorado dentro das instruções individuais,
de modo a conseguir que a máquina execute mais instruções por
segundo. No nível de processador, vários processadores trabalham junto
na solução do mesmo problema.
 
 
   Além disso, de nada adiantaria simplesmente aumentar a frequência
do clock se há problemas com o superaquecimento, ou pelo fato de
exeiste um tempo mínimo que um sinal elétrico leva para ser propagar.
Aumentando a capacidade de integração, conforme a evolução da
microeletrônica, permite diminuir as dimensões dos componentes e o
tempo de propagação dos sinais. Mas existe um limite para isso.
Transistores não podem ter dimensões menores do que as de um átomo.
   Portanto, um bom projeto a nível de arquitetura e organização é
fundamental na melhora da performance do sistema.
 
 
Paralelismo
 
   Uma forma de melhorar o desempenho é por meio de tecnologias de
paralelismo, o que significa que um sistema que possui diversos
componentes trabalhando simultaneamente. Por exemplo, se um
processo qualquer for constituído de duas etapas, o efeito de elas serem
executadas simultaneamente é praticamente o mesmo de essas duas
etapas serem executadas sequencialmente com o dobro da velocidade.
 
   Para classificar diferentes formas de paralelismo em computação, foi
estabelecida a taxonomia de Flynn:
 
           SISD ( Single Instruction Single Data ):             Fluxo único de
instruções sobre um único conjunto de dados.
           SIMD ( Single Instruction Multiple Data ):          Fluxo único de
instruções em múltiplos conjuntos de dados.
           MISD ( Multiple Instruction Single Data ):          Fluxo múltiplo
de instruções em um único conjunto de dados.
           MIMD ( Multiple Instruction Multiple Data ):       Fluxo múltiplo
de instruções sobre múltiplos conjunto de dados.
 

 
    Existem essencialmente dois tipos de paralelismo em sistemas
computacionais, paralelismo em nível de instrução e em nível de
processador:
 
    Paralelismo no Nível de Instrução:  Nesse caso temos um único processador
( CPU ), e o paralelismo é explorado em cada instrução individualmente.
                                                            Uma instrução é geralmente composta por
diversos estágios, que utilizam circuitos independentes, podendo, portanto,
                                                            funcionar simultaneamente.  Dois exemplos de
tecnologias que fazem uso do paralelismo em nível de instrução são a
                                                            técnica de pipelining e  de  processadores
superescalares.
 
 
 Pipeline ( Pipelining )
 
         Usando a tecnologia pipeline, a arquitetura do processador tira
proveito do fato de a maioria das instruções serem compostas por
diversos estágios comuns. Por exemplo, toda instrução, precisa ser
buscada na memória ( onde se encontra o programa que a contém );
depois será decodificada ( nesse estágio o processador lê o código da
instrução para definir qual operação será executada ); algumas
instruções requerem a busca de um operando na memória ( dado de
entrada da operação ), e por fim a execução da operação e a gravação
do resultado.
            Esses estágios são muitas vezes denominados em inglês como:
 
              Instruction Fetch ( IF ) - Busca da Instrução.
              Instruction Decode ( ID ) - Decodificação do Opcode da
Instrução
              Operand Fetch ( OF ) -  Busca do Operando ( na memória ou
em um registrador ).
              Execution ( E ) - Execução da Operação.
              Write Back ( WB ) - Gravação do Resultado
 
              Vamos primeiramente observar na figura abaixo, como é o
processamento de um programa composto por instruções com esses 5
estágios em um processador que não faz uso da tecnologia pipeline.
 
 
 
                    Agora, repare como é o processamento fazendo uso de
uma pipeline de instruções. A busca da segunda instrução ocorreu logo
após a busca da primeira instrução terminar. Enquanto a instrução 1 é
decodificada, a instrução 2 é buscada.
                        Temos sempre uma nova instrução sendo buscada a
cada ciclo máquina ( ou seja, ao fim de cada estágio ). Efetivamente, a
taxa de emissão de novas instruções foi multiplicada por 5, que é o
número de estágios de cada instrução. Podemos também perceber que,
após o 5º ciclo de máquina, temos 5 estágios sendo processados
simultaneamente, cada um proveniente de uma instrução diferente. A
velocidade do processamento é ( quase ) multiplicada por 5.
 
 

                       
                   Naturalmente, o tempo de cada
instrução individualmente permanece o mesmo utilizando ou não uma
pipeline de instruções. Só que a taxa de emissão de instruções
aumentou. E temos um processamento paralelo de estágios diferentes
de instruções diferentes, o que leva a um aproveitamento maior do
tempo ( que em um sistema computacional digital é determinado pelos
ciclos de clock ).
                       A filosofia pipeline é a mesma de uma linha de
montagem industrial, onde o processo de fabricação de um produto é
dividido em diversos estágios ou etapas. Essas etapas são realizadas
todas simultaneamente durante o processo, embora um produto possa
estar no início da linha de montagem ( passando pelos primeiros
estágios ), ou no final dela ( passando pelos últimos estágios ).
 
Processadores Superescalares
 
                       Um processador de super-escalar é capaz de executar
mais de uma instrução por ciclo de clock. A manutenção dessa taxa de
execução elevada é principalmente um problema de alocação de
recursos do processador (que possui diversas unidades funcionais de
execução de instrução ).

 Uma arquitetura de CPU superescalar implementa uma forma de


paralelismo chamado de nível de instrução paralelismo dentro de um
único processador.Desse modo, permite uma alta taxa de emissão de
novas instruções. Um processador superescalar executa mais de uma
instrução durante um ciclo de relógio, através do envio simultâneo de
múltiplas instruções a diferentes unidades funcionais no
processador. Cada unidade funcional não é um núcleo de CPU em
separado, mas um recurso de execução dentro de uma única CPU, tais
como uma unidade lógica aritmética, um shifter ( deslocadr ) de bits, um
multiplicador de palavras binárias, unidades de LOAD ( leitura da
memória ) ou STORE ( escrita na memória ).

Na taxonomia de Flynn , um processador superescalar single-core é


classificado como um processador SISD, enquanto um processador
superescalar multi-core é classificado como um processador MIMD.

Enquanto uma CPU superescalar normalmente também implementa uma


pipeline de instruções, as arquiteturas Pipelining e Arquitetura
Superescalar são consideradas diferentes tecnologias de aprimoramento
de desempenho.

    As instruções são emitidos a partir de um fluxo de instrução


sequencial, que é o programa em execução, mas o hardware da CPU
verifica dinamicamente as dependências de dados entre instruções em
tempo de execução. Permitindo que diferentes instruções sejam
executadas simultaneamente, desde que os dados de entrada de uma
não dependa do resultado fornecido pela outra. Também existem
compiladores para processadores superescalares, que montam o
programa executável de tal maneira que a ordem de execução das
instruções é otimizada para processadores superescalares, Eles geram
um código tal que minimiza as chances de instruções consecutivas
dependam do resultado uma da outra, possibilitando a execução
simultânea.

 
 
 
 
                 
 

 
                   Na figura acima, repare que, do mesmo modo que em uma
pipeline de instruções, o processador superescalar também possui 5
estágios:
S1 ( busca ) , S2 ( decodificação ), S3 ( busca do operando ), S4
( execução ), e S5 ( gravação do resultado ). Entretanto, o estágio S4
possui múltiplas unidades de execução, o que permite mais de uma
instrução sendo executadas ao mesmo tempo.
                   Um detalhe que vale a pena observar, é o fato de que o
tempo médio gasto pelos estágios S1, S2 e S3 não podem superar o
tempo de S4, do contrário o processador não "acumularia", mais de uma
instrução sendo executadas simultaneamente. 

Você também pode gostar