Você está na página 1de 38

Arquitetura de Computadores

e Sistemas Operativos
Informática de Gestão, ESTiG/IPB
José Rufino
2020/2021

Parte AC4
Operação Básica
de uma CPU
Objetivos

• conhecer os componentes principais dos CPUs


baseados na arquitetura de von Neumman
• ser capaz de explicar o contributo de cada componente
para o mecanismo de execução de programas
• compreender uma arquitetura simples ilustrativa
• entender o processo de geração de código máquina a
partir de código assembly
• conhecer vários modos de endereçamento
• perceber o efeito do encadeamento de instruções
2
4.1 Introdução

• no capítulo 1 foi apresentada uma visão geral dos


sistemas de computação
• no capítulo 2 apresentou-se a forma como os dados
são armazenados e manipulados pelo computador
• no capítulo 3 descreveram-se componentes
fundamentais dos circuitos digitais
• neste capítulo aprofunda-se a compreensão da
forma como uma CPU baseada no modelo de von
Neumman executa os programas, e toma-se contacto
com uma técnica de aceleração (encadeamento)
3
4.1 Introdução
- Modelo de von Neumman (revisão)

• esquema genérico
de um sistema de
von Neumann →

• a execução dos
programas assenta
num ciclo fetch-
decode-execute

4
4.1 Introdução
- Componentes Básicos da CPU

• CPU: lê, descodifica e executa instruções de programas


• as duas principais partes de uma CPU são 1) o cami-
nho de dados (datapath) e 2) a unidade de controlo
– o datapath é constituído por uma unidade lógico-aritmética e
por unidades de armazenamento (registos) interligados por um
barramento de dados que também liga com a memória principal
– vários componentes da CPU executam operações sequencial-
mente, de acordo com as indicações da unidade de controlo

5
4.1 Introdução
- Componentes Básicos da CPU

• registos são “unidades de armazenamento” básicas:


– localizadas na CPU
– de pequena capacidade (16, 32, 64 bits)
– de acesso muito rápido (<= 1 ciclo de relógio)
– em número variável conforme a arquitetura / CPU
• esse número é tipicamente potência 2
– com funções variadas
• genéricos (guardam qq coisa), só para guardar dados, só para
guardar endereços, só para informação de estado (por
exemplo, para assinalar condições de erro da ALU)

6
4.1 Introdução
- Componentes Básicos da CPU
• unidade lógico-aritmética (ALU):
– executa operações lógicas (e.g., comparações, ...) ...
– ... e aritméticas (e.g., adições, multiplicações, ...) ...
– ... às ordens da unidade de controlo
– em geral, tem duas entradas e uma saída
– as operações afetam um registo de estado (e.g., overflow)
• unidade de controlo:
– fetch da instrução referenciada pelo registo Program Counter
– decode da instrução, incluindo fetch de operandos
– instrui/programa a ALU para a execução (execute) da instrução
– monitoriza o registo de estado e salvaguarda os resultados
7
4.1 Introdução
- Componentes Básicos da CPU

• relógio interno:
– uma CPU tem um relógio que serve para sincronizar as
atividades dos seus componentes e medir a sua duração
– esse relógio oscila com uma certa frequência (MHz, GHz)
– o tempo de ciclo (ou período) é o recíproco da frequência
(um relógio de 800MHz tem um tempo de ciclo de 1.25ns)
– a duração de uma operação de movimentação de dados ou
computacional corresponde a um certo número e ciclos
– quanto maior for a frequência, mais curtos serão os ciclos;
mas isso não significa que um programa corra + rápido
• há outros fatores a considerar !! (ver slide a seguir)

8
4.1 Introdução
- Tempo de Execução de um Programa

• o tempo de CPU necessário para executar um dado


programa é dado pela seguinte expressão básica:

– o tempo pode ser melhorado reduzindo


• o número de instruções do programa, e/ou
• o número de ciclos gastos por cada instrução, e/ou
• o número de segundos gastos num ciclo do relógio
– só este fator é que depende da frequência !

9
4.1 Introdução
- Organização Básica da Memória Principal

• a memória de um computador corresponde a um


vetor (array) linear de células de armazenamento,
(similares a registos), c/ endereços inteiros (s/ sinal)

• a memória pode ser endereçável ao byte ou


à palavra (uma palavra são 2 ou mais bytes)

10
4.2 MARIE: Introdução

• muitos dos conceitos já introduzidos podem ser melhor


compreendidos com um modelo básico de computador
– o computador MARIE (Machine Architecture that is Really
Intuitive and Easy) foi desenhado com o propósito de
ilustrar conceitos básicos dos sistemas de computação

– apesar de o MARIE ser demasiado simples para fazer


qualquer coisa de útil no mundo real, o estudo das suas
funcionalidades permitirá compreender melhor as várias
arquiteturas de sistemas de computação reais ...

11
4.2 MARIE: Introdução

Características Básicas:
• representação de números em complemento para 2
• programas armazenados em memória de 4k palavras
• tamanho de palavra fixo (16 bits)
• palavras de dados com 16 bits
• instruções com 16 bits
– 4 bits para o código da operação (opcode)
– 12 bits para especificar um endereço
• unidade lógico-aritmética (ALU) de 16 bits
• 7 registos para controlo e movimentação de dados

12
4.2 MARIE: Introdução

Registos:
• acumulador (AC) – registo de 16 bits que armazena
um resultado de uma operação ou um operando de
uma instrução com 2 operandos
• registo de endereço de memória (MAR) – registo
de 12 bits que armazena um endereço de memória
(de uma instrução ou do operando de uma instrução)
• registo de buffer de memória (MBR) – registo
de 16 bits que armazena os dados antes/depois
de uma escrita/leitura para/da memória

13
4.2 MARIE: Introdução

Registos (cont.):
• contador de programa (PC) – registo de 12 bits que
guarda o endereço da próxima instrução a ser executada
• registo de instrução (IR) – registo de 16 bits que guarda
uma instrução imediatamente antes da sua execução
• registo de entrada de dados (InREG) – registo de 8 bits
que armazena dados lidos de um dispositivo de entrada
• registo de saída de dados (OutREG) – registo de 8 bits
que guarda dados a enviar para um dispositivo de saída

14
4.2 MARIE: Introdução

Representação dos Componentes e Fluxos

No estudo do ciclo fetch-decode-execute (a seguir), clarificam-se as


movimentações de dados, instruções e endereços entre os componentes. 15
4.2 MARIE:
- Arquitetura do Conjunto de Instruções

• a Arquitetura do Conjunto de Instruções (ISA) de um


computador é o interface entre o hardware e o software
• a ISA de um computador especifica o formato das suas
instruções e as suas operações primárias
• certas ISAs incluem centenas de instruções diferentes
• a ISA MARIE inclui apenas 13 instruções:

– 9 instruções fundamentais (apresentadas a seguir)


– 4 instruções complementares (que não estudaremos)

16
4.2 MARIE:
- Arquitetura do Conjunto de Instruções
• formato de uma
instrução MARIE:

• instruções MARIE fundamentais:

17
4.2 MARIE:
- Arquitetura do Conjunto de Instruções
• padrão de bits da instrução LOAD 003 no registo IR:

– código de operação (opcode): 0001(2)=1(16)=1(10)


– endereço dos dados: 000000000011(2) = 003(16)=3(10)
• neste caso, 3 é o endereço final dos dados, pois
está-se a usar o modo de endereçamento direto
(mais adiante serão referidos outros modos)

checkpoint: exercício MAR.15.a 18


4.2 MARIE:
- Arquitetura do Conjunto de Instruções
int x=12, y=20;
• exemplo de um programa em MARIE if (x==y) x = 2 * x;
(implementa o código C apresentado) else y = y – x;
printf(“%d”, y);

If, Load X /Load the first value


Subt Y /Subtract value of Y and store result in AC
Skipcond 400 /If AC = 0, skip the next instruction
Jump Else /Jump to the Else part if AC is not equal to 0
Then, Load X /Reload X so it can be doubled
Add X /Double X
Store X /Store the new value
Jump Endif /Skip over Else part to end of If
Else, Load Y /Start the Else part by loading Y
Subt X /Subtract X from Y
Store Y /Store Y - X in Y
Endif, Load Y /Reload Y so it can be printed
Output /Print Y
Halt /Terminate program
X, Dec 12 /12 is the initial value of X
Y, Dec 20 /20 is the initial value of Y
19
4.3 MARIE: Assemblagem

• as mnemónicas assembly, tal como LOAD 003, são


fáceis de escrever e compreender pelos humanos ...
• ... mas não são inteligíveis para o computador
• os assemblers traduzem mnemónicas (instruções
compreensíveis para os humanos) em linguagem
máquina (compreensível para os computadores)
– note-se a diferença entre assembler e compilador:
• no mundo dos assemblers existe uma correspondência
de um-para-um entre mnemónicas e código máquina;
• nos compiladores, normalmente, isso não acontece

20
4.3 MARIE: Assemblagem

• criar, em dois passos, um ficheiro de código objeto


a partir das mnemónicas do código fonte

• passo 1: traduzir o máximo de mnemónicas que se


conseguir e construir uma tabela de símbolos que
contém referências de memória (endereços) para
todos os símbolos que aparecem no programa

• passo 2: o código máquina é completado usando


os valores (endereços) da tabela de símbolos

21
4.3 MARIE: Assemblagem

• considere-se o programa
apresentado à direita
– notar o uso de diretivas (HEX e
DEC) que especificam a base de
representação das 3 constantes
• durante o passo 1, produz-
se a tabela de símbolos e o
código máquina parcial:

22
4.3 MARIE: Assemblagem

• após o passo 2, o código


máquina fica completo :

checkpoint: exercícios
(MAR.13+MAR.14).a,
MAR.23.a e MAR.24.a

→ 32 23
4.4 MARIE: Processamento de Instruções

• ciclo fetch-decode-execute no MARIE:


– passos seguidos para executar um programa
– passo 1 (fetch): ler a instrução para o IR
– passo 2 (decode): descodificar a instrução
• se for necessário um operando que se encon-
tre em memória), será lido para o registo MBR
– passo 3 (execute): executar a instrução
• pode resultar na escrita de um valor em memória
(caso de Store X, que guarda AC na posição X)
24
4.4 MARIE: Processamento de Instruções

fetch
execute

Copy the contents of


memory at address MAR to
MBR, and from MBR to IR;
increment PC by 1

decode
checkpoint: exercícios (MAR.13+MAR.14).b, MAR.23.b e MAR.24.b 25
4.5 Formatos e Tipos de Instruções

• formatos de instrução comuns:


– opcode (zero endereços)
– opcode + 1 endereço (tipicamente de RAM; MARIE)
– opcode + 2 endereços
• 2 registos
• 1 registo + 1 endereço de RAM
– opcode + 3 endereços checkpoint:
• 3 registos exercício FORM.8

• combinações de registos e endereços de RAM


26
4.5 Formatos e Tipos de Instruções

• tipos de instrução comuns:


– movimentação de dados (entre registos e/ou memória)
– aritmética (inteira e de vírgula flutuante)
– lógica booleana (AND, OR, XOR, NOT)
– manipula. de bits (aritmét., lógicas, shifting, rotação)
– entrada/saída (pooling, interrupções, DMA)
– transferência de controlo (saltos, cham. de funções)
– etc...

qual a categoria de cada instrução MARIE?


27
4.6 Modos de Endereçamento

• formas de especificar (a localização de) um operando


• podem especificar
– i) uma constante
– ii) um registo
– iii) uma posição de memória (MARIE)
• endereço efetivo: verdadeira localização do operando
• endereçamento imediato:
– os dados (operandos) fazem parte da própria instrução
– ótimo desempenho, mas total inflexibilidade
– NOT 008 ==> 008 é o valor a negar
28
4.6 Modos de Endereçamento

• endereçamento direto (MARIE):


– endereço (de memória) dos dados indicado na instrução
– ou seja, o endereço efetivo dos dados está na instrução
– bom desempenho, com alguma flexibilidade
– NOT 008 ==> 008 é o endereço (de memória) do valor a negar
• endereçamento indireto (MARIE – não estudado):
– a instrução contém um endereço de uma posição de memória
– nessa posição está guardado o endereço efetivo dos dados
– o endereço na instrução é a localização de um apontador
– NOT 008 ==> negar o valor cujo endereço está em 008

29
4.6 Modos de Endereçamento

• endereçamento indexado:
– a instrução contém um endereço de uma posição de memória
– um registo (implícito ou explícito) guarda um deslocamento
– endereço efetivo dos dados = endereço + deslocamento
– NOT 008 ==> negar o valor cujo endereço é 008 + R1
• exemplo: LOAD 800, com R1 como registo de índice
checkpoint: exercícios
ME.13*, ME.14*

30
4.7 Encadeamento de Instruções (ILP)
• algumas CPUs dividem o ciclo fetch-decode-execute
em vários passos ou estágios de pequena dimensão
• estes estágios podem, muitas vezes, ser executados
em paralelo, com o intuito de aumentar o throughput
– throughput : nº de instruções concluídas por u.t.
• esta execução em paralelo é denominada de encadea-
mento de instruções ou instruction-level pipelining (ILP)
• ILP é similar a uma linha de produção por estágios ...
• ... com diferentes estágios decorrendo em simultâneo ...
• ... e com cada estágio alimentando o próximo estágio
31
4.7 Encadeamento de Instruções (ILP)
• exemplo:
– ciclo fetch-decode-execute é dividido nos seguintes passos
1. ler a instrução 4. ler os operandos
2. descodificar o opcode 5. executar a instrução
3. calcular os endereços 6. guardar o resultado
efetivos dos operandos
– existe um pipeline com k=6 estágios, Sk, um por passo p

– por cada ciclo de re-


lógio é concluído um
dos passos, e os k=6
estágios sobrepõem-se
==>
32
4.7 Encadeamento de Instruções (ILP)

• o ganho de desempenho produzido pelo encadeamento


de instruções (ILP) é determinado da seguinte forma:
– considere-se um pipeline com k estágios, de duração igual
– cada estágio consome tp unidades de tempo (ciclo de relógio)
– considerem-se n instruções, que vão percorrer o pipeline
– a primeira instrução exige um tempo k . tp para concluir
– as restantes n - 1 instruções saem do pipeline uma por ciclo
– o tempo total para conclusão das n - 1 instruções será (n - 1).tp
– tempo para completar n instruções em pipeline com k estágios:
(k . tp) + (n - 1).tp = (k + n – 1).tp [ em u.t. ou ciclos de relógio]
33
4.7 Encadeamento de Instruções (ILP)

• o ganho de desempenho produzido pelo encadeamento de


instruções (ILP) é determinado da seguinte forma (cont.):
– tempo necessário para completar n tarefas sem pipeline:
n . tn = n . (k . tp)
– ganho de desempenho (aceleração ou speedup) para n instruções:
tempo sem pipeline, dividido pelo tempo com pipeline

– quando n tende para infinito, (k + n - 1) aproxima-se de n, obten-


do-se o máximo ganho teórico:
checkpoint: exercícios
34 PIP.15*, PIP.16*
4.7 Encadeamento de Instruções (ILP)

• as equações anteriores assumem certos pressupostos


1) a duração de cada estágio do pipeline é similar
2) a arquitetura é capaz de ler instruções e dados
(operandos) em paralelo ==> barramentos separados
3) é possível manter o pipeline preenchido durante o período
total de execução de um programa, o que nem sempre é
possível de assegurar, como por exemplo quando
- é incerto o resultado de um teste a uma condição
(devem entrar na pipeline as instruções da alternativa V ou F ?)
- há conflito de recursos entre instruções no pipeline
(acesso à memória, ou uso da ALU, por diferentes instruções)
35
Conclusões

• os principais componentes de um sistema de


computação são a unidade de controlo, os
registos, a memória, a ALU e o datapath
• um relógio mantém tudo sincronizado
• os computadores executam programas que se
encontram expressos em linguagem máquina
• um assembler converte mnemónicas em
linguagem assembly para linguagem máquina
• os computadores executam programas
obedecendo a ciclos fetch-decode-execute
36
Conclusões

• a forma com as instruções se referem aos seus


parâmetros depende do modo de endereçamento
assumido para cada instrução em particular

• um pipeline com k estágios pode, em teoria,


produzir um ganho de desempenho k

• conflitos de recursos e saltos condicionais impedem


na prática que tal desempenho seja alcançado

37
Referências

• livro ECOA – Capítulos 4 e 5

38

Você também pode gostar