Você está na página 1de 10

Tecnologias de Informação

Arquitectura de Computadores

Estrutura e Função da CPU


Tópicos

Estrutura da CPU
Registos
Ciclo de Instruções
Fluxo de Dados
Pré-Busca de Instruções

2
Estrutura e funções do CPU
Arquitectura de Microprocessadores
Virtualmente quase todos os computadores contemporâneos são baseados
na arquitectura de Von Newman e são baseados em 3 conceitos:
Os dados e as instruções são armazenados numa memória de leitura/escrita
O conteúdo desta memória é endereçado por localização sem preocupação
com o tipo de dados
A execução ocorre de uma forma sequencial (a não ser que explicitamente
modificada) de uma instrução para outra
A CPU é quem vai exercer o controlo entre os vários registos da memória e
calcular as operações tendo em conta os vários sinais de controlo.

Estrutura e funções do CPU


Arquitectura de Microprocessadores
Fazem parte dos registos internos do CPU:
O MAR (Memory Address Register) que especifica o endereço de memória
para a próxima leitura e escrita
O MBR (Memory Buffer Register) que contém os dados que vão ser escritos
na memória ou então que detém os dados lidos da memória
Do mesmo modo, os registos I/O AR e o I/O BR especificam o módulo de
entradas e saídas usado para a troca de dados entre o módulo de entradas e
saídas do CPU

Organização Interna da CPU


Para compreendermos a organização do CPU temos de considerar as suas
funções básicas:
Adquirir Instruções (Fetch Instructions): o CPU tem de ler as instruções a
partir da memória
Interpretar Instruções: as instruções têm de ser descodificadas por forma a
determinar a acção a executar
Adquirir dados (Fetch Data): a execução de uma instrução pode necessitar a
leitura de dados da memória ou do módulo de entradas e saídas (I/O)
Processar dados: a execução de uma instrução pode implicar operações
lógicas ou aritméticas nos dados
Escrever dados: os resultados de uma execução podem implicar escrever
dados na memória ou num módulo de E/S.

Organização Interna da CPU


Tendo em conta estas operações, o computador tem de ter um sítio onde
guardar os dados.
É necessário saber qual o endereço físico da última instrução para que ele
próprio consiga executar a próxima.
É necessário que o computador guarde temporariamente os dados
enquanto é executada uma instrução. Por outras palavras é necessário que o
CPU tenha uma pequena memória interna.

3
Para além dos registos internos do processador, onde serão alocadas as
instruções e os dados de memória temporariamente. O CPU é constituído por
uma Unidade Lógica Aritmética e uma
Unidade de Controlo

Organização Interna da CPU


A ALU (Unidade Lógica Aritmética) processa e calcula os dados.
A Unidade de Controlo, controla o fluxo de dados e as instruções enviadas e
recebidas do CPU e controla também as operações da ALU.
Na figura seguinte podemos visualizar a constituição interna do CPU. Para
além da ALU, dos registos e
Unidade de Controlo, as interligações entre os vários componentes é feita pelo
Bus do CPU

Organização Interna da CPU


CPU Bus Registos
Controlo
ALU
Organização Interna da CPU
Veja-se as grandes semelhanças entre as partes constituintes do CPU e a
estrutura dos computadores.
Computador= CPU, I/O, Memória
CPU= Unidade de Controlo, ALU, Registos
Organização Interna da CPU
A ALU e todos os registos do CPU estão interligados através de um bus
interno.
As portas e os sinais de controlo servem para mover os dados de e para o
bus em cada registo.
Sinais de controlo adicionais controlam a transferência de e para o bus do
sistema e operações da ALU.
Quando estiverem envolvidas operações na ALU, é necessário envolver
mais registos.
Quando uma operação envolvendo dois operandos for executada, um pode
ser obtido do bus interno, mas o outro tem de ser obtido de uma outra origem
Organização Interna da CPU
O AC (acumulator) poderia ser usado para o efeito mas iria limitar a
flexibilidade do sistema e não iria funcionar com o CPU na situação em que se
está a operar com vários registos.
A ALU é um circuito combinacional sem capacidade de memória.
Assim, quando os sinais de controlo activam as funções da ALU, os inputs da
ALU são transferidos em output.
Por esta razão, o output não pode ser ligado directamente ao bus porque
senão entraria em feedback com o input.
Organização Interna da CPU
Para isto utilizaremos um registo (Z) que arquivará temporariamente o
output.
Com a utilização destes novos registos, uma operação para adicionar um
valor ao AC desde memória compreenderia os seguintes passos:
A1: MAR IR (Address)

4
A2: MBR Memory
A3; Y MBR
A4: Z (AC) + Y
A5: AC Z
Para além da utilização destes registos, são possíveis outras organizações.
Organização Interna da CPU
De uma maneira geral, são usados os bus internos ou conjuntos destes
bus(es).
A utilização de Paths comuns simplificam a ligação e o controlo do CPU.
Uma outra razão para a utilização do bus interno é a poupança do espaço,
especialmente em microprocessadores, onde o espaço ocupado por registos
tem de ser minimizado
Estrutura e funções da CPU
Organização dos Registos
A CPU tem de ter algum espaço para trabalhar
(armazenamento temporário)
Este espaço é constituído por registos
O numero e funções dos registos varia de processador para processador
Constitui uma das maiores decisões a tomar no desenho de um processador
Constitui o topo da hierarquia da memória
Estrutura e funções da CPU
Organização dos Registos
Os registos agrupam-se em dois grandes grupos:
Registos visíveis ao utilizador
Registos de controlo de estado.
Os registos visíveis ao utilizador permitem ao programador minimizar as
referências à memória principal e podem ser caracterizados nas seguintes
categorias:
Registos de Uso Geral
Registos de Dados
Registos de Endereço
Códigos de condição
Estrutura e funções da CPU
Organização dos Registos
Registos visíveis ao utilizador
Registos de Uso Geral - podem ser atribuídos a uma variedade de funções
pelo programador, normalmente podem conter operandos para qualquer código
de operação
Registos de Dados - só podem ser utilizados para guardar dados e não
podem ser utilizados em operações de cálculo de endereços
Registos de Endereço - podem ser de uso geral ou podem estar
vocacionados para um modo de endereçamento particular (ex. Stack pointer)
Códigos de condição - também chamados de flags, geralmente agrupados
em um ou mais registos que são alterados apenas pelo CPU dependendo da
última operação lógica ou aritmética
Estrutura e funções da CPU
Exemplo de Códigos de Condição
Conjunto de bits individuais
e.g. o resultado da ultima operação foi zero
Podem ser lidos (implicitamente) por programas

5
e.g. Salta se zero
Não pode (usualmente) ser estabelecido por programas
Estrutura e funções da CPU
Organização dos Registos
Os Registos de Controlo de Estado são utilizados pela unidade de controlo
para controlar a operação do
CPU e por programas privilegiados (sistema operativo) para controlar a
execução de outros programas
Como exemplos destes registos temos os quatro registos essenciais à
execução de instruções:
Program Counter (PC) - contém o endereço de uma posição de memória;
Instruction Register (IR) - contém a instrução adquirida mais recentemente
Memory Access Register (MAR) - contém o endereço de uma posição de
memória
Memory Buffer Register (MBR) - contém uma palavra de dados
a ser escrita em memória ou a palavra lida mais recentemente
Estrutura e funções da CPU
Organização dos Registos
Todos os CPU(s) incluem um registo ou conjunto de registos normalmente
chamado Program Status Word
(PSW) que contem informação de estado:
sign - contém o sinal da última operação aritmética
zero - activo quando o resultado é zero
carry - activo se uma comparação lógica for verdadeira
overflow - indica overflow aritmético
interrupt enable/disable - liga e desliga as interrupções
supervisor - indica se o CPU está a executar em modo privilegiado
Estrutura e funções da CPU
Organização dos Registos
Quantos de Registos?
Entre 8 e 32
Menos = mais referencias a memória
Tamanho dos Registos?
Suficientemente grande para armazenar um endereço completo
Suficientemente grande para armazenar um palavra
E’ muitas vezes possível combinar dois registos de dados
Programação em C
double int a;
long int a;
Estrutura e funções da CPU
Exemplo de Organização de Registos
Estrutura e funções da CPU
Ciclo de Instrução
Um ciclo de instrução inclui os seguintes subciclos:
Aquisição - lê a próxima instrução da memória para o
CPU
Execução - interpreta o opcode e executa a respectiva operação
Interrupção - se as interrupções estiverem activas, e no caso de haver um
interrupção, a informação é salvaguardada no estado em que se encontra
Estrutura e funções da CPU

6
Ciclo de Instrução
Estrutura e funções da CPU
Ciclo de Instrução
Estrutura e funções da CPU
Fluxo de Dados
A sequência exacta dos eventos durante um ciclo de instrução depende do
desenho do CPU.
Após o ciclo de aquisição a unidade de controlo examina o conteúdo de IR e,
se este tiver um operando em endereçamento indirecto, executa
um ciclo indirecto.
Analogamente o ciclo de interrupção tem um comportamento simples e
previsível.
Estrutura e funções da CPU
Ciclo de Aquisição
Durante um ciclo de aquisição, uma instrução é lida da memória.
O PC contem o endereço da próxima instrução a ser adquirida.
Este endereço é copiado para o MAR e colocado no bus de endereços.
A unidade de controlo faz um pedido de leitura de memória e o resultado é:
Colocado no bus de dados
Copiado para o MBR
Movido para o IR.
Entretanto o PC é incrementado, preparando-se o próximo ciclo de aquisição
Estrutura e funções da CPU
Ciclo de Aquisição
Estrutura e funções da CPU
Ciclo Indirecto
A aquisição de um endereço indirecto introduz um novo subciclo de instrução
que executa os acessos à memória suplementares.
Nesta situação a principal linha de actividade consiste na alternância entre
actividades de aquisição de instruções e actividades de instrução e execuções.
Depois de uma instrução ser adquirida, é examinada com o intuito de se
determinar se ocorreu algum endereçamento indirecto.
Em caso afirmativo, os operandos são adquiridos usando o endereçamento
indirecto.
Logo depois e antes da aquisição da próxima instrução é verificado o estado
das interrupções.

Estrutura e funções da CPU


Ciclo Indirecto
Uma vez acabado o ciclo de aquisição, a unidade de controlo examina o
conteúdo do IR para determinar se estes contem um operando de
endereçamento indirecto.
Neste caso é realizado um ciclo indirecto.
Os n bits mais significativos do MBR que contêm o endereço de referência,
são transferidos para o MAR.
A unidade de controlo faz uma leitura à memória para obter o endereço
desejado do operando para o MBR.
Os ciclos indirectos podem envolver transferência de dados entre os registos,
leitura ou escrita em memória ou I/O e/ou processamento na ALU.

7
Estrutura e funções da CPU
Ciclo de Interrupção
Tanto os ciclos de aquisição como os ciclos indirectos são simples e
previsíveis.
No caso dos ciclos de interrupção, sendo estes também simples e
previsíveis, o valor do PC é salvaguardado, podendo o CPU retomar a
actividade que estava a desenvolver logo após a interrupção.
O valor do PC é transferido para o MBR e escrito em memória.
O local reservado em memória para este efeito é carregado no
MAR a partir da unidade de controlo.
O PC é carregado com o endereço da rotina de interrupção, como resultado,
o próximo ciclo de instrução irá começar na instrução apropriada.
Estrutura e funções da CPU
Ciclo de Interrupção
Estrutura e funções da CPU
Processamento Pipeline
Para além dos componentes electrónicos, a eficiência dos processadores
pode ser aumentada através da própria organização dos elementos
constituintes do CPU.
Podemos, por exemplo, utilizar vários registos e/ou utilizar memória cache.
Uma técnica que vai permitir aumentar a eficiência do processador tem a ver
com a utilização do processamento pipeline.
A estratégia usada é semelhante a uma linha de produção de uma fábrica.
Este processo consiste em trabalhar os produtos nas várias fases de fabrico,
simultaneamente, permitindo a decomposição de instruções complexas em
outras mais simples.
Estrutura e funções da CPU
Processamento Pipeline
Se reconhecermos que as instruções são executadas por fases (por exemplo
duas: aquisição e execução) podemos explicar o conceito pipeline
em duas fases independentes.
A primeira fase consiste em adquirir uma instrução, utilizando para tal os
ciclos de memória deixados livres pela segunda fase, e colocá-la num buffer.
A segunda fase, executar a instrução adquirida na 1ª fase disponível no
buffer.
Estrutura e funções da CPU
Processamento Pipeline
Em principio este processo permitirá diminuir o tempo de execução de uma
instrução (após o enchimento do pipeline) no entanto este ganho de
performance raramente é conseguido por duas razões:
O tempo de execução geralmente será maior que o tempo de aquisição,
desequilibrando o pipeline (a execução envolve leitura e escrita nos
operandos).
Os saltos condicionais tornam o endereço da próxima instrução a executar
desconhecido, levando a que a fase de aquisição tenha de esperar até que o
endereço seja conhecido.
A perca de tempo provocada pela segunda razão pode ser minimizada
tentando adivinhar a próxima instrução a executar (por exemplo o seguinte).

8
Estrutura e funções da CPU
Processamento Pipeline
De forma a aumentar a performance do sistema, o pipeline tem de ter mais
estágios e de duração igual, assim as instruções podem ser decompostas em:
Aquisição da instrução (F.I. – Fetch Instruction)-leitura da próxima instrução a
colocar no buffer
Descodificação da instrução (D.I. – Decode Instruction)
Cálculo dos operandos (C.O. – Calculation Operand)
Aquisição dos operandos (F.O. – Fetch Operand)
Execução das Instruções (E.I. – Execute Instruction)
Escrita dos Operandos (W.O. – Write Operand)
Estrutura e funções da CPU
Processamento Pipeline
Estrutura e funções da CPU
Processamento Pipeline
Estrutura e funções da CPU
Processamento Pipeline
Estrutura e funções da CPU
Processamento Pipeline
Pode parecer que quantos mais estágios o pipeline tiver mais rapidamente
as instruções são executadas, no entanto existem dois factores que frustam
esta expectativa:
Em cada estágio do pipeline existe um overhead resultante do movimento do
buffer para buffer e da preparação das funções aprovado pela dependência
lógica das instruções (acessos à memória e saltos)
A lógica do controlo necessária para controlar as dependências da memória
para optimizar o pipeline, aumenta consideravelmente com o n.º de estágios.
Isto pode levar a uma situação em que a lógica do controlo é mais complexa
que o número de estados a serem controlados.
Estrutura e funções da CPU
Processamento Pipeline - Tratamento de ramificações
O problema principal no desenho de um pipeline de instruções é em
assegurar um fluxo constante de instruções nos estágios iniciais.
O impedimento principal é as instruções de salto condicional.
Para tentar resolver este problema são utilizadas algumas aproximações.
Prefetch Branch Target
Quando um ramo condicional é reconhecido para além da instrução
seguinte, também a instrução-alvo de salto é adquirida e salvaguardada até a
condição ser resolvida.
Seja o desvio tomado ou não, a próxima instrução a ser executada terá sido
buscada anticipadatmante
Estrutura e funções da CPU
Processamento Pipeline - Tratamento de ramificações
Multiple Stream
Perante uma instrução de salto, é feita uma escolha de uma de duas
instruções, podendo ser feita uma escolha errada
Para resolver este problema, uma abordagem (do tipo ‘força bruta’) consiste
em replicar os estágios iniciais do pipeline permitindo a aquisição de ambas as
instruções, utilizando duas streams

9
Problemas:
Atrasos de construção no acesso aos registos e a memória
Instruções de salto adicionais podem entrar no pipeline antes da decisão ser
tomada. Cada instrução necessita de uma stream adicional
Exemplos:
IBM 370/168 e 3033
Estrutura e funções da CPU
Processamento Pipeline - Tratamento de ramificações
Loop Buffer
Este buffer é uma memória pequena de alta velocidade mantida pelo estágio
de aquisição do pipeline que contem as n instruções mais recentemente
adquiridas em sequência.
Reduz o acesso a memória central
Util quando existem pequenos ciclos num programa
Está optimizado para a execução de ciclos e tem um funcionamento
semelhante ao de uma memória cache.
Delayed Branch
Consiste em ajustar automaticamente as instruções do programa
por forma a que as instruções de ramificação decorram mais tarde do que o
desejado.
Estrutura e funções da CPU
Processamento Pipeline - Tratamento de ramificações
Branch Prediction
Algumas técnicas podem ser utilizadas para prever uma
ramificação.
Predict never taken
Predict always taken (>50%)
Predict by opcode taken (Taxas de >75% de sucesso)
Taken/Not taken switch
Branch history table.
As 3 primeiras são estáticas e não dependem da execução (baseiam-se em
estudos probabilísticos).
As 2 últimas são dinâmicas e dependem da execução histórica do programa,
quer através de bits associados às instruções, quer mantendo um tabela para
as instruções executadas recentemente.

10