Computadores XVI: Componentes da UCP

Propaganda
Computadores XVI: Componentes da UCP
A6 – Texto 1
http://www.bpiropo.com.br/fpc20051205.htm
Sítio Fórum PCs /Colunas
Coluna: B. Piropo – Publicada em 05/12/2005
Autor: B.Piropo
Na coluna anterior, < http://www.forumpcs.com.br/coluna.php?b=138084 > “O que é
uma UCP”, vimos o que é Unidade Central de Processamento, o componente mais
importante de nossos computadores. Hoje a examinaremos com um pouco mais de
detalhes e discutiremos quais são e para que servem seus componentes internos.
Uma UCP pode ser concebida como um conjunto de quatro componentes básicos que
funcionam harmonicamente: Unidade Aritmética e Lógica (UAL), registradores,
unidade de controle e unidade de Entrada/Saída. Cada uma delas, por sua vez, é
formada por diversos constituintes individuais. A função de todo este conjunto, como
sabemos, é executar “instruções”, codificadas sob a forma de números.
Uma representação gráfica da UCP pode ser vista na Figura 1 com seus quatro
componentes principais destacados. A unidade de entrada e saída é formada, nesta
representação, pelos registradores REM e RDM e por suas ligações com os demais
elementos (logo veremos as funções de cada um deles).
Figura 1: Representação gráfica de uma UCP
A execução de instruções envolve duas funções básicas: controle e processamento.
Consideram-se como de controle as atividades complementares, como busca de
instruções e dados (que normalmente permanecem na memória principal),
interpretação (decodificação) de instruções e comunicação com componentes externos
(memória, entrada/saída).
Já o processamento é formado por atividades referentes à execução da instrução
propriamente dita. Envolve predominantemente a execução de operações aritméticas e
lógicas, execução de desvios (ou alteração do fluxo do programa), movimentação de
dados entre posições de memória e UCP, entre UCP e memória e entre registradores e
operações de entrada e saída (se tudo isso lhe parece um tanto complicado, não se
preocupe: todos estes conceitos são simples e serão devidamente destrinchados na
medida que avançarmos).
Unidade Aritmética e Lógica (UAL)
O principal componente interno da UCP envolvido nas funções relativas ao
processamento é a Unidade Aritmética e Lógica (UAL). Que, como o nome indica, é a
responsável pela execução de operações aritméticas e lógicas (não confundir
“operação” com “instrução”; uma instrução é um procedimento que pode ser muito
simples ou muito complexo, e neste último caso, pode englobar diversas operações).
Por exemplo, uma UAL é capaz de executar as seguintes operações:
- Somar, subtrair, multiplicar e dividir dois números.
- Executar operações lógicas como AND, OR e XOR com dois números;
- Executar operações unárias (ou seja, com um único operando, ou número) como
complemento, incremento, decremento, deslocamento à direita e deslocamento à
esquerda. Que são todas muito simples, apesar do nome aparentemente complicado.
Incrementar e decrementar significam, respectivamente, somar e subtrair um.
Deslocar à direita e à esquerda significa mover os bits uma casa para a direita (e
abandonar o de ordem zero) ou esquerda (e acrescentar um zero à direita), o que
corresponde a dividir e multiplicar por dois, respectivamente. E complementar
significa “trocar” cada bit “um” por um bit “zero” e cada bit “zero” por um bit “um”.
Como muitas das operações executadas pela UAL exigem dois operandos (por
exemplo: na soma de dois números, cada um deles é um operando), a UOL tem duas
entradas. E como as operações em geral resultam em um único número, ela tem
apenas uma saída (veja sua representação na figura).
A UAL consiste de uma combinação (que pode ser relativamente simples ou
incrivelmente complexa) de componentes eletrônicos interligados em circuitos lógicos
elementares que permitem executar as operações básicas acima. Uma tarefa que só
parece complicada para quem não leu a coluna <
http://www.forumpcs.com.br/viewtopic.php?t=133014 > “Aprendendo a somar”, onde
vimos como é fácil somar números empregando apenas circuitos lógicos.
Mas por mais complexa que seja uma UAL (como as capazes de executar as
chamadas operações em “ponto flutuante”) ela é sempre uma combinação de circuitos
simples que obedecem os mesmos princípios básicos de funcionamento.
Registradores
Quem leu a coluna < http://www.forumpcs.com.br/viewtopic.php?t=135976 >
“Circuitos impressos e integrados” sabe que a UCP, ou microprocessador, é apenas
um circuito integrado, um componente eletrônico inserido em um circuito impresso.
No caso de nossos computadores, este circuito impresso denomina-se “placa-mãe” e
contém os principais elementos que compõem o micro. Inclusive, naturalmente, a
UCP e a Memória Principal (ou MP), entre outros.
A memória principal é um imenso conjunto de “posições de memória”, cada uma
capaz de armazenar um número binário (em geral de oito bits). Estas posições são
numeradas seqüencialmente e estes números são conhecidos por “endereços” de
memória. Então, se armazenarmos (“escrevermos”) um número em uma destas
posições e anotarmos seu endereço, poderemos a qualquer momento retornar a ela e
recuperar (“ler”) o número armazenado.
A MP funciona como um enorme depósito de números. Esses números tanto podem
ser instruções de um programa (que, como vimos na coluna anterior, nada mais são
que números binários), dados utilizados pelo programa ou até mesmo endereços de
outras posições de memória (que, por sua vez, podem conter instruções, dados ou
outros endereços).
Muitos dos operandos utilizados pela ULA estão originalmente armazenados na MP e
muitos dos resultados das operações efetuadas pela ULA também deverão ser lá
armazenados.
Ocorre, no entanto, que devido à arquitetura interna da UCP a UAL não tem acesso
direto às posições da memória principal. Repare, na Figura 1, que a única
comunicação que a UCP mantém com o mundo exterior (onde se situa a MP) se dá
através do “barramento”, aquele conjunto de linhas coloridas em azul, verde e
vermelho (assunto de uma das próximas colunas) que partem da unidade de controle
(“barramento” de controle, representado pelas linhas vermelhas) e dos dois
registradores RDM e REM (que fazem parte da unidade de entrada/saída que logo
discutiremos), os barramento de dados e de endereços, formados pelas linhas verde e
azuis, respectivamente (calma que logo veremos como isso funciona). E, como se nota
pelas interligações dos elementos internos da UCP, a UAL só consegue se comunicar
diretamente com o RDM, o REM e com o conjunto dos Registradores, que logo
veremos o que são.
Em resumo: para que a UAL possa “enxergar” um número é preciso que ele esteja em
um destes elementos situados no interior da UCP. Da mesma forma, como a UAL não
se comunica diretamente com a memória principal, ela não pode lá escrever
diretamente os resultados das operações por ela efetuadas (se isso lhe parece um tanto
confuso, prometo esclarecer na próxima coluna, quando examinaremos o
procedimento de leitura e escrita na memória principal).
Pois bem: os elementos conhecidos por “Registradores”, incluindo o RDM
(Registrador de Dados da Memória) e REM (Registrador de Endereços da Memória)
nada mais são que um conjunto de posições de memória internas às quais a UAL tem
acesso direto, podendo ler e escrever dados em qualquer delas. Portanto, para que a
UAL tenha acesso a um dado contido na MP, é preciso antes ler este dado e
transcrevê-lo em um dos registradores.
Além de permitir que a UAL tenha acesso aos dados externos, os registradores
funcionam como memória auxiliar da UCP, armazenando valores (dados e endereços)
usados por algumas instruções, além de resultados intermediários. Nesses casos, os
registradores servem como “rascunho” para a UCP durante a execução de instruções
complexas.
Os registradores são posições de memória tão importantes que são identificados por
nomes, não por endereços (números). Toda UCP tem dois registradores especiais,
cujos nomes são Registrador de Instruções (RI) e Ponteiro de Instruções (PI) (cuja
função examinaremos detalhadamente quando discutirmos o “ciclo de busca e
execução”, ou seja, o conjunto de procedimentos adotado pela UCP para executar
suas instruções). Além deles, toda UCP tem pelo menos mais um registrador,
denominado Acumulador (ACC), cuja função principal é receber o resultado do
processamento de instruções.
O número total de registradores de uma UCP, a função de cada um deles (alguns têm
funções específicas, como o RI e PI, outros são de uso geral, como o ACC) e sua
“largura” (quantidade de bits que pode armazenar), são fatores que dependem da
arquitetura da UCP e são decididos pelo seu projetista.
Geralmente todos os registradores de uma UCP têm a mesma “largura”. E essa largura
é um fator tão importante para o desempenho da UCP que em geral é usada para
identificar o tipo da UCP (por exemplo: em geral quando dizemos que uma UCP é “de
32 bits” estamos na verdade dizendo que seus registradores são de 32 bits, ou seja, são
capazes de armazenar quantidades que são expressas no sistema numérico de base
dois por um número de 32 dígitos binários, ou bits).
A largura (quantidade de bits que pode armazenar) dos registradores de uma UCP é
importante porque é um dos fatores usados para definir o tamanho da “palavra”. O
outro é a largura do operando usado pela UAL.
A “Palavra” de uma UCP é, então, o número de bits que pode ser armazenado em um
de seus registradores e que pode ser usado como operando pela UAL desta UCP (nem
sempre esses valores são iguais; por exemplo: os processadores Pentium têm
registradores de 64 bits mas suas ULA apenas podem utilizar números de 32 bits
como operandos; nesse caso diz-se que os Pentium são processadores de 32 bits,
adotando o menor dentre os dois valores para o tamanho da palavra).
O tamanho ou “largura” da palavra exerce influência decisiva no desempenho da UCP
pelas seguintes razões:
- Quanto maior o tamanho da palavra, menor o tempo gasto para executar instruções
com operandos (uma UCP com palavra de 32 bits pode somar dois números de quatro
bytes em uma única operação, enquanto uma UCP de 8 bits precisa decompor a
operação em uma série de passos intermediários).
- Quanto maior a palavra, maior a quantidade de bits (e, portanto, de bytes) transferida
em cada operação de leitura ou escrita na memória e nos dispositivos de
Entrada/Saída, o que faz com que rapidez com que se dá a leitura ou escrita de dados
em grandes blocos de memória seja diretamente proporcional ao tamanho da palavra.
- Quanto maior o tamanho da palavra, maior o limite para a capacidade total da
memória principal. Isto é conseqüência do fato de que os endereços devem ser
armazenados nos registradores, que portanto devem ter capacidade para armazenar o
maior de todos os endereços, que corresponde ao limite superior da capacidade da
memória.
Unidade de Controle
Embora a principal atividade de uma UCP, o processamento de dados, seja executada
pela ULA, ela não seria possível se a instrução não houvesse sido previamente
decodificada, se os operandos não tivessem sido previamente escritos nos
registradores e se os sinais de controle necessários para ativar os componentes
auxiliares não tivessem sido emitidos. E estas funções são desempenhadas pela
unidade de controle.
Na verdade a unidade de controle é a parte mais importante da UCP. Citando Mário
A. Monteiro: “a área de controle é projetada para entender o que fazer, como fazer e
comandar quem vai fazer no momento adequado. Podemos fazer uma analogia com os
seres humanos imaginando que a área de controle é o cérebro que comanda o ato de
andar, e a área de processamento são os músculos e ossos...”
Cada UCP dispõe de um repertório específico de instruções que é capaz de reconhecer
e executar, denominado “conjunto de instruções” (“instruction set”). Cada instrução é
identificada por um número. Para que cada uma delas seja executada, são
implementados no interior da unidade de controle tantos circuitos lógicos
independentes quantas são as instruções do conjunto de instruções. Quando a UCP
recebe uma instrução para executar, é a unidade de controle que a “decodifica” e
aciona o circuito correspondente.
Há dois tipos básicos de UCPs: aquelas cujo conjunto de instruções consiste de um
número reduzido de instruções simples que podem ser executadas muito rapidamente
(computadores de conjunto reduzido de instruções, Reduced Instruction Set
Computer, ou RISC) e computadores com um conjunto complexo de instruções
poderosas, porém de execução mais lenta (computadores de conjunto complexo de
instruções, Complex Instruction Set Computers, ou CISC). Os computadores CISC
foram desenvolvidos para facilitar a tarefa dos programadores, agrupando uma série
de instruções elementares em instruções complexas e muito mais poderosas com o
objetivo de otimizar o código dos programas. Modernamente, com a adoção quase
universal das linguagens de programação “de alto nível”, a otimização dos programas
é feita pelos programas denominados “compiladores”, que geram o código em
linguagem de máquina. Por isto a tendência moderna é o desenvolvimento de
microprocessadores RISC.
Para que uma instrução seja executada, basta ativar o circuito lógico correspondente.
Quem executa esta ação é o “decodificador”.
O decodificador faz parte da unidade de controle. Sua função é “decodificar” a
instrução, ou seja, receber na entrada o número que está armazenado no RI (e que,
portanto, identifica a instrução a ser executada) e selecionar o circuito interno que
contém as operações elementares que correspondem à sua execução. Se porventura
você está lendo este texto na tela de um computador, o circuito decodificador da UCP
que o equipa não é muito diferente daquele que você conhece, descrito na coluna <
http://www.forumpcs.com.br/viewtopic.php?t=135304 > “Multiplexadores,
decodificadores e flip-flops”. Essencialmente, ambas as estruturas são análogas. A
única diferença é que como o conjunto de instruções (“instruction set”) de seu
computador contém um grande número de instruções, seu circuito decodificador terá
muito mais que as oito saídas do circuito examinado na coluna citada.
Também faz parte da unidade de controle o temporizador, ou relógio (“clock”), que
comanda o ritmo em que as operações elementares são realizadas (voltaremos a este
assunto quando discutirmos a “Lógica Temporizada”).
A função do temporizador é gerar pulsos de tensão de duração fixa e em um ritmo
constante. Em geral isso é feito através do emprego de um cristal de quartzo, um
componente capaz de emitir pulsos de tensão a intervalos notavelmente precisos.
O número de pulsos gerados na unidade de tempo define a “freqüência de operação”
da UCP, medida em múltiplos da unidade de freqüência Hertz (KHz, MHz e GHz).
Este parâmetro é tão importante que durante muito tempo foi usado para definir a
classe da UCP (por exemplo: um Pentium 800 referia-se a um microprocessador
Pentium, da Intel, que operava a uma freqüência de 800 MHz). Ultimamente os
fabricantes decidiram adotar “números de código” para identificar suas UCPs, porém
a freqüência de operação ainda é um fator importante na avaliação do desempenho do
microprocessador.
O intervalo de tempo decorrido entre o início de um pulso e o início do pulso seguinte
denomina-se ciclo de relógio ou ciclo de maquina. Em princípio, não pode existir
qualquer operação realizada pela UCP que dure menos que um ciclo de máquina.
Portanto, nenhuma instrução pode durar menos que um ciclo. Em geral dura mais, já
que as instruções, após decodificadas, são decompostas em uma seqüência de
operações elementares, cada uma durando um ciclo de máquina.
Esse princípio básico continua válido mesmo nos dias de hoje. Porém, com a evolução
dos microprocessadores, surgiram as arquiteturas em “pipeline” (onde diversas
instruções são executadas simultaneamente, cada uma em um estágio diferente da
UCP), superescalares (UCPs que adotam mais de uma “pipeline” no mesmo núcleo) e
multinucleares (UCPs que contêm mais de um núcleo no mesmo encapsulamento).
Estas arquiteturas permitem que diversas instruções sejam executadas no mesmo
ciclo, cada uma em seu “nicho”. Por isso, se você dividir o tempo gasto para executar
diversas instruções simultaneamente pela duração do ciclo de máquina pode obter um
número fracionário, parecendo indicar que a instrução foi executada em menos de um
ciclo. Isso, no entanto, é meramente um dado estatístico e não reflete a realidade. Por
mais que a tecnologia evolua, em cada estágio de uma pipeline de cada núcleo, nada
pode durar menos que um ciclo de máquina (se este parágrafo lhe pareceu difícil de
entender, simplesmente esqueça-o; quando discutirmos os tipos de arquitetura acima
mencionados, os conceitos se tornarão mais claros e aquele “aha!” aparecerá em sua
boca, juntamente com o sorriso que costuma enfeitar nossa fisionomia quando, enfim,
entendemos um conceito mais “cabeludo”).
A duração de um ciclo de máquina é igual ao inverso da freqüência de operação.
Assim, em uma UCP operando a 500 MHz (quinhentos milhões ciclos por segundo) a
duração do ciclo de máquina é de 1/500.000.000 = 0,000000002 seg, ou 2 ns. E pela
mesma razão os ciclos de máquina de uma UCP operando a 1 GHz (um bilhão de
ciclos por segundo) duram 1 ns (1 nanossegundo, ou um bilionésimo do segundo).
Os principais elementos de uma unidade de controle são então o circuito
decodificador, o conjunto de circuitos responsáveis pela execução de cada instrução
(também conhecido por “microcódigo”) e o temporizador.
Unidade de Entrada e Saída
A unidade de Entrada/Saída (da UCP) é o elo de ligação entre ela e o “mundo
exterior”, ou seja, o restante do circuito do computador. Essencialmente ela comunica
a UCP com a memória principal e com os dispositivos de Entrada e Saída do
computador (não confundir com a unidade de E/S da própria UCP).
Como vimos acima, a UCP é ligada ao mundo exterior por três barramentos distintos:
o de dados, o de endereços e o de controle. Os dois primeiros transportam valores
correspondentes, respectivamente, a dados e endereços e o terceiro os sinais de
controle.
A unidade de Entrada/Saída (E/S ou I/O, de “Input/Output”) tem duas funções
básicas. A primeira é transferir valores (endereços ou dados) entre os componentes
externos e os internos da UCP. A segunda é adequar os sinais de controle para
transitar de dentro para fora da UCP e vice-versa, pois os componentes internos da
UCP são delicados e não suportariam as tensões e correntes elétricas usadas para
transportar os sinais através do barramento.
Enquanto os circuitos internos da UCP se comunicam diretamente com o barramento
de controle através da unidade de E/S, a comunicação com os barramentos de dados e
endereços é feita através de dois registradores específicos que fazem parte da unidade
de E/S, o Registrador de Dados da Memória (RDM) e Registrador de Endereços da
Memória (REM), respectivamente.
A unidade de E/S pode ser simples, composta apenas pelos registradores REM, RDM
e de um amortecedor de sinais, até unidades muito complexas, que incluem cache de
memória interno (ou de nível 1, como veremos adiante) e multiplicadores de
freqüência (nas UCP modernas, que operam com freqüência diferente da do
barramento).
Portanto...
estes são os componentes principais de uma UCP. Nas próximas colunas veremos
como eles se combinam harmonicamente para executarem operações como
leitura/escrita na memória, busca e execução de instruções e coisas que tais.
Até lá.
Download